Frage

Ich habe auf meinem Computer C installiert ++-Test nur mit Unittest-Lizenz (nur Unit-Test-Lizenz) als Visual Studio 2005-Plugin (cpptest_7.2.11.35_win32_vs2005_plugin.exe).

Ich habe eine Probe ähnlich den folgenden:

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;
}

In meinem Fall nach dem Coverage Tool läuft ich die folgenden Ergebnisse haben (für eine ähnliche Funktion wie die zuvor erwähnt):

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

Ich verstehe wirklich nicht, warum ich es nicht 100% Deckung, wenn sie an PathCoverage (PC) kommt. Auch wenn jemand, die Erfahrung mit C ++ Test-Para hat könnte die niedrige MCDC Abdeckung für mich erklären, das wäre toll.

Was soll ich tun Abdeckung zu erhöhen? wie ich aus Ideen in diesem Fall bin. Wegbeschreibung zu (einigen Teilen) der Dokumentation sind willkommen.

Danke,

Iulian

War es hilfreich?

Lösung

Dies ist eine gute Referenz auf die verschiedenen Arten von Code-Coverage: http: //www.bullseye. com / coverage.html .

MCDC : MCDC Abdeckung verbessern Sie some_condition suchen brauchen. Unter der Annahme, es ist ein komplexer boolean Ausdruck, müssen Sie prüfen, ob Sie die notwendigen Kombinationen von Werten trainieren sind. Insbesondere ist jeder boolean Unterausdruck muss wahr und falsch ausgeübt werden.

Pfad : Eines der Dinge, in dem Link oben als ein Nachteil der Pfadüberdeckung ist, dass viele Wege sind unmöglich zu trainieren. Das kann der Fall mit Ihrem Beispiel.

Andere Tipps

Ich kann nicht mit dem speziellen Werkzeug helfen Sie verwenden, aber die allgemeine Idee mit Pfadüberdeckung ist, dass jeder mögliche Weg durch sollte der Code ausgeführt werden.

Wenn Sie ein Flussdiagramm durch das Programm ziehen, an jeder Verzweigung if / Pause / Weiter usw. Sie, welche Wege die Tests nehmen durch das Programm sehen sollten. Um 100% (die nicht absolut notwendig ist, auch nicht einen perfekten Test versichern) Ihr Test muß alle Zweige des Codes gehen, jede Zeile ausgeführt wird.

Ich hoffe, das hilft.

Sie müssen mindestens zwei Testfälle 100% Abdeckung zu erhalten. Eines, wo some_condition wahr ist, und eine, wo es nicht ist. Wenn Sie, dass Sie 100% ige Abdeckung erhalten sollten.

Auch wenn Sie 100% ige Abdeckung so perfekt sehen sollen. Sie würden in diesem Fall für die drei Tests müssen so alle Kombinationen getestet werden können. Schauen Sie zyklomatische Komplexität bis zu mehr darüber zu erfahren.

Es gibt vier hypothetische Pfade durch diese Funktion. Jede if-Klausel verdoppelt sich die Anzahl der Pfade. Jede if-Anweisung ist eine Niederlassung, wo man zwei verschiedene Wege gehen kann. Also, wenn Ihr Werkzeug trifft eine „wenn“, es ist der Code geht davon kann entweder den „wahren“ Zweig oder „false“ Zweig. Dies ist jedoch nicht immer möglich. Bedenken Sie:

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

Der „false“ Zweig der if-Anweisung ist nicht erreichbar. Dies ist ein offensichtliches Beispiel, aber wenn man in mehreren if-Anweisungen Faktor wird es immer schwieriger zu erkennen, ob ein Weg möglich ist oder nicht.

Es gibt nur drei mögliche Pfade in Ihrem Code. Der Weg, der den „false“ Zweig in dem ersten if-Anweisung und der „wahren“ Zweig in den zweiten nimmt, ist nicht erreichbar.

Ihr Werkzeug nicht intelligent genug, um das zu realisieren.

Das heißt, auch wenn das Werkzeug perfekt ist, zu erhalten 100% ige Abdeckung Weg ist wahrscheinlich unwahrscheinlich, dass in einer realen Anwendung. Jedoch sehr gering Pfadüberdeckung ist ein sicheres Zeichen dafür, dass Ihre Methode zu hohen zyklomatische Komplexität hat.

Ich persönlich denke, es schlechte Form irgendeine Funktion mit

zu starten

bool retCode = true;

Sie machen eine explizite Annahme, dass es standardmäßig erfolgreich sein wird und dann unter bestimmten Bedingungen fehlschlagen.

Programmierer kommen, nachdem Sie nicht die gleiche Annahme machen.

Fehler schnell scheitern früh.

Und wie schon andere gesagt haben, wenn Sie Fehlerfälle testen möchten, haben Sie Tests codieren, die fehlschlagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top