UNIX/Linuxの部屋 ccccコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド cccc C言語・C++・Java ソースコードステップカウンタ (行数カウント・ステップカウント・ステップ数) このエントリーをはてなブックマークに追加

C言語・C++・Java のソースコードのステップ数を調べるツール。
% cccc *.c
と直接ファイルを引数で指定するか、あるいは
% find . -name \*.c -print > source.list
% cccc -f source.list
などとソースファイル名一覧のファイルを生成し、-f オプションで指定することでステップカウントを行う。カウント結果は、カレントディレクトリに出力される cccc.htm という HTML ファイルに記述されている。

このファイルに出力される情報の中から、主要なものを以下に解説する。
Number of modules (NOM) 1 モジュール数。モジュールがどういう単位なのかわからない。
Lines of Code (LOC) 887 コード行数。コメント行・空行・空白行は含まない。
McCabe's Cyclomatic Number (MVG) 156 マッケーブの循環的複雑度。要は各関数が単純な親子関係であれば循環度が低く、どれが親かわからないような複雑な呼ばれ方をする関数だと循環度が高いらしい。10 以下だと単純なよい構造、50 を越える場合はテスト不能、その中間は複雑度が高い、らしい。
Lines of Comment (COM) 203 コメントの行数。純粋にコメントのみからなる行数であって、コードの末尾にコメントを記述した場合はカウントされないようだ。
LOC/COM (L_C) 4.369 コード行数 ÷ コメント行数
MVG/COM (M_C) 0.768 マッケーブの循環的複雑度 ÷ コメント行数。
Henry-Kafura/Shepperd measure (visible) (HKSv) 0 意味がわかりません。
Henry-Kafura/Shepperd measure (concrete) (HKSc) 0 意味がわかりません。
Henry-Kafura/Shepperd measure (inclusive) (HKS) 0 意味がわかりません。
Lines of Code rejected by parser (REJ) 227 cccc が解析できなかった行数。特に C言語や C++ の場合、マクロの定義次第でいくらでも意味不明のコードを記述できる。しかし cccc はマクロ展開をしてくれないため (そしてインクルードファイルも読んでくれないため)、ちょっと変わった書き方に出くわすと結構な頻度でエラー扱いとし、その行をスキップして処理を続行してしまう。解析に失敗してもコード行数に加えてくれればよいと思うのだが、なぜかそうはしてくれない。

また、関数ごとに LOC・MVG・COM・L_C・M_C の値を算出する。

なお、実際の行数 (コメント・空行も含む) は出力してくれないので、wc コマンドで自分で数えよう。

ちなみに「いまどき行数なんて数えるのか? 昭和の時代じゃあるまいし」と学生時代に思っていた当ページ管理人。今の仕事ではきっちり数えさせられています。やだやだ。