2015年6月7日日曜日

ソースコードの変更量をカウント

ソフトウェア開発においては品質管理の目的で様々なメトリクスの計測が求められる場合があります。

そのメトリクスの1つに開発量があります。

開発量とはどのくらいコーディングしたかを示す値(単位はステップ数)です。

開発量の計測は、例えばオリジナルのソースコードと変更後のソースコードを比較して差分の行数(ステップ数)をカウントし、それを新規・修正・流用に分類します(分類の仕方は人それぞれだと思います)。

この開発量の計測ですが、面倒くさくて時間がかかっていつも適当にしか数えていないような気がしていましたし、新規・修正・流用の定義がなんとなく曖昧なため計測するたびに異なる分類の仕方をしているような気がしていました。

そんな気がしつつも開発量は提出しなければならないために、いつもなんとかそれっぽい値を作り出していました。この作業に意味があるのかと自問自答しつつ。

そこで計測ツールを開発して計測を自動化し、常にこのツールを使うようにすることにより、面倒くささや分類の問題を解決します。

まず新規・修正・流用の定義を行う必要があります。

流用については、自分の中では新規・修正よりも定義がはっきりしていました。
流用とは、オープンソースなど外部のソースコードをそのまま利用することであり、流用のカウントはソースコード単位(ファイル単位)で行うことができますからカウントし易いですし、曖昧さもなく問題ないと考えます。

問題は新規と修正です。

特に、1つのソースコード内でたくさんの行数が変更されていて、その変更のどの部分が新規でどの部分が修正なのかの定義が曖昧でした。そこで、新規と修正の定義を新たに以下のように決めました。

⑴ オリジナルのファイルと変更後のファイルをdiffコマンドに入力し、出力の+行と-行を数えます。そして

X = (+行数) -  (-行数)
if X > 0 then Xを「追加」、(-行数)を「修正」としてカウント
if X == 0 then (-行数 or +行数)を「修正」としてカウント
if X < 0 then |X|を「削除」、(+行数)を「修正」としてカウント

とします。

⑵ オリジナルにのみ存在するファイル(すなわち削除されたファイル)は、そのファイルの行数を「削除」としてカウントします。

⑶ オリジナルには存在しないファイル(すなわち追加されたファイル)は、そのファイルの行数を「追加」としてカウントします。

以上で全てのソースコードについて追加・修正・削除のステップ数が得られました。

求められている開発量は新規・修正なので、

新規=追加
修正=修正+削除

とすればなんとなく良さそうな気がします。

そこで上記の追加・修正・削除をカウントするツールdiffcountを作りました。

とりあえず自分が必要とする言語(c/c++/java/objective-c)にしか対応しておりません。

このツールでは、流用の部分(外部から持ってきて追加したソースコード)が追加としてカウントされるため、そこは後から差し引く必要があります。

2015年5月31日日曜日

Raspberry piで温度と湿度の計測(DHT Humidity Logs)

DHT Humidity Sensing on Raspberry Pi or Beaglebone Black with GDocs Loggingを試してみました。

参考にした資料や手順をこちらに公開しました。

GoogleDocsには以下のように保存されています。