メソッドごとの平均コード行数を計算するためのツールはありますか?
プロジェクトの総行数だけでなく、各メソッドの平均サイズを知りたいです。メソッドごとのカウントにより、各メソッドがどれほど単純かを測定できます。
これは、ビルド プロセスの一部として計算され、ダッシュボードに表示されます。各メソッドの平均サイズが増加しているかどうかを確認できるという考えです。これにより、コードの複雑さが増し、リファクタリングを検討する必要がある可能性が示されます。
メソッドごとの平均コード行数を計算するためのツールはありますか?
プロジェクトの総行数だけでなく、各メソッドの平均サイズを知りたいです。メソッドごとのカウントにより、各メソッドがどれほど単純かを測定できます。
これは、ビルド プロセスの一部として計算され、ダッシュボードに表示されます。各メソッドの平均サイズが増加しているかどうかを確認できるという考えです。これにより、コードの複雑さが増し、リファクタリングを検討する必要がある可能性が示されます。
プロジェクト全体で再帰的な「for(i in this)」検索を実行し、オブジェクト (i) が関数の場合は、「test.toString().split("\n").length」を呼び出します。これは、関数内の改行の数をカウントします。関数ではなくオブジェクトの場合は、そのオブジェクトでこの関数を呼び出します。また、見つかった関数の数を数え、改行の総数を関数の総数で割ると、平均が得られます。
編集
function calculateMethodSize(obj){
var fcount = 0;
var fsize = 0;
for(i in obj){
if(obj[i] instanceof Function){
fcount++;
fsize += obj[i].toString().split(";\n").length;
}else if(obj[i] instanceof Object){
var ret = calculateMethodSize(obj[i]);
fcount += ret.fcount;
fsize += ret.fsize;
}
}
return {fsize:fsize, fcount:fcount};
}
var data = calculateMethodSize(this);
var average = data.fsize / data.fcount;
ただし、このコードの実行には注意してください。私が行ったように、これで実行すると、スタックオーバーフローが発生する可能性があります (私はそうしました)。
short fast and dirty : ";" を grep して、行数を数えます。これにより、ステートメント数の見積もりが得られます。
おそらく他のメトリックも手がかりにしたいと思うでしょう。行数を数える方法は、「function」キーワードまたは中括弧なしで定義された関数に直面して鳴らないように注意してください。実際の例:
var negate = bind1st(compose, not);
(ここでnegateは、bind1st、compose、notの各関数から構築された関数です)
行を「\n」または「;」として定義し、
次のような単純なアルゴリズムを試すことができます。
FOR each line in a javascript file (or chunk of text)
IF the line starts with "function " THEN
PUSH the first left-curly brace you find onto a stack
WHILE the stack is non-empty
PUSH any left-curly braces in the current line
POP any left-curly braces when you encounter a right-curly brace
Increment your line-count by 1
Increment your line counter (as mentioned in the FOR loop above)
END WHILE
Store your total lines for this function
ELSE
//ignore the line because it's probably a global var or blank
END IF
END FOR
これを自動的に実行できるツールを知りません。でも、自分で作ってみるのも楽しそうですね。
それができるかどうかはわかりませんが、前回の投稿の後、循環的複雑度とは何かを検索して、Code Analyzerを指す関連するウィキペディアのページに移動しました。そこで彼らは言います:
HTML または JSP ファイルをカウントする場合、<script> タグ内に埋め込まれた javascript および vbscript コードの LoC を正しくカウントします。
このカウントがメソッドごとにディスパッチされるかどうかはわかりませんが、一見の価値があるかもしれません (無料のツールです)。