読者です 読者をやめる 読者になる 読者になる

CCCCについて

 サイクロマティック数などソースコードのメトリクスは、レビューやリファクタリングのとっかかりとしてしばしば有用になるけれど、それらをシンプルかつ手軽に解析する手段の1つとして、前々からCCCC(C and C++ Code Counter)を使っている。最近身近なところで需要がちらほらあったので、今回はCCCCについて簡単にまとめたいと思う。

CCCCの概要

 CCCCはC、C++等を対象としたオープンソースの静的解析ツールで、特にソースコードの複雑度(主体はサイクロマティック数)と規模(主体はLOC)の解析に特化している。

 CCCCのメリットとしては、設定や処理が手軽というものがある。
 というのも、自分の業界でメトリクス解析の定番となっている、QACやPGRelief、AdLintといった高機能な静的解析ツールだと、高機能な半面、外部リンクの設定・参照構造の設定・各種処理系に合わせたカスタマイズなど色々設定の手間がかかる上に、設定ミスがあると解析エラーが発生してメトリクスが得られない、なんて煩わしさがよくある。
 一方でCCCCはファイル単体ごとにテキスト処理でメトリクスを解析していくので、そうした煩わしい設定がなくとも結果を取得できる手軽さがある。
 ただその代償として、プリプロセッサ処理の解析ができない、外部参照を扱えないといった制約も持っている。そのあたりは解析の目的に応じた使い分けが必要になると思う。

実行

 引数に解析対象のパスを指定して実行すると解析が行われる。
 なお「---outdir」のオプションで解析結果の出力場所を指定できる。それを指定しないと「.cccc」という隠しディレクトリに結果が格納されるので注意。

 例えば以下のシェルスクリプトを実行すれば、「./source」に格納された*.h、*.cppファイルを解析し、「./cccc_out」に解析結果を出力する。

#!/bin/sh
find ./source -name "*.h" -o -name "*.cpp" | cccc - --outdir="./cccc_out"

 解析結果については、「cccc.html」に、全体のメトリクスや、各関数ごとのメトリクスを記述したページへのリンクが記述される。あと「cccc.xml」に、解析情報がXML形式で全部まとめて出力される。こちらはJenkinsなど他ツールと連携させる場合に有用になる。

 ユーザガイドとしては以下が詳しい。
CCCC User Guide