Der beste Weg, um Entwicklung und Tests synchron zu halten

Wir haben 1 Frontend-Entwickler und 2 Backend-Entwickler und 1 QA. QA ist für das Schreiben der End-to-End-Tests mit Cypress verantwortlich. FE-Entwickler schreibt die Unit-Tests. Backend-Entwickler schreiben die Unit-Tests im Backend-Repository, während QA die Microservice-Integration und e2e-Tests schreibt.

Ich möchte, dass QA und Entwickler synchron arbeiten können, sodass der vom Entwickler erstellte Pull-Request überprüft wird, aber erst zusammengeführt werden sollte, wenn die Integrations- und e2e-Tests von der zu bearbeitenden QA bereit sind on im selben Feature-Zweig.

Ist das der richtige Ansatz? Was ist der beste Weg, um die Entwicklung und das Testen synchron zu halten?

Entwickler scheinen diesen Ansatz nicht besonders zu mögen, da sie ihren Code frühestens in den development-Branch gemergen müssen, damit ihr nächster Feature-Branch, der von development erstellt wird, die jüngsten Änderungen enthält.

Was haben deine Entwickler vorgeschlagen? Ich meine, sie sind diejenigen, die mit diesem System arbeiten müssen.
@nvoigt spricht der letzte Absatz des OP das nicht an?
Bei diesem Ansatz gibt es so viele falsche Dinge. :) Entwickler schreiben nicht einmal selbst Tests für die REST-API? Das ist ein neues Maß an Faulheit :) Du schreibst e2e (ich vermute, du meinst Selenium/Puppeteer?) Tests für die Features, die gerade entwickelt werden? Dies ist der teuerste Code, den Sie in Ihrer gesamten Codebasis haben werden. Es sollte wenige e2e-Tests geben und sie sollten für eine stabile Funktionalität geschrieben werden, bei der die Wahrscheinlichkeit einer Änderung gering ist. Holen Sie sich besser einen manuellen QA, der sich wirklich um die Funktionalität kümmert, anstatt jemanden, der für faule Entwickler arbeitet.
@StanislavBashkyrtsev Danke für den Hinweis. Dev schreibt die Komponententests für die Microservices. Nicht Integrations- und e2e-Tests für die Microservices. Sollte es nicht so sein? QA beim Schreiben von e2e Ich meinte Cypress . Außerdem schreibt QA das e2e für Microservices. Ich dachte, wir könnten die Integration für Microservices an den Entwickler verschieben, aber ist es so, dass der Entwickler auch e2e für Microservices schreiben sollte?
Ich würde so viel Automatisierung wie möglich an die Entwickler weitergeben. Es ist oft schwierig, sie davon zu überzeugen, UI-e2e-Tests zu schreiben, aber das Schreiben von Tests für API (egal ob e2e oder nicht) ist eine Norm. Und egal, wer sie schreibt – die Anzahl der UI-e2e-Tests muss klein sein, wenn es der Anfang des Projekts ist – wahrscheinlich weniger als 10. Sie sind eine große Nervensäge und zahlen sich selten aus. Es ist sicherlich in Ordnung, sie NICHT direkt zu schreiben, nachdem das Feature fertig ist – Benutzer/Stakeholder können darum bitten, die Funktionalität zu ändern, nachdem sie damit begonnen haben, es zu verwenden, also lohnt es sich, so viel Zeit für etwas zu investieren, das sich bald ändern wird?

Antworten (4)

Ein Ansatz, den Sie ausprobieren könnten, besteht darin, die QA vor den Entwicklern arbeiten zu lassen.

Es würde ungefähr so ​​funktionieren:

  • Back-End-Entwickler schreiben verkürzte API-Aufrufe, die das Verhalten der fertigen Funktionalität nachahmen
  • UI-Entwickler erstellen ein Boilerplate-Front-End, das die API aufruft (Ergebnisse werden von den Stubs zurückgegeben).
  • In diesem Stadium gibt es keinen geschriebenen Implementierungscode, nur Rahmencode
  • Das sollte schnell gehen
  • Die QA beginnt mit der Arbeit am Schreiben ihrer End-to-End- und Integrationstests unter Verwendung des Boilerplate-Front-Ends und der Stubbed-API
  • Die Entwickler machten sich an die eigentliche Implementierung
  • QA beendet ihre Tests, bevor die Entwickler fertig sind
  • Die Entwickler sind jetzt nicht mehr von der QA abhängig – sie können die vorhandenen Tests verwenden, um zu bestätigen, dass ihr Code wie erwartet funktioniert

Dies erfordert einige Koordination und Sie müssen die Dinge sorgfältig planen. Tatsächlich handelt es sich um eine testgetriebene Entwicklung, die auf Funktionsebene durchgeführt wird.

TLDR: Optimieren Sie den Durchsatz und Ihre Mitarbeiter werden T-förmig .


Zunächst einmal sollte ich ansprechen

Ist das der richtige Ansatz?

Darauf lautet meine Antwort: "Fragen Sie keine Fremden im Internet. Probieren Sie es aus und sehen Sie." Agile beinhaltet zwei Konzepte, die hier relevant sind:

  1. Versuchen-prüfen-wiederholen Zyklen
  2. Selbstverwaltende Teams

In Bezug auf das erste ... versuchen Sie es und sehen Sie. Stellen Sie sicher, dass Sie über eine messbare Grundlinie verfügen, z. B. den Durchsatz (die Zeit, die benötigt wird, um ein einzelnes Ticket von „In Bearbeitung“ auf „Fertig“ zu bringen). Dann versuchen Sie Ihre vorgeschlagene Änderung für ein oder drei Wochen. Dann nochmal messen und prüfen.

Aufgrund des zweiten würde ich jedoch dringend davon abraten, dies einfach dem Team aufzuzwingen. Der „Try-and-see“-Ansatz sollte dabei etwas helfen, aber Sie müssen sich dennoch um ihre Bedenken kümmern. Was mich zu ...

Entwickler müssen ihren Code frühestens in den Entwicklungszweig gemergt haben, damit ihr nächstes Feature [...]

Mein Vorschlag wäre ... Springen Sie nicht sofort zum nächsten Feature. Das Feature, das Sie gerade "fertiggestellt" haben, ist vielleicht fertig, aber es ist noch nicht fertig! Anstatt zu etwas Neuem zu springen und weitere laufende Arbeiten zu büffeln, konzentrieren Sie sich darauf, dieses eine Ticket zuerst bis zum Ende zu bringen.

Nun, ja, die Nicht-QA-Entwickler haben keine Erfahrung damit

Microservice-Integration und e2e-Tests

aber so? Sie können lernen. Einer von ihnen kann mit der Qualitätssicherung zusammenarbeiten, während ein anderer alleine recherchiert und der dritte an einem nicht verwandten Lieblingsprojekt arbeiten kann (zum Beispiel). Indem Sie Schlupfzeiten einbeziehen ( eher auf Durchsatz als auf Auslastung optimieren ) , konzentrieren Sie sich darauf , einzelne Tickets zu erledigen , während Ihre Teammitglieder ihre Sägen schärfen können . Auf diese Weise erwerben Ihre Entwickler im Laufe der Zeit neue Fähigkeiten (werden T-förmig) und können möglicherweise einige der QA-Aufgaben selbst übernehmen, wodurch das Team Tickets so schnell wie möglich von „In Bearbeitung“ zu „Fertig“ bringen kann.

Was du am Ende willst, oder?

Vielen Dank für Ihren Kommentar. Ich war ein wenig besorgt darüber, viel Arbeit an die Entwickler abzuwälzen und dass dies das Entwicklungstempo beeinträchtigen könnte. Sollen Entwickler im Allgemeinen die Microservice-Integration und e2e-Tests schreiben?
@SKhurana In Bezug auf "Ich war ein wenig besorgt darüber, viel Arbeit an Entwickler zu verschieben und dass dies das Entwicklungstempo beeinflussen könnte", funktioniert es in beide Richtungen. Sobald die QA abgeschlossen ist, hat die QA keine direkte Arbeit mehr zu erledigen, sodass sie/er auch den Entwicklern helfen kann. Wenn er/sie Integrationstests schreiben kann, kann er/sie auch lernen, Unit-Tests zu schreiben.
In Bezug auf "Sollen Entwickler im Allgemeinen die Microservice-Integration und e2e-Tests schreiben?" Wenn Sie meine persönliche Meinung hören möchten, ja, aber noch einmal, ich bin nur ein Fremder im Internet. Jedes Unternehmen ist anders.

Eine mögliche technische Lösung könnte hier darin bestehen, sie zu bitten, einen zweiten Zweig zur Versionskontrolle zu erstellen . Wenn die Entwickler glauben, dass sie ihre Arbeit beendet haben, wechseln sie in einen Zweig „ausstehende QA-Tests“. Endgültige Zusammenführungen in die Produktion finden nur von diesem Zweig aus statt.

Woraus erstellen Entwickler in diesem Fall ihre neuen Branches? @mike robinson Entwickler möchten die neueste Kopie der Codebasis haben, wenn sie einen neuen Zweig erstellen.
@SKhurana-Entwickler würden vom Zweig „devDonePreQa“ abzweigen. Dieser Ansatz könnte funktionieren, aber es könnte chaotisch werden, wenn ein Fehler gefunden wird und Sie den Fix plötzlich an mehrere Zweige weitergeben müssen.
In der modernen CI sind die besten Verzweigungsstrategien diejenigen, die so wenig Verzweigungen wie möglich verwenden. Die fortschrittlichste davon ist die Trunk-basierte Entwicklung, bei der es nur einen Zweig gibt. Daher würde ich sicherlich andere Optionen in Betracht ziehen, bevor ich an Zweige denke.

Hier ist eine Strategie, die für mich als Projektmanager, der auch eine sehr lange Geschichte in der reinen Softwareentwicklung hat, sehr gut funktioniert: „Dass es zwei unterschiedliche Ausprägungen der Idee des ‚Softwaretestens‘ gibt.“ Auch wenn der identische Begriff verwendet wird , sie sind tatsächlich disjunkte Aktivitäten. Jeder wird zu einem anderen Zeitpunkt für einen gleichermaßen legitimen Zweck angewendet.

(1) „Testgetriebene Entwicklung“ bezieht sich auf die Vorstellung, dass der einzelne Softwareentwickler nicht „das Ticket schließen“ und „seine Änderung akzeptieren lassen“ kann, bis er sowohl die Quellcodeänderung als auch einen Test bereitstellt, der nicht nur das beweist seine Änderung funktionierte, aber es hat nichts kaputt gemacht. (Diese Tests sollen Teil einer ständig wachsenden Bibliothek von Tests werden, die vom „Build-Prozess“ automatisch und kontinuierlich angewendet werden können.) Dies findet die meiste Zeit auf einer „ziemlich mikroskopischen“ Ebene statt.

(2) „Klassische ‚QA‘“ (in Ermangelung eines besseren Begriffs …) ist eine unabhängige und eher geschäftsorientierte Tätigkeit – ebenfalls häufig automatisiert, aber auf andere Weise – die von einem völlig separaten Team durchgeführt werden sollte . Diese sucht insbesondere nach kundensichtbaren und geschäftsrelevanten Themen, „die per se nichts mit ‚dem Quellcode‘ oder ‚der letzten Änderung‘ zu tun haben“.

Und es gibt – und soll es geben – eine synergetische Beziehung zwischen den beiden. Wenn Sie möchten, "konzentriert sich einer auf das 'Wie', während der andere sich auf das 'Was' konzentriert." Wenn dieser Fehlerfisch "in den Fluss hinauskommt und Ärger macht", muss er durch zwei verschiedene Fischernetze!