JavaクラスのRFCは、クラスのオブジェクトへのメッセージに応答して、またはクラス内のメソッドによって呼び出すことができるすべてのメソッドのセットです。RFC = M + Rここで、M=クラス内のメソッドの数。R=Mから直接呼び出された他のメソッドの総数。
Cは.classであり、JはRFCを計算する必要がある.javaファイルであると考えています。
クラスJ{
a(){}
b(){}
c(){
e1.e();
e1.f();
e1.g();
}
h(){
ik();
ij();
}
m(){}
n(){
io();
ip();
ip();
ip();
}
}
ここでM=6およびR=9(ループ内の呼び出しについて心配する必要はありません。単一の呼び出しと見なされます)
Mの計算は簡単です。クラスローダーを使用してCをロードし、リフレクションを使用してメソッドの数を取得します。
Rの計算は直接ではありません。クラスからのメソッド呼び出しの数を数える必要があります。最初のレベルのみ。
RIの計算には、正規表現を使用する必要があります。通常、形式は次のようになります(。を使用しない呼び出しはカウントされません)
[variable_name]。[method_name]([0個以上のパラメーター]);
また
[variable_name]。[method_name]([0個以上のパラメーター])
コールリターンが直接別のメソッドのパラメータになる場合、セミコロンなし。また
[variable_name]。[method_name]([0個以上のパラメーター])。method2();
これは2つのメソッド呼び出しになります
メソッド呼び出しの他のどのパターンを考えることができますか?Rの計算に使用できるRegExを使用する以外の方法はありますか?
更新:
@McDowell BCEL
を使用しているように見えますが、プロセス全体を簡略化できます。やってみよう。