Ist es sinnvoll, die Geschäftsfunktionalität vor einer Codeüberprüfung zu testen?

Derzeit haben wir eine Feature-Branch-Entwicklungsumgebung. Funktionen werden als Geschichten angegeben, die jeder Entwickler übernimmt. Sobald ein Feature auf einem Feature-Branch fertig ist, wird ein Pull-Request für dieses Feature geöffnet. Jetzt bleiben noch zwei Schritte: a) Business-Funktionalität testen: Jemand prüft, ob das Feature tatsächlich so implementiert wurde, wie es die Story vorgibt. Dies sollte idealerweise jemand anderes als der Entwickler sein. b) Code-Review: Jemand führt einen Code-Review auf besagtem Zweig durch. Dies sollte idealerweise jemand anderes als der Entwickler sein

a) hat Auswirkungen auf b): Wenn die Funktionalität nicht wie gewünscht umgesetzt wird, muss der Code unbedingt geändert werden .

b) hat Auswirkungen auf a): Wenn der Code einen Fehler enthält, kann die Funktion beeinträchtigt werden .

Ausgehend davon erscheint es sinnvoll, zunächst die Business-Funktionalität zu testen (a) und dann einen Code-Review durchzuführen (b).

Ist das wahr? Was sind Fehler in diesem Setup?

Weitere Frage: Wenn dies ein möglicher Weg ist, welche Art von Tools verwenden Sie, um viele Zweige bereitzustellen? Das Vorhandensein von Microservices usw. führt schnell zu Konflikten (z. B. überlappende Ports, Einschränkungen der Serverressourcen, ...)

Antworten (3)

Es scheint ziemlich pingelig zu sein, die Reihenfolge des Lesens von Code und der Durchführung manueller Tests zu bestimmen, zumal es sich um einen iterativen Prozess handelt.

Da es nicht angegeben ist, besteht die Annahme, dass der Entwickler, der die Arbeit geleistet hat, nicht einfach Code geschrieben und ihn über die Wand geworfen hat. Sie haben es getestet, indem sie eine Kombination aus automatisiertem Testcode geschrieben und einige manuelle Tests über ihre Änderungen durchgeführt haben. Wenn die Codeüberprüfung eingeleitet wird, hat der Entwickler angemessenes Vertrauen, dass das, was er einreicht, korrekt ist, soweit er die Arbeit vor ihm verstanden hat, und die Überprüfung umfasst nicht nur die Produktänderungen, sondern auch den gesamten automatisierten Testcode. Wenn manuelle Tests durchgeführt wurden, sollte der Entwickler erklären können, welche Tests durchgeführt wurden.

Wenn dies zutrifft, sehe ich nicht ein, warum Sie zwischen "Testen der Geschäftsfunktionalität" und "Codeüberprüfung" unterscheiden müssen. Betrachten Sie es vielleicht nicht als "Code-Review", sondern als Peer-Review der Arbeit - des Produktionscodes, der automatisierten Tests und der durchgeführten manuellen Tests. Der Rezensent überprüft wirklich die Qualität all dieser Dinge und führt möglicherweise zusätzliche Sondierungsarbeiten durch, um zu bestätigen, dass es geeignet ist. Je nach Art der Änderungen kann der Aufwand nach Ermessen des Gutachters auf unterschiedliche Dinge gelenkt werden.

Ich stimme der Vorstellung zu, dass die Entwickler testen, was sie implementieren, und den Zweig nur für mehr Personen öffnen, sobald sie überzeugt sind, dass ihre Implementierung Qualität und Anforderungen erfüllt. Wir haben jedoch normalerweise jemanden, der die Geschäftsfunktionalität überprüft, der einen einzigartigen Einblick in die Anforderungen hat (auch in Bezug auf das UI/UX-Gefühl, das der Kunde möglicherweise wünscht), da er in direktem Kontakt mit dem Kunden steht (z. B. kundenorientiertes Projektmanagement). . Die Änderungen, die sie anfordern, sind normalerweise keine, die sich unsere Entwickler ausdenken, aber auch keine, die einfach vorher festgelegt werden können.
@BracketJohn Wenn eine Person „einzigartige Erkenntnisse“ hat und diese nicht frühzeitig mit dem Team teilt, ist dies ein großes Risiko für Ihr Projekt. Die frühzeitige und häufige Übermittlung dieser relevanten Informationen an die Entwickler ist entscheidend, da diese eine Person sonst zum Engpass wird. Es kann für sie sinnvoll sein, auf Iterations- oder Release-Ebene zu überprüfen, aber Ihr Entwicklungsteam (Entwickler + Tester) sollte in der Lage sein, mit hoher Zuversicht etwas zu produzieren, das für Endbenutzer akzeptabel ist.
Ich würde auch hinzufügen, dass Sie überwachen müssen – und die Entwickler müssen dies auch überwachen – dass die Geschäftsfunktionalität zu Beginn vollständig und richtig verstanden wird, indem Sie sofort versuchen, alles, was mehrdeutig oder unklar ist, zu identifizieren und sofort eine Antwort darauf zu erhalten. Es ist äußerst verschwenderisch für einen Programmierer zu glauben, dass er die Aufgabe erledigt hat, nur um dann zu entdecken, dass etwas nicht richtig entworfen wurde, weil der Programmierer eine Menge Schweiß hineingesteckt hat, der jetzt verschwendet ist. "Tu es währenddessen, nicht danach!"

Post-Hoc-Tests sind ein Anti-Pattern

Sie haben den Anwendungsfall für die Test-First-Entwicklung kurz und bündig beschrieben. Im Allgemeinen möchten Sie zuerst feststellen, ob Sie das Richtige gebaut haben. Dann müssen Sie feststellen, ob Sie das Ding richtig gebaut haben!

Vor diesem Hintergrund ist die Vorstellung, die Funktionalität von der Korrektheit des Codes zu trennen, eine falsche Dichotomie. Um eine sinnvolle Definition of Done zu erreichen, müssen Sie beides tun. Noch wichtiger ist, dass Design und Tests in enger Zusammenarbeit durchgeführt werden müssen, um unnötige Übergaben und Prozessreibungen zu vermeiden.

Einheiten- und Akzeptanztests als Post-hoc-Aktivitäten zu behandeln, ist oft ein Markenzeichen von Wasserfallprojekten und „großer Vorausplanung“. Es gibt immer noch einige Projektdomänen, in denen dies erforderlich oder notwendig ist, aber wenn Sie die Frage stellen, gehört Ihr spezifisches Projekt wahrscheinlich nicht dazu.

Selbst wenn Sie nicht per se einer agilen Methodik folgen, erzielen Sie mit einer gut ausgearbeiteten Definition of Done und einem Test-First-Ansatz eher die geschäftlichen und technischen Ergebnisse, die Sie benötigen, als zu versuchen, zu bestimmen, welche Post-hoc-Aktivität vorangehen sollte das andere. Die im Allgemeinen richtige Antwort lautet, dass das Testdesign vor dem Codieren oder Testen kommen sollte, sodass alles Post-Hoc (in welcher Reihenfolge) wahrscheinlich ein Anti-Pattern ist.

Ein weiterer Hinweis zu Code-Reviews

Richtig durchgeführt, ist ein Code-Review eine Form des validierten Lernens. Teams, die am Code zusammenarbeiten oder die Code-Diskussionen verwenden, um die gewonnenen Erkenntnisse zu erfassen, sind oft agiler, da dies als eine Form der kontinuierlichen Verbesserung dient.

Die Überprüfung von Pull-Requests, Pair-Programming oder Mob-Programming sind nicht wirklich „Code-Reviews“ im Gating-Sinne des Begriffs. Nach meiner beruflichen Erfahrung übertünchen Teams, die Code-Reviews für Gating-Zwecke verwenden, weitgehend eine Lücke in ihren aktuellen Prozessen oder Tools und sollten wahrscheinlich erwägen, kontinuierliche Integration (CI), automatisierte Tests oder ein besseres Verzweigungsmodell zu ihren Workflows hinzuzufügen. Dies gilt umso mehr, wenn es in den Bewertungen um Stil oder Korrektheit geht. Ersteres sollte eine Arbeitsvereinbarung innerhalb des Teams darstellen, die durch automatisierte Tools durchgesetzt wird, während letzteres am besten durch ausführbare Tests adressiert wird.

Mit anderen Worten, wenn Sie manuelle Code-Reviews als eine Form von Akzeptanztests verwenden, tun Sie es nicht! Es gibt effektivere Ansätze, und das Team sollte zusammenarbeiten, um den für das Projekt am besten geeigneten auszuwählen.

Normalerweise mache ich einen Geschäftstest, nachdem der Code vom Team überprüft und getestet wurde. Dies soll sicherstellen, dass wir den Benutzern qualitativ hochwertige Software zum Testen liefern. Dies verhindert, dass sie offensichtliche Fehler finden, und stärkt ihr Vertrauen in die gelieferte Software.

Dies bedeutet jedoch nicht, dass die Benutzer nicht während der Entwicklung der Funktionalität konsultiert werden können. Es ist äußerst wertvoll, laufende Arbeiten zu zeigen und zu überprüfen, ob Sie auf dem richtigen Weg sind. Dies hilft Ihnen, die richtigen Dinge zu bauen. Wenn es so funktioniert, wie es sollte, können Sie auf dem richtigen Weg iterieren.

Das Richtige ist wichtiger als der richtige Weg denke ich, solange man nicht freiwillig technische Schulden einführt. Und wie dazu? Das hängt von der Funktionalität und dem Team ab. Der richtige Weg bedeutet (für mich), dass der Code zum Zeitpunkt des Schreibens sauber, bei Bedarf dokumentiert und optimiert ist. Das Richtige zuerst zu bauen, kann jedes (ein anderes) dieser Dinge gefährden. Wenn Sie jedoch wissen, dass Sie das Richtige haben, wissen Sie, dass die Zeit, die benötigt wird, um es richtig zu machen, nicht verschwendet ist