ソースの修正規模を計測したい
はじめに
ソースの修正規模を計測したいと思って調べたことの備忘録。
要約
- clocを使おう
ソースの修正規模を計測したい
前提
- Ubuntu 20.4
- WSL2.0上で動作
- git 2.33.0
clocのインストール
VSCodeを使っているので、普段はVScode Counterで規模を計測していた。git diff --stat
で追加・削除行数はわかるが、修正行数がわからない。色々調べているとclocが見つかる。
インストールは以下のコマンドを実施するだけ。
sudo apt install cloc
Ubuntu以外のインストールコマンドは公式参照。Windowsでパッケージマネージャーを利用していない場合、exeファイルをダウンロードしても利用可能。
比較対象のソース
サンプルとして以下の4つの状態をもつソースを用意。
- 変更なし(same)
- 修正(modified)
- 追加(added)
- 削除(removed)
print("same")
print("modified")
print("removed")
変更前の状態から、same行は残し、added行を追加し、modified行を修正し、removed行を削除する。
print("added")
print("same")
print("modified modified")
git diff
を実行すると以下の通り。1行変更なし・2行追加・2行削除として扱われる。
+ print("added")
print("same")
- print("modified")
- print("removed")
+ print("modified modified")
clocの実行結果
cloc --diff
を実行するとうまいこと修正を拾ってくれ、1行変更なし・1行修正・1行追加・1行削除として扱われる。
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
SUM:
same 0 0 0 1
modified 1 0 0 1
added 0 0 0 1
removed 0 0 0 1
-------------------------------------------------------------------------------
cloc --diff
の引数はファイル、ディレクトリ、アーカイブ、gitのコミットハッシュやブランチ名を指定できる。gitのコミットハッシュやブランチ名で指定できるのはすごい便利。以下はcloc --help
からの引用。
--diff <set1> <set2>
Compute differences in code and comments between source file(s) of <set1> and <set2>. The inputs may be any mix of files, directories, archives, or git commit hashes. Use -diff-alignment to generate a list showing which file pairs where compared. See also -count-and-diff, --diff-alignment, --diff-timeout, --ignore-case, --ignore-whitespace
おわりに
修正行数は把握できるようになったけど、そもそも母体があるソフトウェアの改造規模[1]ってどうやって算出するのだろう?そこはPJによりけりなのかな?
明確になったのはclocすごい便利ってこと。
-
「改造規模 = 追加行数 + 修正行数」 or 「改造規模 = 追加行数 + 修正行数 + 削除行数」のどちら? ↩︎
Discussion