Sie sollten die Codeabdeckung nicht automatisch erzwingen.
Dies ist wie das Erzwingen der maximalen Codezeilen pro Methode: Einverstanden, die meisten Methoden sollten weniger als beispielsweise 20 LOC betragen, aber es gibt gültige Fälle, in denen Methoden länger wären.
Auf die gleiche Weise kann die Ausrichtung auf einen bestimmten Prozentsatz der Codeabdeckung pro Klasse zu unerwünschten Konsequenzen führen. Zum Beispiel:
Boilerplate-Codeklassen oder Klassen, die von Codegeneratoren erstellt wurden, werden möglicherweise überhaupt nicht getestet. Entwickler zu zwingen, sie zu testen, hat keinen Vorteil und verursacht erhebliche Kosten in Bezug auf die dafür aufgewendete Zeit.
Einfache Code-Behandlung unwichtiger Teile der Anwendung muss nicht unbedingt getestet werden.
In einigen Sprachen kann ein Teil des Codes nicht getestet werden. Ich hatte diesen Fall in C # mit anonymen Methoden in einer Bibliothek, in der ich wirklich eine 100% ige Codeabdeckung haben wollte . Diese Fälle können für Entwickler demoralisierend sein.
Noch wichtiger ist, dass die Codeabdeckung proportional zu zwei Aspekten des Codes sein sollte: wie kritisch und wie kompliziert es ist :
Ein Teil des Codes mit einer komplizierten Logik, die Teil des Hauptmerkmals einer Anwendung ist, sollte besser sorgfältig getestet werden, da Fehler oder Regressionen wichtige Konsequenzen haben können.
Ein einfacher Code, der eine Funktion behandelt, die niemand verwendet, enthält möglicherweise grundlegende Tests, die nur grundlegende Fälle abdecken.
Natürlich können Sie die Codeabdeckung weiterhin als Maß verwenden , insbesondere um zu vergleichen, wie verschiedene Teams die Codeabdeckung erreichen: Es kann Teams geben, die weniger diszipliniert und beim Testen weniger zurückhaltend sind. In diesen Fällen möchten Sie diese Metrik möglicherweise mit anderen kombinieren, z. B. der Anzahl der Fehler, der Zeit, die für die Behebung von Fehlern aufgewendet wurde, oder der Anzahl der Anmerkungen während der Codeüberprüfung.
Möglicherweise möchten Sie auch bei einzelnen Projekten, bei denen dies sinnvoll ist (achten Sie darauf, Prototypen, generierten Code, CRUD usw. auszuschließen), zumindest eine gewisse Codeabdeckung (z. B. 60% ¹) erzwingen , damit Entwickler bestimmte Klassen als ausgeschlossen markieren können von der Codeabdeckung ist auch schön². In diesem Fall kann dies im Rahmen einer Überprüfung erfolgen, bei der ein Build fehlschlägt, wenn die Codeabdeckung unter dem erforderlichen Minimum liegt. Ich würde es in der Build-Phase tun, nicht in der Commit-Phase , da nicht erwartet wird, dass Sie während des Commits Unit-Tests ausführen .
¹ Ich würde 60% als angemessenes Minimum betrachten, basierend auf meiner Codebasis: Fast jedes Projekt oder jede Klasse mit weniger als 60% Codeabdeckung ist wirklich ungetestet . Dies kann von Sprache zu Sprache und von Unternehmen zu Unternehmen sehr unterschiedlich sein (in einigen Unternehmen sind 0% ein Standard). Besprechen Sie mit Ihrem Team, was normal und was für sie zu hoch ist . Vielleicht erreichen sie ständig 95% und können leicht 99% erreichen, oder sie haben Schwierigkeiten, ihre Codeabdeckung von 70% auf 75% zu erhöhen.
² Angesichts der Tatsache, dass bei Codeüberprüfungen eventueller Missbrauch festgestellt wird, sollten Sie keine Angst haben, Entwicklern diese Möglichkeit zu geben. Dies ähnelt der Möglichkeit, einige Teile des Codes von den Überprüfungen durch die Linters oder Stilprüfer auszuschließen. JSLint, StyleCop und Code Analysis sind drei Beispiele, bei denen der Ausschluss unterstützt wird und tatsächlich nützlich ist, ohne Missbrauch zu fördern.