2016年11月6日日曜日

Doxygenを使ってみる

仕事で長年維持してきたプログラム(C++です)を久しぶりに大改造する機会ができそうなので、ちょっとリバースしたくなりました。(昔つくったもので、ドキュメントがほとんどない!しかも、その時々で人が変わって手をいれてきたので、かなり怪しい構造になってきている可能性があり、維持性に問題がでてきています。

真っ先に確認したいのが、誰からもCallされなくなった関数のチェックです。こういうのが残っていると、後から維持に携わる人も、うっかり触れなくなってしまい余分な手間が増えるだけです。
まあ、この手の機能は静的解析ツールなら大抵は持っていますが、Doxygenでやってみることにしました。(個人的に使ったことはなかったんですよね)

windowsのバイナリをDLするのが簡単そうなんですが、とりあえず慣れているLinuxでやってみます。(調べたら、macでもbrewコマンドでできそうです)

Ubuntuなら、apt-getで簡単にインストールできます。

$ sudo apt-get install doxygen doxygen-gui graphviz

doxygenが本体のパッケージ、doxygen-guiはGUIのユーザーインターフェース、graphvizはコーリングリストのツリーを図で生成するのに必要なパッケージになります。

インストールが終わったら、以下のコマンドで起動。


$ doxywizard


Step1の動作領域がよくわかりませんが、何らかの作業用ファイルを作るエリアなんでしょう。(注:これは設定ファイル:Doxyfileをここに置きます)Project nameとかは適当に入力して、解析したいプログラムのフォルダと、生成したドキュメントを格納するフォルダだけはきちんと入力します。


ここの設定で、コーリングリストを生成してくれます。(これが今回の目的)デフォルトはオフなので注意。
あとは、その他のオプションを設定して、runするだけです。

大層なGUIがついていますが、やってることはDoxyfileの設定をしているだけなので、必要な設定だけテキストエディタで手動でできるなら、そちらのほうが早いかも。以下に、設定ファイルで設定したほうがいい主な項目を挙げておきます。


option
default
description
PROJECT_NAME
"My Project"
クラス図を作成したいプロジェクトの名前
EXTRACT_PRIVATE
NO
privateなメンバ変数・メンバ関数も出力する
EXTRACT_STATIC
NO
staticなメンバ変数・メンバ関数も出力する
EXTRACT_ANON_NSPACES
NO
匿名の名前空間についても出力する
RECURSIVE
NO
ソースコードを再帰的に検索する
HAVE_DOT
NO
YESに設定するとgraphvizなどの描画ツールを使用してクラス図を出力する
DOT_NUM_THREAD
0
スレッド数
CALL_GRAPH
NO
関数やメソッドを呼び出す側の依存関係を描画する
CALLER_GRAPH
NO
関数やメソッドを呼び出される側の依存関係を描画する

面倒くさい人は、解析したプログラムのソースコードのルートに設定ファイルを以下のコマンドで作り、

$ doxygen -g

できたDoxyfileの上記項目を好みで設定して、

$ doxygen

と実行してやれば、解析結果が出力されます。


0 件のコメント:

コメントを投稿