• Imagix 4D ユーザガイド
  • 目次

構造ビュー

[構造] ビューは、高レベルのアーキテクチャから、ビルド、手続き、データ、およびクラス依存関係の詳細に至るまで、あらゆるレベルにおけるソフトウェアの体系的な調査を可能にします。

Imagix 4D データベースに格納されるデータは、特定のソフトウェア・プロジェクトを問わず、膨大な量となる可能性があります。グラフィカル解析では、現在、調査対象となっている特定の情報に重点を置き [グラフ] ウィンドウに表示します。その中でも第一にあげられるのは [ビュー] メカニズムでです。これによって [グラフ] ウィンドウに表示するシンボルおよび関係の型を調整することができます。[構造] ビューにおいては、表示する関係型を指定することができ、幅が広くきわめて粒度の細かい一連のシンボル型を選択することが可能です。

また関数の複雑度や、テストケースがコードをどの程度完全に実行したかなど、ソフトウェアの定量的な特性を調べることもできます。ソフトウェア・メトリクスの情報は、各シンボルに関連付けられたメトリクス値を示すよう、色分して [グラフ] ウィンドウに表示することが可能です。これにくわえて、特定の [フローチェック] レポートによって識別された関数を表すために、色分け表示することもできます。

グラフの外観ならびにレイアウトは、[グラフ] ウィンドウの下にあるチェックボックスで調整します。範囲と方向の設定を調整することで、現在のグラフ内のコンテンツを、より見やすくすることが可能です。また、レイアウトおよび起点の設定では、グラフ上のシンボルの相対的な位置関係を変更することができます。これらの設定は、グラフに表現された固有の構造や依存関係をいかに素早く完全に理解し得るのか、という点に影響を及ぼします。

ビューの範囲

Imagix 4D データベースには、ソフトウェアに内在するさまざまなシンボル、ならびにそれらの相互関係に関する情報が格納されます。シンボルとは、ソフトウェアのオブジェクトあるいは要素を指します。例えば、ヘッダファイル、クラス、マクロなどがこれに相当します。また関係とは、ある関数から別の関数への呼び出し、あるいは宣言の中でデータ型を使用する変数など、方向を示すことで2つのシンボル間における関係性を表すものです。

全体的に見て、Imagix 4D によって収集されるシンボルおよび関係の情報は、ソフトウェアの多種多様な側面をカバーします。この側面が意味するところは、ファイル間におけるインクルードの依存関係から、別のクラスからあるクラスへの派生、設定されたり読み取られたりする変数に至るまで多岐にわたります。

[構造] ビューを用いることで、これらすべての情報をビューすることができます。ビューメカニズムでは、ソフトウェアの特定の側面における解析を有用にすることを目的に、[グラフ] ウィンドウでビューを可能とする特定のシンボルおよび関係型を設定することが可能です。

通常は、[ビュー] メニューにリストされた構造ビューの1つを選択します。プロジェクト内に存在するシンボルの型によりますが、メニューには最大10件までの構造ビューがリスト表示されます。事前に定義されたシンボル型と関係型の組み合わせを用いることで、一般的に調査の対象となるソフトウェアの多くの構造的な側面を調べることが可能です。 例えば、[変数付き関数呼び出し] ビューでは、ソフトウェアにおける関数の呼び出し階層を調べることができ、それと同時に、それらの関数の中でグローバル変数および静的変数の使用方法を確認することができます。

事前に定義されているもの以外に、解析の対象となるシンボル型と関係型の組み合わせが存在することがあります。より多くの選択肢の中から、さらに詳細な設定を確認する機能が、 [ビュー] > [他...] メニュー項目の [ビュー設定] ダイアログに用意されています。この機能を利用し、ビューできるシンボルと関係の組み合わせを追加指定することが可能です。特定の関係型は特定のシンボル型だけに適用されるため、一方を変更するともう一方に影響を与えます。

例えば変数(variables)のチェックを外すと設定されたり読み取られたりするビュー可能なシンボルがなくなるため、関数から変数に対する設定および読み取りの関係も、グラフから消去されるのです。また [ビュー設定] では、表示される関係を意図的に制限する必要性が生じる場合があります。すなわち、ある関数によって設定される変数はすべて表示し、ある関数によって読み取られる変数を非表示にするようなケースです。表示する関係を調整することは、現在のグラフのレイアウトのみならず、[追加] 関数から関係クエリを実行した際に追加されるシンボルにも影響を及ぼします。

頻繁に使用する特定のシンボル型と関係型の組み合わせがある場合には、[ビュー設定] にある [保存] 機能を使用して、該当のビューを既存のビュー定義のリストに追加することが可能です。

グラフの外観

さらにグラフの外観を調整することにより、データを見やすく理解しやすい形で表示することもできます。一例をあげると [グラフ] ウィンドウでシンボルの形状や配置を変えることによって、調査対象のコードに内在する構造ならびに依存関係の理解を向上するよう、ディスプレイを最適化することが可能です。

[グラフ] ウィンドウの下部にあるメニューボタンから、ディスプレイに表示するシンボルの基本的な外観を選択することができます。[チャート] スタイル([チャート] および [2Dチャート])で表示される各シンボルには、大きい図形が使用されます。また、シンボルの名前は読みやすい形で、その図形の内側に表示されるのです。さらにグラフを操作するためのアイコンも、図形ごとに用意されています。各図形の上下(横並びに表示される場合は左右)にある矢印をクリックすることにより、クリックしたシンボルに対する入出力の関係を全シンボルに追加するようグラフを拡張することが可能です。また図形の右上には x 印がありますので、当該シンボルをグラフ上で非表示にしたい場合には、これをクリックします。表示内容を整理するには、[ファイル] > [オプション] ダイアログから適時アイコンの表示をオフにしてください。

一方 [グラフ] スタイル(グラフ ならびに 2Dグラフ)では、[グラフ] ウィンドウと比べて各シンボルの表示には小さい図形が使用されます。名前は図形の中ではなく、その横に表示され、シンボルのレイアウトをより見やすくするために、未選択のシンボルの名前は非表示することも可能です。

これら2つのディスプレイ・スタイルに大きな違いはなく、唯一その外観だけが異なり、常にいずれかのディスプレイを使用することができます。チャートディスプレイは、関連する実際のシンボルと依存関係の調査に最も適しており、対照的にグラフディスプレイは表示可能なシンボル間における依存関係の構造の理解に、きわめて有用であることが分かると思います。

同様に [垂直] チェックボックスは、論理的なレイアウトを変更することなく、グラフの外観のみを変えることができます。このチェックボックスは、グラフを上から下への(縦<垂直>の)流れで描画するか、左から右への(横<水平>の)流れで描画するかを設定する項目です。それぞれが理解しやすい表示に設定してください。この他にも、グラフの読み易さや直観的な視認性を改善するために、描画の方向を変更する必要が生じるケースもあります。

グラフのレイアウト

外観にくわえて、レイアウトも調節することが可能です。レイアウトを編集することによって、現在の解析用のレイアウトが向上すると考えるユーザが多いため、簡単に操作できるようメニューボタンとチェックボックスを、[グラフ] ウィンドウの下部に配置しています。

シンボル間の関係には、すべて方向性があります。例えば、関数が変数に値を代入するときに生じる設定の関係においては、関数から変数に対する方向性を持ちます。グラフに表示される、他の表示可能なシンボルから向かってくる関係を持たないシンボルはすべてルート と見なされます。また、表示可能な他のシンボルへ向かう関係を持たないシンボルはすべて、リーフ と見なされるのです。

レイアウト設定により、スタイルの範囲の中において、これらの方向を持つ関係をビジュアル化することができます。最も利用される頻度が高そうなスタイルは [チャート] です。このスタイルでは、シンボルはグラフ上で組織的に配置されます。関係を示す矢印は概して、すべて同じ方向を向くため、縦方向のレイアウトでは、矢印とその関係が表すフローは上から下に向かって表現され、反対に横方向のレイアウトでは、左から右の方向に描画されます。関係するシンボルは多くの場合、関係を示す矢印の長さが最短となるよう、双方に対して近い場所に配置されます。このレイアウトは厳密性には欠けますが、出力されるグラフは多くのケースで、表示されるシンボル間の依存関係全体を限りなく直感的に表しているのです。

対照的に [2Dチャート] スタイルでは、シンボルは整然とした正確な意図を持って配置されます。ノーマル / ルート レイアウトは、ルートシンボルがすべて最上段に表示されます(横並びに表示する場合は左端)。次の行には、単にまだ配置されていないシンボルが表示される場合には、これらのシンボルに対してルートとなるシンボルが配置されます。この処理は、残りすべてのシンボルの位置が選定されるまで繰り返されます。このようにして本レイアウトの出力結果として関係を示す矢印はすべて、上から下の方向に描画されるのです。このレイアウトは、シンボル間における依存関係の構造に関する本質を明らかにします。例えば、ある関数の呼び出し階層をビューしている最中に、関数 X のサブツリーを切り離し、そのサブツリーを調査すると仮定します。ノーマル / ルート レイアウトでは、関数 X に直接呼び出される関数と、それらの関数によって使用されるその他の関数を明確に指摘します。また横方向の矢印はすべて、そのように関係性のあるシンボル間の、再帰呼び出しを示すのです。

コンパクト / ルート レイアウトにおいても同様に、ルートはすべて最上段に配置されます。ただし、その次の行にはルートシンボルに直接的に関連のあるシンボルがすべて表示されるのです。3行目には、2行目のシンボルと直接的な関係があり、最初のルート行とは、直接関係のないすべてのシンボルが示されます。これ以降の処理も同様です。このレイアウトでは、シンボルはよりコンパクトに配置されますが、関係を示す矢印は両方向に向くことがあるのです。特定のシンボルにおいて行の位置(横並びの表示の場合は列の位置)は、それ自体に意味があり、これはあるシンボルとルートシンボルの間にある間接的なステップ数を示します。

[2Dチャート] スタイルに適用可能なレイアウトがもう1つあり、シンボルの描画を最上段(左端)の全ルートから始めるか、最下段(右端)の全 リーフ から始めるかを決定します。このレイアウトは、コンパクト・レイアウトが使用されることで最大限に生かされます。

ルートを基準にした判断が必要となるケースが多くあるかと思います。例えば、ある関数の呼び出し階層をビューしている最中に、関数 X のサブツリーを切り離し、そのサブツリーを調査すると仮定します。ルートレイアウトでは、関数 X に直接呼び出される関数と、それらの関数によって使用されるその他の関数を明確に指摘します。そのような場合でも、リーフレイアウトでの表示が適切となるインスタンスが数多くあるのです。また同じようにある呼び出し階層を確認していても、今度は、ある変数がどのように使われているかを把握する必要があると想定します。このような場合には、コンパクト / リーフ レイアウトのグラフを使用することで、当該変数を直接的に設定したり読み取ったりしている関数や、それらの関数を呼び出している関数を表示することができるのです。

メトリクスとレポート結果

[表示] メニューから、ファイルそれぞれの各関数やコード行におけるサイクロマティック複雑度などのソフトウェア・メトリクスをはじめとした、ソフトウェアの定量的特徴を示す色分け機能を有効にすることができます。

さらにメトリクスを選択する際に、グラフに表示されるシンボル間で関連のある値を色を分けて示すか、ユーザが設定した閾値と比較した各シンボルの値を反映したものを色分け表示するかを、選ぶことも可能です。関連のある値を色分け表示する場合には、グラフの下部に現在の範囲が表示されます。また閾値は、[ファイル] > [オプション] ダイアログから設定することができます。

この他にも [表示] 設定を活用し、所定の [フローチェック] でレポートされた関数を特定することも可能です。特に、さまざまな [タスクフローチェック] によってレポートされた問題を調べるために [グラフ] ウィンドウを使用してソフトウェアを解析するような場合に、タスクで使用されていない関数を特定できれば非常に役立つことがあります。