Loading AI tools
アメリカの論文 ウィキペディアから
『銀の弾などない— ソフトウェアエンジニアリングの本質と偶有的事項』(ぎんのたまなどない ソフトウェアエンジニアリングのほんしつとぐうゆうてきじこう、英: No Silver Bullet - essence and accidents of software engineering)とは、フレデリック・ブルックスが1986年に著した、ソフトウェア工学の広く知られた論文である。
原論文は英語である。日本語では『銀の弾丸はない』と、翻訳されることもある。ブルックスは、「銀の弾丸」(Silver Bullet)として、魔法のように、すぐに役に立ちプログラマの生産性を倍増させるような技術や実践 (特効薬) は、今後10年間(論文が著された1986年の時点から10年の間)は現れないだろう、と記載した。
銀の弾丸とは銀で作られた弾丸であり、西洋における銀は霊力を有するとの俗信と結びつける形で1941年米国のユニバーサル映画のヒット作『狼男』で不死身の狼男を倒せる武器として用いられたことから、今日では広く一般にフィクション作品等で狼男や魔物を撃退する際に用いられるものとのイメージで捉えられている。
ブルックスの警句は、非常に多く引用されており、生産性、品質、制御に適用されている。ブルックスは、自身の警句で述べているプログラマの生産性の限界は「本質的な複雑性」(essential complexity)についてのみ当てはまると述べているのであり、「偶有的な複雑性」(accidental complexity)に対する挑戦については支持している。ブルックスは、偶有的な複雑性については著しい改善(おそらく今後10年間で10倍以上)がみられるだろうと述べている。
ブルックスは、この論文で本質的な複雑性に対処するために、次のことを提案している(詳細は#提案を参照)
(ブルックス、滝沢、牧野、宮澤、2002年、第16章、P.166)
『銀の弾などない』は、1986年のIFIPでの論文である。1987年に IEEE Computer Society の「コンピュータ」誌に再録された。また、この論文とこの論文に対するブルックス自身の省察『「銀の弾などない」再発射』(No Silver Bullet - Refired)の2つの論文は、ブルックスの著書『人月の神話』(The Mythical Man-Month)の20周年記念増訂版に収められている。
『銀の弾などない』が収録された「コンピュータ」誌の表紙と、『人月の神話』の20周年記念増訂版の第16章「銀の弾などない」の扉には、狼人間を描いた絵が掲載されている。
この論文が対象とする問題の所在を説明するために、論文の序の文章を引用する。
民話の中の悪夢に登場する怪物のうちでも、狼人間ほど恐ろしいものはない。というものも、狼人間は慣れ親しんでいるものを不意に恐怖に変えてしまうからだ。だから、私たちは、この狼人間を魔法のように鎮めることができる銀の弾を探し求める。
— ブルックス、滝沢、牧野、宮澤、2002年、第16章、pp.166-167
慣れ親しんだソフトウェアプロジェクトにもこうした性質が若干あり(少なくとも非技術担当マネージャーの目から見ると)、ふだんは無害でまともなのだが、スケジュールの遅延、膨れ上がった予算、そして欠陥製品といった怪物にもなり得る。そして私たちは銀の弾、すなわちコンピュータハードウェアのコストと同じようにソフトウェアのコストも急激に小さくしてくれる特効薬を求める必死の叫び声を聞くのである。
しかし、これから十年間という範囲で眺めると、銀の弾などはどこにも見えない。技術においても、管理手法においても、それだけで十年間に生産性や信頼性と容易性での飛躍的な改善を一つでも約束できるような開発は一つとしてない。本章では、ソフトウェア問題の本質と、提案されているそれぞれの銀の弾の特性の両方を検証することによって、それがなぜ特効薬になりえないのかについて見ていくことにする。
とはいっても、懐疑主義は悲観主義とは違う。輝かしい進展は見えないが、実際のところそう決めてかかることはソフトウェアの本質からは離れている。多くの頼もしい新機軸 (革新) が着々と進められている。それらを開発、普及、利用するという苦しいが一貫した努力こそ、飛躍的な改善をもたらすはずだ。王道はない。しかし、道はある。
病気治療の第一ステップは、悪魔信仰を細菌説によって生理学的理論に置き換えることだった。そのステップこそ希望の始まりであり、すべての魔法のような解決の夢を打ち砕いた。医療従事者は、進歩は段階を追いながら多大な労力を払って遂げるもので、健康回復には持続的で根気強い看護がなされなければならないと教え込まれた。今日のソフトウェアエンジニアリングにおいても、それは変わらない。
ブルックスが本書で主張していることを述べる。
ブルックスの主張で重要なことは、ソフトウェア開発の複雑性について、「本質的な複雑性」 (essential complexity) と「偶有的な複雑性」 (accidental complexity) を区別していることである。なお、これは、アリストテレスの分類にヒントを得たものである。
ブルックスによると、ソフトウェア開発者はこれまで偶有的な複雑性の多くを退治してきたが、その一方で、現在 (1986年) のプログラマは自分の時間の大部分を本質的な複雑性に取り組むことに費している。
過去に行われてきたソフトウェア技術の発展は、ソフトウェア開発における偶有的な複雑性を攻略した。ただし、これはあくまでも偶有的な複雑性を攻略しただけであって、本質的な複雑性を攻略したわけではない。
偶有的な複雑性の領域における大きなブレークスルーの一つは、FORTRANのような高水準プログラミング言語である。高水準プログラミング言語は、データ型やデータ構造、操作などのような高水準な概念でプログラミングできる環境を提供し、プログラマは低水準な複雑性を考える必要がなくなった。
タイムシェアリングシステムより古いバッチ処理の環境では、ターンアラウンドが遅いため、プログラマは思考を中断させられてしまい、また時間コストがかかってしまっていた。しかし、タイムシェアリングシステムの登場により、プログラマは、早いレスポンスの環境で作業ができるようになった。
UNIXとInterlispによる統一されたプログラミング環境が広く普及し、次のような特長により、プログラマの生産性は大きく向上した。
次に、銀の弾になる可能性のあるとされている技術について述べる。
オブジェクト指向プログラミングでは、クラスの概念を導入し、カプセル化と継承を活用することができる。
自動プログラミングとして言及されてきた技法は、つまるところ高水準プログラミング言語を使ったプログラミングの婉曲的表現である (デイビッド・パーナス) 。
ビジュアルプログラミングを使って生産性を向上させることは難しい。
プログラム検証には労力がかかる。そのため、全ての開発対象を検証することはできず、一部の重要なプログラムを検証することしかできない。 また、たとえプログラムを検証したとしても、それは、プログラムが仕様書通りに実装されていることを証明するだけであり、仕様書にバグがないことを証明するわけではない。
以下のことを提案する。
ブルックスは、1986年に論文『銀の弾などない』を発表してから9年目にあたる1995年に、同論文を省察する『「銀の弾などない」再発射 ("No silver bullet" reloaded)』という論文を発表した。
オブジェクト指向プログラミングの手法は成長が遅かった。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.