方法: シーケンス図を使ってコードを精査する

更新 : 2010 年 8 月

Visual Studio Ultimate では、シーケンス図を生成することにより、コードが特定のメソッドをどのように実装しているかを視覚的に理解することができます。 シーケンス図は、オブジェクト間の相互作用を一連の生存線とメッセージで表現します。 生存線はオブジェクトのインスタンスを、メッセージはこれらのオブジェクト間のメソッド呼び出しを表します。 Visual C# .NET または Visual Basic .NET コードからシーケンス図を生成できます。 ASP.NET Web サイトのプロジェクトからシーケンス図を生成するには、Visual Studio 2010 Microsoft Visual Studio 2010 Visualization and Modeling Feature Pack をインストールします。

注意

生成したシーケンス図には、UML シーケンス図の要素と似た要素が表示されます。 コードから生成したシーケンス図は、UML モデルとは独立して存在し、任意の .NET プロジェクトに追加できます。 一方、手動で描画した UML シーケンス図は、常にその生成先のモデルの一部を形成します。 詳細については、「UML シーケンス図: リファレンス」を参照してください。

コードに影響を与えないように実行する変更を特定し、伝達するためには、生成されたシーケンス図を調べて、変更します。 たとえば、新しい生存線、メッセージ、相互作用使用、フラグメントなどを追加することができます。

対応するコードで実行する作業のタスクを作成および追跡するには、作業項目を生成するか、作業項目を図の要素にリンクします。 詳細については、「方法: 作業項目をモデル要素にリンクする」を参照してください。

このトピックの内容

  • ソース コードからのシーケンス図の生成

  • シーケンス図でのコードの精査

  • 図の編集によるデザイン変更の提案

  • 図からのナビゲート

  • 相互作用要素から作業項目へのリンクの設定

  • 他の図との関係

  • シーケンス図のトラブルシューティング

ソース コードからのシーケンス図の生成

シーケンス図をコードから生成するには

  1. Visual Studio で、メソッド定義が含まれているコード ファイルを開きます。

  2. メソッド定義内の任意の場所を右クリックし、[シーケンス ダイアグラムの生成] をクリックします。

  3. [シーケンス ダイアグラムの生成] ダイアログ ボックスの [呼び出しの最大の深さ] ボックスで、表示する呼び出しの最大レベルを指定します。

    たとえば、第 1 レベルの呼び出しのみを表示する場合は、呼び出しの最大の深さのレベルを 1 にします。 シーケンス図には、第 2 レベルの呼び出しが、ターゲットの生存線を持たないメッセージ (消失メッセージ) として表示されます。

    注意

    図を生成した後に、特定の消失メッセージを展開できます。

  4. [呼び出しを含める] で、次の表のいずれかのスコープを選択します。

    表示する内容

    使用する設定

    現在のプロジェクト内の項目の呼び出し

    現在のプロジェクト

    ソリューション内の項目の呼び出し

    現在のソリューション (既定)

    ソリューション内外の項目の呼び出し

    ソリューションと外部参照

    たとえば、手始めに単純なシーケンス図を作成するには、現在のプロジェクト内の項目のメソッド呼び出しのみを調査します。 図のスコープは、ソリューション全体を対象に項目の呼び出しを表示する新しいスコープを生成することによって展開できます。 ソリューションに存在しない項目の呼び出しを表示する場合は、外部参照を含んだ図を生成する必要があります。

  5. 次の項目については、[呼び出しを除外する] で呼び出しを省略することにより、図をさらに単純化できます。

    呼び出しの省略対象

    [Select]

    プロパティおよびイベント

    プロパティとイベント (既定)

    System 名前空間

    システム名前空間 (既定)

    特定の名前空間

    [他の名前空間] を選択して、ボックスに名前空間を入力します。複数の名前空間を入力する場合は、コンマ (,) で区切ります。 ワイルドカード (*) 文字はサポートされていないため使用しないでください。

    これらの項目の呼び出しを含めるには、対応するチェック ボックスをオフにします。

  6. 終了したら、[OK] をクリックします。

    Visual Studio によってシーケンス図が生成され、対応するプロジェクトに追加されます。 シーケンス図を生成する際の問題については、「シーケンス図のトラブルシューティング」を参照してください。

    注意

    生成されたシーケンス図に、配列宣言は表示されません。

図の生成後に図に加えた変更は、コードには反映されません。また、コードに加えた変更は、図には反映されません。 このような変更を反映させるには、新しいシーケンス図を生成する必要があります。 同じメソッドから、新しいシーケンス図を何度でも生成できます。

シーケンス図でのコードの精査

シーケンス図は、自分でコードを精査するときだけではなく、コードを第三者に提示するときにも便利です。 このような目的のために最大限に実用的な図を作成するには、さまざまなスコープを試しながら図を生成します。 いったん図を生成してから変更することもできます。 たとえば、設計を提示し、確認しあうためには特に必要とされないメッセージを削除できます。

シーケンス図には次の変更を加えることができます。

変換後

実行する手順

次のレベルの呼び出しを表示する

ターゲットの生存線を持たないメッセージを右クリックし、[出力の延長] をクリックします。

メッセージを新しい図で展開する

メッセージを右クリックし、[シーケンス ダイアグラムの生成] をクリックします。

現在のプロジェクトに新しい図が追加されます。

メッセージのグループを 1 本の生存線に折りたたむ

グループ化する生存線を選択し、選択範囲を右クリックして、[折りたたみ] をクリックします。

グループの名前は変更できますが、展開した時点で名前は失われます。

グループを展開するには、右クリックして [展開] をクリックします。

要素を削除する

シェイプを右クリックし、[削除] をクリックします。

レイアウトを調整する

図の空白領域を右クリックし、[レイアウトの再配置] をクリックします。

このコマンドは元に戻すこともできます。

選択された要素を強調表示する

要素を右クリックし、[プロパティ] をクリックします。 プロパティ ウィンドウで、[カラー] フィールドを設定します。

図に注釈を付ける

[コメント] ツールをクリックし、図をクリックして、コメント欄にメモを入力します。 コメントは、[コメント リンク] ツールを使用して、生存線またはフラグメント上の 1 つ以上の点に接続することができます。

図の編集によるデザイン変更の提案

図に要素を追加したり削除したりして変更を加えることで、さまざまな設計を検討できます。 図のパーツを UML モデリング プロジェクトで生成した UML シーケンス図にコピーすることもできます。 これにより、UML モデルの型、コンポーネント、およびアクターに生存線を関連付けることができます。

設計案を説明するうえで効果的な変更の概要を次の表に示します。 詳細については、「UML シーケンス図: ガイドライン」を参照してください。

変換後

実行する手順

生存線やメッセージなどの要素を強調表示する

要素の [カラー] プロパティを変更します。

または

次の手順に従って、要素に [コメント] をリンクします。

  1. [ツールボックス][コメント] をクリックし、図中の要素付近をクリックします。

  2. [ツールボックス][コメント リンク] をクリックし、図中のコメントをクリックして、要素をクリックします。

生存線を移動する

生存線を図中の異なる領域にドラッグします。

消失メッセージまたは拾得メッセージのある生存線のグループを移動するには、移動する前に次の手順を実行して生存線を選択します。

  • 生存線を囲む四角形を描画します。

    または

    Ctrl キーを押しながら各生存線をクリックします。

    メモメモ
    [すべて選択] を使用するか、Ctrl キーを押しながら A キーを押して生存線を選択してから移動しても、それらの生存線にアタッチされている消失メッセージと拾得メッセージは移動されません。このような場合には、メッセージを個別に移動します。

メッセージの移動と順序変更を行う

図でメッセージを上下にドラッグします。

  1. メッセージを選択して、次の操作を実行します。

  2. メッセージの位置を調整するには、↑キーおよび↓キーを使用します。

  3. メッセージの順序を変更するには、Ctrl +↑キーと Ctrl +↓キーを使用します。

生存線を追加する

[ツールボックス][生存線] をクリックし、図をクリックします。

メッセージを追加する

  1. [ツールボックス] で、[同期] または [非同期] のメッセージをクリックします。

    拾得メッセージまたは消失メッセージを追加するには、[非同期] メッセージを使用します。 拾得メッセージは不明なイベント ソースから送信されたメッセージです。消失メッセージは不明な受信者にブロードキャストされたメッセージです。

  2. 図中のソース生存線をクリックします。

  3. ターゲット生存線をクリックします。

    または

    拾得メッセージを生成するには、図中のソース生存線の背後にある空白領域をクリックします。消失メッセージを生成するには、図中のソース生存線の手前にある空白領域をクリックします。

  4. メッセージの新しい名前を入力します。

別の図に生存線およびメッセージをコピーする

生存線をコピーして貼り付けます。

自動的に生存線間のメッセージもコピーされます。

メモメモ
生成されたシーケンス図にモデリング プロジェクト内の UML シーケンス図から生存線をコピーすると、生存線のヘッダーしか表示されなかったり、色の調整が必要になったりする場合があります。この問題を解決するには、貼り付けた生存線を選択し、[カラー] のプロパティを設定します。

結合フラグメントでメッセージを囲む

  1. 1 つ以上のメッセージを選択します。

  2. 選択内容を右クリックし、[ブロックの挿入] をポイントして、結合フラグメントの種類をクリックします。

結合フラグメントを使用して、代替シーケンスや代替ループなどのメッセージのコンポジションを表します。

メッセージを新しい図に移動する

メッセージを右クリックし、[図へ移動] をクリックします。

メッセージとその付属メッセージを含んだ新しい図が生成されます。 元の図のメッセージが [相互作用使用] に置き換えられます。

図をコピーする

ソリューション エクスプローラーから図をコピーするか、または Windows エクスプローラーからファイルをコピーします。 個々の図には 2 つのファイルが関連付けられています。

生成されたシーケンス図は Visual Studio Ultimate のインスタンスを使用して編集できるほか、Visual Studio Ultimate または Visual Studio Premium を使用して読み取ることができます。

特定の手動での変更 (追加、名前の変更など) が強調表示されないようにする

  1. シーケンス図のダイアグラム サーフェイスを右クリックし、[プロパティ] をクリックします。

  2. [手動による変更の表示] プロパティを [False] に設定します。

図からのナビゲート

変換後

実行する手順

生存線からクラスの定義に、またはメッセージからメソッドの定義に移動する

生存線またはメッセージを右クリックし、[定義へ移動] をクリックします。

アーキテクチャ エクスプローラーでクラスまたはメソッドを探す

生存線またはメッセージを右クリックし、[アーキテクチャ エクスプローラーで表示] をクリックします。

詳細については、「方法: .NET コードに対する依存関係グラフを生成する」を参照してください。

シーケンス図から作業項目へのリンクの設定

変更の実装作業の計画を立てやすくするために、Team Foundation Server では、あらゆる種類のシーケンス図の要素を作業項目にリンクできるようになっています。 詳細については、「方法: 作業項目をモデル要素にリンクする」を参照してください。

変換後

実行する手順

生存線やメッセージなどの要素を作業項目にリンクする

  1. 1 つ以上の要素を右クリックし、[作業項目へリンク] をクリックします。

  2. [作業項目へのリンク] ダイアログ ボックスで、作業項目を検索するクエリを実行するか、対応する ID を直接入力します。 選択できる作業項目の数に制限はありません。

後でこのコマンドを繰り返し実行することによって、同じモデル要素に作業項目のリンクをさらに追加できます。

リンクされた作業項目を表示する

1 つ以上の要素を右クリックし、[作業項目の表示] をクリックします。

作業項目へのリンクを削除する

  1. 要素を右クリックし、[作業項目の削除] をクリックします。

  2. [作業項目へのリンクの削除] ダイアログ ボックスで、削除する作業項目のリンクをクリックします。

モデル要素と選択された作業項目の間のリンクが削除されます。 作業項目とモデル要素は削除されません。

生成されたシーケンス図を使用するうえでのガイドライン

生成されたシーケンス図を使用してコードを精査する際は、次のガイドラインを参考にしてください。

コードの精査

大規模なコードにおける主要なグループ化と依存関係の全体像を把握するには、依存関係図を生成します。 次に、設計の個々のパートに焦点を当てたシーケンス図を生成します。 詳細については、「方法: .NET コードに対する依存関係グラフを生成する」を参照してください。

図の解釈

図を生成するアルゴリズムは、コードのシンボリック実行を行います。 この手法で対応できない状況もあります。 特に、次のような状況がこれに該当します。

  • 実行中のコードが対象とするインスタンスは 1 つだけであるにもかかわらず、図に複数の生存線が表示される場合があります。 通常は、メッセージごとに個別のターゲット生存線が生成されます。

  • プログラム コードが常にサブタイプを使用する場合でも、生存線の型はプログラム コードで宣言されている型です。

設計の側面に対する注目

  • 注目する設計の側面を 1 つ選択します。 異なる側面に注目するために複数の図を生成し、任意の作業段階で図ファイルのコピーを作成できます。

  • デザインの側面を明確に表現した実用的な図を作成するためには、試行錯誤しながら名前空間のフィルター処理と生成を繰り返す必要があります。

  • 注目する側面とは無関係のメッセージを削除し、関連性のあるメッセージを展開して詳細を表示します。

  • [折りたたみ] コマンドを使用して、相互に連携する一連のオブジェクトを表す生存線をグループ化します (その内部の相互作用が注目する側面を示すうえで重要でなければ)。

デザインの更新

  • バージョン管理を使用することで、他の作業者と共同で図を操作できます。 図を編集するときは、同時に 1 人しか編集できないように、図をロックすることをお勧めします。

  • 生成されたシーケンス図を使用すると、変更や調整を困難にしている既存のコードの機能が識別しやすくなります。 たとえば、すべてのメッセージが 1 つの生存線から送信されており、それ以外の生存線は単にメッセージに応答しているだけで、ほとんどメッセージを送信していないことに気付いたとします。 この場合、このオブジェクトによって実行されている作業を分割し、他のオブジェクトに配分することで、効率を高めることができないかどうかを検討します。 オブジェクトの各クラスには、明確に定義されたタスクを 1 つだけ割り当てるようにします。 通常、この方法により、ユーザーのニーズが変化したときに変更する必要のあるプログラムのパートを簡単に識別したり、アプリケーションの異なるバリアント内のパートを再配置したりできます。

  • 設計の特定の側面に注目した図がある場合は、そのコピーを作成し、編集して、変更の代替案を生成します。

  • 生成されたシーケンス図の要素は、UML シーケンス図にコピーできます。 まず、UML モデリング プロジェクト内で UML シーケンス図を生成する必要があります。 そこで、更新した設計のさまざまなビューをモデル化し、生存線をそのモデル内のコンポーネントまたはクラスにリンクできます。 相互作用を拡張して外部のアクターを含めることもできます。

シーケンス図のトラブルシューティング

次の表で、シーケンス図の生成時に発生する可能性のある問題と、それに対応する解決方法を説明します。

懸案事項

解決策

シーケンス図が生成できません。

System 名前空間が除外され、コードに、ref パラメーターまたは out パラメーターを受け入れ、new キーワードを使用してパラメーターを渡す COM メソッドの呼び出しが含まれている場合、シーケンス図は生成されない場合があります。 この問題を回避するには、コードを変更するか、図を生成するときに System 名前空間を含めてください。

次のメッセージが表示された後に、空白のシーケンス図が生成されます。

"オブジェクト参照がオブジェクト インスタンスに設定されていません。"

この問題は、シーケンス図がインターフェイス メソッドの明示的な実装から生成され、図がソース プロジェクトに自動的に追加されない場合に発生します。 明示的な実装では、インターフェイス名とピリオド (.) の付いたメソッド名が優先されます。

たとえば、次のシグニチャからシーケンス図を生成し、シーケンス図をプロジェクトに自動的に追加しない場合、この問題が発生します。

void ILinkedWorkItemExtension.OnWorkItemCreated( ) {}

可能な場合は、インターフェイス名とピリオド (.) を含めないでください。

または

シーケンス図の生成ダイアログ ボックスで、シーケンス図がプロジェクトに自動的に追加されることを確認してください。

シーケンス図の生成に時間がかかります。

または

シーケンス図をもう一度開こうとするとクラッシュします。

コンピューターの構成によっては、シーケンス図が大きすぎて生成に時間がかかることがあります。また、これが原因で、Visual Studio でメモリの不足が生じたり、図を一度閉じてから、もう一度開くときにクラッシュすることがあります。 たとえば、390 の生存線と 19,000 のメッセージを含むシーケンス図の場合、図ファイルは 85 MB を超えます。

呼び出しの深度を下げたり、不要な名前空間をフィルターで除外したり、プロパティとイベントを削除するなどを行って図のスコープを縮小してください。

参照

処理手順

方法: 成果物からレイヤー図を生成する

参照

UML シーケンス図: リファレンス

概念

既存のコードの視覚化

方法: .NET コードに対する依存関係グラフを生成する

履歴の変更

日付

履歴

理由

2010 年 8 月

ASP.NET Web サイト プロジェクトのシーケンス図を生成するには、Microsoft Visual Studio 2010 Visualization and Modeling Feature Pack が必要です。

カスタマー フィードバック

2011 年 4 月

[他の名前空間] ボックスでは、ワイルドカード (*) 文字はサポートされません。

カスタマー フィードバック