Sollte die Codeüberprüfung vor oder nach Unit-Tests durchgeführt werden

10

Ich diskutiere mit meinem Kollegen darüber, wann eine Codeüberprüfung durchgeführt werden soll - vor oder nach Unit-Tests. Was ist die beste Vorgehensweise?

Einige Faktoren, die wir möglicherweise berücksichtigen müssen (möglicherweise gibt es mehr):

  • Größe der Codeänderung - Eine große Änderung bedeutet, dass sich aus der Codeüberprüfung weitere Änderungen ergeben. Wenn diese Änderungen größer sind als wenn UT vor der Codeüberprüfung war, müssen Sie die meisten Ihrer UTs erneut wiederholen.
  • Zeitaufwand für die Durchführung des Unit-Tests
  • Ist es eine neue Funktionalität oder eine Fehlerbehebung?
dimba
quelle
Ich persönlich glaube nicht, dass die beiden so voneinander abhängig sind. Entwickler sollten nur den vollständigen Code überprüfen, da dieser möglicherweise unvollständig ist oder nicht wie erwartet funktioniert.
Lloyd Powell

Antworten:

20

Sie sollten immer einen Unit-Test durchführen, bevor Sie die Codeüberprüfung durchführen. Hier ist der Grund dafür

  1. Wenn Ihr Code auf eine Weise beschädigt wird, die durch Komponententests erfasst wird, verschwenden Sie die Zeit des anderen Entwicklers, indem Sie ihn in den Rot / Grün / Refaktor-Zyklus einbeziehen.
  2. Tests zeigen anderen Entwicklern die beabsichtigte Verwendung des Codes, was die Überprüfung erleichtert.
  3. Tests sollten zusammen mit dem getesteten Code überprüft werden, falls Testfälle fehlen oder Ihre Tests nicht ordnungsgemäß funktionieren.
  4. Tests und Codeüberprüfungen neigen dazu, unterschiedliche Probleme zu erkennen, wobei sich die gefundenen Probleme nur geringfügig überschneiden. Unit-Tests ärgern sich nicht darüber, dass Code erneut getestet werden muss, wenn der Prüfer Probleme feststellt. Entwickler ärgern sich und werden beim zweiten Durchgang wahrscheinlich nicht so gut abschneiden.

Es gibt wahrscheinlich andere Gründe, aber diese sind diejenigen, die ich persönlich gesehen und erlebt habe, als ich Codeüberprüfungspraktiken in 3 verschiedenen Teams / Unternehmen implementiert habe.

Bearbeiten Das oben Gesagte gilt natürlich für Zeiten, in denen die Codeüberprüfung ein Schritt in Ihrem Softwareentwicklungsprozess ist (ob Wasserfall oder agil). Wenn Sie an einem besonders großen oder schwierigen Codeabschnitt arbeiten, können Sie jederzeit ein weiteres Paar Augen darauf werfen.

Bryan Anderson
quelle
11

Codeüberprüfungen gelten für den Fall, dass der Code "fertig" ist.

In meiner Organisation umfasst unsere Definition von "erledigt" Komponententests (wie wir TDD anstreben), sodass Codeüberprüfungen vollständigen Code enthalten - und vollständiger Code Tests enthält.

Außerdem müssen Tests überprüft und umgestaltet werden, damit es sinnvoll ist, dass sie Teil der Codeüberprüfung sind.

Neil Thompson
quelle
Ist es nicht sinnvoll, Code zu Code zu überprüfen, bevor Sie Unit-Tests dafür schreiben?
Dimba
Wenn Sie Tests haben und die Codeüberprüfung Änderungen am Code vorschlägt, können Sie die Änderungen am Code mit Sicherheit vornehmen, da sie von Tests unterstützt werden. Ohne Tests können Änderungen, die sich aus der Codeüberprüfung ergeben, zu Fehlern führen.
Ok, vielleicht habe ich mich nicht gut erklärt. Was ich meine, ist ein Fall, in dem Ihr Code für völlig neue Funktionen bestimmt ist und noch nicht durch Unit-Tests abgedeckt ist. Wird es gut sein, eine Codeüberprüfung für Code durchzuführen, bevor Sie Komponententests für diese neue Funktion schreiben?
Dimba
Hallo Dimba. Ich bin mir nicht sicher, ob es einen absolut besten Weg gibt, um ehrlich zu sein. Persönlich würde ich den Code überprüfen lassen, nachdem die Tests geschrieben wurden, aber das liegt daran, dass ich mich selbst und die Vorlieben der Leute kenne, mit denen ich arbeite. Vielleicht versuchen Sie jede Technik und sehen Sie, welche Sie / Ihr Team bevorzugen? Die Hauptsache ist, dass Sie Tests haben - dort gut gemacht.
4

Tests sollten als Teil des zu überprüfenden Codes betrachtet werden. Daher ist es sinnvoll, nach Abschluss der Tests zu überprüfen.

Stellen Sie sicher, dass auch die Tests überprüft werden. Dies ist wichtig für diejenigen, die noch keine Erfahrung mit Unit-Tests haben.

Stellen Sie sicher, dass Ihr Team die Abhängigkeitsinjektion, Isolations-Frameworks, Mocks gegen Stubs, Nähte, Interaktion gegen zustandsbasierte Tests und Integration gegen Unit-Tests unterschätzt.

Sie müssen die oben genannten Themen nicht implementieren, sollten sie aber verstehen.

Scott Coates
quelle
2

Gut,

Dies hängt davon ab, was Sie unter "Unit Test" verstehen ...

Wenn es sich um einen Unit-Test im TDD-Stil handelt, ist er bedeutungslos, da Sie einen Test schreiben, während Sie Ihren Code schreiben. Es gibt keinen späteren Fall. In diesem Fall verbessern Sie die Codequalität kontinuierlich: Refactoring ...

UND

Wenn es ein klassischer "Unit-Test" war [was auch immer es bedeutet, ich weiß es nicht, aber ich meine Test, nachdem Sie die Codes geschrieben und normalerweise von anderen Leuten durchgeführt haben], dann ist das Hauptkriterium, was Sie von Codereview und Art der Unit-Tests erwarten: wenn Wenn Sie eine schnelle Überprüfung des Feedbacks wünschen und Maßnahmen ergreifen möchten und keinen automatisierten Komponententest haben, müssen Sie den Komponententest abwarten. Wenn Sie ausgereifte Probleme bei der Codeüberprüfung identifizieren und die Lösung schrittweise für die nächsten Iterationen anwenden möchten, können Sie dies vor dem Komponententest tun ...

Aber persönlich ist für Codereview nach oder nach einem Unit-Test für mich kein wirkliches Kriterium ...

Warum machen wir Codereview? Für die Codequalität ... Anstelle eines "Qualitätskontroll" -Tors sollten Sie Qualität in die Umgebung Ihres Softwareentwicklungsprozesses einbringen ...


quelle
@Danke für die Antwort. Vielleicht war mir nicht klar, aber ich bezeichne die Codeüberprüfung nicht als eine Art formelles "Qualitätskontroll" -Tor. Ich versuche zu sehen, was in Bezug auf Geschwindigkeit / Qualität der Entwicklung "richtig" ist
dimba
2

Ich würde eher sagen, seien wir "agil" ... warten Sie nicht, bis der Code fertig ist, um eine schnelle, informelle Codeüberprüfung durchzuführen: Es gibt Entwickler, mit denen und Themen, mit denen Sie tatsächlich auf das Ganze warten können Code + Testphase muss beendet sein ... aber

Wenn es um wirklich neue Themen geht (ganz neues Feature, fast recherchiert, etwas völlig Neues für das Team), Code-Überprüfung frühzeitig, keine Zeit verlieren: Lassen Sie von Zeit zu Zeit einen Mitarbeiter einen Blick darauf werfen: Isolation ist ein wichtiger Faktor des Versagens in diesem Fall.

Wenn der Entwickler ebenfalls neu im Team ist, überprüfen Sie den Code frühzeitig und möglicherweise häufig .

Übrigens müssen auch Unit-Tests überprüft werden.

Armel
quelle