Werden Entwicklung und Test eines Features in Scrum gleichzeitig durchgeführt?

Nehmen wir an, ein Scrum-Team muss eine neue Funktion implementieren.

Schreiben QA-Ingenieure automatisierte Tests für die Funktion, während Entwickler Code für die Funktion schreiben? Mit anderen Worten, QA-Ingenieure haben noch nichts zu testen, aber schreiben sie bereits automatisierte Tests? Es ist also wie die TDD- Praxis (bei der wir zuerst einen Test erstellen und dann Code schreiben), richtig?

Antworten (3)

Schreiben QA-Ingenieure automatisierte Tests für die Funktion zur gleichen Zeit wie die Entwickler den Code der Funktion schreiben?

Im Idealfall ja. Die beiden Aktivitäten müssen von einer Zusammenarbeit zwischen Entwicklern und Testern durchgeführt werden. TDD ist eine andere Technik, die verwendet werden kann. Die Idee ist, sich von dem Verhalten abzuwenden, an das viele gewöhnt sind, nämlich dass Entwickler den Code schreiben und ihn dann schrittweise an Tester weitergeben.

Wenn Sie die oben erwähnte Zusammenarbeit nicht von Anfang an erreichen oder erst testen oder TDD verwenden können und Sie sich noch in einer Übergangsphase vom alten Ansatz befinden, sollten Sie zumindest versuchen, die Zeit zwischen dem Schreiben der zu verkürzen Code und Testen und vermeiden Sie, dass sich das Testen am Ende des Sprints häuft .

Danke schön! Aber wenn QA-Ingenieure neue Tests hinzufügen, bevor das Feature implementiert wird, dann lehnt CI alle Builds der anderen Entwickler ab (weil das Feature fehlt). Rechts? Was machen wir damit?
Ich denke, du denkst immer noch auf die alte Art und Weise darüber nach. Entwickler und Tester arbeiten nicht gleichzeitig an einer Implementierung, sondern immer noch getrennt. Es ist eine Zusammenarbeit. Sie schreiben Tests und Implementierung zusammen in einer engen Schleife, also gibt es Tests, die etwas Code ausführen, dann mehr Tests und mehr Code und so weiter. Sie gehen zusammen. Daher sollte es keine Fälle geben, in denen Tests ohne die begleitende Implementierung auf den CI-Zweig übertragen werden.
Sie meinen, sie teilen sich denselben Git-Zweig?
Ja. Letztendlich ist es bei Scrum das Team, das entscheidet, wie es die Arbeit organisiert, welche Branches es verwendet usw. Aber ich sehe nicht wirklich den Vorteil verschiedener Branches für die Implementierung und die Tests. Normalerweise sollten Sie eine Definition of Done haben, die respektiert werden muss. Wenn Sie Tests haben, dann sind diese Tests höchstwahrscheinlich Teil dieser Definition of Done, sodass ein Zweig ohne den anderen keine "Done"-Funktion widerspiegelt.
@Daniel Bei den erfolgreichsten Operationen, an denen ich mit einer Form von BDD teilgenommen habe, wurden die Testszenarien vor der Implementierung spezifisch genug (auf Englisch) entwickelt, dass die Entwickler keine Zweideutigkeit bei der Übersetzung in Code hatten, und ich hatte sogar nicht- Technische Stakeholder überprüfen die Testfälle direkt in der PR, um zu bestätigen, dass die Software das getan hat, was sie wollten.
@Daniel Genau wie bei der Funktionsentwicklung sollten automatisierte Tests nicht gepusht werden, bis sie lokal und/oder in einem Zweig getestet wurden und funktionieren (und sie bestehen, und sie werden Master/Main weitergeben, wenn sie gepusht werden). Wenn QA-Ingenieure Tests so vorantreiben, dass sie alle Zweige betreffen, nur um einen einzelnen Zweig testen zu können, ist etwas sehr schief gelaufen. QA-Ingenieure müssen wahrscheinlich nicht in derselben Branche arbeiten, in der die Entwicklung stattfindet, bevor das Ticket in die QA-Phase gelangt (obwohl dies für bestimmte Teams und Einzelpersonen mit bestimmten Setups am besten funktionieren kann).
@NotThatGuy Ich meinte nicht, dass QA-Ingenieure ihre Tests in den Trunk schieben und alle anderen Zweige unterbrechen. Aber QA-Ingenieure können ihre Tests im Feature-Zweig (wo das Feature entwickelt wird) festschreiben, richtig?
@Daniel Ich würde nicht empfehlen, dass ein QA-Ingenieur Tests festschreibt, die dazu führen, dass der Build in einem Zweig fehlschlägt, an dem ein Entwickler gerade arbeitet. Das kann das Leben des Entwicklers erschweren, denn zu sehen, ob der Build funktioniert, kann ein wertvolles Signal sein, und ein fehlgeschlagener Build kann das Testen der Änderungen durch den Entwickler erschweren (sogar in einigen Fällen, in denen er nur aufgrund von Tests fehlschlägt). Es kann auch die Überprüfung umständlicher machen und Zusammenführungskonflikte verursachen. Sie können am selben Zweig arbeiten, für den der Entwickler/das Team damit einverstanden ist, idealerweise, während sie die oben genannten Probleme vermeiden.

Im Scrum-Framework ist es Sache des Teams, zu entscheiden, wie Backlog Items geliefert werden. Viele Teams verfolgen einen Ansatz im TDD/BDD-Stil, obwohl dies normalerweise auch von explorativen Tests und UAT begleitet wird.

Wenn es um die Verwaltung von TDD mit kontinuierlicher Integration geht, lautet die Antwort auf Ihre Frage Verzweigung . Von Entwicklern wird normalerweise erwartet, dass sie einen neuen Zweig für zu inkrementierenden Code und dann eine Pull-Anforderung für getesteten Code (einschließlich der Tests) für die Peer-Review erstellen. Alles hängt davon ab, wie Ihr Team arbeitet, also ist dies letztendlich eine Frage, die Ihr Entwicklungsteam klären muss.

Danke schön! Was aber, wenn Entwickler und QA-Ingenieure in verschiedenen Repositorys arbeiten (Code befindet sich in einem Repository, Tests in einem anderen Repository)? Wie verwalten wir CI in diesem Fall?
Sie müssen fehlgeschlagene Tests im relevanten QA-Zweig ignorieren, bis der entsprechende Implementierungszweig gepusht wird.

Die Antwort darauf hängt von der Story und der Definition of Done für Ihr Unternehmen ab. Sie könnten den Test für ein Feature in einem Sprint entwickeln und das Feature in einem anderen. Wenn Ihre Definition von erledigt keinen Test enthält, kann ein Test später hinzugefügt werden oder nicht.

Ich würde empfehlen, dass Sie sich auf das konzentrieren, was Sie erledigen möchten, und Scrum verwenden, um dies zu erreichen, anstatt sich darauf zu konzentrieren, was Scrum zulässt oder nicht.