Dilemma von QA vs. Iterationen

17

In meinem Unternehmen arbeiten wir erfolgreich mit agilen Methoden - aber ohne Iterationen. Der Hauptgrund ist, dass wir keinen sauberen Weg finden können, um in einem Iterationszyklus in die Qualitätssicherung zu passen.

Wir verstehen QA als zusätzliche Überprüfung eines bestimmten Builds (Release Candidate), bevor dieser Build für den Kunden bereitgestellt wird. Es soll vermieden werden, dass ein einziges böswilliges Commit die gesamte Version beschädigt. Da Sie nie wissen, um welche es sich handelt, muss die Qualitätssicherung warten, bis sich alle Funktionen / Commits für die Veröffentlichung im Build befinden. (Keine berühmten letzten Worte "Es war nur eine winzige Veränderung" erlaubt.)

Wenn QA Fehler in einem Release-Kandidaten findet, beheben Entwickler diese Fehler im jeweiligen Release-Zweig (und führen sie in Trunk zusammen). Wenn alle Fehler behoben sind, wird ein neues Build bereitgestellt, damit QA erneut testen kann. Nur wenn in einem bestimmten Release Candidate keine Bugs gefunden werden, wird es dem Kunden zur Überprüfung angeboten.

Dies dauert normalerweise ungefähr zwei bis drei Kandidaten, ungefähr eine Woche pro Veröffentlichung. Die Zeit zum Schreiben der Korrekturen ist in der Regel viel kürzer als der Testaufwand. Um die Entwickler auf Trab zu halten, arbeiten sie an Release N + 1, während QA an N arbeitet.

Ohne die Verwendung von Iterationen ist dies kein Problem, da wir die Arbeit für die Releases N und N + 1 überlappen können. Soweit ich weiß, ist dies jedoch nicht mit iterationsbasierten Ansätzen wie Scrum oder XP kompatibel. Sie fordern, dass eine Iteration am Ende freigegeben werden kann, wobei der gesamte Testaufwand in die Iteration einfließen muss.

Ich stelle fest, dass dies zwangsläufig zu einem der folgenden unerwünschten Ergebnisse führt:

(A) Entwickler sind am Ende einer Iteration untätig, da die Qualitätssicherung Zeit benötigt, um einen Release-Kandidaten zu verifizieren, und die Arbeit zur Fehlerbehebung die Entwickler nicht vollständig beschäftigt.

(B) Die Qualitätssicherung beginnt bereits, bevor der erste Release Candidate fertig ist. Dies wird am häufigsten für Stack Exchange empfohlen. Aber es ist nicht das, was mein Unternehmen unter Qualitätssicherung versteht, da es keinen bestimmten getesteten Release-Kandidaten gibt. Und die "winzige Veränderung", die alles kaputt macht, kann immer noch unbemerkt eingeführt werden.

(C) Fehler werden auf die nächste Iteration übertragen. Dies wird auch für Stack Exchange empfohlen. Ich denke nicht, dass es überhaupt eine Lösung ist. Dies bedeutet im Grunde, dass wir nie einen verifizierten Build erhalten, da bei jeder Fehlerbehebung neue, nicht verifizierte Commits zum selben Zweig hinzugefügt werden.

Gibt es einen Ausweg aus diesem Dilemma?

Wolfgang
quelle
4
Warum dauert die Qualitätssicherung so lange? Erfassen Ihre automatisierten Tests keine Regressionen?
PSR
2
@psr: Über dem Einheitenlevel ist es selten, dass alles automatisiert werden kann. AIUI, ihr QA-Team, testet auf Integrations- und Akzeptanzebene. Und automatisierte Tests können nicht alles finden, besonders wenn das Timing eine Rolle spielt.
Bart van Ingen Schenau

Antworten:

9

Wir verstehen QA als zusätzliche Überprüfung eines bestimmten Builds (Release Candidate), bevor dieser Build für den Kunden bereitgestellt wird.

Es gibt nichts, was zwischen dieser Form der Qualitätssicherung und iterationsbasierten Methoden wie Scrum inkompatibel wäre.
Innerhalb von Scrum liefert das Team einen Liefergegenstand in einem x-wöchentlichen Zyklus an seinen Kunden. Der wichtige Teil hierbei ist, dass, wenn das Entwicklungsteam Scrum ausführt, der Kunde das QA-Team und nicht der Endbenutzer Ihres Produkts ist.

Als Entwickler würde ich ein Produkt als QS-fähig betrachten, wenn es die Chance hat, alle Tests zu bestehen. Dies bedeutet wahrscheinlich, dass einige der QA-Tests bereits für die täglichen Builds ausgeführt wurden. Wie sich dies auf die offiziellen Release-Tests des QA-Teams auswirkt, liegt jedoch in Ihrer Verantwortung.

Bart van Ingen Schenau
quelle
1
Dieser Ansatz, die Qualitätssicherung über die Wand zu werfen, birgt tendenziell seine eigenen Probleme. Es verlängert die Rückmeldungszeit erheblich, wenn Sie einen Fehler melden. Wenn Sie zu Beginn des Zyklus etwas schreiben und die Qualitätssicherung nicht bis zum Ende testen, aber einen Randfall übersehen haben, hat Ihr Verstand diese bestimmte Entwicklung zum Zeitpunkt der Meldung des Fehlers hinter sich gelassen. Es ist besser, die Funktionen zu testen, wenn sie vollständig sind.
pdr
1
@pdr: Aus diesem Grund wäre es eine gute Praxis, einen Teil der QS-Tests inoffiziell für den Nacht-Build durchzuführen. Einige Branchen benötigen lediglich ein höheres Konfidenzniveau als "es funktionierte, als wir es nach Fertigstellung der Funktionen getestet haben". Sie benötigen ein Konfidenzniveau "es funktioniert genau in der Version, die wir an Sie geliefert haben".
Bart van Ingen Schenau
Wie schlagen Sie vor, dass QA Zeit findet, um eine zukünftige Version zu testen, wenn sie unter dem Druck steht, den Release-Kandidaten zu testen und aus dem Haus zu bekommen?
pdr
1
@pdr: Indem Sie die inoffiziellen Tests nicht auf die Qualitätssicherung verschieben, sondern sie selbst als Entwicklungsteam ausführen. Sie dienen in erster Linie dazu, das Vertrauen zu stärken, dass Sie ohnehin hochwertige Software liefern.
Bart van Ingen Schenau
Ich würde gerne zustimmen. Es ist meine Erfahrung, dass je mehr Sie Entwickler und QA trennen, desto mehr liegt das Verschulden bei QA und desto weniger verantwortlich sind selbst Entwickler mit ansonsten guter Qualität. Auch hier wird die inoffizielle Qualitätssicherung unter dem Druck der Entwicklungsarbeit zu einer zweitrangigen Aufgabe, die nicht erledigt wird, da Entwickler nicht in Schwierigkeiten geraten, wenn die Software in der Produktion ausfällt. Wenn QA und dev als eine Einheit zusammenarbeiten, um Software gemeinsam bereitzustellen, passiert das nicht so oft.
pdr
11

In den meisten realen Situationen stoppt Agile bei der Lieferung an QA / UAT oder wie auch immer.

Der Aufwand, in einem realen Umfeld von der Qualitätssicherung zur Produktion zu wechseln, wird oft unterschätzt. In vielen Fällen handelt es sich dabei um echte Geschäftsbenutzer beim Testen, das Abmelden des Managements von der realen Geschäftsleitung, das Planen der Freigabe mit Vorgängen usw. usw. Dies ist nicht trivial!

In extremen Fällen muss die Software möglicherweise von externen Stellen zertifiziert werden oder unterliegt strengen Sicherheitstests.

Unter diesen Umständen ist es einfach unmöglich, mehr als eine Veröffentlichung pro Quartal in Betracht zu ziehen, mit Ausnahme von Fehlerkorrekturen.

Bei einem seriösen Softwareprodukt wird es noch schlimmer. Die Dokumentation muss geprüft und veröffentlicht werden. Marketingbroschüren müssen geändert werden. Den Verkäufern muss gesagt werden, was sie verkaufen (keine leichte Aufgabe!) Usw. usw. Sie möchten das Geschäft wirklich nicht mehr als einmal im Jahr durchlaufen lassen.

James Anderson
quelle
5

Die sehr kurzfristige Lösung besteht darin, der Qualitätssicherung nach der Iteration eine zusätzliche Zeitspanne zu gewähren, um die Tests abzuschließen. dh Wenn Sie eine zweiwöchige Iteration haben, geben Sie diese erst in Woche 3 frei. In der ersten Woche der Iteration müssen Sie ohnehin nichts für die nächste Iteration testen.

Aber ich warne Sie vorher, was passieren wird (nachdem ich dies in mehreren Teams gesehen habe): Sie werden in einer Situation enden, in der eine Iteration Sie zwei Wochen Arbeit erledigt haben, die Qualitätssicherung überlastet ist und sie zu Ihnen kommen ganze QA-Woche und in der folgenden Iteration erledigen Sie nur eine Woche Arbeit. Mit dieser Iteration hat die Qualitätssicherung nichts zu tun, und Sie werden denken, Sie haben das Problem gelöst. Bei der nächsten Iteration wird der Zyklus jedoch erneut gestartet.

Also, sobald Sie diese Woche hinzugefügt haben, nur um sicherzustellen, dass Ihre Veröffentlichung stabil ist (eine Sache, die ich gelernt habe, ist, dass, wenn Sie das Vertrauen in das Geschäft verlieren, Agile exponentiell schwieriger zu implementieren ist), machen Sie es gleich auf den langfristigen Plan.

Kaufen Sie eine Kopie von Jez Humbles Continuous Delivery , lesen Sie sie vollständig durch und leiten Sie sie an das Team weiter. Lass dich inspirieren. Dann implementieren Sie alles, was Sie können.

Machen Sie den Build-Prozess so glatt wie möglich. Implementieren Sie eine Unit-Test-Richtlinie, und bringen Sie diese bei jedem Build zum Laufen. Machen Sie den Bereitstellungsprozess zum schnellsten Vorgang, den Sie jemals gesehen haben. Drei Klicks? Nicht glatt genug.

Sobald Sie dies alles getan haben, ist es nicht mehr so ​​wichtig, ob der gelegentliche Regressionsfehler durchkommt. Du weißt, warum? Denn Sie können (optional) ein Rollback durchführen, das Problem beheben und erneut bereitstellen, bevor das Geschäft in die Brüche geht. Tatsächlich kann der Nachtpfleger ein Rollback für Sie durchführen, der Vorgang ist so einfach.

Ich weiß, was Sie denken: Wir haben keine Zeit, das alles zu tun. Lassen Sie sich von mir sagen, was Sie tun. Wenn Sie die Qualitätssicherung überlasten, stellen Sie pro Iteration zu viel bereit. Also nicht. Wenn Sie sie nicht bereits überladen, fragen Sie sie, warum sie noch keine automatisierten Testsuiten haben. Du wirst es bald sein.

Tun Sie dies alles mit voller Sichtbarkeit für das Geschäft. Schätzen Sie den Wert niedriger und geben Sie einen Teil dieser Arbeit in die Iteration ein. Oder, noch besser, zerlegen Sie es in Geschichten und lassen Sie sie, neben allem anderen, Prioritäten setzen.

Erklären Sie ihnen, dass a) es die Stabilität der Veröffentlichung verbessert und b) Ihre Fähigkeit verbessert, auf Probleme für sie zu reagieren, und c) es ihnen später mehr Geschwindigkeit verschafft. Es ist eine seltene Firma, die diese Dinge nicht will. Es ist sicherlich keine agile Firma, die sie nicht haben will. Wenn Sie also Widerstand bekommen, wissen Sie, dass Sie ein anderes Problem haben.

Sobald die kontinuierliche Lieferung abgeschlossen ist, können Sie die Zeitspanne für die Qualitätssicherung am Ende der Iteration verkürzen. Es ist in jedermanns Interesse, die Iterationen so schnell wie möglich wieder parallel auszuführen. Vielleicht haben Sie einen Tag am Ende der Iteration, an dem Sie die Zeit eintragen müssen. Ich habe bereits beantwortet, was ich anderswo tun soll .

pdr
quelle
2

Ohne die Verwendung von Iterationen ist dies kein Problem, da wir die Arbeit für die Releases N und N + 1 überlappen können.

Es scheint ein Problem mit der Art und Weise zu geben, wie Sie entschieden haben, was genau das ist work for release N.

Aus irgendeinem seltsamen Grund (ich kann nur raten einige Missverständnisse besonders Agile Rezepte gibt es) Sie irgendwie entschieden , dass agile Ansatz Mandate alle QA - Team Bemühungen in der Iteration aufzunehmen.

  • Wenn das wirklich der Fall wäre, würde die Popularität von Agile vermutlich nicht annähernd dem entsprechen, was wir jetzt sehen. Ich kann mir nicht vorstellen, dass viele Projekte die obligatorische Synchronisation von Dev-Team-Iterationen mit QA-Testzyklen "überleben" könnten.

Es gibt ein bisschen mehr über Agilität, aber zuerst klären wir work for release N...


Es gibt einfach keinen zwingenden Grund für das Entwicklungsteam, die Arbeit auf diese Weise zu definieren. Im Gegenteil, aus Ihrer Beschreibung geht hervor, dass es anstelle einer monolithischen "Arbeitseinheit" mehrere solche Einheiten gibt, deren Meilensteine ​​leicht zu spüren sind ...

  • Zum Beispiel wird die erste "Einheit" durch einen eindeutigen Meilenstein angezeigt, wenn die Kandidatenerstellung an die Tester übergeben wird, und weitere Meilensteine ​​entsprechen Änderungen, die an Testzyklen beteiligt sind, die von der Qualitätssicherung durchgeführt werden usw.

Beachten Sie auch, dass die von Ihnen definierte Art und Weise auch work for release Nnicht durch den QA-Arbeitsablauf erzwungen wird. Nach dem, was Sie beschreiben, haben die Dinge einen eigenen (und ziemlich vernünftigen) Zeitplan.

Die realistischere Art und Weise, Arbeitseinheiten in Ihrem Fall zu definieren, könnte wie folgt aussehen:

  1. Entwicklungsaktivitäten bis zum Zeitpunkt der Übergabe des Builds an die Qualitätssicherung
    Release Candidate N
  2. Entwicklungsaktivitäten im Zusammenhang mit dem ersten QS-Testzyklus
    Release Candidate N patch 1
  3. Entwicklungsaktivitäten im Zusammenhang mit dem zweiten QS-Testzyklus
    Release Candidate N patch 2
  4. usw., bis zum endgültigen Build

Oben sind Ihre Arbeitseinheiten, egal ob Sie Agile oder was auch immer tun.

Diese sind natürlich und bequem zu definieren, zu folgen und zu verfolgen. Dies fügt sich auch gut in den QS-Zeitplan ein und ermöglicht eine bequeme Koordination der Entwicklungs- und QS-Bemühungen.


Soweit ich weiß, ist dies jedoch nicht mit iterationsbasierten Ansätzen wie Scrum oder XP kompatibel. Sie fordern, dass eine Iteration am Ende freigegeben werden kann, wobei der gesamte Testaufwand in die Iteration einfließen muss.

Ein besseres Verständnis der Kompatibilität mit Agile sieht grundsätzlich falsch aus und hier ist der Grund, warum ...

Die Annahme, die Sie gemacht haben, hat nichts mit Agilität zu tun. Wenn wir seine Philosophie auf den Nennwert bringen, der durch seinen Namen angezeigt wird, ist dies ein Ansatz, der Agilität fördert und praktiziert .

Aus dieser Perspektive widerspricht das Festhalten an einem bestimmten "festen" Arbeitsablauf und das Ignorieren, ob es zweckmäßig ist oder nicht, einfach dem Geist von Agile. Die sklavische Befolgung des "Verfahrens" führt zu Praktiken , die im " Half-Arsed Agile Manifesto " so eloquent verunglimpft werden .


Weitere Informationen hierzu finden Sie in einer Antwort auf eine andere Frage , die unten aufgeführt ist. Werfen Sie einen Blick auf den Hinweis "Lieferbare Version", es sieht so aus, als wäre OP in ähnlicher Weise verwechselt worden:

Man sollte sehr agil sein, wenn es um die Anwendung agiler Prinzipien geht. Ich meine, wenn die Projektanforderungen nicht flexibel sind (stabil oder sich langsam ändern), warum dann die Mühe machen? Ich habe einmal beobachtet, wie das Top-Management Scrum zu Projekten gezwungen hat, auf die es sehr gut ankam. Was für eine Verschwendung. Es gab nicht nur keine Verbesserungen bei der Bereitstellung, sondern Entwickler und Tester waren auch alle unzufrieden.

Für mich ist es einer der wichtigsten Teile von Agile, am Ende jedes Sprints eine versandfähige Version zu haben. Das impliziert mehrere Dinge. Zunächst muss ein Testlevel durchgeführt werden, um sicherzustellen, dass keine Showstop-Bugs auftreten, wenn Sie glauben, dass Sie das Build für einen Kunden freigeben könnten ...

Lieferbare Version, wie ich sehe. Hm. Hmmm. Erwägen Sie,Ihrem Agile-Cocktailein oder zwei Spritzer Lean hinzuzufügen. Ich meine, wenn dies kein Kunden- / Marktbedürfnis ist, dann würde dies nur eine Verschwendung von (Test-) Ressourcen bedeuten.

Ich sehe nichts Verbrecherisches darin, Sprint-End-Release als nur einen Kontrollpunkt zu behandeln , der das Team zufriedenstellt.

  • dev: Ja, das sieht gut genug aus, um es an Tester weiterzugeben. QA: Ja, das sieht für den Fall gut genug aus, wenn weitere Versandtests erforderlich sind - solche Sachen. Team (dev + QA) ist zufrieden, das wars.
Mücke
quelle