6 Stimmen

Kann mein Build vorschreiben, dass meine Codeabdeckung niemals schlechter wird?

Ich verwende Hudson CI, um ein reines Java-Webprojekt zu verwalten, mit Ant zu bauen.

Ich würde gerne vorschreiben, dass die Abdeckung der Unit-Tests niemals schlechter sein darf als die des vorherigen Builds, um sicherzustellen, dass jeder neue Code immer getestet wird oder zumindest die Abdeckung kontinuierlich verbessert wird.

Gibt es ein Hudson-Plugin, das auf diese Weise funktioniert?

Edit: Ich verwende derzeit Emma, wäre aber bereit, zu einer anderen App für die Berichterstattung zu wechseln.

Zur Klarstellung: Ich habe die Schwellenwerte in einigen Hudson-Plugins gesehen, aber das ist nicht genau das, was ich suche. Ich möchte zum Beispiel, dass, wenn die Abdeckung für Build #12 46% insgesamt war, und jemand in Build #13 mit 45% Abdeckung gecheckt, würde der Build brechen.

Der Grund, warum ich das tun möchte, ist, dass ich eine Codebasis mit geringer Testabdeckung habe. Wir haben keine Zeit, um zurückzugehen und nachträglich Unit-Tests zu schreiben, aber ich möchte sicherstellen, dass die Abdeckung immer besser wird.

UPDATE: Dan hat mich auf einen Problemfall in meinem Plan hingewiesen, der definitiv ein Problem darstellen wird. Ich denke, ich muss überdenken, ob dies überhaupt eine gute Idee ist.

8voto

Dan Dyer Punkte 52915

Ja. Welches Erfassungswerkzeug verwenden Sie?

Das Cobertura-Plugin für Hudson unterstützt dies definitiv. Auf dem Projektkonfigurationsbildschirm können Sie Schwellenwerte festlegen.

Alternativ können Sie Ant dazu bringen, den Build fehlschlagen zu lassen (anstelle von Hudson), indem Sie die Aufgabe cobertura-check verwenden.

EDITAR: Ich bin mir nicht sicher, ob Sie genau das tun können, worum Sie bitten. Selbst wenn Sie es könnten, könnte es sich als problematisch erweisen. Nehmen Sie zum Beispiel an, Sie haben eine durchschnittliche Abdeckung von 75 %, aber für eine Klasse haben Sie eine Abdeckung von 80 %. Wenn Sie diese 80 %ige Klasse und alle ihre Tests entfernen, verringert sich der Gesamtabdeckungsgrad, obwohl kein anderer Code weniger getestet wird als zuvor.

3voto

Rob Hruska Punkte 114761

Dies ist eine Art Hack, aber wir verwenden ihn aus ähnlichen Gründen mit Findbugs und Checkstyle. Sie können eine Ant-Aufgabe einrichten, die Folgendes tut (dies kann in mehrere Aufgaben aufgeteilt werden, aber ich fasse sie der Kürze halber zusammen):

  1. Tests mit Abdeckung durchführen
  2. Analysieren Sie die Erfassungsergebnisse und ermitteln Sie den Prozentsatz der Abdeckung
  3. tmp/lastCoverage.txt vom letzten Build lesen (siehe Schritt #5a)
  4. Vergleich des aktuellen Abdeckungsgrads mit dem aus lastCoverage.txt gelesenen Prozentsatz
    1. Wenn der Prozentsatz NICHT gesunken ist, schreiben Sie den neuen Prozentsatz über den Inhalt von tmp/lastCoverage.txt
    2. Wenn sich der Prozentsatz verringert, behalten Sie die Originaldatei bei und echo "COVERAGE FAILURE" (mit ant's echo Aufgabe).

Beachten Sie, dass die Schritte 2 bis 5 nicht notwendigerweise mit nativen Ant-Tasks durchgeführt werden müssen - Sie können auch etwas wie Ant's javac Aufgabe, ein Java-Programm auszuführen, das dies für Sie erledigt.

Dann konfigurieren Sie Hudson:

  • Vergewissern Sie sich unter "Quellcodeverwaltung", dass "Update verwenden" aktiviert ist. Dadurch wird Ihre Datei lastCoverage.txt zwischen den Builds beibehalten. Beachten Sie, dass dies problematisch sein könnte, wenn Sie wirklich, wirklich Dinge zwischen Builds bereinigt werden müssen.
  • Verwenden Sie die Hudson Text Finder Plugin mit einem regulären Ausdruck, um in der Build-Ausgabe nach "COVERAGE FAILURE" zu suchen (stellen Sie sicher, dass "Auch Konsolenausgabe durchsuchen" für das Plugin aktiviert ist). Das Text-Finder-Plugin kann den Build als instabil markieren.

Sie können natürlich Dinge wie den Dateinamen/Pfad und die Konsolenausgabe so ersetzen, wie es in den Kontext Ihres Builds passt.

Wie ich bereits erwähnt habe, ist dies ein wenig umständlich, aber es ist wahrscheinlich eine der wenigen (einzigen?) Möglichkeiten, Hudson dazu zu bringen, Dinge aus dem vorherigen Build mit dem aktuellen Build zu vergleichen.

0voto

Ein anderer Ansatz wäre die Verwendung des Sonar-Plug-ins für Hudson, um die Entwicklung der Abdeckung im Laufe der Zeit beizubehalten und die Assimilierung und Analyse der Ergebnisse zu erleichtern. Außerdem wird die Abdeckung im Zusammenhang mit anderen Maßnahmen wie checkstyle und pmd angezeigt.

0voto

npellow Punkte 1985

Clover von Atlassian unterstützt, was Sie wollen. Werfen Sie einen Blick auf die Kleeblattmuster Ant-Aufgabe, insbesondere das Attribut historyDir.

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