ソフトウェア開発をやっていると、人が書いたコードが信じられない時があります。
そのたびにコードレビューを行っていると時間がいくらあっても足りません。
そこでコードの良し悪しを見る一つの考え方にコードメトリクスがあります。
今回はPythonを使ったコードメトリクスの分析に触れてみます。
コードメトリクスを用意
ソースコードからメトリクスを測定します。
ここでいうメトリクスは、
- 関数当たりのコード行数
- サイクロマティック複雑度
- 最大ネスト数
- 分岐数
- エッセンシャル複雑度
- etc.
などを指します。
これらは一例ですが、主要なものだと思ってください。
では、どうやって測定すれば良いでしょうか?
ツールを使ってください。
調べると有償・無償、いろいろ出てきます。



ここではサンプルとして、画像のようなcsvファイルを用意しました。
もちろん、値は適当です。

Pythonでデータを読み込み、見える化
import pandas as pd
df = pd.read_csv('metrics.csv', index_col=0)
今回はPandasを使いました。
使いからは検索してください。
import seaborn as sns
sns.pairplot(df, kind='reg')
さらにseabornを使って散布図行列を出します。
こんな感じになります。

コードメトリクス分析
散布図行列を分析していきます。
今回はサンプルデータかつデータ数が少ないため、あまり傾向は出ていません。
強引に見解を出していくと、例えば、「Paths」と「Executable Lines of Code」で負の相関が見られます。
普通はあり得ませんが、「コード行数が大きくなると、分岐数が減る」という傾向が分かりました。
「分岐数を減らした方が品質が高い」という仮説を立てるとすると、「コード行数を大きくした方がいいのではないか?」という関係も見いだせてきます。(繰り返しですがサンプルです)
こういう分析は検索してもらうと多数出てきます。
参考:SQiPシンポジウムでのNECさんの発表
まとめ
今回の記事は
「ソフトウェアの良し悪しをメトリクスで分析する」
「Pythonを使うと簡単に分析できる」
「散布図行列を使ってみる」
を組み合わせてみました。
簡単な事例でしたが、ここまで具体的な説明って意外に少ないんですね。
参考になりましたら幸いです。
コメント