⚙️

ソースの修正規模を計測したい

2021/08/26に公開

はじめに

ソースの修正規模を計測したいと思って調べたことの備忘録。

要約

ソースの修正規模を計測したい

前提

  • 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つの状態をもつソースを用意。

  1. 変更なし(same)
  2. 修正(modified)
  3. 追加(added)
  4. 削除(removed)
test.py(変更前)
print("same")
print("modified")
print("removed")

変更前の状態から、same行は残し、added行を追加し、modified行を修正し、removed行を削除する。

test.py(変更後)
print("added")
print("same")
print("modified modified")

git diffを実行すると以下の通り。1行変更なし・2行追加・2行削除として扱われる。

test.py(変更後)
+ 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すごい便利ってこと。

脚注
  1. 「改造規模 = 追加行数 + 修正行数」 or 「改造規模 = 追加行数 + 修正行数 + 削除行数」のどちら? ↩︎

Discussion