この巨大な鉄製のオブジェは、美ヶ原高原(彫刻の森)美術館のベルンハルト・ルジンブール作『スズメを撃つのに大砲を持ち出す』です。上図は、著作権の関係もあり、私が独自に作成したスケッチイメージです。この作品は、すばしこく飛び回る小さなスズメを撃つのに仰々しく大砲を持ち出すということを表現しており、我々の身近にもよくありがちな状況を表わしています。ちょっとした実験的なプログラム開発に、ウォータフォール型開発プロセスを適用するといった事柄をイメージできると思います。ここでの意味合いは、アジャイルプロセスや知働化の話をするのに、アルビン・トフラーの『第三の波』や『富の未来』を持ち出したり、仰々しくパラダイム論を展開することを自戒的に示しています。 【ソフトウェアエンジニアリングとは?】 ソフトウェアエンジニアリングの中心的な活動というのは《記述》に関するものです。プログラミングというのは、まぎれも無く、プログラミング言語による記述活動です。ソフトウェアというのは、実世界にある問題を、その要求を満たすように設計され、プログラムコードとして実現されなくてはなりません。《実世界》というのは、自然界、人間社会、業務世界といったソフトウェアが稼働し影響を及ぼすことになる対象領域です。一方、ソフトウェアを実現していく《コンピュータ世界》があります。また、一方で、プログラムコードを記述するのは人間であり、関数名や変数名を判りやすい綴りで記載したり、コード自身も改行や字下げ(インデンテーション)をして、後から思い出せるように配慮したり、他の人に説明しやすいようにします。ですから、プログラムコードは《人間世界》に接しています。 ソフトウェア開発では、さまざまな言語が使われ記述活動が行われます。図は、この状況を模式的に表わしています。 記述は、一般的に決められた言語の文法に従って記述されます。ハッカーが、直接コードを書いてしまう場合でさえ、その記述は少なくとも二つの世界に渡っています。プログラムコードは、コンピュータに読込まれ、実行されますから、一つは《コンピュータ世界》に接しています。 ソフトウェアエンジニアリングの難しさは、《実世界》、《コンピュータ世界》、そして、《人間世界》という3つの世界が複雑に絡み合っているところにあります。例えば、ダムの制御システムを開発する場合には、ダムが建設されている自然界が実世界です。おそらくそこは物理法則に支配された世界です。コンピュータ世界は、レジスタ、演算処理装置、ハードディスクといった計算や情報処理に関わる世界です。そして、実世界の定式化、物理的な方程式によってモデリングをしたり、プログラミング言語でコードを書いたりするのは人間世界です。これ等3つの世界は、もともと独立に在る世界で関係もありません。 そして、これ等3つの世界に関わる記述を中心とした言語活動に関わる知識体系がソフトウェアエンジニアリングなのです。 【でも、そこには本質的困難がある】 1975年に出版された『人月の神話(Mythical Man-Manth)』は、コンピュータソフトウェアの歴史の中で、長きに渡って読まれています。この分野の著作の傑作と言っても過言ではありません。1995年にも20周年記念版として改訂版が出されましたが、内容はほとんど変わっていません。著者のブルックスの1995年版の中で、1975年版からの二十年の間に初版の中で述べたことが相変わらず問題でありつづけていると述べています。 20周年記念版の書籍の中には1986年に発表した論文『銀の弾丸はない』も含まれており、この中でソフトウェアの本質的困難の話題も掲載されています。ここで言う「本質的」とは、ソフトウェア以外には無い、ソフトウェアであるがゆえの本当の難しさという意味です。 複雑性(complexity)とは、ソフトウェアは大きくて複雑なことそれ自身が問題なのだということです。レゴブロックを集めて組合わせるようなわけにはいきません。他のどのような構造物よりも複雑です。ソフトウェアの構成要素間の依存関係も規模が大きくなるほど非線形に増大します。何千万行という規模のシステムがごろごろある現状からみても、この問題は深刻です。 同調性(conformity)とは、ソフトウェアはソフトウェア単独で存在しているわけではなく、ハードウェアやネットワーク、他のシステム、人間の行動や習慣にいたるさまざまなものと関係を持ち続けるものであるということです。ソフトウェアの宿命は、こういった外部に常に同調(順応)し続けなくてはならないところにあります。 可変性(changeability)とは、ソフトウェアは常に変化し続けなくてはならないということです。たとえ、当初の計画通りシステムが出来上がったとしても、それを使っているユーザはさらなる要求を思いつくでしょうし、そもそも出来上がったシステムが世界を変えてしまうため、人間の認識にも影響を及ぼし、新たな要求がでてくることになります。最近のビジネス環境の変化は激しいですし、技術進歩も速いので、ソフトウェアもこれに常に対応していくことが要求されています。 不可視性(invisibility)とは、ソフトウェアが複雑な概念の集積であることに起因して、それが目に見えないということです。開発プロセスや意思決定の経緯も見ることができませんし、単純な図面で全体が理解できるということもありません。最近各方面での「見える化」の活動もこういった困難への一つの挑戦ともいえるでしょう。 【ソフトウェアエンジニアリング40年の歴史】 ソフトウェアエンジニアリングの発祥は、1968年のNATO会合といわれています。以降、さまざまな方法論や手法が提唱されています。本格的にソフトウェアエンジニアリングの研究が行われたのは、1970年代からです。ソフトウェアエンジニアリングの歴史を概観してみると、高々40年程度のことですが、時代背景も反映していて興味深い徴候もみてとれます。 一方、産業論、将来の予測、未来学の分野で最も説得力があるのは、トフラー(Alvin Toffler)です。『第三の波(The Third Wave)』(1980年)では、いち早く第三の波である情報化社会の到来を提唱しました。『富の未来(Revolutionary Wealth)』(2006年)では、第三の波を「富」の概念や規範の変化としてとらえ、金銭経済からの脱却、「生産消費者」という消費者自らが無償の労働による生産をする人々が台頭してくると予測しています。 トフラーの慧眼は、技術革新とともに価値観や世界観の変動が起こるということ、経済のみならず社会的活動も変化をしていくことを見抜いたところにあります。特に、経済活動の前提となっている、生産者と消費者、ユーザとベンダといった需給の均衡として問題を捉えること自身が古くなりつつあるということを指摘しています。生産消費(プロシューマ:prosumer)というのは、生産者(producer)であり同時に、消費者(consumer)であることを表わす造語ですが、トフラーはこの用語を使い『第三の波』の時に既に、知識社会でこのような非金銭経済の社会の到来を予想していました。 筆者は、トフラーの『第三の波』になぞらえて、ソフトウェアエンジニアリングの三つの波を図のように整理してみました。 「ソフトウェアエンジニアリングの第1の波」は、農耕的とでも言うべき素朴なプログラム中心の時代です。構造化プログラミング、構造化分析•設計法、データフローに基づく機能を中心とした見方を中心としているのが特徴です。 「ソフトウェアエンジニアリングの第2の波」は、工業的とでも言うべき組織的なソフトウェア開発の時代です。プログラムの総体としてのシステムが対象となり、ものづくりの工業化と同様に大量生産/大量消費の考え方が適用され、組織的な分業、手順化、そして、標準化の名のもとに多くの知識体系も整備されました。 「ソフトウェアエンジニアリングの第3の波」は、トフラーの言う情報化社会に相当したものとして位置づけられます。これを我々は「知働社会」と呼んでいます。実世界(業務世界)の問題そのものが中心課題であり、知識社会の中で価値観も多様化した世界でのソフトウェアづくりが要求されるのが特徴です。 第1の波から第3の波に至る道筋は、不連続なパラダイムシフトと見なすことができ、そのシフトには、きっかけとなる事象が関係しています。第1の波から第2の波へは「ライフサイクル論争」で、第2の波から第3の波へはアジャイルプロセスの台頭と、筆者は整理しています。 【ソフトウェアの本質的困難への対応】 ソフトウェアエンジニアリングは、前節で述べた本質的困難を解決しようとしてきましたが、そのアプローチは時代ごと、つまり、それぞれの第1〜3の波ごとに特徴があります。上図は、この状況を整理したものです。 第1の波に対応するためのアプローチは、プログラムを主対象として、良構造のプログラムの追求、機能主体の仕様化とそれに基づく実装への展開方法が提唱されました。 第2の波に対応するためのアプローチは、オブジェクト指向に代表される各種開発方法論の提唱、役割分担を行うためのインタフェースと実装とを分離するモジュール化、手順や規準、多くの組織やチームが共同作業を進めるためのマネジメント手法や標準化が推進されました。 第3の波に対応するためのアプローチは、実世界(業務世界)やその世界での価値を起点とした手法、ビジネスやマーケット変化に俊敏に対応していくアジャイルプロセスなどが取組まれています。 4つの本質的困難についても、第1の波では複雑性の解決に重点が置かれており、第2の波では同調性や不可視性の解決に重点が置かれていると思われます。第3の波は、ビジネスやマーケット変動という外部の可変性への対応が主題となっているといっても過言ではありません。 【プログラム→システム→問題領域】 前述のソフトウェアエンジニアリングの歴史と潮流を補足する意味で、本資料の後半で説明する「問題フレーム」の提唱者である天才ジャクソンの業績を当てはめてみることにしましょう。1975年に提唱されたジャクソン構造化プログラミング(JSP)は第1の波に相当します。1981年に提唱されたジャクソンシステム開発法(JSD)は第2の波の幕開けとでも言うべき時点です。そして、2001年に発表された「問題フレーム」は、実世界を主題にした第3の波の基本コンセプトと位置づけることができると考えています。 |