Understand で取得可能なメトリクス CountPath は、有効/到達可能なコードに基づく、実行可能パス数を計測し、メソッドの経路の複雑さを表す指標です。
ただし、exit や goto 文で終了するケースは計測の対象外となり、カウントされません。
IF ステートメントがある場合、2 の n 乗で計測されます。
下記の例では、IF ステートメントが 3 つあるため、2 の 3 乗 = 8 経路となり、 CountPath は 8 となります。
void pathDemo() { if(a) dothis(); if(b) dothis(); if(c) dothis(); }
このパス経路を、Control Flow グラフでを示した場合、下図のようになります。
パス経路は、下記の 8 パターンが想定されます。
- ACE
- ACF
- ADE
- ADF
- BCE
- BCF
- BDE
- BDF
CountPath は、コード行数 (CountLineCode) がそれほど大きくない場合にも、非常に大きくなる場合があるため、Understand では、その上限値を「999,999,999」としています。
値が大きい場合には、条件制御構造の見直しや、メソッドの抽出についてご検討ください。
また、カバレッジに対応させた場合、CountPath メトリクスは、C1:分岐網羅 (ブランチカバレッジ) の分岐数に相当すると考えられるため、単体試験項目のテストケース数の目安としても、ご利用いただけると思います。