Sollte es reine Test-User Stories geben?

Wir schätzen Geschichten mit 1, 2, 4, 6 oder 8 Punkten. Stellen Sie sich eine Geschichte mit weniger Entwicklungsarbeit, aber großem Testaufwand vor. Nehmen wir an, wir schätzen diese Geschichte auf 8 Punkte.

Wir sehen folgende Optionen:

  1. Lassen Sie die Story 8 Punkte sein und seien Sie bereit, dass der Story-Test in den nächsten Sprint rutscht. Auf diese Weise werden Entwicklung und Test in einer Story zusammengefasst, aber das Team erhält keine Punkte für die im aktuellen Sprint geleistete Arbeit. Sie erhalten alle 8 Punkte im 2. Sprint oder wenn der Test endet.

  2. Teilen Sie die Story zu Testzwecken auf, dh Entwicklung und einige kleinere Tests in einer Story, die in einem Sprint abgeschlossen werden können, und schnitzen Sie dann die zweite Story nur zu Testzwecken heraus (eine reine Test-Story). Auf diese Weise holt das Team in beiden Sprints einige Punkte.

In meiner bisherigen Erfahrung haben wir uns für Option 1 entschieden, aber in meinem aktuellen Projekt sind die Leute an Option 2 interessierter. Ich bin mir nicht sicher, ob dies der richtige Weg ist, Geschichten zu teilen.

Punkte zu bekommen ist nur ein psychologischer Aspekt. Bei Geschichten geht es um alles oder nichts. Kein Mittelweg. Zeitraum. Sie sind NUR fertig, wenn Sie etwas liefern, das die Abnahmetests besteht. Wenn es zwei Sprints braucht, muss Ihre Sprintlänge verdoppelt werden. Es klingt wie Kinder, die nach ein paar Punkten für ihren nicht vollständigen Versuch fragen. Sie können es ihnen geben, aber es ist meiner Meinung nach nicht im Geiste der Agilität.
@PhD Ich denke, es ist wichtig zu betonen, dass es kein triftiger Grund ist, die Sprintlänge zu ändern, wenn man eine bestimmte Geschichte nicht innerhalb eines Sprints abschließen kann. Eher, dass die Geschichte nicht richtig aufgeteilt wurde. Weitere Informationen dazu, warum sich die Sprintlänge nicht ändern sollte, finden Sie in diesem Artikel: benday.com/2014/07/24/really-bad-idea-change-sprint-length
Ich habe das gleiche gedacht. Bei der Arbeit mit Kanban ist es sinnvoll, nur eine Story zu haben, die alle Zustände durchläuft und Storys den Besitzer wechseln lässt. Aber im Scrum nervt mich das Bündeln aller Story-Punkte auf einer Karte, die von einem Entwickler zu einem Testingenieur wechseln muss, es erschwert die Planung individueller Kapazitäten und wirft auch das Burn-Down aus dem Gleichgewicht, wenn Geschichten zum nächsten Sprit weitergehen .
Ich stimme PhD zu – lassen Sie sich nicht durch „Punkte“ in die Quere kommen. Die Arbeit ist erst fertig, wenn sie geschrieben und getestet ist. Darüber hinaus muss das Testen automatisiert und kontinuierlich erfolgen, damit Sie eine Regression sofort erkennen: „Etwas, das Sie gerade getan haben, hat etwas kaputt gemacht.“ Testgetriebene Entwicklung ist eine sehr starke Zeitersparnis: Oberflächlich betrachtet scheint es „länger zu dauern“, aber es ermöglicht einem sehr robusten, felsenfesten Produkt, Fristen einzuhalten.

Antworten (7)

TL;DR

Keine Ihrer angegebenen Optionen ist wirklich agil. Sie missbrauchen Punkte in dem Versuch, Fortschritt darzustellen oder „Menschen zur Rechenschaft zu ziehen“. Beides ist im Rahmen von Scrum nicht angemessen.

Punkte sind ein Schätzinstrument. Sie sind nur in der Summe aussagekräftig und werden in erster Linie zur Einschätzung der Teamkapazität während des Sprint Plannings benötigt. Sie als Produktivitätsmetrik zu verwenden, ist irreführend, und der fortgesetzte Missbrauch des Story-Point-Systems schadet letztendlich sowohl dem Team als auch dem Projekt.

Punkte sind keine Belohnungen

Auf diese Weise holt das Team in beiden Sprints einige Punkte.

In Scrum ist eine Story entweder fertig oder nicht fertig; es ist nie teilweise fertig. Sie können das System sicherlich manipulieren, indem Sie Storys künstlich zerlegen, sodass Sie in einem Sprint Punkte „verdienen“ können, indem Sie bestimmte Storys abschließen, selbst wenn das eigentliche zugrunde liegende Feature nicht vollständig ist, aber dies dient keinem anderen praktischen Zweck als der Erhöhung der Geschwindigkeit . Eine überhöhte Geschwindigkeit wird letztendlich Ihre Schätzungen verzerren, dem Team schaden und Ihrem Projekt schaden. Tu das nicht.

Punkte sind auch keine Belohnungen. Sie sind keine Lutscher, die Sie für eine gut gemachte Arbeit verteilen; sie sind einfach eine Arbeitsaufwandsmetrik. Insbesondere Story Points:

  1. Werden in eine Geschwindigkeitsmetrik umgewandelt, indem sie über ein historisches Fenster aggregiert werden und die Arbeitskapazität des Teams im Laufe der Zeit verfolgen .
  2. Werden als Plausibilitätsprüfung verwendet, um festzustellen, ob eine Story ihren beabsichtigten Wert innerhalb einer einzigen Iteration liefern kann.

Punkte messen die Kapazität

Punkte sind sowohl ein Schätzwerkzeug als auch ein Mittel, um die Teamkapazität im Laufe der Zeit zu verfolgen. Beim Schätzen sagen Ihnen Story Points:

  1. Wie viel Aufwand das Team für eine Geschichte hält.
  2. Ob die Geschichte (in ihrer Gesamtheit) in die aktuelle Iteration passt oder nicht.
  3. Ob das Team die Story unverändert in den Sprint übernehmen soll oder ob das Team mit dem Product Owner zusammenarbeiten muss, um die Story zu verfeinern, zu klären, zu zerlegen, zu verwerfen oder neu zu definieren, um das aktuelle Sprint-Ziel zu erreichen.

Punkte dienen auch als Indikator für die Teamkapazität im Laufe der Zeit. Das Sammeln von Punkten bringt keinen Mehrwert für das Projekt, aber die Aussage, dass das Team in einer typischen Iteration normalerweise durchschnittlich 12-16 Punkte erreichen kann, hilft dem Team, seine Fähigkeit einzuschätzen, Geschichten während der Sprint-Planung zu akzeptieren. Dies hilft dem Team, eine Überverpflichtung zu vermeiden, verhindert, dass das Team scheitert, indem es eine untragbare Arbeitsbelastung erzeugt, und vermeidet die Planung eines Sprints, der das angegebene Sprint-Ziel für die Iteration nicht erreicht.

Geschichten sollten in einen Sprint passen

Wenn Ihre Stories nicht in einen einzelnen Sprint passen, haben Sie entweder ein Epic, das zerlegt werden muss, oder Ihre Sprintlänge wurde nicht für Ihr Projekt optimiert. Es gibt immer einen Kompromiss bei der Bestimmung der optimalen Sprintlänge für ein Projekt, aber die Herausforderung, Geschichten zu schreiben, die in eine endliche Zeitbox passen, bleibt eine ständige Herausforderung.

In Scrum sollte eine Story ein vollständiges, vertikales Stück Funktionalität sein, das das gesamte funktionsübergreifende Team einbezieht. Testen ist nie eine separate Geschichte; Vielmehr ist es eine integrale Aufgabe, die erforderlich ist, um sicherzustellen, dass ein bestimmtes Feature die formale "Definition of Done" erfüllt, wie sie vom Projekt definiert wird.

Storys, von denen erwartet wird, dass sie über das Ende einer Iteration hinausgehen, weisen auf ein Prozessproblem hin, das während der Backlog-Grooming- oder Sprint-Planung behoben werden muss. Ebenso sind Stories, die nicht der Definition of Done entsprechen, auch Prozessprobleme, die das Team dringend angehen muss.

Sie haben geschrieben, dass eine Geschichte „das gesamte funktionsübergreifende Team einbindet“. Es hört sich so an, als müsste jedes Teammitglied an jeder Geschichte arbeiten. Bei vielen Stories (die per Definition klein sind) reicht es oft gerade aus, wenn 1-2 Teammitglieder daran arbeiten (z. B. einer für die Implementierung, der andere Code-Review und funktionale Tests). Ich verstehe, dass Sie den „funktionsübergreifenden“ Teil dieses Ausdrucks betonen wollten und nicht den Teil „das gesamte [...] Team“. Rechts?
@PawełPolaczyk Jede Rolle sollte in jede Geschichte involviert sein. Es kann sicherlich Ausnahmen geben, aber die meisten Geschichten sollten Entwickler, Tester, Business-Analysten, technische Redakteure und andere Rollen in die Schätzung oder Fertigstellung der Geschichte einbeziehen. Ihr Kilometerstand (wie Ihre Story-Granularität) kann variieren.
Dies ist eine der besten Erklärungen für Scrum, die ich je gesehen habe. An diesem Punkt wurde mir klar, dass „selbstorganisierendes Team“ „selbstmotiviertes Team“ impliziert. Teams sollten nicht von externen Motivationen angetrieben werden, sondern von dem angeborenen Wunsch, die Arbeit zu erledigen. Danke dir.
Dies vermisst mindestens einen zugrunde liegenden Impuls, um das Testen in seine eigenen Geschichten zu drängen, den ich "Testing Lag" nennen werde. Welche Strategien stellen sicher, dass die QA am Anfang einer Geschichte nicht auf den Entwickler wartet und der Entwickler am Ende nicht auf die QA wartet? Das Über- oder Unterschreiten bedeutet zwar, dass das Team bei der Schätzung besser werden muss, aber es gibt auch ein Henne-Ei-Problem: „Ich habe nichts zu testen, bis Sie es schreiben, und Sie müssen nichts beheben, bis ich weitere Fehler finde.“ Wie sind Sie praktisch mit der „natürlichen Ausfallzeit“ für diese beiden Teile des Teams während des Sprints umgegangen? (Ich habe Vorschläge, möchte aber deine hören)
@ruffin Suchen Sie auf dieser Website nach „100 % Auslastungsfehler“. Sie werden viele verwandte Fragen und Antworten dazu finden, warum diese falsche Dichotomie ein Symptom für falsch integrierte Test-First-Entwicklungsprozesse ist. Wenn Sie danach noch Fragen dazu haben, öffnen Sie bitte eine neue, aber verknüpfte Frage, damit die Community darauf eingehen kann.
Wird besorgt. Ich hatte gehofft, Sie würden TDD erwähnen, was Sie meiner Meinung nach (?) getan haben, und wirklich interdisziplinär ausgebildete Teammitglieder, die beide Schlüssel zum Erfolg zu sein scheinen. Ich werde eine neue Frage stellen, sobald ich mehr als ein paar Antworten auf 100% Usage Irrtum gelesen habe , da ich nicht 100% überzeugt (swidt) bin, dass es diese Situation genau abdeckt . Vielen Dank! Interessante Lektüre; hoffe es hilft auch anderen.

Wenn Sie sich problematische Geschichten ansehen, ist der beste Rat, die INVEST-Prinzipien zu verwenden und insbesondere:

Geschichten liefern Mehrwert

Wenn QA eine Aktivität ist, die durchgeführt werden muss, um überhaupt etwas zu liefern, dann können Sie sie nicht abspalten. Gab es ein „Definition of Done“ -Meeting? Schließt „erledigt“ QA ein?

Wenn Ihre Geschichte keinen Wert liefert, ist es keine Geschichte.

Geschichten sind klein

Alle Storys müssen weniger als einen Sprint lang sein, um geplant werden zu können. Teilen Sie Ihre Geschichte auf, indem Sie eine Teilmenge der Funktionen bereitstellen (weniger Wert, aber immer noch ein gewisser Wert).

Option 2 scheint nur gültig zu sein, wenn Sie das Testen als Dienstleistung und nicht als Verantwortung des Teams betrachten. Wenn das der Fall ist, würde ich fragen, wie agil das Team ist und ob Sie wirklich zwei separate Teams (Entwicklung und QA) in einen Sprint quetschen müssen. Wenn Ihr Ziel darin besteht, agil zu sein, kann es sich lohnen, nicht zwischen Entwicklung und Test zu unterscheiden und eine Story als „fertig“ zu betrachten, wenn sie ordnungsgemäß getestet wurde. Auf diese Weise schätzen Sie am Ende die Gesamtarbeit, die als Team erledigt werden muss, und nicht nur Teilbereiche davon.

Sie sagen also, Option 1 ist sinnvoller, wenn es sich um ein agiles Team handelt? Ich glaube auch fest daran, denn wenn wir die Geschichte basierend auf der Anzahl der Punkte aufteilen, die wir in einem Sprint erreichen können, fühle ich mich wieder im Wasserfall.

In Ordnung, bitte erschießen Sie mich nicht, aber ich werde gegen das argumentieren, was die meisten Leute hier empfehlen, nämlich bestimmte Testaktivitäten in ihre eigenen Geschichten aufzuteilen. Nur um das klarzustellen, mit Testaktivitäten beziehe ich mich speziell auf das Erstellen automatisierter Testfälle. Manuelles/exploratives Testen ist ein Bonus.

Beginnen wir mit etwas Theorie, für die ich meine Referenz für (Microservice-)Teststrategien verwenden werde. Ich denke, wir werden uns alle einig sein, dass die Testpyramide sinnvoll ist, dass es VIEL mehr Unit-Tests als (automatisierte) Komponententests geben wird , und noch weniger (automatisierte) End-to-End-Tests. Lassen Sie uns für einen Moment außer Acht lassen, wer was macht … Ich beobachte typischerweise das folgende Muster in Agile/Scrum/was auch immer:

  • Ein Feature besteht aus mehreren Storys (Durchschn. 3-5)
  • Jede Geschichte ist in der Regel ein individuelles Ergebnis, das vorgeführt werden kann und (hoffentlich) einen gewissen Mehrwert für den Endbenutzer bietet.
  • Jede Story enthält den Quellcode, Komponententests, möglicherweise einige Integrationstests (siehe Definition von Integrationstests hier ), Dokumentation usw. Keine Diskussion hier, dass diese Arten von Tests Teil einer Story sein müssen, da diese Arten von Tests es müssen sowieso vom Ersteller der Geschichte geschrieben werden.
  • Für jede Funktion gibt es nur eine Handvoll E2E-Tests, und diese E2E-Tests testen normalerweise nicht einmal jede Story einzeln, sondern testen die Beiträge mehrerer Storys in einem Testfall.
  • Es ist schwierig, E2E-Tests zu schreiben, wenn die zu testende Funktionalität noch nicht vollständig in einer DEV- oder TEST-Umgebung verfügbar ist.
  • Eine damit zusammenhängende Beobachtung ist, dass sich die für Unit- und Integrationstests verwendeten Tools normalerweise von denen für E2E-Tests unterscheiden.
  • Aufgrund des unterschiedlichen Toolings, aber auch historisch bedingt, hält sich auch in agilen Zeiten überall die Spezialisierung auf Entwickler und Tester/QA-Ingenieure.

Die Frage ist nun, wie mit E2E-Tests umgegangen wird: In jede Story einbinden oder eigene Storys erstellen? Meiner Meinung nach, wenn ich alle oben aufgeführten Einflüsse in Betracht ziehe, ist die Schlussfolgerung, sie aufzuspalten. Bei meinen Projekten fügen wir normalerweise jedem Feature eine Komponente/E2E-Teststory hinzu. Das Verfassen von Testfällen wird in der Regel einen Sprint nach Abschluss der letzten Story-Implementierung abgeschlossen. Funktionen können nicht auf abgeschlossen gesetzt werden, es sei denn, die zugehörige E2E-Testgeschichte ist vollständig, ein sauberer und einfacher Kontrollmechanismus.

Ich werde argumentieren, dass dies nicht gegen den Geist der Bereitstellung von Geschichten verstößt, da jede Geschichte immer noch vollständig demonstrierbar ist und mit einem vollständigen Satz von Einheiten- und Integrationstests geliefert wird und daher von hoher Qualität ausgegangen werden kann. Mit der Aufteilung in Entwickler- und Testerrollen hat sich dies für mich als der effizienteste und systematischste Weg erwiesen. Andernfalls „verzögern“ E2E-Testerstellungsaktivitäten ständig die Fertigstellung einzelner Storys, insbesondere derjenigen, für die die „Entwicklungs“-Arbeit gegen Ende eines Sprints abgeschlossen wurde.

Nun, in einer idealen Welt gäbe es wahrscheinlich keine Spezialisierung auf Entwickler und Tester/QA-Ingenieur. Dann konnte ich sehen, dass Komponenten- und E2E-Tests in jede Story gerollt werden konnten (immer noch mit Ineffizienzen aufgrund der Diskrepanz zwischen feinkörnigen Geschichten und grobkörnigen Komponenten-/E2E-Tests). Aber in den Organisationen, in denen ich gearbeitet habe, war es bereits schwierig genug, eine agile Denkweise zu etablieren, um nicht das Konzept der dedizierten Tester-/QA-Rollen zu verwerfen.

Vielleicht nicht der reinste Ansatz, aber der praktischste und praktikabelste, den ich mir vorstellen konnte.

Wenn Leute anfangen zu fragen, ob sie Tests in eine von der Entwicklung getrennte Story einfügen möchten, beziehen sie sich meiner Erfahrung nach auf die Tests, die ihre Organisation durchführt, um zu beweisen, dass eine User Story korrekt funktioniert, und nicht auf die zusätzlichen E2E-Tests, um ein größeres Feature zu validieren. Aber es ist trotzdem gut, es anzusprechen.

Seien Sie vorsichtig, wenn Sie Geschichten aufteilen

Wenn Sie feststellen, dass Sie eine User Story aufteilen, fragen Sie sich: „Hat diese Story, die ich erstelle, einen Mehrwert für sich?“. Wenn die Antwort nein ist, dann sollte es eine Aufgabe als Teil einer größeren User Story sein.

Die richtige Antwort hängt vollständig von Ihren Zielen ab.

Wenn das Ziel darin besteht, die Scrum-Anforderungen zu erfüllen: Sie sollten die Story nicht in, nennen wir es Aufgaben, aufteilen, da es keinen Wert in jeder von ihnen gibt.

Wenn Sie jedoch eine Option sehen, um mehr Transparenz und Vorhersehbarkeit in Ihrem Entwicklungsprozess zu schaffen: Die Aufteilung von Aufgaben in kleine solide Elemente bringt Ihnen viele Erkenntnisse (z. B. welcher Teil Ihrer Lieferpipeline ein Engpass ist usw.).

Hier noch ein paar abstraktere Gedanken: (Meinungen)

Lassen Sie sich von „Punkten“ nicht in die Quere kommen: Punkte sind ein sehr abstraktes Konzept – wer möchte nicht mehr davon gewinnen? Das Streben nach ihnen kann von dem ablenken, was Sie wirklich erreichen möchten. Aus diesem Grund verwende ich sie nicht.

„User“ -Storys gehen nur so weit: Viele der Dinge, die beim Erstellen eines Softwaresystems getan werden müssen, sind für den Benutzer nie explizit sichtbar. Viele dieser Dinge überschneiden sich mit vielen „Benutzergeschichten oder -aktivitäten“.

Benutzer sind keine Programmierer, und ihre „Geschichten“ können Programmierer nicht vollständig informieren: Sie steigen ins Auto und fahren es – aber sie öffnen nie die Motorhaube und sie wissen nicht wirklich, womit die Schaltung verbunden ist. Sie sind sich nie darüber im Klaren, was getan werden muss, damit sie sicher auf der Straße fahren können. Sie haben Vorstellungen davon, was es braucht, um ein Auto zu bauen, aber sie wissen es nicht wirklich. "Und warum sollten sie? Sie sind Fahrer, keine Automechaniker!"

"User Stories" sind im Grunde [IMHO ...] ein Kommunikationsmittel : Sie halten Sie fest in Kontakt mit dem, was der Benutzer sehen wird, und wissen, dass das, was Sie produzieren, tatsächlich für ihn nützlich sein wird, und sie geben beiden Parteien etwas gemeinsamen Bezugsrahmen, der keine "Programmierkenntnisse" erfordert. All das ist sehr gut!! ... Sehr wertvoll!! ... Aber es gibt noch mehr , was das Team für sich selbst generieren muss, um die Probleme anzugehen, von denen "Benutzer" nichts wissen, die aber wesentlich sind, um ihnen das zu geben, was sie brauchen. Als Projektmanager und als Designteam sind „User Stories“ Inputs. Sie sind keine Umsetzungspläne – aber sie helfen, diese Pläne voranzutreiben.

„Scrum ist [IMHO …] eine Metapher: eine sehr, sehr nützliche. Umfassen Sie es für das, was es gibt, und wissen Sie, wann Sie es loslassen müssen. Es ist keine Religion, und es war nie beabsichtigt, es zu sein ist ein wertvoller Prozess und eine hervorragende Denkweise – soweit es geht.Es wird Ihnen nicht Ihren Implementierungsplan schreiben, noch sollten Sie es jemals (natürlich ...) erwarten.

Bitte beachten Sie: "Dies sind meine Meinungen." (Basierend auf „viele Jahrzehnte“, aber es waren auch „meine“ Jahrzehnte.) Sie sind natürlich nicht deine. "Am Ende sind alle unsere Ziele gleich – großartige Software, pünktlich geliefert." Ich möchte ausdrücklich nicht „die Saat der Spaltung säen“, indem ich meine Gedanken und Erfahrungen – „ziemlich frei, weil ich mich sicher fühlte, dass ich es sicher könnte“ – hier an diesem Ort ausdrücke. Ich vertraue (und hoffe), dass Sie alle voll und ganz verstehen ...
Ich mag den Inhalt nicht, aber ich vermute, das Downvote (es ist nicht von mir) ist, dass es nicht direkt mit dem Testen verbunden ist. Sie möchten eine fließendere Beziehung zu Stories und Scrum. Cool. Wie hat diese Beziehung Ihre Herangehensweise an das Testen in/als Geschichten beeinflusst?