コード分析

<< 目次を表示 >>

ページ位置:  Enterprise Architectの拡張(SDK) >

コード分析

 

コード分析機能は、ソースコードを日常的に扱う人に有用な機能です。

 

この機能は、ソースコード情報を保持するデータベースに対して非常に複雑なクエリを、ローカルまたはProクラウドサーバ上で高速に実行できます。クエリーは、Sparx Systemが開発した高レベルの言語を使用して構成されます。この言語は、簡単に習得できる小さいながらも強力な語彙を使用しており、コードに関する情報を従来の方法よりも高速に照会できます。

 

 

利用手順:

リボン

コード > ソースコード > コード解析

 

 

コード分析のメニュー

ウィンドウの左上にあるアイコンをクリックすると、コード解析のメニューが表示されます。

 

 

このメニューには、使用するコード分析データベースの選択・コード分析データベースの更新・編集用のクエリファイルの参照など、コード分析の使用に関連するさまざまなコマンドが用意されています。

 

次の表では、各メニュー項目について説明します。

 

項目

説明

履歴

サービスやローカルデータベースファイルへの最近の接続のリストを提供するサブメニューを表示します。

データベースの参照

マシン上のコード分析データベースを参照できます。

サービスに接続

ダイアログを表示し、コード分析データベースサービスの接続詳細を指定します。

既定で解析

この項目を選択すると、コード分析機能の起動時に、アクティブな動作解析の設定で指定されているコード分析サービスに自動的に接続されます。

データベースの作成

ファイルシステム内のソースコードリポジトリからコード分析データベースを作成できます。

データベースの更新

既存のコード分析データベースのインクリメンタルアップデートを実行し、ソースコードファイルの最近の変更をデータベースに反映します。

閉じる/接続解除

コード分析のライブラリまたはサービスを終了または切断します。

クエリファイルを開く

ファイルシステムからmFQLクエリファイルを選択できます。

クエリファイルを保存

現在のmFQLクエリを名前を付けてファイルに保存できます。

クエリの実行

クエリ全体、またはクエリエディタに入力されたクエリの内容を選択して実行します。

ショートカット: F6

 

 

コード分析の利用前の設定

コード分析機能を使用する前に、まずコード分析データベースを作成するか、コード分析機能が利用できる既存のデータベースを探す必要があります。コード分析データベースの作成については、このページでまとめていますが、詳細はヘルプの「コード分析データベースの作成」のページを参照してください。

 

使用するライブラリの場所に応じて、次のいずれかを行う必要があります。

 

 

これらの手順を完了すると、コード分析機能でクエリを作成・実行する準備が整います。

 

 

コード分析データベースの作成

コード分析のデータベースは、ソースコードのリポジトリから構築されます。このプロセスは、コードのコンパイルと同様に、ソースコードの言語文法を使用して個々のファイルを分析します。

 

ビルドには、フルビルドとインクリメンタルビルドの2種類があります。 最初のフルビルドには時間がかかるかもしれませんが、その後のインクリメンタルビルドは短時間で完了します。

 

 

 

単一のディレクトリを指定する

コンパイルしたいソースコードのルートとして、1つのディレクトリを選択することができます。サブディレクトリを含めるかどうかを選択できます。

 

 

複数のディレクトリを指定する

複数のプロジェクトを使用したいが、すべてのプロジェクトが1つのディレクトリの下にあるわけではない、という場合があります。このような場合には、取り込みたい各ディレクトリのフルパスを記載したテキストファイルを作成し、そのテキストファイルをソースの欄に指定します。各ディレクトリのパスは1行にまとめてください。

 

c:\myprojects\project1\tools\scintilla

c:\myprojects\project2\src

d:\mylibs\lib1\src

 

あるディレクトリ内のサブディレクトリを再帰的に処理したい場合は、パスの前に!マークを付けます。

 

!d:\mylibs\lib1\src

 

#文字で始まる行はすべてコメントとして扱われます。

 

# include scintilla

c:\myprojects\project1\tools\scintilla

 

 

言語

この欄では、このコード分析データベースが構築されるソースコードで使用される言語を指定します。

利用可能な言語は次のとおりです: C++・C#・Java・XML・MDGTechnology・Custom

 

 

マクロリスト

言語が「C++」の場合、「マクロリスト」の欄が表示されます。 C++では、データベースに格納される情報の精度は、マクロの適切な解釈と密接に関連しています。この欄では、コンパイル時に補助的な文法情報として使用されるnBNFマクロファイルを選択できます。

 

デフォルトでは、Enterprise Architectのインストールフォルダにあるマクロファイルを利用します。 このファイルの内容は、コンパイル時のログファイルで報告されたエラーを修正する場合など、必要に応じて自由に変更・拡張することができます。

 

 

文法

Enterprise Architectでは、ドロップダウン選択リストに記載されている言語(C++・C#・Java・XML・MDGTechnology)の文法データを提供しています。 これらの言語には、組み込みの文法ファイルが使用されます。

 

また、「カスタム」言語を選択するオプションもあります。 カスタムを選択すると、文法の欄が表示されます。 この欄では、カスタム言語の文法を含むファイルを指定します。 コード分析機能は、その文法を使って、その言語で書かれたソースコードを解析します。

 

カスタム言語を開発する場合には、その言語の文法ルールを指定し、nBNFファイルに保存する必要があります。 Enterprise Architectの文法エディタは、この目的のために設計されています。

 

ヘルプトピックの「文法フレームワーク」では、nBNFの文法の書き方について詳しく説明しています。

 

 

コード分析データベースの更新

時折、コード分析データベースを更新する必要があります。 一般的には、ソースコードに変更を加えたときだけでなく、文法ファイルを更新したり、マクロファイルを拡張したりした後にも必要になります。

 

データベースを更新する手順は、新規にデータベースを作成する場合と似ていますが、ゼロから始めるわけではないので、より迅速に行うことができます。  メニューの「データベースの更新」を選択するだけです。コード分析データベースの更新ダイアログが表示されます。 入力欄には、前回のビルド時の値が入力されます。 コード分析データベースの作成の場合と同様に操作します。

 

 

 

コード分析データベースファイルの選択

コード分析のデータベースに既存のライブラリファイルを使用する場合は、メニューの「データベースの参照」を選択します。 既存の*.cdbファイルを選択することができます。

 

 

サービスに接続する

サービスに接続すると、ダイアログには指定したマシンでホストされているすべてのデータベースが一覧表示されます。

リストの中から個々のデータベースを選択することもできますが、単に「選択」ボタンをクリックすると、サービスに登録されているすべてのデータベースに対してクエリが実行されます。

 

 

 

クエリの実行

コード分析データベースへの接続が完了したら、クエリを実行できます。

 

クエリを実行するには、コード分析タブ内の「クエリ」タブを選択し、クエリを入力してからアイコンをクリックしてクエリを実行します。

 

この例では、node("CLASS")というシンプルなクエリを実行し、コード分析データベースで見つかったすべての'Class'ノードを返しています。

 

 

左下のパネルで結果を選択すると、ソースタブが開き、選択したノードに対応するソースコードが表示されます。 右下のパネルには、そのクラスノードの詳細が表示されます。

 

 

右下のパネルで詳細項目を選択すると、ここに示すようにソースコード内での絞り込みが行われます。

 

 

 

クエリの例

 

次の例は、GetOptionという名前の操作を持つすべてのクラスを対象にします。

   andat( "CLASS", item("OPERATION", "NAME", "GetOption"), node("CLASS"))

 

次の例は、GetOptionという名前の操作を持つすべての操作を対象にします。

   item("OPERATION", "NAME", "GetOption")

 

次の例は、すべてのクラスを対象にします。

   node("CLASS")

 

書式の文法:

   andat( string:rule, set:left, set:right)

 

'andat'は、操作のセットを(left)として取り、ルール"CLASS"(CLASSの親を持つもののみが対象)に適用します。その後、すべての既知のクラスに含まれるものを取得します。

もし結果が存在すれば、結果セットに操作ノードが追加されます。それ以外の場合には排除されます。

 

 

クエリ言語 - mFQL

コード分析機能で使用されるクエリ言語については、「コード分析言語 (mFQL)」のヘルプトピックで詳しく説明されています。

 

mFQL言語はセットに基づいています。各ステートメントは、いくつかの種類のセット操作を使用して動作します。

 

 

参照: