2

onjavaの記事は、線形独立性/循環的複雑性の魔法により、基本パス カバレッジがフル パス カバレッジの十分な代替手段であることを暗示しているようです。

記事に似た例を使用します。

public int returnInput(int x, boolean one, boolean two)
{
    int y = x;
    if(one)
    {
        y = x-1;
    }
    if(two)
    {
        x = y;
    }
    return x;
}

基底関数 {FF,TF,FT} を使用すると、バグは明らかになりません。テストされていない TT パスのみがそれを公開します。

では、ベーシス パス カバレッジはどのように役立つのでしょうか。ブランチカバレッジよりもはるかに優れているようには見えません。

4

3 に答える 3

5

[免責事項:このテクニックについては聞いたことがありません。面白そうなので、いくつか検索を行いました。これが私が見つけたと思うことです。うまくいけば、彼らが話していることを知っている誰かが貢献するでしょう...]

パスカバレッジの完全な代替ではなく、ブランチカバレッジテストを生成するためのより良い方法であると思われます。ここには、目標を少し言い換えたはるかに長いドキュメントがあります:http ://www.westfallteam.com/sites/default/files/papers/Basis_Path_Testing_Paper.pdf

onjavaの記事には、「基本パステストの目標は、すべての決定結果を互いに独立してテストすることです。4つの基本パスをテストすると、この目標が達成され、他のパスが無関係になります」と書かれています。

ここでの「余分な」とは、「基本パステストの目的に不必要」という意味であり、「すべての人の時間の完全な浪費」という意味ではないと思います。

ブランチを個別にテストするポイントは、コードと任意のブランチカバレッジテストの両方を自分で作成したときに恐ろしい頻度で発生する、機能するパスとテストするパスの間の偶発的な相関関係を解消することだと思います。線形独立には魔法はありません。それはブランチカバレッジを生成する体系的な方法であり、ブランチの選択間の相関についてテスターがプログラマーと同じ仮定をすることを思いとどまらせます。

つまり、基本パステストではバグを見逃し、一般に2 ^(N-1)-Nのバグを見逃します。ここで、Nは循環的複雑度です。これは、バグがある可能性が最も高い2 ^(N-1)-Nパスを見逃さないことを目的としています。これは、通常、テストするNパスをコーダーに選択させるためです;-)

于 2009-04-01T01:11:27.353 に答える
1

パス カバレッジは、他のカバレッジ メトリクスより優れているわけではありません。どれだけの「コード」がテストされたかを示すメトリクスです。(TT,FF) と同様に (TF,FT) の TC セットで 100% のブランチ カバレッジを達成できるという事実は、100% のカバレッジが完了した後に終了基準が終了することを示しているかどうかは運次第であることを意味します。
テスターはカバレッジに焦点を当てるべきではありません。バグを見つけることは重要であり、TC はバグを示す方法であり、バグ アクティビティがどれだけ実行されたかを示すプロキシです。他のすべてのホワイト ボックス手法と同様に、最小限のコストで最大限のカバレッジを実現するには、実際にコードを理解して、TC なしで実際に欠陥を記述できるようにする必要があります。TC は、リグレッションおよび欠陥のドキュメントとして最適です。テスターのカバレッジは、どれだけの作業が行われたかについてのヒントに過ぎないため、どれだけの作業が十分であるかを判断するには、経験だけが本当に役立ちます。これを数値で表すのは難しいため、カバレッジ統計などの他の方法を使用します。これがあなたにとって意味があるかどうかはわかりませんが、質問を公開した日からあなたが遠く離れた日付で判断すると思います...

于 2012-04-19T13:55:21.920 に答える