What Is Software Design?
ソフトウェア設計とは何か?
(原文: What Is Software Design?)
by
Jack W. Reeves
(c)C++ Journal - 1992
要約すると
真のソフトウェアとはコンピュータの内部で実行されるものです。 これは何らかの磁気媒体に記録された1と0の並びです。 つまり,C++(あるいは他のプログラミング言語)で記述されたプログラム・リスティングではないのです。
プログラム・リスティングとはソフトウェア設計を表現したドキュメントです。 ソフトウェア設計は,コンパイラとリンカによって実際に製造(ビルド)されているのです。
真のソフトウェアをビルドするには,驚くほどコストがかからず,コンピュータの高速化とともに,より安価になってきています。
真のソフトウェアを設計するには,驚くほどコストがかかります。 これは,ソフトウェアが驚くほど複雑であり,事実上ソフトウェア・プロジェクトにおけるすべてのステップが設計プロセスの一部となっているためです。
プログラミングとは設計アクティビティです。 優れたソフトウェア設計プロセスは,このことを認識しており,コーディングを行うべき時にコーディングを行うことに躊躇していません。
コーディングは,信じられている以上に意味のある作業です。 コードによって設計を描き出すプロセスはしばしば,見逃しや追加設計を行う必要性を暴き出してくれるのです。 こういったことを早期に行えば,設計はより優れたものとなるわけです。
ソフトウェアのビルドはほとんどコストがかからないため,公式の工学的検証手法が実世界のソフトウェア開発で多用されることはありません。 証明しようとするよりも,単に設計をビルドし,テストする方が容易かつ安価なものとなるのです。
テスティングとデバッギングは,設計アクティビティです。 これらは,他の工学分野における設計の検証と洗練プロセスと等価なものなのです。 優れたソフトウェア設計プロセスはこのことを認識しているため,このステップで手抜きを行おうとはしていません。
他にも設計アクティビティが存在しています。 これらはトップレベル設計,モジュール設計,構造化設計,アーキテクチャ設計といった名前で呼ばれています。 優れたソフトウェア設計プロセスはこのことを認識しているため,意識的にこれらをステップ中に含めています。
すべての設計アクティビティは相互に作用します。 優れたソフトウェア設計プロセスはこのことを認識しているため,様々な設計ステップによって変更の必要性が顕在化した場合,大胆なまでの設計変更を許しています。
多くの様々なソフトウェア設計記法は,有益なものとなる可能性を秘めています。 補助ドキュメントやツールも同様に,設計プロセスを円滑にする支援となります。 しかし,これらはソフトウェア設計ではありません。
ソフトウェア開発は,未だ工学分野というよりも技芸となっています。 これは主に,設計の検証と改善という重大なプロセスにおいて厳格さが欠如しているためです。
詰まるところ,ソフトウェア開発における本当の進歩は,プログラミングの進歩,すなわちプログラミング・テクニックにおける進歩に依存しているのです。 C++はこういった進歩なのです。 C++は,より良いソフトウェア設計を直接サポートするメジャーなプログラミング言語であるため,爆発的な人口増加を引き起こしたのです。
C++は正しい方向に向けての一歩であるものの,さらなる進歩が必要とされています。