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

クエリ

[グラフ] ウィンドウのクエリ機能は、Imagix 4D における第4の「特質」を提供します。この機能を活用することによって、直面している課題に関する情報を明瞭かつ簡潔に表すグラフを作成することができます。また、時間の経過とともに課題が変化する場合には、迅速にグラフを変更することが可能です。

クエリに関わる作業は、大きく2つに分けられます。関心のあるシンボルの識別、ならびに [グラフ] ウィンドウに表示される関連情報の絞り込みです。状況によっては、単にグラフ内の特定のシンボルや一連のシンボルを検出するために、識別操作を利用することができます。あるいは、現在、表示されているシンボルの中で、ある一定の基準を満たすものを確認するため、簡単なクエリを実行することも可能です。しかし多くの場合は、複数の段階からなるクエリの最初のステップとして識別を行い、グラフを修正するベースとして、その識別結果を利用します。

識別操作には [選択][要素を追跡] の2種類の機能が用意されています。[選択] 機能は、シンボル自体の特性を基にシンボルを識別し、一方 [要素を追跡] 機能は、現在選択されているシンボルに対する関係をベースに、新しいシンボルを識別します。

絞り込みは [フィルタ] および [グループ] 機能を用いて実行します。[フィルタ] 機能は、データベースに存在するシンボルの一部を非表示にすることにより、ビューを簡素化することが可能です。これとは反対に、必要な情報がグラフにすべて反映されていない場合には、非表示の情報を再度ディスプレイに追加することもできます。

[シーケンス図] ビューならびに [UML 図] ビューには提供されていない [グループ] 機能を使用すると、一連のシンボルを1つのグループシンボルにまとめることによって、情報を簡略化することが可能です。そのグループとは別にまとめられたシンボルの関係を確認することもできます。

[フィルタ] および [グループ] 機能では、プロジェクトの現在のデータベースに格納されている情報から、簡素化されたグラフを作成することができます。プロジェクトそのものから組み込まれたり、除外されたりするデータソースを管理することによって、普遍的で永続的な結果を得ることが可能です。

Imagix 4D のクエリ機能はきわめて柔軟で広範囲に及ぶため、まだこのツールに使い慣れていないうちは、その操作性に難しさを感じることがあるかもしれません。マウスを数回クリックするだけで一般的なクエリを速やかに実行する際には、[解析] 機能を使用することができます。これはシンボルに固有の機能で、マウスの右クリック・ポップアップメニューから利用することが可能です。

選択機能

[選択] 機能は、一定の基準を満たすシンボルを識別し、これにより [グラフ] ウィンドウでハイライト表示される対象を制御します。

この機能は、[グラフ] ウィンドウの全選択をクリア([なし])、または、すべてを選択([すべて])する単純な操作から、きわめて高度な検索機能まで、その利用方法は多岐にわたります。また [検索] 機能では、特定の属性を持つシンボルを識別することが可能です。

一部の機能は、現在グラフに表示されている場所に基づいて、シンボルを識別します。[ルート] 機能はグラフの最上位階層にあるシンボルを特定し、対照的に [リーフ] 機能では、最下位階層にあるシンボルを検出します。[ルート/リーフ] 機能は、ルートにして同時にリーフでもあるシンボル、つまり浮動性を有するシンボルを発見するのです。

どの時点であっても [保存] を選択することにより、現在選択されているシンボルのリストを保存することができます。また、[復元] 機能を用いてこのリストをリストアすると、そのリスト上に存在し、まだ表示されているシンボルがすべて、再び選択された状態となります。

シンボルを選択すると、アクティブになっている [グラフ] ウィンドウに黄色でハイライト表示されます。同時にアクティブとなる [グラフ] ウィンドウは1画面のみです。非アクティブの [グラフ] ウィンドウで選択されたシンボルは白で表示されます。

検索機能

[検索] 機能では、[検索] ダイアログで指定された基準を満たすシンボルが、アクティブな [グラフ] ウィンドウでハイライト表示されます。この際、[グラフ] ウィンドウのコンテンツに変更は生じません。

この機能では、シンボルの属性に基づくシンボルの検索が可能です。Imagix 4D は、シンボルおよび関係の情報を収集するときに、個々のシンボルについて数多くの属性情報を取得します。これらの属性は、名前や型などシンボルの基本的な情報から、シンボルのファイルの場所や、そのファイルが最後に更新された日付など、比較的に重要度の低い特性に至るまで多種多様です。

繰り返しになりますが、[検索] 機能はその属性をベースにシンボルを検索することが可能です。本機能は、指定した基準に一致する属性を持つ、現在表示されているシンボルをすべて検出します。数多くの属性を検索することが可能であり、名前など一部の属性については、glob スタイルの展開(* を使用)を利用することができます。

また、検索したシンボル型のコンテナに当たるシンボル、あるいは検索したシンボル型をコンテナとするシンボルも確認することが可能です。例えば、[ファイル呼び出し] などのファイルレベルの [構造] ビューで foo という関数を検索するとします。このようなケースでは、関数 foo の定義が記述されたファイルがすでに表示されている場合に限り、グラフ上でハイライト表示されます。

[要素を追跡] 機能

シンボル間の関係には、すべて方向性があります。例えば、関数が変数に値を代入するときに生じる設定の関係は、関数から変数への方向性を持ちます。[グラフ] ウィンドウでは、この方向性が矢印で示されます。

これらの関係を目で追っていると時間を取られ、込み入ったグラフの場合には、目でたどること自体がきわめて難しくなります。[要素を追跡] の機能は、この目で追う作業を自動化するのです。

[ステップ] ならびに [完全] 機能は、こうした関係を選択されているシンボルの中へ(Up)、または外へ(Down)とたどります。[ステップ] 機能は隣接するシンボルまでたどり、一方 [完全] 機能はルートまたはリーフに到達するまで、再帰的に上へ下へと追跡します。[ユニーク] 機能は、選択された単一のシンボルの中あるいは外へと、関係を追跡します。また、この機能は隣接のシンボルまで再帰的に関係をたどりますが、隣接するシンボルのうち選択されていないシンボルからも到達できるものは、追跡の対象外とします。

[共通要素] および [相違要素] 機能は、2つ以上のシンボルが選択されている場合に使用します。[共通要素] 機能は、選択されているシンボルすべてに共通する祖先(Up)または子孫(Down)を検索します。これに対して [相違要素] 機能は、選択されているシンボルすべてではなく、その一部に存在する祖先または子孫を選択します。これらの機能の使用例としては、2つのサブシステムに対するエントリ関数を選択の上、[共通要素を下に検索] を適用し、この両サブシステムで共有される変数を調べる、といったケースが考えられます。

これらの [要素を追跡] 機能は、すでに [グラフ] ウィンドウに表示されているシンボルの関係を追跡します。まだグラフに表示されていないシンボルの階層を調べるには、[追加] 関数を使用してください。

グループ分け機能

ソフトウェアを調べている際、[グラフ] ウィンドウが複雑すぎるために、すぐに理解することが難しいケースが多々あります。通常そのような場合には、[フィルタ] 機能を用いて特定のシンボルとその関係をウィンドウから完全に削除することにより、グラフを簡略化します。しかし状況により、数多くのシンボルに関する情報を完全に消去せずに、それらをまとめて要約するスタイルが適しているケースがあます。これを実現するのが、この [グループ] 機能です。ただし、[グラフ] ウィンドウで [シーケンス図] または [UML 図] ビューが表示されていると [グループ] 機能は利用できません。

一連のシンボルをグループ化するためには、その各シンボルの集合体の外部表示として動作する、新しいシンボルを作成します。アクティブな [グラフ] ウィンドウおよび、[プロジェクトパネル] 内の関連する [グラフシンボル] タブでは、グループ化されたシンボルは個別に表示されなくなります。グループ内のシンボルの関係も同様です。その代わりに、グループ全体を表現する、1つのシンボルが表示されます。さらに、グループ化されたシンボルと、表示されているグループ外のシンボルとの関係を確認することも可能です。これにより、グループ外部のインターフェイスを調べることができます。

[グループ定義] 機能を使用し、グループの作成と削除を行います。個々のグループメンバを、グループに追加したりグループから削除したりすることが可能です。これらのグループはプロジェクト全体に適用されるため、主なメニューバーの [プロジェクト] メニューから [グループ定義] ダイアログを開くことができます。しかし通常は、[グラフ] ウィンドウのローカル・メニューバーにある [グループ] メニューを使用して、[グループ定義] ダイアログを開きます。

グループの自動定義によって、ファイルとクラスをシミュレートする機能も提供されています。[ファイルインデックス] や [クラスインデックス] の右クリックメニューに、[メンバのグループを作成] という項目があります。これを選択すると、あるファイルもしくはクラスの関数メンバと変数メンバをすべて持つグループが作成されます。さらに [関数呼び出し] ビューでこれらのグループを使用することにより、ファイルとクラスに対するパッケージ化およびカプセル化の方法を理解し、評価することが可能です。

グループはプロジェクト全体に対して定義されるため、[グループをアクティブ化] 機能を使用して特定の [グラフ] ウィンドウごとに、グループをアクティブにするか否かを制御することができます。多くの場合において、この機能は特定の [グラフ] ウィンドウのローカルメニューバーにある [グループ] メニューから、[グループをアクティブ化] ダイアログを起動し制御します。また、ここでも、以前に自動定義されたファイルとクラスのメンバグループをアクティブ化する場合に、[ファイルインデックス] および [クラスインデックス] の右クリックメニューを使用することが可能です。

[選択]、[要素を追跡]、[フィルタ] 機能はすべて、グループでも継続して有効となります。これらの機能はグループ全体に対して適用されます。例えば、[検索] を実行し、あるグループ内のある1つのシンボルが特定された場合には、そのグループ全体が選択 / ハイライト表示されるのです。

[グループ] 機能を用いるケースは、多岐にわたります。高いレベルでアーキテクチャを調べることを目的に、ソフトウェアをサブシステムあるいは開発者ごとに区分する、長期的なグループを作成することができます。グループ化を What-if 解析の1つの手段として利用し、あるファイルから別のファイルへプログラム要素を移動させたときの影響をシミュレートする、そのようなグループを作ることも可能です。この他にも、既存の C ソフトウェアをオブジェクト化する際には、どのシンボルをどのクラスにまとめるかを判断するために、グループをカプセル化のモデルとして利用する手法があります。

[フィルタ] 機能

ソフトウェアの構造をビジュアル化すると、現在、非表示のシンボルの追加や、これとは逆に表示されている無関係のシンボルの削除が必要となることがあります。このような場合に、[グラフ] ウィンドウに表示するシンボルを制御するのが [フィルタ] 機能です。

[フィルタ] 機能を使用することによって、非表示のシンボルやその関係を追加し、再度 [グラフ] ウィンドウに表示することができます。その1つに、他のディスプレイ・ウィンドウにおいて手動でシンボルを選択の上、Add Selected 機能を利用し、それらをグラフに追加する方法があります。[追加] 機能は自動化されたダイアログ・ベースの方法であり、シンボルの属性および関係に関するデータベースの情報を活用することで、追加される情報を制御します。[すべてを復元] 機能はアクティブなビューにおいて、表示可能なシンボル型を問わずに、非表示のシンボルをすべて追加します。この方法は余分な情報まで追加されることがあるため、慎重な操作が求められます。

[分離] や [非表示] は、グラフからシンボルを削除する機能です。[全てを隠す] 機能はグラフを完全にクリアし、また [ライブラリを隠す] 機能はグラフからライブラリ関数を削除しますが、[選択項目を分離] および [選択項目を隠す] 機能は、現在選択されているシンボルに基づき、シンボルを消去します。この操作では、まず [選択] または [要素を追跡] 機能を使い、特定のシンボルを選択 / ハイライト表示します。そして、指定のシンボルを削除するか保持するかにより、[選択項目を隠す] または [選択項目を分離] 機能を実行します。

想定以上にシンボルの追加や削除を行った場合、[元に戻す] 機能(ローカルメニューの [編集] > [元に戻す])を用いて実行内容をある程度、元に戻すことができます。もしくは別の [フィルタ] 機能を利用し、さらにグラフを修正することも可能です。

追加機能

[グラフ] ウィンドウでソフトウェアの構造を調査している際に、現在表示されているシンボルに特定のシンボルを追加してビューを実行することができます。[追加] 機能を活用することによって、シンボルの属性や関係に関する情報を利用し、グラフに指定のシンボルを追加することを実現します。

また、現在表示されているシンボルに対する階層的な関係を利用し、グラフへの追加を調整することが可能です。これを実行するには、まずアクティブなグラフ上にあるシンボルを選択します。次に [追加] ダイアログで [ステップ] / [全体を上に検索] / down のいずれかを用いて、選択したシンボルに対して追加が必要な新しいシンボルの関係を記述します。

さらに [追加] 機能では、シンボルをその属性に基づいて追加することができます。Imagix 4D は、ソースコードからシンボルや関係の情報を収集するときに、個々のシンボルに関するさまざまな属性の情報も取得します。これらの属性は、名前や型などシンボルの基本的な情報から、シンボルのファイルの場所や、そのファイルが最後に更新された日付など、比較的に重要度の低い特性に至るまで多種多様です。

[追加] 機能は、これらの属性に基づいてシンボルをフィルタリングすることが可能です。本機能は、指定した基準に一致する属性を持つシンボルを、すべて特定します。また、名前など一部の属性については、glob スタイルの展開(* を使用)を利用することができます。

検索したシンボル型のコンテナに当たるシンボル、あるいは検索したシンボル型をコンテナとするシンボルも追加することが可能です。例えば、関数だけが表示されるよう [グラフ] ウィンドウを設定している場合に、bar というクラスを検索するとします。検索の結果、クラス bar のクライアント・メンバに当たる関数がすべて、グラフへ追加されることになります。これとは反対に、ファイルレベルのビューで foo という関数を検索したときは、関数 foo の定義が記述されたファイルが、グラフに追加されます。

解析機能

[グラフ] ウィンドウで使用可能なクエリ機能は、きわめて柔軟で広範囲に及ぶため、まだ Imagix 4D に慣れなれていないうちは、その操作性に難しさを感じることがあるかもしれません。このようなケースに、マウスを数回クリックするだけで一般的なクエリを速やかに実行するサポートとして、[解析] 機能を使用することができます。