ソフトウェア危機

ソフトウェア危機（ソフトウェアきき、）とは、高性能化するハードウェアのコストは低下する一方、複雑化するソフトウェア開発のコストは上昇する傾向が続くことにより、将来的にソフトウェアの供給が需要を満たせなくなるという考え方である。ソフトウェア危機は21世紀以降も続いている。

この用語は、ソフトウェア工学がまだ十分に確立していなかった頃によく使われた。その根本には、正しく、可読性が高く、検証可能なコンピュータプログラムを書くことが困難であるという事情がある。

 概要 
ハードウェアのコスト低下はコンピュータの利用領域の増大を招き、それによってソフトウェアの需要は拡大を続ける。一方、コンピュータが様々な場面で情報処理に活用されるようになっていくと、それに伴って次々と複雑なソフトウェアが要求されるようになり、ソフトウェア開発コストは上昇の一途を辿る。このような傾向が続くと、ソフトウェア開発の生産性を根本的に向上させない限り、ソフトウェアの供給が増大する需要に追いつかず、十分な品質を満たすソフトウェアの提供が難しくなり、ついには求められる仕様を満たすソフトウェアの開発が困難になることが予測される。ソフトウェア危機という場合、通常はこのような事態を指す。

ソフトウェア危機が叫ばれ始めたのは1960年代末のころであった。"software crisis" という用語は、1968年にドイツのガルミッシュ＝パルテンキルヒェンで開催された第1回NATOソフトウェア工学会議（w:NATO Software Engineering Conferences）で参加者らが生み出したReport about the NATO Software Engineering Conference dealing with the software crisis。1972年、エドガー・ダイクストラはチューリング賞講演で以下のように述べているE. W. Dijkstra Archive。

ソフトウェア危機の原因は、ソフトウェア開発工程の全体としての複雑性と専門分野としてのソフトウェア工学の相対的な未熟さと密接に関連していた。ソフトウェア危機は以下のような形で実際の開発プロジェクトに現れた。
 予算を超過してしまったプロジェクト
 予定期間を超過してしまったプロジェクト
 品質の低いソフトウェア
 要求仕様を満たさないソフトウェア
 管理不能状態のプロジェクトと、保守困難となったコード

相反する要求は常にソフトウェアの開発過程を妨げてきた。例えば、ユーザーは多大な機能を要求するが、顧客はソフトウェアに支払う対価と開発期間をなるべく最小にしたがることが多い。

 ソフトウェア危機の解決手法 
ソフトウェア危機は（少なくとも一部は）様々な手法や方法論の開発によって解決されてきつつある。

 オブジェクト指向、カプセル化
 構造化プログラミング
 ガベージコレクション
 アジャイルソフトウェア開発
 マルチスレッド・プログラミング
 ソフトウェアコンポーネント
 ソフトウェアプロトタイピング
 デザインパターン
 統合開発環境、RAD
 バグ管理システム、バージョン管理システム
 反復型開発
 Model View Controller

しかしフレデリック・ブルックスが『銀の弾などない』で記している通り、「本質的な複雑性」に対して生産性を向上させるような技法は存在しないと言われている。

 組み込みシステムにおけるソフトウェア危機 
近年では、組み込みシステムにおけるソフトウェア関連に起因する事故やトラブルが増加し、社会的に大きな影響を与えることも増えており、こちらもソフトウェア危機と呼ばれる#2532ソフトウエア危機  クローズアップ現代2008年2月5日（火）放送（第1回）古くて新しい問題、それがソフト危機 日経ITPro。原因としては次のような物が挙げられている。
 組み込みシステムには、リアルタイム性や対象ハードウェアに対する理解など、広く高度なスキルが求められるが、コンピュータ系職種によく見られる厳しい労働条件(詳細はデスマーチ、IT業界離れ、デジタル土方を参照)のため離職者が多く、ベテラン不在で必要なスキルレベルまで上がらない。
 携帯電話やデジタル家電に代表されるような、ソフトウェア規模の飛躍的増大に対して、ハードウェアリソースの制約やリアルタイム性が求められること(詳細は組み込みシステムを参照)からIT系同様の手法が通用しない。
 対象製品の開発サイクルの短期化
 理科離れ、パソコン離れ、電子工作離れ、家電機器のブラックボックス化などで、理系分野に興味を持つ機会が少なくなっている。

対策として次のようなことが行われている。
 Microsoft Windows CEや組み込み用にリアルタイム性を強化したLinuxなどのIT系に近いオペレーティングシステム (OS) を搭載し、IT系での開発手法を導入し、さらにIT系ソフトウェアエンジニアを活用する。
 複数社でのファームウェア共通化・共同開発
 一部の人材派遣会社では組み込みエンジニア養成コースを設けている。

 脚注 

 関連項目 
 ソフトウェア開発
 技術的特異点
 Σプロジェクト
 IT業界離れ

 外部リンク 
 Edsger Dijkstra: The Humble Programmer (PDF, 473Kb)
 B. Randell - The NATO Software Engineering Conferences

Category:情報学
Category:ソフトウェア品質
Category:ソフトウェアの歴史
Category:エドガー・ダイクストラ