数年前の私を含む多くのIT担当者にとって、理想的なソフトウェア開発プロセスでは、コード行を記述する前に、多くのUMLダイアグラムを含む詳細な設計ドキュメントを作成する必要があります。(これはウォーターフォールモデルの説明のように見えますが、反復がより小さいことを除いて、アジャイルでも同じです。)
過去2、3年の間に、私は完全に考えを変えました。関連するテストケースを含む詳細な要件仕様は、絶対に不可欠であると私はまだ考えています。大規模なプロジェクトの場合、コーディングを開始する前に、アーキテクチャ全体の概要も必要になります。ただし、残りはすべてコードで可能な限り行う必要があります。理想的なケースでは、コード自体を除いてソフトウェア設計の説明はありません。
どのようにしてこの結論に達しましたか?以下にいくつかの引数を示します。
フィードバック
文書を書いたり、図を作成したりするツールはほとんどフィードバックを提供しません。はい、UMLダイアグラムの整合性チェックを行うモデリングツールがありますが、それらは制限されており、多くのオーバーヘッドが伴います。
フィードバックがなければ、エラーを認識して修正することは困難です。
コードを書くとすぐに、次のような多くのフィードバックが得られます。
- コンパイラからのエラーと警告
- 静的コード分析結果
- 単体テスト
エラーをすばやく認識して修正できます。
一貫性
コードがドキュメントと一致していることを確認するには、何度も確認する必要があります。頻繁な変更がある場合、コードとドキュメントの同期を保つのは困難です。
リファクタリング
テキストの説明や図をリファクタリングするのは通常困難でエラーが発生しやすい一方で、コードをリファクタリングするための強力なツールとテクニックがあります。
この作業を行うための前提条件が1つあります。コードは読みやすく、理解しやすいものでなければなりません。これはおそらくAssembler、Basic、またはFortranでは達成できませんが、最新の言語(およびライブラリ)ははるかに表現力があります。
したがって、私の議論が有効であれば、ソフトウェア設計の仕様やドキュメントの軽量化や軽量化に向かう傾向があるはずです。この傾向の経験的証拠はありますか?