Welche Techniken haben Sie verwendet tatsächlich erfolgreich Codeabdeckung zu verbessern?

StackOverflow https://stackoverflow.com/questions/170751

  •  05-07-2019
  •  | 
  •  

Frage

ich erreichen regelmäßig 100% ige Abdeckung der Bibliotheken mit TDD, aber nicht immer, und es scheint immer Teile von Anwendungen übrig zu sein, die nicht getesteten und aufgedeckt sind.
Dann gibt es die Fälle, in denen Sie mit Legacy-Code starten, die nur sehr wenige Tests und eine sehr geringe Reichweite.

Bitte sagen, was Ihre Situation ist und was das zumindest gearbeitet hat verbessert Abdeckung.
Ich gehe davon aus, dass Sie Abdeckung während Unit-Tests messen, aber sagen, wenn Sie andere Techniken verwenden.

War es hilfreich?

Lösung

Code löschen.

Das ist nicht snarky, aber tatsächlich ernst. Jedes Mal, wenn ich die kleinste Menge an Code-Duplizierung sehen würde oder sogar Code, den ich nicht ausführen konnte, ich es gelöscht. Diese erhöhte Reichweite und erhöht die Wartbarkeit.

soll ich beachten Sie, dass diese mehr anwendbar ist, um die Abdeckung der alten Codebasen gegen neue Codebasis zu erhöhen.

Andere Tipps

Ich nehme an, Sie lesen "-Code abgedeckt vs.-Code Tested", rechts ?

Wie in dieser Frage angegeben,

  

Selbst bei 100% block Abdeckung + 100% arc Abdeckung + 100% fehlerfrei-for-at-Least-one-Pfad geradlinigen Code, gibt es noch Eingangsdaten werden die Pfade / Schleifen in einer Weise ausführt, die aufweisen mehr Fehler.

Nun, ich benutze eclemma , basierend auf EMMA und Code-Coverage-Tool erklärt, warum 100% Code ist nicht immer möglich: wegen teilweise abgedeckt Linien durch:

  • Implizite Zweige auf der gleichen Linie.
  • Gemeinsamer Konstruktorcode.
  • Implizite Zweige aufgrund schließlich blockiert.
  • Implizite Zweige aufgrund einer versteckten Class.forName ().

So all diese vier Fälle gute Kandidaten sein könnten für eine bessere Code-Coverage führenden Refactoring.

Nun, ich stimme mit Frank Krueger Antwort. Einige nicht-abgedeckten Code könnte auch ein Hinweis auf einige Refactoring sein getan werden, einschließlich einige Code tatsächlich löschen;)

Die beiden Dinge, die den größten Einfluss auf Projekte hatte ich gearbeitet habe waren:

  1. Von Zeit zu Zeit „erinnert“ das Entwicklungsteam zu actualy Unit-Tests zu implementieren und zu prüfen, wie effektiv Tests zu schreiben.
  2. einen Bericht der Testabdeckung zu erzeugen und zirkulierende, dass unter den Entwicklungsmanager.

Wir verwenden Perl, so Devel :: Abdeckung sehr nützlich war für uns. Zeigt pro-Anweisungsüberdeckung, Zweigüberdeckung und bedingte Abdeckung während Unit-Tests, sowie Dinge wie POD Abdeckung. Wir verwenden die HTML-Ausgabe mit leicht zu erkennen Grün für „100%“, über gelb und rot für geringere Deckungssummen.

EDIT: , um auf die Dinge ein wenig erweitern:

  • Wenn die bedingte Abdeckung nicht abgeschlossen ist, überprüfen Sie die Bedingungen für die gegenseitige Abhängigkeit. Wenn es da ist, Refactoring. Wenn es nicht sollten Sie in der Lage sein, Ihre Tests zu erweitern alle Bedingungen zu treffen.
  • Wenn die bedingte und Zweigüberdeckung sieht vollständig, aber Aussage Berichterstattung ist nicht, Sie entweder die conditionals falsch geschrieben haben (zB immer früh von einem Unterzurückkehrt, wenn Sie nicht zu haben bedeutet) oder Sie haben zusätzlichen Code bekommen, das kann werden sicher entfernt.

Prüfung FIT unsere Codeabdeckung verbessert hat. Es war toll, weil es eine ganz andere Tack ist.

Hintergrund: Wir haben eine Mischung aus Erbe und neuen Code. Wir versuchen, Einheit / Integrationstest die neuen Sachen so viel wie möglich, sondern weil wir Hibernate / Postgres migrieren und weg von einer OODB, gibt es nicht viel Sinn, die Legacy-Code zu testen.

Für diejenigen, die nicht wissen, FIT ist ein Weg, um Software aus der Sicht der Nutzer zu testen. Grundsätzlich können Sie die gewünschte Verhalten in HTML-Tabellen angeben: die Tabellen, die die Aktionen gegen die Software angeben und die gewünschten Ergebnisse. Unser Team schreibt ‚Glue Code‘ (auch bekannt als FIT-Test), die die Aktionen, um Anrufe gegen den Code abzubilden. Beachten Sie, dass diese Tests in einer Ansicht arbeiten ‚aus dem Weltraum‘ im Vergleich zu Unit-Tests.

Mit diesem Ansatz haben wir unsere Code-Coverage um mehrere Prozentpunkte erhöht. Ein zusätzlicher Bonus ist, dass diese Tests über Versionen überbrücken: sie werden Legacy-Code testen, aber dann, später, neuen Code. das heißt, sie dienen als Regressionstests, in einem gewissen Sinn.

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