銀の弾などない

『銀の弾などない— ソフトウェアエンジニアリングの本質と偶有的事項』（ぎんのたまなどない ソフトウェアエンジニアリングのほんしつとぐうゆうてきじこう、）とは、フレデリック・ブルックスが1986年に著した、ソフトウェア工学の広く知られた論文である。
論文概要.
原論文は英語である。日本語では『銀の弾丸はない』と、翻訳されることもある。ブルックスは、「銀の弾丸」（Silver Bullet）として、魔法のように、すぐに役に立ちプログラマの生産性を倍増させるような技術や実践 (特効薬) は、今後10年間（論文が著された1986年の時点から10年の間）は現れないだろう、と記載した。
銀の弾とは、銀で作られた弾丸であり、西洋の信仰において狼人間、悪魔を撃退する際に用いるものとされていた。
ブルックスの警句は、非常に多く引用されており、生産性、品質、制御に適用されている。ブルックスは、自身の警句で述べているプログラマの生産性の限界は「本質的な複雑性」（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章「銀の弾などない」の扉には、狼人間を描いた絵が掲載されている。
問題の所在—銀の弾とソフトウェアプロジェクト.
この論文が対象とする問題の所在を説明するために、論文の序の文章を引用する。
主張.
ブルックスが本書で主張していることを述べる。
本質的な複雑性と偶有的な複雑性を区別する.
ブルックスの主張で重要なことは、ソフトウェア開発の複雑性について、「本質的な複雑性」 (essential complexity) と「偶有的な複雑性」 (accidental complexity) を区別していることである。なお、これは、アリストテレスの分類にヒントを得たものである。
ブルックスによると、ソフトウェア開発者はこれまで偶有的な複雑性の多くを退治してきたが、その一方で、現在 (1986年) のプログラマは自分の時間の大部分を本質的な複雑性に取り組むことに費している。
偶有的な複雑性におけるブレークスルー.
過去に行われてきたソフトウェア技術の発展は、ソフトウェア開発における偶有的な複雑性を攻略した。ただし、これはあくまでも偶有的な複雑性を攻略しただけであって、本質的な複雑性を攻略したわけではない。
高水準プログラミング言語.
偶有的な複雑性の領域における大きなブレークスルーの一つは、FORTRANのような高水準プログラミング言語である。高水準プログラミング言語は、データ型やデータ構造、操作などのような高水準な概念でプログラミングできる環境を提供し、プログラマは低水準な複雑性を考える必要がなくなった。
タイムシェアリングシステム.
タイムシェアリングシステムより古いバッチ処理の環境では、ターンアラウンドが遅いため、プログラマは思考を中断させられてしまい、また時間コストがかかってしまっていた。しかし、タイムシェアリングシステムの登場により、プログラマは、早いレスポンスの環境で作業ができるようになった。
統一されたプログラミング環境.
UNIXとInterlispによる統一されたプログラミング環境が広く普及し、次のような特長により、プログラマの生産性は大きく向上した。
銀の弾の候補.
次に、銀の弾になる可能性のあるとされている技術について述べる。
オブジェクト指向プログラミング.
オブジェクト指向プログラミングでは、クラスの概念を導入し、カプセル化と継承を活用することができる。
「自動」プログラミング.
自動プログラミングとして言及されてきた技法は、つまるところ高水準プログラミング言語を使ったプログラミングの婉曲的表現である (デイビッド・パーナス) 。
ビジュアルプログラミング.
ビジュアルプログラミングを使って生産性を向上させることは難しい。
プログラム検証.
プログラム検証には労力がかかる。そのため、全ての開発対象を検証することはできず、一部の重要なプログラムを検証することしかできない。
また、たとえプログラムを検証したとしても、それは、プログラムが仕様書通りに実装されていることを証明するだけであり、仕様書にバグがないことを証明するわけではない。
提案.
以下のことを提案する。
「銀の弾などない」再発射.
ブルックスは、1986年に論文『銀の弾などない』を発表してから9年目にあたる1995年に、同論文を省察する『「銀の弾などない」再発射 ("No silver bullet" reloaded)』という論文を発表した。
オブジェクト指向プログラミングの現状.
オブジェクト指向プログラミングの手法は成長が遅かった。