ドキュメント作成ツールを選定するにあたり、まず第一にオープンソースのツールと有償ツールのどちらを使うかがテーマとなります。オープンソースのツールで代表的なものとしては、Doxygenがもっともよく挙げられます。
今回の記事では、Doxygenと有償ツールであるUnderstandとの違いと、どちらを選ぶべきか、という点について紹介したいと思います。
Understandとは
Understandとは、ソースコードを高速解析し、プログラムの制御フローや構造、 クラス継承、関数や変数の呼び出し関係といった要素間の関係を、グラフィカルに可視化するツールです。不毛なソースコードリーディングから開発者を解放することができます。構造の可視化をするツールですが、Understand APIを利用したPythonまたはPerlスクリプトを作成することで、豊富な解析データを利用してドキュメントを生成することもできます。
Doxygenとは
Doxygenは、ソースコードからHTML, LaTexなどの形式のドキュメントを自動作成するドキュメンテーション・システムです。こちらはフリーソフトとなっています。
今回比較に使用した各ツールのバージョンとプロジェクトはこちらです。
●各ツールのバージョン
– Understand 6.3 build 1139
– Doxygen 1.12.0
●比較用プロジェクト
Understandに付属しているサンプルプロジェクト(Linux Kernel)を利用しました。
– Linux-5.3.1
解析ファイル数:438
総行数:337,162
パフォーマンス比較
Understand、Doxygenいずれも、ソースコードを解析し、その結果を利用してドキュメントの生成、グラフの出力などをおこなっています。解析時間を比較してみました。
なお、DoxygenではグラフをDot形式で出力するオプションがありますので、こちらのオプションのON, OFFで分けて解析しています。
解析時間(分) | |
Understand(Strictモード) | 6 |
Doxygen(グラフ出力なし) | 16 |
Doxygen(グラフ出力あり) | 265 |
解析自体の時間はUnderstandが約3倍の速度で解析していることが分かります。また、Doxygenのグラフ生成にかなりの時間(約4時間半)がかかっていることが分かりました。
Understandは、解析時にはグラフ生成はおこなっておらず、表示時に随時生成しますので、ここではグラフ出力なしのDoxygenと比較しています。
動作環境の比較
動作環境について比較してみました。
Understand 6.3 | Doxygen 1.12.0 | |
対応言語 | C/C++, Objective-C/C++, C#, VB.NET, Java, Python, PHP, HTML, CSS, JavaScript, TypeScript, Ada, Assembly, FORTRAN, JOVIAL, Pascal, PL/M, VHDL | C/C++, C++/CLI, C#, PHP, Java, Fortran, VHDL, SLICE |
動作OS | Windows、Linux、Mac | Windows、Linux、Mac |
Understandは多言語に対応している点が強みと言えます。
設定情報の比較
解析に必要な設定を比較しました。
Understand 6.3 | Doxygen 1.12.0 | |
コンパイラ設定 | 〇 | × |
C言語規格 | 〇 C/C++17まで対応 | × |
インクルードパス | 〇 | 〇 |
マクロ | 〇 | 〇 |
自動設定機能 | 〇 Visual Studioプロジェクトインポート ビルド監視機能などでインクルードパス、 マクロ設定を自動設定 | × |
Understandでは通常手動で設定されるインクルードパスやマクロ情報の設定をインポートする機能が充実しています。
解析情報の比較
実際に解析した結果、どのような情報が出力されるかを比較してみました。
解析情報
Understand 6.3 | Doxygen 1.12.0 | |
ファイル情報 | ファイル名、パス、クラス、構造体、 関数、グローバル変数、インクルード | ファイル名、パス、クラス、構造体、 関数、グローバル変数、インクルード |
クラス・構造体情報 | 定義元ファイル名、型、 メンバー情報、参照情報 | 定義元ファイル名、型、 メンバー情報、参照情報 |
関数情報 | 定義元ファイル名、戻り値、引数、 ローカル変数、参照情報 | 定義元ファイル名、戻り値、引数、 参照情報 |
グローバル変数情報 | 定義元ファイル名、 型、参照情報 | 定義元ファイル名、 型、参照情報 |
基本的な情報はどちらも持っているようです。関数情報に関してはUnderstandがローカル変数の情報を持っている点が異なりました。
グラフ情報
Understand 6.3 | Doxygen 1.12.0 | |
関数呼び出し | 〇 | 〇 |
相互表示 (Call + Called by) | 〇 | × |
クラス階層 | 〇 | 〇 |
シーケンス図 | 〇 | × |
変数参照 | 〇 | × |
関数フロー図 | 〇 | × |
共有変数 | 〇 制御関数のみ (セマフォ、ミューテックス未対応) | × |
ツリーマップ | 〇 メトリクス2つを指定 | × |
グラフのフィルタ機能 | 〇 | × |
比較図 | 〇 | × |
代表的なグラフを挙げましたが、Understandではその他にも数多くのグラフに対応しています。
また、 そのグラフの不要部分を非表示にしたり、コード編集後に変更部分のみを再解析をしてすぐにグラフに反映したり、様々な形式(png, jpg, svg, vdx, vsdx, dot)で保存できたりします。
その他機能の比較
その他、機能面での比較をしました。
Understand 6.3 | Doxygen 1.12.0 | |
差分解析 | 〇 編集したファイルのみを再解析する | × |
メトリクス測定 | 〇 100種類以上 | × |
ソースコード表示・ハイライト | 〇 | 〇 |
ソースコード編集 | 〇 | × |
レポート機能 | 〇 コマンドラインで対応 HTML, TXT | 〇 出力結果がレポート HTML, TXT, RTF, LaTexなど |
比較機能 | 〇 プロジェクト間、ファイル間、 Gitのコミット間の比較 | × |
構文チェック機能 | 〇 | × |
コメント機能 (ソースコード外) | 〇 | × |
API機能 | 〇 | × |
テクニカルサポート | 〇 | × |
Understandが多機能なツールであることが分かります。Doxygenはやはりドキュメント生成ツールというだけあって、レポートの出力形式の機能が充実しています。
テクニカルサポートについて
Doxygenはフリーソフトのため、利用者自身で使い方などを学習する必要があります。
一方で、Understandはユーザーズガイドやコマンドラインガイド、プロジェクト作成・運用ガイドなどのドキュメントが充実しています。ツール販売元であるテクマトリックス社主催のハンズオンセミナーや活用セミナー、保守更新期限内であれば無制限のメールによるテクニカルサポートなどの体制も整っています。
まとめ
どちらも同じ静的解析ツールですが、目的が異なるため、強みも異なっています。レポート出力をLaTexなど多岐の形式で出力したい、フリーソフトに拘りたいのであればDoxygen、それ以外であれば、多機能なUnderstandがよさそうです。