可能性のある複製:
フォーマルUMLをどのくらいの頻度で使用しますか?
私は現在、UMLの基礎と呼ばれる研究UMLをフォローしています。
勉強中、企業がUMLでシステムのドキュメントを作成する手間をかけているのではないかと思いました。インターンとして訪問した会社は、クラス図に煩わされていないようです。彼らはビジネスにまっすぐ行き、クラスを作成しながら進み、事前に計画していなかったのでメソッド/プロパティを削除しました。
クラス図のようなシステムドキュメントを作成する価値はありますか?
コーディングの前にシステム設計ドキュメントを作成することは、コストがかかりますか?
露骨にあなたの質問に答えるには:
クラス図を描くことは価値があるかもしれませんし、そうでないかもしれません。あなたはあなたのシステムを見て、どんな図(もしあれば)がシステムで働いている誰にでも価値を追加するかを決定する必要があります。図を作成することで開発者、テスター、またはメンテナの生活が容易になる場合は、図を作成する必要があります。システムで作業している人に何らかの価値を付加しない場合は、作業に時間や労力を費やさないでください。システムが既に存在する場合は、新しい開発者がシステムをより短時間で理解できるように、リバースエンジニアリングを使用して図を作成することも検討してください。
より多くの費用がかかるという点では、はい、開発者がそれらを作成するのに時間を費やすため、システムのダイアグラムを事前に作成すると費用がかかります(時間もかかります)。ただし、この前払い(逐次プロセスでのプロジェクトの開始または反復的な製品での反復の開始)のコストは、以前の段階でミス、エラー、または誤解についてレビューできるものがあるという考えによって相殺される可能性があります開発サイクル。設計で発生したミスは、設計フェーズを終了する前に修正するよりも、開発、テスト、またはリリース後に修正する方がコストがかかります。
あなたは明示的にクラス図について言及しました。はい、クラス図は広く使用されています。しかし、物事を示すことは重要ですが、正しい物事を示してください。構築しているシステムに応じて、他の種類の図では、システムに関するいくつかの興味深いビューを表示できます。シーケンス図は、システムの複雑さ、まとまり、結合を示すことができます。コンポーネント図と配置図は、分散システムを構築するときに、各ノード間の接続を示すのに役立ちます。オブジェクト図は、実行時に特定の条件下でシステムがどのように動作するかを示しています。アクティビティ図は、ビジネスロジックとワークフローを示すために使用できます。リストは続きます。各図はシステムの特定のビューを示しており、各ビューは開発者、メンテナー、およびテスターに付加価値を与える場合とそうでない場合があります。
UMLの長所は一貫性にあります。オブジェクト指向ソフトウェアシステムのモデル化に必要な一連のシンボルを提供します。これを使用すると、チーム全体のあいまいさと混乱を減らして、全員が同じページに入ることができます。システムを説明するために単語と文を使用すると、誤解とあいまいさが生じます。 UMLを使用すると(標準の表記法を使用し、チームの全員がそれらの表記法を知っている限り)、システムの実際の実装だけでなく、意図した設計を伝達することがはるかに容易になります。一人で作業している場合、これはそれほど重要ではありません。ただし、チームでは、すべての人が同じ観点からシステムについて考えることが重要であり、UMLはこれを行うために必要な構成要素を標準言語に提供するのに役立ちます。
これまでのところ、私は仕事でも個人的なプロジェクトでも、UMLの全範囲を使用したことがありません。ただし、私はUML表記を使用して私の考えを紙に書き、それらを処理します。コーディングを開始する前にそれらが機能することを確認しようとします。一枚の紙をつかんだり、ホワイトボードを使用したり、スケッチに変更を加えたりする方が、いったん作成してコーディングするよりもはるかに簡単です。これは、いくつかの例外を除いて、これまでに参加してきたほとんどのチームでの私の経験でもあります。これは、クラス図からアクティビティ図まで、あらゆる種類の図に当てはまります。それは、私が解決しようとしている問題と、私が何を考えているのかによって異なります。
UMLを事前に使用するコストに関しては、個人またはチームとして座って図を作成する時間を費やすことになります。 Steve McConnellは、著書 『Rapid Development:Taming Wild Software Schedules and Software Project Survival Guide:How to be Beasure a First Important Project Is Your Last:
UMLを使用して設計決定をキャプチャし、適切にレビュー(設計レビューはコードレビューと非常に似ていますが、コードではなく設計ドキュメントと図を見てください)し、それらの設計について明確、簡潔、明確に検討している場合そうすれば、プロジェクトまたはイテレーションの早い段階で欠陥を見つけて削除できるはずです。設計について議論すると、誤解されている要件や、既知の要件のすべてを満たすことができない設計が明らかになる可能性があります。時間はかかりますが、時間とお金を節約できます。
私はUMLをdocumentationまたはdesignではなくcommunicationの方法として考える傾向があります。
myselfのUML図を作成することはほとんどありません。なぜなら、私が唯一の消費者である場合は、理解できるとわかっているより速い省略形を使用することができるからです。しかし、多くの人がプロジェクトに関与している場合、それはうまくいきません。
さまざまな種類の図は、さまざまな対象者を扱うときに非常に役立ちます。
行動図(特に、ユースケース図とアクティビティ図)は、プロジェクトの利害関係者と要件に取り組むときに非常に役立ちます。ビジネスまたはドメインを理解し、理解していることを証明できる必要があります。
相互作用図(シーケンス、タイミングなど)とコンポーネント図は、ソフトウェアチーム内で設計概念を広めるための優れた方法です。個々のコンポーネントすべてのドキュメントがあるプロジェクトを見るのは嫌いですが、どのように組み合わせるのかを説明しているものはありません。工場の床に散らばっているすべての部品が見つかった場合、車を組み立てる方法を知っていますか?
パッケージ図と展開図は、サポートのためにプロジェクトをITチームに引き渡すことを計画している場合に役立ちますが、通常はそれだけでは十分ではありません。
クラス図は、モデルからコードを生成できるモデリングツールを使用している場合(および通常onlyの場合)に役立ちますandコードの変更を同期して最新の状態に保ちます。これにより、ワークフローにある程度の柔軟性が与えられます。たとえば、単体テストと一般的な概念をハッシュする必要がある場合は、「低レベル」(コード)ビューと「高レベル」(モデル)ビューを切り替えることができます。プログラマーとして、私たちはすでにこれを常に頭の中で行っています。画面上でそれを行うことが次の論理的なステップです。
他の種類の図は私が告白しなければなりませんが、あまり役に立たないようです。オブジェクトダイアグラムを作成しますが、通常はホワイトボードにあり、永続的なドキュメントではなく視覚的な補助として使用します。プロファイル、複合構造などは、あまりにも低レベルなので、気にする必要はありません。ほとんどの場合、コード自体はそれらを文書化するためのより良い仕事をします。
結論:UMLを完全に無視するのではなく、聴衆に注意してください。他の人が言ったように、図を作成する意味はありません理由ですが、純粋なコーディング(PM、建築家、アナリストなど)以外の仕事をしているときは、それらを見つけ始めるでしょう。不可欠。
他のものとは別に、クラス階層の設計はソフトウェアを設計するための良い方法ではありません。継承は、最初のツールではなく、到達する最後のツールである必要があります。そして、私たちがUMLを標準として使用してしまったのは残念です-IMHO、Jacobsonの元のObjectory表記は、複雑すぎるUMLよりはるかに優れていました。
IMOアプリケーションの一部についてチームメイトと話し合うとき(または自分自身でさえ、大きなホワイトボードのあるオフィスがいかに寂しいか!)、UML図をスケッチすることは価値があります。従わなければならない正式なUMLダイアグラム(それほどではありませんが、免責事項:大文字の「A」を使用した「アジャイル」ではありませんが、「アジャイル」な開発方法を好みます)。
だからあなたの質問に答えるために、はい[〜#〜] i [〜#〜] UMLスケッチを作成することがよくあります(すべてのベルとホイッスルを備えた真のUMLダイアグラムではなく、基本的なクラスアウトライン)いくつかのインタラクションノート付き)開発を始める前に。ただし、通常はコードアーティファクトとして保持されません。通常、紙やホワイトボードに落書きされています。
クラス図の使い方にはジレンマがあるように思います。モデルからコードへのモデル駆動型開発であるか、コードがUMLを駆動する複数の反復である必要があります。私は、UMLがコードのビューアに過ぎない一種のコードモデル駆動型であるというUMLの新しいトレンドが始まったと思います。
UMLクラス図は、変更を即座にリバースエンジニアリングして図を更新することにより、コードに従う必要があります。新しい需要があれば、UMLを使用してコードをより速く、よりよく作成することもできますが、これは増分であり、現在のように毎回完全なプロジェクト生成ではありません。