これを適切に説明するには、短い歴史のレッスンが必要です。ソフトウェアエンジニアリングの初期の頃、よく使われるアナロジーは家を建てることでした。建築家と構造エンジニアは、顧客と計画について話し合い、設計を考え出します。次に、建築業者はその設計に従って実際の家を建てます。コードを書くことは、実際の家を建てることと同等であると見なされました。したがって、そのビルドを行う前に、フロントデザインの必要性が認識されていました。さまざまなグラフィックデザインツールが作成され、UMLもその1つです。
もともとUMLでのアイデアは、UMLでシステムを完全に設計し、それをプログラマーに引き渡してその設計をコードに変換することでした。実際には、これはうまくいかず、何年ものプログラマーが「デザイナー」ではなく「インプリメンター」と見なされるようになり、プロジェクトが遅れ、設計は完成するはずだった後に常に変更する必要がありました。
理由は簡単です。コーディングはデザインです。家の類推では、コードは建築家の図面です。コンパイラーは、それらの設計を取り、それらからプログラムを構築するビルダーです。この実現により、アジャイル技術、TDDなどが生まれました。そのコード設計の品質向上に役立つツールです。
建築家が彼女と彼女のチームが設計全体を視覚化するのに役立つ予備スケッチを作成するのと同じように、開発者はUMLまたは他のツールを使用して、必要な設計の視覚化を助けることができます。これらのスケッチが盲目的にフォローされていないように、UMLは盲目的にフォローされるべきではありません。コード設計は、アジャイルな反復とTDDの使用から進化する必要があります。賢明なことに、建築家が家のモデルを作成して彼女と彼女のチームが図面を視覚化できるように、UMLを使用してコード構造を視覚化することができます。
ボブおじさんが言うように、UMLを検証することはできません。コードを検証することしかできません。したがって、コードは主要な設計ドキュメントであり、UMLが使用されている場合、それは二次的なドキュメントのみです。