ソフトウェア開発に銀の弾丸はない
●Web公開のためのまえがき
月刊「Windows Server World」の連載コラム「IT嫌いはまだ早い」の編集前原稿です。もし、このコラムを読んで面白いと思ったら、ぜひバックナンバー(2006年1月号)をお求めください。もっと面白いはずです。
「銀の弾丸」は、特にIT業界で「特効薬」の意味で使われる慣用句だ。そして、常に「存在しない」と続く。今月は、IT業界における銀の弾丸、そして前回に続いて政治的な問題について考えてみよう。
●銀の弾丸とは何か
「ソフトウェア開発に銀の弾丸はない」「セキュリティ対策に銀の弾丸はない」という使い方をすることがある。原文は“There is no silver bullet”(銀の弾丸はない)だが、日本語では「特効薬はない」と訳されることもある。
さて「銀の弾丸」とはなんだろうか。これは、「銀の弾丸を使えば狼男を一発で倒せる」という言い伝えに由来する。狼男に襲われそうな地域に出かけるときは覚えておくと役に立つだろう。ただし、銀の弾丸と銃の調達方法は筆者の専門外なので問い合わせないで欲しい。
IT業界で「銀の弾丸はない」は、名著「人月の神話」(F.ブルックス)の副題として有名になった。ここには、IBMによる世界最初の汎用機用OS「OS/360」のプロジェクトの経験から得られた教訓がちりばめられている。原著は1975年の出版なので、かなり古い時代の話である。しかし、「遅れたプロジェクトに人員を投入するともっと遅れる(ことがある)」など、現在でも成り立つ教訓も数多く含まれている。1995年には20周年記念増訂版も登場したくらいだ(邦訳は1996年)。
なお、英語で狼男は「Werewolf」である。WolfmanだとFENの昔のDJだ。若い人は知らないかもしれないが、映画「アメリカン・グラフィティ」を見ていただければ雰囲気はつかめるかもしれない。さらに余談だが、“Bullet”は、箇条書きの丸印の意味でも使う。こちらも覚えておくと何かの役に立つだろう。
●ソフトウェアの生産性は向上したか
ブルックス氏は「ソフトウェアの生産性を向上する簡単な方法はない」と主張している。これが「銀の弾丸はない」の真意である。生産性というのは、同じ時間でどれだけ多くのプログラムを作れるかを意味する。
もちろん、昔に比べればプログラムの生産性はずいぶん向上した。それは、使いやすいプログラム言語の発明だったり、便利なプログラミングツールの普及の成果だったりする。最近の開発製品は、プログラム作成中に「利用可能な次の語句」を自動的に表示してくれる。プログラムを書いている時間に限れば、生産性は何倍にも向上していることは間違いない。また、部品の再利用も徐々に進んでいるので、システム全体の生産性も向上しているのは確かだ。
しかし、再利用できない部分や、作成したプログラムに間違い(バグ)がないかどうかを検証するところまで含めたらどうだろうか。確かに昔より進歩はしているのだが、デバッグ時間が10分の1になったというような話はあまり聞かない。
もっと困ったことは、人によって生産性がまったく異なるということである。同じツールを使っても、上級プログラマは、初級プログラマの10倍以上の仕事をこなすことがよくある。しかし、上級プログラマのほとんどは(全員?)、自分がなぜそれほど高い生産性を持っているのかを明確な言葉にできない。要するに職人芸の世界なのである。職人の技術は理屈ではない。技術の伝承は体系的な学習ではなく徒弟制度による。しかし、10倍も違うと、プログラム作成時間の見積もりなどできない。見積もり時点で誰が担当するかを決めておけば別だろうが、それは現実的ではないし、第一その人が病気にでもなったらどうするのだろう。
ついでに書いておくと、日本のIT業界は、いまだに「人月単価」で仕事をしているところが多い。そのため、10倍の能力差があっても給与の差が10倍になったという話は聞いたことがない。せいぜい2倍から3倍というところだ。
●ソフトウェアの信頼性は向上したか
生産性は、プログラムの作成量で測定するが、そのプログラムにミス(バグ)がないかどうかを測る尺度が「信頼性」である。こちらの方もIT業界はかなり怪しい。たとえば、ソフトウェアは製造者責任法(PL法)の適用範囲外である。つまり、工業製品としての要件を満たしていないと判断されているのだ。また、開発者が予期できなかったバグについては、特に契約をしない限り、民事責任もないとされている。
レーガン大統領時代に「戦略防衛構想(SDI)」、通称「スター・ウォーズ計画」が発表された。これは、ソ連(当時)からの核ミサイルを、レーザー光線または宇宙ステーションから、人工知能(AI)を使って自動迎撃するというものだった。この計画は、米国内外から大きな批判にさらされた。たとえば、映画シリーズ「スター・ウォーズ」の監督ジョージ・ルーカスは、自分の作品の名前を勝手に使用されたことに怒って、「エピソードI」では、レーガン(レイガン)をもじった「ヌート・ガンレイ」という残忍な悪役宇宙人を登場させている。
いくつかの反対論の中で、筆者が特に印象に残っているのは、D.パルナスが1985年に米国のコンピュータ学会誌(Communications of ACM)に発表した論文「Software aspects of strategic defense systems」である(*)。そこには「エンジニアの職業倫理は技術的に不正直なことはしない」、つまり、「技術的に不可能(可能)なことを可能(不可能)であるとは主張できない」という意見が表明されていた。たしか「バグは運用してみないと分からないが、相手がミサイルなので、運用しながらのデバッグはできない」という趣旨だったと思う(20年も前なので記憶があいまいで申し訳ない)。そもそもAIは「人間と同じような推論」を目指すものなので、100%の信頼性はない。単純ミスは減るものの、推論そのものは人間と同じ程度には間違えるものだ(ただし、この点についての指摘があったかどうかは覚えていない)。
SDI反対運動は、その後ITの社会責任について検討する団体「CPSR(Computer Professionals for Social Responsibility)」につながった(**)。CPSRのせいか、SDIはクリントン大統領により、事実上廃止されたが、ブッシュ大統領は「ミサイル防衛計画」としてSDIと似た構想を打ち出している。実は、SDIが廃止されたこととCPSRは無関係で、単に政権が交代したせいだったのかも知れない。だとしたらちょっと悲しい。
新しいミサイル防衛構想では、AIが引っ込められたようだが、コンピュータを駆使することには違いない。湾岸戦争で使われたパトリオットミサイルのソフトウェアも、最終デバッグは戦場で行われたと聞く。ミサイル迎撃システムのデバッグなどどうするのだろう。シミュレーションだけで行うのか、弾頭を搭載しないミサイルでテストするのか。前者はデバッグ漏れが心配だし、後者は費用がかかりすぎる。
●個人的なことは政治的なこと
前述のCPSRは、継続的に活動を行っているようであるが、日本の状況はどうだろう。CPSRの日本支部もできているはずだが、筆者はその活動を(自分では)確認できなかった。ただ、いくつかのBlogサイトに若干の記事が掲載されているのを確認しただけである。
CPSRのきっかけは米国のコンピュータ学会(ACM:Association for Computing Machinery)だが、日本の情報処理学会でこうした活動が行われている話も聞いたことがない。日本でも、住民基本台帳ネットワークシステム(住基ネット)など、ITを過信しているとしか思えないシステムが登場している。現在、ほとんどのIT技術者は企業に属しているため、個人で政治活動を行うのは限界があるだろう。ぜひ、学会が中心となってCPSRのような活動を盛り上げて欲しいものである。
1970年代、学生運動を中心とした政治ムーブメントから生まれた言葉に「個人的なことは政治的なこと」というものがある。たとえば、「(他の人のことは知らないが)わたしは出産しても働きたい」と思う女性がいたとしよう。働きたいという希望自体は個人的なものであるが、実現するには出産休暇と保育制度(特に病児保育と夜間保育)が必要になる。いずれも個人的に解決するのは極めて困難であり、政治的解決が必要である。
ソフトウェア開発については依然として職人芸に頼る部分はあるし、信頼性の評価基準もあいまいである。しかし、それでも多くの企業が上場を済ませ公企業となっているし、安定した雇用も提供している。社会的にも一定の地位が認められた。これからは、業界全体として、CPSRのように社会的あるいは政治的なことにも積極的に関わるべきだと筆者は思うのである。
CPSRの5つの原則を紹介しておこう(現在はリンク切れなのでURLは省略)。
- わたしたちは、社会にとって重要なシステムへコンピュータを導入することに伴う決議に際して、開かれた議論と公的な責任とが果たされることを支持促進します
- わたしたちは「技術的システムが完全無欠であるというありがちな迷信」を払拭します
- わたしたちは「政治的社会的問題は技術によって解決できる」いう思い込みに対して異議申し立てを行います
- わたしたちはコンピュータ専門家として、社会的技術的問題を国内そして国際的視点から同時に批評します
- わたしたちは、情報技術を生活を向上させるために用いるよう促進します
繰り返しになるが、ITは完全ではない。もちろんIT業界は、完全なシステムを目指すが、不完全なシステムが与える影響は最小限に抑える仕組みも必要である。どうやって抑えるかはこれからの課題である。システムのミスは、神様は許しても、利用者は許さないかもしれない。最後に、英語のことわざを紹介しておこう。
To err is human, to forgive divine. (過ちは人の常、許すは神の業)
(*) Software aspects of strategic defense systems(Communications of ACM, 1985年12月)
(**) 日本支部も存在する。
●Web公開のためのあとがき
筆者がしつこく「原典にあたれ」と主張しているせいか、当時の担当編集者が「ソフトウェア開発に銀の弾丸はない」のオリジナルを見つけてきたのには驚いた。CACMの論文はインターネット上に公開されているはずだが、有料なのでわざわざ入手しようとは思わなかった。これは日ごろの主張とは矛盾する態度で深く反省している。実は、編集者が見つけてきたのは、著者の移籍先の大学が持っているWebサイトだった。よく見つけてきたものだ。今回公開分にはリンクも付けてあるので、興味のある方は読んでみて欲しい。
彼女は本当に優秀な編集者で、『新人研修裏話』のときは、筆者のお気に入りポテトチップの銘柄を「これですか」と、写真付きで問い合わせてきた。メーカー名など覚えていなかったが、パッケージの写真を見て思い出した。確かにその銘柄だった。驚くべき調査能力である。詳細は『新人研修裏話』を見て欲しい。筆者はこれに味をしめて、時々いろんなことを調べてもらっている。
ところで、本文中ではIT技術者の政治活動について触れている。技術者には良くも悪くも個人主義的な人が多い。しかし、個人主義であっても考えて欲しい言葉がある。「個人的なことは政治的なこと」というキャッチフレーズだ。
これは、1970年代、学生運動を中心とした政治ムーブメントから生まれた。たとえば、「(他の人のことは知らないが)わたしは出産しても働きたい」と思う女性がいたとしよう。働きたいという希望自体は個人的なものだ。しかし、実現するには出産休暇と保育制度(特に病児保育と夜間保育)が必要になる。いずれも個人的に解決するのは極めて困難であり、政治的解決が必要である。個人の選択の自由を突きつけると、政治的な壁にぶつかる。その壁を越えることこそが、成熟した個人主義だと言える。
コメント
傍観者
生産性が10倍でも価格が10倍だと
あまり価値はない気がします。
だったら1倍を10人のほうが良いのでは?
全体的に何がいいたいのか要点が分かりにくかったです。
tripod
> だったら1倍を10人のほうが良いのでは?
人を増やしても生産量は線形に増加しません
。その原因が、コミュニケーションコストの増加にある、というのが「人月の神話」の主張です。
としろう
> だったら1倍を10人のほうが良いのでは?
について、基本的にtripod 氏の意見に同意します。
10人に事前準備のルール、仕様の理解他、別々に共通処理としての時間も必要です
それに生産は同じでも修正コストが同じとは限りません
得てして生産性の低い側の人はコピペ多用して
修正で1箇所直すのに、何箇所直す事になるか判らない事も
他、品質の問題含め考えると、
あまり下のほうのレベルの人で、数で補うのは大きな間違いであると思います
傍観者
言葉が足りなかったですね。
tripodさんととしろうさんの仰っている意味は分かります。
ただ現実問題金を出す側としては、
10倍の金額は成り立たないと言うことが言いたかったのです。
せいぜい1.5倍~3倍出せればいい方です。
それか請負で標準工数にラップしてもらうか。
一騎当千の戦士がいても、
昨今のコンプライアンス強化の中では
リスク分散を求められ評価されにくいのが現実です。