Was sollte zuerst kommen: Testen oder Codeüberprüfung?

25

Ich bin ein Neuling in der Programmierung von Entwurfsmustern und Lebenszyklen und habe mich gefragt, was zuerst kommen soll, ob Code überprüft oder getestet werden soll, da dies von unterschiedlichen Personen durchgeführt wird.

Warum sollte man sich die Mühe machen, Code zu überprüfen, wenn niemand überprüft hat, ob er überhaupt funktioniert? Andererseits können einige Fehler frühzeitig gefunden werden, wenn Sie die Überprüfung vor dem Testen durchführen.

Welcher Ansatz wird empfohlen und warum?

Silber Licht
quelle
1
Beachten Sie, dass sich die Frage auf die Reihenfolge dieser Schritte
bezieht
8
Wenn Sie TDD verwenden, ergibt Ihre Frage nicht einmal einen Sinn.
Edward Strange

Antworten:

40

Zuerst Entwickler-Unit-Tests, dann Code-Review, dann QS-Tests, wie ich es mache. Manchmal findet die Codeüberprüfung vor dem Unit-Test statt, aber normalerweise nur, wenn der Codeüberprüfer wirklich überfüllt ist und dies das einzige Mal ist, dass er dies tun kann.

HLGEM
quelle
1
Das ist ein guter Weg, um es anzugehen. Ich möchte nur hinzufügen, dass es auch nützlich ist, den Test selbst zu codieren (hauptsächlich, um Deckungslücken zu erkennen).
Kevin Hsu
@ KevinHsu, ausgezeichneter Punkt
HLGEM
15

Unser Standard ist die Codeüberprüfung, bevor das Produkt an die Qualitätssicherung übergeben wird. Der Grund dafür ist, dass nach dem Testen und Verifizieren des Produkts weniger Anreize bestehen, die Code-Interna umzugestalten und anderweitig zu ändern. Es müsste dann alles nochmal getestet werden. Beachten Sie, dass wir in den meisten Fällen auch Komponententests durchführen.

Marcie
quelle
8

Idealerweise in einer agilen Welt, beides :)

Testgetriebene Entwicklung ist eine Methode, die die Entwicklung von Komponententests vor dem Schreiben des eigentlichen Codes fördert. Auf diese Weise können Sie die Spezifikation in Code erfassen und Tests schreiben, die die Tests bestehen. Anschließend sind automatisierte Integrationstests, die sicherstellen, dass alle verschiedenen Komponenten zusammenpassen, eine gute Sache, um sicherzustellen, dass die Funktionalität Ihrer Anwendung den Erwartungen entspricht.

Bei der Codeüberprüfung ist die Paarbildung eine nützliche Methode, um einen anderen Gedanken daran zu haben, Ihren Code zu übersehen, während Sie ihn tatsächlich schreiben. Dies ist jedoch nicht unbedingt ein praktischer Ansatz. In meinem derzeitigen Unternehmen wird der Code überprüft, nachdem er auf dem Personalcomputer des Entwicklers getestet wurde, aber bevor er auf einem freigegebenen Entwicklungsserver bereitgestellt wurde.


quelle
6

Die Codeüberprüfung dient dazu, bereits funktionierende Elemente zu "polieren", um sicherzustellen, dass der Code die gewünschte Qualitätsstufe aufweist und den vom Unternehmen festgelegten Code-Richtlinien entspricht.

Die Codeüberprüfung kann auch als Teil der zukünftigen allgemeinen Optimierungsaktivität erfolgen, bei der Sie den alten Code überarbeiten und verbessern.

Wenn Sie die Codeüberprüfung vor dem Einchecken üben, besteht die Codeüberprüfung aus zwei Testphasen: Wenn Sie als Entwickler Ihren Code zuerst testen, Ihr Peer die Codeüberprüfung durchführt, Sie ihn einchecken, und später von engagierten Testern gründlichere Einzel- und Tests durchgeführt werden Integrationsprüfungen.


quelle
4

Zuerst testen. Zuletzt testen. Test, Test, Test.

Code-Überprüfung ist schön zu haben. Aber schwierig - kann ein schmerzhafter Prozess sein, wenn Persönlichkeiten beteiligt sind oder unterschiedliche Meinungen.

Das Testen ist sehr klar: Entweder funktioniert es oder es funktioniert nicht. Also testen, testen, testen! Und Code-Überprüfung, wenn möglich.

PP.
quelle
Und wann schlafen?
4
Codeüberprüfungen können Dinge erfassen, die beim Testen nicht möglich sind, und sie können erheblich weniger Zeit in Anspruch nehmen. Zumindest ist es gut, ein Verhältnis zu einem anderen Entwickler aufzubauen und die Arbeit des jeweils anderen zu überprüfen. Außerdem lernst du so viel von ihrem Code, wenn du den Gefallen erwiderst!
Ethel Evans
1
Nicht einverstanden ... Code - Reviews sind von entscheidender Bedeutung, nicht nur für geringfügige Fehler zu finden , aber für Stil Fehler zu entdecken und Performance Bugs , die ein erfahrener Programmierer , indem man erkennen kann , aber nehmen viel Zeit testen zu finden
Amit Wadhwa
Eine Sache, die Code-Überprüfung oft erkennt, dass Unit-Tests niemals erkennen werden, ist, wenn der Entwickler die Anforderungen falsch interpretiert. Auch Dinge wie unbehandelte Ausnahmen oder Entscheidungspfade ohne Code (wenn er vergessen hat, den Code für das zu schreiben, was passiert, wenn eine Genehmigung nicht genehmigt wird, dann hat er wahrscheinlich auch keinen Test!)
HLGEM
2

Bei meinem letzten Job hatten wir drei verschiedene Arten von Codeüberprüfungen, die wir in verschiedenen Phasen des Produktlebenszyklus durchführen würden. Der erste Typ, den wir Sanity Review nannten, fand statt, bevor ein Entwickler Unit-Tests durchgeführt hatte - tatsächlich wurden Sanity Reviews durchgeführt, noch bevor die Funktionen abgeschlossen waren. Die Idee war, dass zwei Teammitglieder sich hinsetzen und einfach ein paar zufällige Codeabschnitte durchgehen, wie es im Entwicklungsprozess war, um sicherzustellen, dass die Entwicklung gut lief und wir nicht mit einem Riesen enden würden TDWTF-Eintrag, sobald das Feature für die Zusammenführung bereit war. Dies wurde hauptsächlich für Personen durchgeführt, die zusätzliche Unterstützung benötigten (Junior-Entwickler, neue Mitarbeiter und Personen, die mit Arbeiten beauftragt waren, mit denen sie weniger vertraut waren als andere Teammitglieder) zu einer kurzen Besprechung gehalten, in der nur ungeheure Probleme angesprochen wurden.

Als nächstes hatten wir Unit Reviews. Diese wurden in der Regel mit drei Entwicklern durchgeführt und wurden durchgeführt, wenn eine Einheit / ein Feature getestet wurde und bereit war, in den Hauptbaum integriert zu werden. Dies war die fleischigste Kritik und würde ziemlich ins Detail gehen. Wir hatten drei Entwickler dafür, weil wir den ursprünglichen Autor des Codes hatten, den Baumpfleger, der den Code abmelden musste, bevor er zusammengeführt werden konnte, und einen dritten Entwickler, der als Backup für den ursprünglichen Entwickler ausgewählt worden war (Die Idee war, dass nach Fertigstellung eines Codeabschnitts ein vollständiger Wissenstransfer an ein anderes Teammitglied stattfinden sollte, sodass immer mindestens 2 Personen im Team waren, die sich mit einem Teil der Codebasis voll auskannten.)

Zuletzt hatten wir Projektprüfungen. Dies umfasste das gesamte Team und dauerte ungefähr eine Woche. Nach der Qualitätssicherung und Produkteinführung war es das Ziel, alle Beteiligten dazu zu bringen, alle Änderungen an der gesamten Codebasis während des letzten Veröffentlichungszyklus durchzugehen, wo es jedem möglich war Sprechen Sie über architektonische Veränderungen, Fallstricke und entscheiden Sie, was überarbeitet und repariert werden muss, bevor wir mit der Entwicklung der nächsten Version des Projekts beginnen.

Cercerilla
quelle
2

Schreiben Sie zunächst automatisierte Tests für den zu entwickelnden Code. Überprüfen Sie die Tests, um sicherzustellen, dass alle bekannten Anforderungen getestet werden. Schreiben Sie den Code. Überprüfen Sie so oft wie gewünscht.

Wenn manuelle Tests erforderlich sind, muss der Code unbedingt überprüft werden, bevor manuelle Tests durchgeführt werden. Andernfalls werden in der Codeüberprüfung vorgeschlagene Designverbesserungen abgelehnt, da die manuellen Tests erneut ausgeführt werden müssen.

Kevin Cline
quelle
Und was ist mit Kritik? Es muss auch wiederholt werden, nachdem der Code nach dem Testen geändert wurde (wenn Fehler gefunden wurden).
Silver Light
2

Welches ist zuerst das Ei oder das Huhn?
Es hängt davon ab, ob.

Wenn Sie neu sind und nicht sicher sind, was Sie tun, bitten Sie auf jeden Fall einen Kollegen, Ihnen ein wenig zu helfen. Dies ist eine informelle, aber sehr ernsthafte und wertvolle Codeüberprüfung.

Obwohl ich vorschlagen würde, dass Sie zuerst Ihre eigene Drecksarbeit machen, stellen Sie sicher, dass Sie den Code ausgebügelt und an den richtigen Stellen gut kommentiert haben (dh an den kniffligen Stellen, nicht an den offensichtlichen Stellen), funktioniert es zumindest im Grunde (Sie haben) Mindestanforderungen für allgemeine Fälle und einige Grenzfälle oder Ausnahmen). Dann bringen Sie es zu Ihrem Kollegen.

Eine zu frühe Überprüfung Ihres Codes kann zu einer furchtbaren Zeitverschwendung führen. Wenn Sie es zu spät überprüfen, wird Ihre Zeit möglicherweise fürchterlich verschwendet. Sie müssen die richtige Balance für höchste Effizienz finden. So gehen einige Tests zuerst, dann die Überprüfung, dann weitere Tests. Möglicherweise verfügen Sie je nach Komplexität und Iteration über mehrere Codeüberprüfungen mit unterschiedlichen Zwecken und Schwerpunkten.

Je weniger sicher Sie sind, desto mehr Bewertungen sind verfügbar (wenn Sie sich in der frühen Lernphase befinden, ist dies normal). Je sicherer Sie sind, desto mehr Bewertungen sind auch vorhanden (es ist niemals gut, sich selbst zu vergewissern, das heißt, Sie sind im Allgemeinen nicht ganz so gut im Team und könnten andere in Schwierigkeiten bringen. Sie müssen sicherstellen, dass Ihr Code verstanden werden kann und von anderen benutzt). Es ist, wenn Sie in der Mitte sind, dass Bewertungen einige verteilt werden können.

Nur meine zwei Cent.

asoundmove
quelle
2

Capers-Jones, der mehr als jeder andere die Effizienz und Qualität von Softwareentwicklungsprozessen untersucht und gemessen hat, empfiehlt die folgende Abfolge von Maßnahmen zur Fehlerbeseitigung:

  • Konstruktionsprüfungen
  • Code-Inspektionen
  • Unit-Tests
  • Neue Funktionstests
  • Regressionstests
  • Leistungstests
  • Systemtests
  • Externe Betatests

Einer der Gründe für die Durchführung der Codeinspektion vor dem Testen besteht darin, dass bei der Überprüfung nicht nur der Code selbst, sondern auch die Testbarkeit des Codes berücksichtigt werden kann.

Johnblattner
quelle