関数や変数の依存関係もグラフィカルに表示
解析ツール「Understand 2.0日本語版」のコード可視化機能を試してみた
テクマトリックスが2009年7月に発表した、ソースコード解析ツールの最新版「Understand 2.0日本語版」。GUIやマニュアルの日本語化以外に、機能の追加や強化が施されている。実際にコード解析機能を検証してみた。
テクマトリックスは2009年7月、ソースコード解析ツール「Understand 2.0 日本語版」(以下、Understand)の販売を開始した。Understandは、米国Scientific Toolworksが開発したソースコード解析ツール。C/C++、C#、Javaなどの言語に対応したソースコード解析を行い、ソースコード内の呼び出しや参照などの依存関係、クラスや制御フローの階層構造といった情報を“グラフィカルビュー”によって可視化する。今回からメニューやボタンなどのGUI部分とヘルプ、マニュアルなどが日本語になった。
以前、著者が使用していた静的解析ツールは、ヘッダファイルが1つないだけで解析ができなかった。その点、Understandは利用可能な情報の範囲内で解析してくれる“堅牢(けんろう)さ”があるといえる。例えば、コーディング途中のソースコードを解析することができ、まだコンパイルが通ってないソースコードでさえ、その構造を明らかにしてくれるので非常に重宝する。今回は、倒立振子用のモーター制御ソフトの解析を行った。
プロジェクト作成
Understandの起動画面で「新規プロジェクト…」をクリックすると、新規プロジェクトウィザードが立ち上がる。
ここでプロジェクト名やワーク用ディレクトリ、開発言語、解析対象ソースファイルを指定すると、解析が可能になる。
解析を実施すると、ヘッダファイルがそろっていない場合は確認が行われる。「このファイルを無視」することで、そろっていなくても解析を進めることができる。
ソースコードの解析
ソースコードの解析が終了すると、Understandを使って解析したソースコード内を調べることが可能になる。
今回は、main関数を見てみることにした。
Understandの画面の左上のフィルタエリアの表示を「Function」、フィルタに「main」を選択すると、フィルタエリアの下の「情報ブラウザ」にmain関数が呼び出している関数や使用しているグローバル変数、定数、main関数を呼び出している関数、さらにライン数やサイクロマティック数などが表示される。
ここではmainを呼び出している関数は「Called By」とラベルされた部分に表示された。この場合は「__entry」関数である。この要素をクリックすると__entry関数のソースコードを見ることができる。この関数はPowerOn時に呼び出される関数であることが分かる。
Understandでは、ソースコードが表示されるウィンドウはエディタになっていて直接編集することができる。ソースエディタで[Ctrl]キーを押した状態にすると、一時的にブラウズモードになり、クリックしたエンティティの情報を表示したり、そのエンティティの定義部分にジャンプすることができる。
次に、mainが呼び出している関数を見てみよう。情報ブラウザの「Calls」ラベルの所にリストされているが、グラフィカルに表示することもできる。表示方法はさまざまあるが、複数から呼び出されている場合はグラフの方が分かりやすいだろう。mainのソースコードで関数宣言の部分を右クリックして指定する方法が直感的である。
すると以下のようなグラフが表示された。破線で囲まれているのはヘッダファイルやソースコードがないために未解析の関数である。実線で囲まれた解析済み関数はダブルクリックすればそのソースコードを表示することができる。mainから呼び出されてないのは割り込みハンドラなどの関数である。
呼び出し元と呼び出し先の両方を表示したい場合には「バタフライグラフ」を利用するとよいだろう。
また「エンティティエクスプローラ」を使用すると、表形式で呼び出しの階層構造を表示できる。
実際の解析では、表形式で表示する方が便利な場合が多いだろう。エンティティエクスプローラの[オプションの同期]にチェックを入れておくと、情報ブラウザにエンティティエクスプローラで選択したエンティティの情報が自動的に表示される。
さらに、エンティティエクスプローラの右下にあるオプションの[最初の参照に移動]にチェックを入れると、選択したエンティティを呼び出しているソースコードが自動的に表示される。
コールグラフは静的な構造を表しており、関数の呼び出し順や呼び出し回数などのmain関数の振る舞いに関する構造は表していない。振る舞いに関する情報を得たい場合には、コントロールフローを表示させる。
このmain関数のサイクロマティック数は「43」で、少し複雑なフローグラフが生成された。
Understandでは、コールグラフやコントロールフローなどをクリップボードにコピーしたり、JPEGやPNGなどの画像形式で保存したり、Microsoft Office Visioにエクスポートしたりできる。
また、ここで紹介したグラフ以外にも宣言グラフなどがあり、選択したエンティティに応じて利用できる。
アーキテクチャ情報の収集も可能
ソースコードよりも抽象度の高い情報として「アーキテクチャ情報」がある。一般にアーキテクチャ情報は設計時の情報がないと分からないが、ソースコードだけで判断できるものもある。
Understandでは、ビルトインとして3つのアーキテクチャを自動生成できる。ソースファイルが保存されているディレクトリ情報からアーキテクチャを抽出する「Filesystem」、ファイルが更新された時期を利用したアーキテクチャを抽出する「Calendar」、プログラム言語のアーキテクチャを抽出する「Language」の3つである。
アーキテクチャブラウザを開いているときは、画面左下の情報ブラウザには含まれる関数リストなどのファイルレベルの情報が表示される。グラフィカルビューについてもファイルレベルのバタフライグラフを生成することができる。
アーキテクチャブラウザの上位ノードを選択して右ボタンメニューから「メトリクスサマリー」を選択すると、各種メトリクス情報を得ることができる。
ここでは最大サイクロマティック数が「43」なので、main関数が最も複雑度が高いことが分かる。
また、プロジェクトメニューから「プロジェクトレポート」を選択すると、ダイアログボックスが開きリポートを生成することができる。このリポートを見ることで各関数のサイクロマティック数を確認できる。
さらにプロジェクトメニューから「プロジェクトの概要グラフ」を選択すると、各種のランキンググラフを表示できる。これを見るとやはりmain関数が最も複雑で、次がEditMap関数であることが分かる。
また、依存関係ブラウザを利用するとファイル間の関数呼び出しや、変数の参照や書き換えなどの状況を把握することができる。
Understandでは、ビルトインアーキテクチャ以外にもカスタマイズアーキテクチャを作成することもできる。ただし、静的コード解析の範囲を超えて設計リバースやアーキテクチャアセスメントなどの作業が必要になる。
カスタムアーキテクチャの一例としては「staff」がある。staffは担当者別にソースコードを分類した際に活用できるアーキテクチャだ。
カスタムアーキテクチャの作成には、アーキテクチャウィザードを利用する。アーキテクチャウィザードは、アーキテクチャメニューから「カスタムアーキテクチャの作成」を選択すると起動される。
今回は「Dynamic」アーキテクチャを作成して、割り込み状態動作と通常状態動作を分けることにした。main関数のコールグラフから、main関数が呼び出している関数を含んだファイルを通常にアサインする。
この作業が一通り済んだら、マップされていないエンティティを表示して残ったファイルを割り込みにアサインする。
その場合はUnderstandではなく、関数や変数単位でアーキテクチャを解析できる「Lattix」などのツールを利用する必要がある。
Understandで扱うアーキテクチャは厳密なソフトウェアアーキテクチャというよりは、ソースコードを絞り込むフィルタとしての利用価値が高いだろう。例えば、最近変更された割り込み処理などは、CalendarとDynamicアーキテクチャを組み合わせることで、その処理を容易に特定することができる。
Understandの利用メリットとは?
Understandでは、関数・変数レベルからファイルレベル、さらにはアーキテクチャレベルまで抽象度を上げてソースコードを解析することができる。要求仕様や設計仕様を文書化しておくことが基本であるが、実際の開発ではコードの文書化が十分でないことが多い。そうした場合、このツールは非常に強力なサポート機能を提供してくれるだろう。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
新着ホワイトペーパー PR
-
製品資料
[株式会社MatrixFlow] 「物流リソース最適化」ガイド:人員・配車・傭車を出庫依頼の確定前に決めきる -
製品資料
[株式会社キーエンス] なぜRPA導入は頓挫する? シナリオ作成の壁を乗り越える解決策とは -
製品資料
[株式会社セールスフォース・ジャパン] 「CRMは設計と無関係」は本当か? PLMとの融合で実現する高速開発 -
事例
[日本ヒューレット・パッカード合同会社] AIエージェントの時代にどう備える? 「新たな働き手」を支える3要素とは -
製品資料
[日本ヒューレット・パッカード合同会社] “横並びの自動化”から脱却、AI活用で生産性と競争力を高める秘訣
こんなメディアも見られています
TechTargetジャパンに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
ベンダーコンテンツ PR
From Informa TechTarget
SpecialPR
アクセスランキング
-
1
法務と開発者で「言葉が通じない」問題 トヨタやソニーが語るOSS管理の真実
-
2
なぜ「全社配布Copilot」は使われないのか? 失敗に学ぶAI定着
-
3
なぜ「Gemini 4 Argon」は出遅れたのか? Googleが狙う“逆転のシナリオ”
-
4
ChatGPTは“検索しまくり”でGeminiは“淡泊”? データが明かすAIの裏側
-
5
損保ジャパンはなぜ「COBOL」を捨てなかったのか? 脱メインフレームの真相
-
6
情シスの約8割が転職や退職を意識 調査で分かった“辞めたくなる最大の理由”
-
7
「結局使わなくなる」Microsoft 365 Copilotを半年で定着 キリンの3施策
-
8
「Wi-Fi 7」経由でWindowsが乗っ取られる? 最高権限奪取の恐怖
-
9
「中堅・中小企業のネットワーク・セキュリティ運用実態」に関するアンケート
-
10
情報漏えいはなぜ繰り返されるのか 今すぐ見直すべき「境界」
ホワイトペーパーランキング PR
-
1
不審メールの経路や見せ方に変化? 2026年夏の3事例から見えた動向と対処方法
-
2
家庭用Wi-Fiルーターの業務利用は危険? 避けるべき理由と具体的な対策
-
3
Microsoft 365を安全に運用 うっかりミスやサイバー攻撃に備えるデータ保護術
-
4
財務部門がAIを最大限に活用する方法 無駄のない戦略的リーダーシップへの道
-
5
LLMが兵器化? 元FBI高官が鳴らす警鐘とセキュリティツール統合のポイント
-
6
「オンプレミス回帰」せざるを得ない“合理的な理由”
-
7
なぜRPA導入は頓挫する? シナリオ作成の壁を乗り越える解決策とは
-
8
生成AIを開発に導入しても効果が見えない? 実証実験で分かった成果と課題
-
9
経産省DX指針から読み解く、受発注業務デジタル化ロードマップ
-
10
HDDを使わない「SSDオンリー」が無謀なのはなぜ?
TechTargetジャパン SNS
インフォメーション
注目情報をチェック
TechTargetジャパンをフォロー