プロジェクト演習 5.2
ツールを使って複雑度を計算しよ
う
(a) Web 上で無料の複雑度計算ツールを探してみよう。 ダウンロード可能なデモ版やフリーウェアがある。
以下はツールのリストである( 2005 年 7 月時点のリンクであ る)
■ テキストより
• http://user.cs.tu-berlin.de/~fetcke/measurement/products.html
• http://www.chris-lott.org/resources/cmetrics
• http://www.scitools.com
• http://www.semdesigns.com/Products/Metrics/JavaMetrics.html
■ その他
SourceMonitor Version 2.6
http://www.campwoodsw.com/sourcemonitor.html
(b) 次に、 2 つの(単なるモジュールではなく)プログラ ムを選ぼう。
独自のコードや Linux そのもののコードを使ってもよ い。
■samp1.c
#include <stdio.h> int main(void) {
int a=1, b=1, c=1, d=1, e=1; if(a > 0){
a += 1; if(b > 0){ b += 1; if(c > 0){ c += 1; if(d > 0){ d += 1; if(e > 0){ e += 1;
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・}
(b) 次に、 2 つの(単なるモジュールではなく)プログラ ムを選ぼう。
独自のコードや Linux そのもののコードを使ってもよ い。
■samp2.c
#include <stdio.h> int main(void) {
int a=1, b=1, c=1, d=1, e=1; if(a > 0){
a += 1; } else{ a -= 1; }
if(b > 0){ b += 1; } else{ b -= 1; }
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
(c) 「エラトステネスのふるい」をプログラムとして追加 これら 3 つのプログラムに目を通し、読者の直感でしよう。 複雑性の観点からこれらのプログラムに順序をつけよう。
■eratosthenes.c
#include <stdio.h>
#define MAX 3000 int main(void) {
int i, j; int p[MAX]; //---初期化 ---
for(i=0 ; i<MAX ; i++) p[i] = 0; p[0] = 1;
//---倍数を除外 --- for(i=2 ; i<=MAX/2 ; i++){ for(j=2 ; i*j<=MAX ; j++){ if(p[i*j-1] == 0)
p[i*j-1] = 1; }
}
for(i=0 ; i<MAX ; i++){ if(p[i] == 0)
printf("%d\n", i+1); }
return 0; }
(c) 「エラトステネスのふるい」をプログラムとして追加 これら 3 つのプログラムに目を通し、読者の直感でしよう。 複雑性の観点からこれらのプログラムに順序をつけよう。
直感で、複雑性の大きい順に並べると samp1.c
eratosthenes.c samp2.c
理由 eratosthenes.c の方が、ループ回数とかを含めると 複雑なようにも思えるが、 CC が同じくらいで、ネスト が深い samp1.c の方がバグが出そうと思った。
(d) 選択したツールを使って複雑性メトリクスを計算しよ ( LOC 、 CC 、情報フロー複雑度、 DIT などどのメう。
トリクスを使ってもよい)
■SourceMonitor Version 2.6 を使用
(e) メトリクスを使ううえでの前提を書きとめ、
結果をグラフ化しよう。
■ メトリクスを使ううえで の前提
• ソフトウェアの品質を見 たいのだから、
不具合数を並べてみて、散 布図を作成。
(f) 読者の直感と比較すると、結果はどうだろうか?
■サンプルが良くないのでわかりづらいが、今回のツール では、 Complexity と Depth に着目して判断するとや はり、 samp1.c が良くないのかと思える。
(g) ツールについてどう思うか?優れているか、 または改善の余地があるだろうか?
■フリーのソフトでも基本的なメトリクスは取れるので、 まだ性的解析ツールを導入していないプロジェクトに対 しては、まず軽くやってみると良いとおもう。
会社で使用する場合は、やはり有料なものの方が保守 なども含めて便利だし、機能も豊富ですので安心はでき ますね。
有料ツール QAC
PGRelief Understand ・・・