1

Visual Studio 2005 プラグイン ( cpptest_7.2.11.35_win32_vs2005_plugin.exe ) として、C++Test のみを UnitTest ライセンス (単体テスト ライセンスのみ) でコンピューターにインストールしました。

次のようなサンプルがあります。

bool MyFunction(... parameters... )
{
    bool bRet = true;

        // do something
    if( some_condition )
    {
        // do something
        bRet = CallToAFunctionThatCanReturnBothTrueAndFalse....
    }
    else
    {
        bRet = false;
        // do something
    }

    if(bRet == false)
    {
        // do something
    }

    return bRet;
}

私の場合、カバレッジ ツールを実行した後、次の結果が得られました (前述の関数と同様の関数の場合)。

[LC=100 BC=100 PC=75 DC=100 SCC=100 MCDC=50 (%)]

PathCoverage (PC) に関しては、なぜ 100% のカバレッジがないのか、本当に理解できません。また、C++Test Parasoft の経験がある人が、MCDC のカバレッジが低いことを説明してくれれば、それは素晴らしいことです。

カバー率を上げるにはどうしたらいいですか?この場合、私はアイデアがありません。ドキュメント (の一部) への指示は大歓迎です。

ありがとうございました、

イウリアン

4

5 に答える 5

3

使用している特定のツールについてはお答えできませんが、パス カバレッジの一般的な考え方は、コード内の可能な各パスを実行する必要があるということです。

プログラムのフローチャートを作成し、各 if/break/continue などで分岐する場合は、テストがプログラムでどのパスをたどるかを確認する必要があります。100% を取得するには (完全に必要なわけではなく、完全なテストを保証するものでもありません)、テストはコードのすべてのブランチに行き、すべての行を実行する必要があります。

それが役立つことを願っています。

于 2009-06-18T13:58:15.313 に答える
1

その機能を通る 4 つの仮想パスがあります。各 if 節は、パスの数を 2 倍にします。各 if ステートメントは、2 つの異なる方向に進むことができる分岐です。そのため、ツールが「if」に遭遇するたびに、コードが「true」分岐または「false」分岐のいずれかを取ることができると想定します。ただし、これが常に可能であるとは限りません。検討:

bool x = true;
if (x) {
    do_something();
} 

if ステートメントの「false」ブランチに到達できません。これは明らかな例ですが、いくつかの if ステートメントを考慮すると、パスが可能かどうかを判断するのがますます難しくなります。

コードには 3 つのパスしかありません。最初の if ステートメントで "false" 分岐を取り、2 番目の if ステートメントで "true" 分岐をとるパスには到達できません。

あなたのツールはそれを実現するほど賢くありません。

そうは言っても、ツールが完璧であっても、実際のアプリケーションで 100% のパス カバレッジを得ることはおそらくありそうにありません。ただし、パス カバレッジが非常に低い場合は、メソッドの循環的複雑度が高すぎることを示しています。

于 2009-06-18T14:21:22.677 に答える
0

個人的には、関数を開始するのは悪い形だと思います

bool retCode = true;

デフォルトで成功し、特定の条件下で失敗するという明示的な仮定を立てています。

あなたの後に来るプログラマーは、これと同じ仮定をすることはありません。

早く失敗し、早く失敗します。

そして、他の人が言っているように、失敗したケースをテストしたい場合は、失敗したテストをコーディングする必要があります。

于 2009-06-18T14:32:47.223 に答える