プロダクト(製品)とプロセスの双対性

実践ソフトウェアエンジニアリング(第6版)の訳文を参考に「Process and Product: Dichotomy or Duality?」の全訳を記述

実践ソフトウェアエンジニアリング(第9版)という書籍の翻訳を担当していた時に気づいたお話です。

該当書籍の「2.6節 プロダクトとプロセス」に「Process and Product: Dichotomy or Duality?(M. J. Davis)」という文献の引用があります。2005年に翻訳された第6版でも引用されており、時折見返したいと感じる内容でした。しかし、第9版となって省略の割合が多くなっておりました。
今回、自分で全文を見返したいという理由から第6版をベースとした翻訳を記事として入れておきます。
※第9版にコッソリ全文入れようと思った瞬間もありましたが「原著に無いものを入れるな」ということで諦めました


プロダクト(製品)とプロセスの双対性

原文は「Process and Product: Dichotomy or Duality?」となります。
 第6版ではproductを製品、第9版ではプロダクトと訳してます。


およそ5年から10年ごとに、ソフトウェアエンジニアリングの分野では、焦点をプロダクト(製品)の問題からプロセスの問題に移すことによって「問題」を再定義している。この結果、構造化プログラミング言語(プロダクト)を歓迎した後、構造化分析手法(プロセス)を迎え入れ、データのカプセル化(プロダクト)を歓迎した後、現在ではカーネギーメロン大学のSEIによるプロセス成熟度モデル(プロセス)をもてはやしている(オブジェクト指向手法が続き、アジャイルソフトウェア開発がさらに続く)。

振り子は、自然な性質として2つの極端な状態の中間地点に落ち着くが、ソフトウェアエンジニアリングの分野では、片方のアプローチがうまくいかない場合、新たな力が加わって中間地点を通り過ぎ、反対方向の極端な位置まで振れてしまいやすい。こうした振れはよくない影響を及ぼす。作業の進め方、仕事の意味を根本的に変えてしまうことで、現場の開発者を混乱させてしまうためだ。加えて振れによって「問題」が解決されることはない。なぜなら、プロダクトとプロセスは、対立するものとして捉える限り失敗する運命にあるからだ。これらは双対的に捉えなければならない。

双対性という概念は、自然科学の分野で先行している。相反する理論のどちらかだけでは、観察した矛盾を完全に説明することができないとわかったためだ。ド・ブロイ(L. de Broglie)が1920年代に提唱して以来、粒子であり波でもあるという光の双対性は受け入れられている。ソフトウェアという成果物そのものと、成果物を開発する作業を観察することによって、プロダクトとプロセスの間には根本的に双対性があると私は確信している。成果物をプロセスのみ、またはプロダクトのみとして捉えるだけでは、その中身、状況、用途、意味、価値は決してわかりはしない。

人間の努力の成果がプロダクトなのか、プロセスなのか、という議論は、20世紀に入る前から文学や芸術の分野で発生している。文学では構築主義/脱構築主義という形をとる。芸術については、CBSのテレビ番組「ノーザン・エクスポージャー」のエピソードが巧く描いていた。このエピソードは、描いた塗り絵を宇宙飛行士から「つまらないプロダクトだ」と容赦なく批判されたと、バーのオーナーがラジオパーソナリティに助けを求めたところから始まる。不幸なことに、ラジオパーソナリティは芸術とは単なるプロセスだと考えていた。芸術がプロセスであると理解させるため、ラジオパーソナリティは彼の塗り絵を暖房炉に投げ込ませた。バーのオーナーは喪失感だけでなく価値観の混乱も混ざりあった、悲劇的な結末で幕を閉じる。

人間のすべての活動はプロセスであろう。しかし、複数の人に利用されたり、幾度となく使われたり、思いもよらない使われ方をされるなどの事象が起こりうる活動でもある。我々は、そのような結果につながった活動から自身にとっての価値を見出す。つまり、我々は成果物に対する自身や他社による再利用から満足の感情を得ているのだ。

再利用を目指したソフトウェア開発が浸透することで、現場の開発者が仕事から得られる満足度を増加させる一方、プロダクトとプロセスの双対性を受け入れる必要性も高まっている。再利用可能な成果物をプロダクトだけ、またはプロセスだけと捉えることは、背景やその使い方を曖昧なものとしてしまう。成果物を使うことが他のソフトウェア開発活動のインプットとなる、という事実を曖昧にもしてしまう。どちらかの見解を優先すると再利用の機会が大幅に減少し、さらには仕事の満足度が高まる機会も失われる。

多少分かりやすく表現すると、ソフトウェアの成果物はツール(道具)であるということだ。ツールにはプロセス(どのように、いつ使用されるか)とプロダクト(使用されるもの)の両方が含まれている。この視点を持つことにより、ツール自体を他のソフトウェアの源泉とするという柔軟な考え方が身に付き、ツールによって生み出されるプロダクトの幅が広がる。トウモロコシの穂を成長させるのはプロセスだ。しかし、ホットエアポップコーンポッパーを動かす際には、そこにプロセスを入れて動かすだろうか。それとも、トウモロコシを入れるのだろうか。


以下、実践ソフトウェアエンジニアリング(第6版および第9版)に記載されている、上記引用に関する著者(Pressman氏)のコメントもあわせて記載しておきます。


人間は、プロダクトをつくり上げた達成感に劣らぬ満足感を、創造的なプロセスを通じて得ることができる。芸術家は、額縁に納まる作品の仕上がりを楽しむように筆の運びそのものも楽しむ。作家は、書き上げた本と同じように表現を練ること自体を楽しむ。創造的なソフトウェアの開発者も、できあがったプロダクトと同じようにプロセスからも満足を得るべきだ。
ソフトウェアにかかわる人々の作業は、数年経過する頃には変化している。作業の形態が行き当たりばったりのプログラミングから工学としてのソフトウェアエンジニアリングに移行しても、創造的な人々を満足させるためにはプロダクトとプロセスの双対性が重要だ。




Read more: