33 Stimmen

Fallstricke der Codeabdeckung

Ich bin auf der Suche nach Beispielen aus der realen Welt, die zeigen, welche negativen Auswirkungen die Codeabdeckung hat.

Ich habe dies kürzlich bei meiner Arbeit bemerkt, weil eine Richtlinie eine 100%ige Codeabdeckung vorschreibt. Die Codequalität hat sich sicherlich verbessert, aber im Gegenzug scheinen die Tester laxere Testpläne zu schreiben, weil "der Code ja vollständig unitgetestet ist". Infolgedessen sind einige logische Fehler durchgeschlüpft. Die Fehlersuche war wirklich sehr mühsam, denn der Code ist ja vollständig unit-getestet".

Ich denke, das lag zum Teil daran, dass unser Tool nur Aussagen erfasst hat. Trotzdem hätte man die Zeit besser nutzen können.

Falls jemand andere negative Auswirkungen einer Code Coverage Policy kennt, bitte ich um Mitteilung. Ich würde gerne wissen, was für andere "Probleme" in der Praxis auftreten.

Vielen Dank im Voraus.

EDIT: Danke für all die wirklich guten Antworten. Es gibt ein paar, die ich als Antwort markieren würde, aber ich kann leider nur eine markieren.

1voto

MrTelly Punkte 14443

!00% Codeabdeckung bedeutet gut getesteter Code ist ein kompletter Mythos. Als Entwickler kennen wir die schwierigen/komplexen/schwierigen Teile eines Systems, und ich würde diese Bereiche lieber richtig getestet sehen und nur eine Abdeckung von 50 % erhalten, als die bedeutungslose Zahl, dass jede Zeile mindestens einmal ausgeführt wurde.

Um ein Beispiel aus der Praxis zu nennen: Das einzige Team, in dem ich war und das eine 100%ige Abdeckung hatte, schrieb einen der schlechtesten Codes, die ich je gesehen habe. Die 100 %ige Abdeckung wurde als Ersatz für die Codeüberprüfung verwendet - das Ergebnis war vorhersehbar schrecklich, und zwar in dem Maße, dass der meiste Code weggeworfen wurde, obwohl er die Tests bestand.

1voto

Bill Karwin Punkte 493880

Wir haben gute Werkzeuge zur Messung der Code-Abdeckung von Unit-Tests. Es ist also verlockend, sich auf eine Codeabdeckung von 100 % zu verlassen, um zu zeigen, dass man "mit dem Testen fertig ist". Das ist aber nicht wahr.

Wie bereits von anderen erwähnt, beweist eine 100%ige Codeabdeckung nicht, dass Sie angemessen getestet haben, und eine 50%ige Codeabdeckung bedeutet nicht unbedingt, dass Sie nicht angemessen getestet haben.

Die Messung der von den Tests ausgeführten Codezeilen ist nur eine Metrik. Sie müssen auch für eine angemessene Vielfalt von Funktionseingaben testen und auch, wie sich die Funktion oder Klasse in Abhängigkeit von einem anderen externen Zustand verhält. Einige Codes funktionieren zum Beispiel je nach den Daten in einer Datenbank oder einer Datei unterschiedlich.

Auch darüber habe ich kürzlich einen Blog geschrieben: http://karwin.blogspot.com/2009/02/unit-test-coverage.html

1voto

Julien Punkte 5630

100%ige Codeabdeckung bedeutet nicht, dass Sie mit usnit-Tests fertig sind

function int divide(int a, int b) {
    return a/b;
}

Mit nur 1 Unit-Test erhalte ich eine 100%ige Codeabdeckung für diese Funktion:

return divide(4,2) == 2;

Nun würde niemand bestreiten, dass dieser Unit-Code mit 100 % Abdeckung darauf hinweist, dass die Funktion einwandfrei funktioniert.

Ich denke, dass die Codeabdeckung ein gutes Element ist, um zu wissen, ob man einen offensichtlichen Codepfad vermisst, aber ich würde es vorsichtig einsetzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X