2014.05.08
Jackal

新型飛行機を開発する場合

新型の飛行機を開発・製造する場合
「最低でも○○人の乗客を乗せたい、燃費は○○m/L以上にしたい」
といった要求仕様を満たせるように、設計チームが
計算とシュミレーションを繰り返して設計書を
作っていくことになると思います。

シュミレーションである程度満足のいく結果が出るように
なったら、今度は小型の飛行機の模型を作って
風洞試験などを実施するのではないでしょうか。
理論上の結果と実際の結果が異なるということはよくある
ことなので、ここでも試験・設計の修正という作業が
繰り返されることになると思います。

模型飛行機で望みどおりの結果が出るようになったら、
ようやく実物大のプロトタイプ飛行機を製造しての
飛行テストです。
当然、このテストで発覚した問題についても
修正と設計書へのフィードバッグが行われます。

こうした長い時間と費用のかかる作業を経て
ついに完成した設計書は、製造チームへ引き渡されさます。
製造チームは、設計書に誤りがない限り設計チームの
手を借りずにどんどん飛行機を量産することができます。

上記を踏まえて考えた場合、ソフトウェア開発における
「設計」と「製造」の工程とはいったいどのようなものに
なるでしょうか?

ソフトウェア設計とは何か?という記事を書いた著者は
ハードウェアの設計・製造工程との比較から

「ソフトウェア開発における設計とはコーディング・テスト・デバッグまでを含めたものである」

という結論に達しました。
きちんとした設計書を作成するためには検証(テスト)と
その結果のフィードバッグ(デバッグ・リファクタリング)
という作業が必要不可欠だからです。
コーディング・テスト・デバッグまでが設計工程だとなると、
その作業で生み出されるソースコードこそが設計書だと
いうことになります。
そして、ソースコード(設計書)をコンパイルして製品
(バイナリコード)を生み出す作業が製造工程になるのです。

そう考えると

・コーディング前に詳細すぎる詳細設計書を書いても無駄になる可能性が高い
・コーディング中に設計漏れや追加設計の必要性が発覚することはよくある。
・本当にどのような製品(動作)になるのかはソースコードにしか書いてない。
・上位の設計(概要・詳細設計書など)に縛られすぎると質の悪い製品を生み出す結果につながることがある。
・テスト・デバッグは良い設計書=製品を生み出すために非常に重要なプロセスである。
・使用するプログラミング言語やコーディングプラクティスがソースコード(設計書)の質に影響し、最終的な成果物(製品)の質にも影響する。

といった事実をより受け入れやすくなります。

コーディング = 製造というイメージを持っていた
私にとって衝撃的な内容の記事でした。
ソフトウェア開発にかかわる人でまだ読んだことがない人がいれば
是非読んでみていただきたいと思い紹介させていただきました。

YI

一覧に戻る