UMLダイアグラムを使用してコードの編成方法を計画することが不適切なのはなぜですか?


9

そのため、はい、図が不適切な場合があります。彼らはいつ不適切ですか?それらを検証するためのコードなしでそれらを作成し、それらに従うことを意図している場合。アイデアを探求するために図を描くことには何の問題もありません。

アジャイルソフトウェア開発:原則、パターン、および実践-Robert C. Martin

これは正確にはどういう意味ですか?UMLは、「ダイブイン」する前にコードを構造化する方法を計画するのに役立つように設計されていませんか?あなたが思いついた図に従わない場合、それを使用する意味は何ですか?

コンテキスト:この章では、ボブおじさんがボウリングゲームのスコアキーパーのUML図を作成します。次に、UML図を調べずに、テスト駆動の方法でプログラムを開発します。結果のプログラムはUMLダイアグラムとは異なり、ボブおじさんは上記の結論に達します。


4
ボブおじさんのポイントは、テスト駆動開発から生まれるアーキテクチャは、UMLダイアグラムと根本的に異なる可能性があるということです。
Robert Harvey

1
また、デザインは死んでいるか?このトピックとアジャイル運動のバランスのとれた議論のためのマーティン・ファウラーによる
Eliezer Steinbock

4
@RobertHarveyらの重要で有用な質問を締めくくる投票における不十分な判断に応じて、この質問を賛成します。
David Arno

3
@DavidArno閉鎖すべきかどうかについて強い意見がある場合は、私たちのメタサイトでの議論に参加することを強くお勧めします。現在私(ここを含む)に投稿しているすべての人は、SEの従業員を除いて、おそらく「@RobertHarvey et al」に該当します。また、表現されていない別の視点があるのではないかと心配してきましたが、今のところ、誰もそれを表現していないようです。 。
Ixrec

1
@Ixrec、これまで一度もメタディスカッションに関与したことがありませんでした。自分のオープンソースライブラリを回答で参照できるかどうかを確認するために一度だけです(その答えは私ができるということでした)。多分私はあなたの助言を取り、もっと関与する必要があります。提案をありがとう。
David Arno

回答:


19

これを適切に説明するには、短い歴史のレッスンが必要です。ソフトウェアエンジニアリングの初期の頃、よく使われるアナロジーは家を建てることでした。建築家と構造エンジニアは、顧客と計画について話し合い、設計を考え出します。次に、建築業者はその設計に従って実際の家を建てます。コードを書くことは、実際の家を建てることと同等であると見なされました。したがって、そのビルドを行う前に、フロントデザインの必要性が認識されていました。さまざまなグラフィックデザインツールが作成され、UMLもその1つです。

もともとUMLでのアイデアは、UMLでシステムを完全に設計し、それをプログラマーに引き渡してその設計をコードに変換することでした。実際には、これはうまくいかず、何年ものプログラマーが「デザイナー」ではなく「インプリメンター」と見なされるようになり、プロジェクトが遅れ、設計は完成するはずだった後に常に変更する必要がありました。

理由は簡単です。コーディングはデザインです。家の類推では、コードは建築家の図面です。コンパイラーは、それらの設計を取り、それらからプログラムを構築するビルダーです。この実現により、アジャイル技術、TDDなどが生まれました。そのコード設計の品質向上に役立つツールです。

建築家が彼女と彼女のチームが設計全体を視覚化するのに役立つ予備スケッチを作成するのと同じように、開発者はUMLまたは他のツールを使用して、必要な設計の視覚化を助けることができます。これらのスケッチが盲目的にフォローされていないように、UMLは盲目的にフォローされるべきではありません。コード設計は、アジャイルな反復とTDDの使用から進化する必要があります。賢明なことに、建築家が家のモデルを作成して彼女と彼女のチームが図面を視覚化できるように、UMLを使用してコード構造を視覚化することができます。

ボブおじさんが言うように、UMLを検証することはできません。コードを検証することしかできません。したがって、コードは主要な設計ドキュメントであり、UMLが使用されている場合、それは二次的なドキュメントのみです。


7
今年の初めに家の屋根の一部を持ち上げましたが、それは非常に教育的でした。アーキテクトは、最終製品がどのように見えるかを実際に描くことはしませんでした。彼は難しい計算と構造設計を建築技術者に渡しました。次に、建設業者は理論的な設計を家の実際に合わせる必要があり(石膏ボードがオフになると、梁がわずかに異なる場所にあることがわかりました)、設計はあらゆる段階で行われていました。
Jaydee

1
これは有用な回答ですが、一部の側面を単純化しすぎています。UMLが「高レベルの設計表記」としてうまく機能しない主な理由の1つは、発明者たちが頑固すぎてデータフロー図を追加できなかったことです。これは、トップタウンのデザインに適した唯一の表記法であり、異なるスケールのコンポーネントとそれらの間のインターフェースの抽象化を表現でき、コードへの明確なマッピングを持つこともできます。代わりに、UMLには、誰も実際には必要としない多くのナンセンスが含まれています。
Doc Brown

3

すべてのプログラミングイディオム(またはデザイン、またはコード)がUMLに適合するとは限りません(私はそれがよくわからないことを認めます。

プレーンなCコード(Linuxカーネルのソースコードなど)は、UML で正確にモデル化されていない可能性があります。

Ocamlコード(そのモジュールとファンクターを含む)またはC ++ 11コード(ラムダとテンプレートを含む)もUMLに適合しない場合があります。

MetaOcamlによる段階プログラミングはおそらくUMLに適合しません。

PrologコードまたはCommon LispコードはおそらくUMLに適合しません。

参照してください、この答え&この鉱山の質問を。

Scottのプログラミング言語プラグマティクスとVan Royのコンピュータプログラミング概念、手法、モデルを読んで、そこにあるすべてのプログラミングモデルがUMLに適合するかどうかを自問してください。

Martin Fowler's Is Design Dead?も参照してくださいブログ。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.