Frage

Mögliche Duplizieren:
Was ist ein angemessenes Code Coverage% für Unit-Tests (und warum)?

Ich bin in der Mitte der Zusammenstellung einige Richtlinien um Unit-Test-Code-Coverage und ich möchte eine Zahl angeben, die wirklich Sinn macht. Es ist einfach, das zu 100% Mantra zu wiederholen, dass ich alle über das Internet zu sehen, ohne dass die Kosten-Nutzen-Analyse unter Berücksichtigung und wenn Renditen tatsächlich Sätze in verringern.

ich erbitten Kommentare von Personen, die tatsächlich Code-Coverage auf reale, mittel / groß großen Projekten berichten. Welche Prozentsätze wurden Sehen Sie? Wie viel ist zu viel? Ich möchte wirklich ein gewisses Gleichgewicht ( in Zahlen ), dass hilft Entwicklern hohe Qualität Code erzeugen. 65% Deckung zu niedrig zu erwarten? Ist 80% zu hoch?

War es hilfreich?

Lösung

Wenn Sie Codeabdeckung mit zyklomatische Komplexität mischen, können Sie den MIST Metrik verwenden.

artima.com :

Einzelne Methode Interpretation:

Bob Evans und ich habe schon in viel sah Beispiele (mit unseren Code und viele Open-Source-Projekte) und hörte eine Menge von Meinungen. Nach langer Debatte, wir beschlossen, zunächst eine MIST verwenden Score von 30 als Schwellenwert für crappiness. Nachfolgend finden Sie eine Tabelle, die zeigt die Menge der Testabdeckung erforderlich unter dem MIST zu bleiben Schwelle basierend auf der Komplexität eines Methode:

Method’s Cyclomatic Complexity        % of coverage required to be
                                      below CRAPpy threshold
------------------------------        -------------------------------- 
0 – 5                                   0% 
10                                     42% 
15                                     57% 
20                                     71% 
25                                     80% 
30                                    100% 
31+                                   No amount of testing will keep methods    
                                      this complex out of CRAP territory.

Kein Betrag von Code-Coverage wird „Code von hohen Qualität“ für sich allein zu gewährleisten.

Aus den Kommentaren ...

Es ist definitiv zu lasch einfache Methoden einen Pass auf Deckung zu geben. Was werden Sie wahrscheinlich feststellen, wenn diese Implementierung auf vorhandenen Code ist, dass die Code-Coverage wird steigen, wie Sie diese hässlichen Methoden sind Refactoring (Code Coverage sollte steigen sonst bist du Refactoring gefährlich).

Die 0-5 ist im wesentlichen niedrig hängenden Früchte und der ROI ist alles nicht so toll. That being said, sind diese Methoden wunderbar für das Lernen TDD, weil sie oft sehr einfach zu testen sind.

Andere Tipps

Persönlich würde ich für 80% Deckung gehen, aber natürlich ist dies nur relativ ... ich persönlich nicht achive dies noch zu.

Zur Zeit haben wir sehr hohe Reichweite (99%) auf dem Utility-Klassen, was gut ist, weil Fehler dort werden Sie durch Ihre gesamte Anwendung jagen.

Ohne Abdeckung ist für die meisten GUIs, weil Schreiben von Tests für sie schwer und zeitaufwendig ist, so dass wir es oft verlassen die gui in den Unit-Tests zu öffnen und wenn kein Fehler ist, dass wir schließen sie automatisch.

Ich glaube nicht, dass Sie wirklich zu viel Code-Abdeckung haben kann. Ich glaube, Sie brauchen, um zu bestimmen, welcher Code den „normalen Geschäftsgang“ in der Anwendung ausgeführt und haben diese vollständig abgedeckt. Für den verbleibenden Code, der nicht im normalen Geschäftsgang ist, starten Sie diese nach unten whittling durch die kritischsten ersten tun. Abnormal Geschäft, das für immer guten Code-Abdeckung auf es nicht sehr wichtig, hat eine geringe Verstärkung ist.

Die einzig richtige Antwort ist, Sie testen, wie viel Sie sich leisten können. Offensichtlich ist dies ein Axiom über jedes Engineering-Projekt.

Darüber hinaus, es ist alles subjektiv und stark abhängig von dem Projekt bei der Hand. Zum Beispiel, sich über den Flugsteuerungssysteme von Lockheed Puts mehr getestet werden besser war als 80%, aber 80% kann für meine GUI-Frontend zu einem XML-Betrachter ausreichen.

Normalerweise brechen, können Sie die Kosten für die Tests mit Ihrem Team läuft. In der Theorie Welt ist es üblich, Mannstunden als Folge der Frage zu haben: Wie viele Tests können wir uns leisten

Danach prüfen Sie Ihre Module und Sie bestimmen, welche Teile des Codes in ihnen die meiste Zeit verbracht haben. Jede kritische Modul sollte einmal abgedeckt werden. Von hier an Sie eine entsprechende Anzahl von Tests geben im Vergleich zu der Höhe der Zeit spezifischen Modulen ausgeführt werden. Also am Ende gibt es keine harte Anzahl von „X%“ abgedeckt wird.

John Musa hat ein wirklich interessantes Buch zum Thema.

Auf dem Programm, dass ich auf (~ 500k SLOC), verwenden wir 100%. Das ist ein Programm, Anforderung an die nächste Phase der Prüfung fortzufahren. Hier sind die Gründe dahinter:

  1. Das Programm wird in einem gewissen Sicherheit verwendet kritische Situationen, und Sie dies nicht tun wollen jede off Nennbedingungen nicht getestet

  2. werden
  3. Wenn Sie schlagen nicht zu 100%, Sie dann entweder schrieb Code, der nicht ist notwendig und werden daher verschwenden Geld, oder Sie testen nicht Ihre ab Nennpfade vollständig. Sehen # 1.

  4. Ihre Einheit Testszenarien sollten natürlich die nahe 100%, unabhängig von dem tatsächlichen Programm Code-Coverage-Metrik Sie verwenden. Wenn jemand bei 95% ist ausschließlich auf ihre off nominal Szenarien, erfordert 100% nicht belastend ist (und, wieder, sollten Sie Sie fragen, warum dann nicht bei 100% ist. Siehe # 2.)

Ihre Laufleistung wird sicherlich variieren. Wenn Sie nicht auf einer Mission / sicherheitskritische Anwendung arbeiten, als Sie wahrscheinlich nicht brauchen, um Ihren Code Coverage so viele Sorgen machen - aber ich würde wieder fragen: warum Sie Code schreiben, dass Sie don‘ t Notwendigkeit?

[Bearbeiten]

Auf der Grundlage der Kommentare, die ich unten erhalten haben, sollte ich klarstellen. Das Programm Leitlinie ist 100% Codeabdeckung für Unit-Tests. Das Entwicklungsprozess Voraussetzung, wenn für einen technischen Grund verzichtet werden kann, ein Zweig des Code nicht (geschützten Standardkonstruktor, die nie genannt wird, etc.) erreicht werden kann Zulassung in der Regel von einem externen, unabhängigen Teil der Organisation gewährt wird (go go SQA ).

Von einer Integration / Systeme Test, wird die Codeabdeckung strittig, wie Sie bei Bedarfsdeckung beginnen suchen. Das ist ein anderer Knäuel zusammen.

Die ursprüngliche Frage war auf der Suche nach realen Situationen: Ich bin damit einverstanden, dass nicht (die meisten?) Alle Situationen des realen Welt 100% Codeabdeckung auf einer Unit-Test-Ebene garantiert werden, aber es gibt sicherlich Fälle, die tun, und Programme, die tun. Und es ist eine Gewohnheit einiger Entwickler Code schreiben, dass sie nicht brauchen, die dann nicht getestet endet. Dies wird zu einem Albtraum, als letztere Entwickler Methoden aufrufen, die wurden nie „gemeint“ verwendet werden (oder wurden aufgenommen, weil jemand dachte, dass sie eine „gute“ Idee waren). Shooting für 100% Abdeckung zwingt Sie, die Frage zu beantworten: „Warum habe ich das geschrieben?“

Es hängt wirklich davon. Ich kenne eine Menge Software, die 0% geht. Ich habe eine Menge von Software, die einstellige% aufweist. Die wichtigste Frage ist, was wirklich benötigt wird, und in finanzieller Hinsicht wollte.

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