2016-05-05 9 views
1

私は、分岐カバレッジが決定カバレッジと異なることを知りました。メソッドは、C#でthrow、break、および他のキーワードを使用して呼び出します。 しかし、コードアナライザで実際に使用されているこの種のブランチカバレッジはなんですか?私は決定カバレッジを使用して、すべての決定結果(結果のブランチ)がカバーされていることを確認します。私が意味する 、次のコードはあり、条件2が、5つの無条件分岐:無条件分岐とコードカバレッジ

if(A) 
    B(); 
    C(); 
    D(); 
    E(); 
else 
X(); 

そして私は、私はちょうどfalseに評価するテストを記述する場合、コードアナライザは、分岐カバレッジがあることを私に教えてくれると信じています50%。しかし、無条件の支店の観点から、より多くのことが実行されます。 これは間違いありませんか?

+0

本当にアナライザに依存します。 dotCoverは、テストによってヒットしたコード行を識別します。したがって、可能なすべてのコード行が実行されるかどうかを判断するために使用できます。 – drz

+0

@drz:OPは質問しませんでした* line *カバレッジ。彼は枝対決定カバレッジについて尋ねました。 –

答えて

0

分岐カバレッジでは、決定が真と偽の両方としてテストされたかどうかはわかりません。

例:cはTRUEと評価された場合

if (c) { 
    x=... 
} 
y=... 

、Xを含むブロックを= ...実行し、 分岐カバレッジがそれを検出します。また、yで始まるコードが実行されたことを検出します。したがって、Cが真であれば、100%のカバレッジが得られます.Cが偽であれば何が起こるかはわかりません。

決定カバレッジでは、カバレッジが100%の場合、Cが評価され、TRUEとFALSEの両方を生成することがわかります。

条件付きifにthenブロック elseブロックがある場合、支店のカバレッジと決定カバレッジは同じ情報を提供します。

+0

はい、私はそう信じています。しかし、私は実際にすべての本(Googleの書籍でチェックする)が支店のカバレッジが決定カバレッジと同じであると言っているのかどうかはわかりません。 – Pietross

+0

しかし、私はその例についてはわかりません - 実際には分岐点であり、分岐カバレッジは他の分岐が実行されていないことを検出します - 制御フローグラフからは明らかです。 – Pietross

+0

私は文bool z =(i> j)を持っているとします。間違いなく、枝がありません。 (x86マシンコードはmov r1、i; cmp r1、j; setle r1; mov z、r1 ... noブランチ)。しかし、明らかに決定があります。 –