Pythonを使ったコードメトリクス分析

その他

ソフトウェア開発をやっていると、人が書いたコードが信じられない時があります。
そのたびにコードレビューを行っていると時間がいくらあっても足りません。
そこでコードの良し悪しを見る一つの考え方にコードメトリクスがあります。
今回はPythonを使ったコードメトリクスの分析に触れてみます。

コードメトリクスを用意

ソースコードからメトリクスを測定します。
ここでいうメトリクスは、

  • 関数当たりのコード行数
  • サイクロマティック複雑度
  • 最大ネスト数
  • 分岐数
  • エッセンシャル複雑度
  • etc.

などを指します。
これらは一例ですが、主要なものだと思ってください。

では、どうやって測定すれば良いでしょうか?
ツールを使ってください。
調べると有償・無償、いろいろ出てきます。

複雑度と単体テストケース数の相関関係 - プログラマの思索
garyoさんから、ソースの複雑度と単体テストケース数について有益なアドバイスを示唆してもらったので、メモしておく。◆SourceMonitor Version 2.4...
メトリクス
Cyclomatic複雑度(サイクロマチック複雑度)、LCOM(結合性の欠如)、LOC(コード行数)など、100種類のメトリクスを分析する、Understandのメトリクス機能について、ご紹介しています。
タダでソフト開発の生産性と品質を上げる方法(1):意外に使える無料のソースコード測定ツール「SourceMonitor」
「“くみこみ”な話」の新シリーズが開幕。テーマは「タダでソフト開発の生産性と品質を上げる方法」です。第1回は、ソースコードを簡単に分析し、計測するフリーツール「SourceMonitor」を紹介します。

ここではサンプルとして、画像のような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を使うと簡単に分析できる」

 「散布図行列を使ってみる」

を組み合わせてみました。
簡単な事例でしたが、ここまで具体的な説明って意外に少ないんですね。
参考になりましたら幸いです。

その他
スポンサーリンク
thunder2をフォローする
サンダー製作所

コメント