シーケンス図の生成によるコードの視覚化

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

[!メモ]

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

このトピックの内容

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

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

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

  • 図からのナビゲート

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

  • 他の図との関係

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

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

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

  1. Visual Studio では、メソッド定義を含むコード ファイルを開きます。

  2. メソッド定義のショートカット メニューがすべての場所で開き、 シーケンス ダイアグラムの生成を選択します。

    [シーケンス ダイアグラムの生成] ダイアログ ボックス

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

    たとえば、第 1 レベルの呼び出しのみを表示する場合は、呼び出しの最大の深さのレベルを 1 にします。

    [!メモ]

    シーケンス図には、第 2 レベルの呼び出しが、ターゲットの生存線を持たないメッセージ (消失メッセージ) として表示されます。図を生成した後に、特定の消失メッセージを展開できます。消失メッセージの詳細については、 UML シーケンス図: リファレンスを参照してください。

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

    表示する内容

    Choose

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

    現在のプロジェクト

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

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

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

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

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

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

    呼び出しの省略対象

    [Select]

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

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

    System 名前空間

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

    特定の名前空間

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

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

  6. 終了したら、 OKを選択します。

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

    [!メモ]

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

コードに影響を与えないように実行する変更を特定し、伝達するためには、生成されたシーケンス図を調べて、変更します。たとえば、新しい生存線、メッセージ、相互作用使用、フラグメントなどを追加することができます。対応するコードで実行する作業のタスクを作成および追跡するには、作業項目を生成するか、作業項目を図の要素にリンクします。詳細については、「モデル要素と作業項目とのリンク」を参照してください。

重要 : 重要

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

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

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

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

目的

実行する手順

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

ターゲットの生存線を持たない開き、 出力配置を選択します。メッセージのショートカット メニューが。

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

メッセージのショートカット メニューを開き、 シーケンス ダイアグラムの生成を選択します。

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

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

、グループ化する生存線を開き、選択のショートカット メニューのをクリックし、をクリックします 折りたたみを選択します。

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

グループを展開するには、そのためのショートカット メニューを開き、 展開(&&E),展開,の展開を選択します。

要素を削除する

図形のショートカット メニューを開き、 削除を選択します。

レイアウトを調整する

図の空白領域のショートカット メニューを開き、 レイアウトを再配置します。を選択します。

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

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

要素のショートカット メニューを開き、 プロパティを選択します。プロパティ ウィンドウで、[カラー] フィールドを設定します。

図に注釈を付ける

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

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

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

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

目的

実行する手順

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

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

または

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

  1. 次に ツールボックスでは、要素付近の図の 注釈、をクリックします。

  2. 次に ツールボックスで、図の コメント リンクを選択し、コメントを、をクリックして要素を選択します。

生存線を移動する

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

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

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

    または

    各生存線を選択すると、 Ctrl キー 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] に設定します。

図からのナビゲート

目的

実行する手順

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

生存線またはメッセージのショートカット メニューを開き、 定義へ移動を選択します。

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

生存線またはメッセージのショートカット メニューを開き、 アーキテクチャ エクスプローラーに表示されます。を選択します。

詳細については、「依存関係グラフでのコード依存関係の視覚化」を参照してください。

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

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

目的

実行する手順

生存線、メッセージ、または他の要素に新しい作業項目を作成してリンクします。

  • 1 種類のショートカット メニューまたは複数の要素を開き、 作業項目を作成します。をクリックし、作成する作業項目の種類を選択します。

    新しい作業項目はこれを完了できるように開かれます。

作業項目に生存線、メッセージ、または他の要素をリンクします。

  1. 1 種類のショートカット メニューまたは複数の要素を開き、 作業項目にリンクします。を選択します。

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

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

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

1 種類のショートカット メニューまたは複数の要素を開き、 作業項目を選択します。

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

  1. 要素のショートカット メニューを開き、 作業項目の削除を選択します。

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

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

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

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

Ee317485.collapse_all(ja-jp,VS.110).gifコードの精査

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

Ee317485.collapse_all(ja-jp,VS.110).gif図の解釈

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

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

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

Ee317485.collapse_all(ja-jp,VS.110).gif設計の側面に対する注目

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

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

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

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

Ee317485.collapse_all(ja-jp,VS.110).gifデザインの更新

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

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

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

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

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

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

懸案事項

解決策

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

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

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

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

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

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

void ILinkedWorkItemExtension.OnWorkItemCreated( ) {}

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

または

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

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

または

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

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

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

参照

関連項目

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

概念

コードの視覚化および理解

依存関係グラフでのコード依存関係の視覚化

コードからのレイヤー図の作成