Testgetrieben gegen Geschäftsanforderungen, die sich ständig ändern

8

Eine der neuen Anforderungen unseres Entwicklerteams, die vom CTO / CIO festgelegt wurden, ist die testgetriebene Entwicklung. Ich glaube jedoch nicht, dass der Rest des Geschäfts helfen wird, da sie keinen Sinn für Entwicklungslebenszyklen haben und Anforderungen erhalten innerhalb eines einzigen Sprints ständig geändert. Was mich frustriert, Zeit damit zu verschwenden, 10 Testfälle zu schreiben, und morgen unbrauchbar wird.

Wir haben vorgeschlagen, Prozesse einzurichten, um diesen Anforderungsänderungen auszuweichen und das Unternehmen über Entwicklungslebenszyklen aufzuklären. Was ist, wenn das Unternehmen nicht auf die Idee kommt? Was würden Sie tun?

James Lin
quelle
1
War "morgen" wörtlich oder bildlich?
user16764
1
Ich fand das einfach normal. Wenn ich (was nur ein Teil der Zeit ist) TDD mache, verbringe ich viel mehr Zeit mit dem Schreiben von Tests als mit Produktionscode, da sich die Bedingungen ständig ändern. Das heißt nicht, dass es nicht nützlich ist.
Brian Knoblauch
Wäre es weniger frustrierend (oder verschwendete Arbeit), den Code zu schreiben, der etwas bewirkt, und dann muss dieser Code weggeworfen und neu geschrieben werden? Das Problem scheint nicht tdd zu sein, sondern die Veränderung innerhalb eines Sprints.
Ich stimme zu, das Problem ist nicht TDD, kein einzelner Prozess oder Prinzip ist falsch, es muss nur mit Bedacht eingesetzt werden.
James Lin

Antworten:

4

Ihre Frage scheint darauf hinzudeuten, dass TDD an Entwicklungslebenszyklen gebunden ist. Ich bin mir nicht sicher, ob ich damit einverstanden bin.

Die Antwort auf flexible, sich ändernde Anforderungen ist die iterative Entwicklung. TDD hat nichts dazu oder über Software-Zeitpläne zu sagen. Es ist ein Tool zum Entwickeln von Software innerhalb der Anforderungen und des Zeitplans, die Sie haben. Wenn sich die Anforderungen ändern, ändert sich auch die Software. Dies gilt auch für die Unit-Tests.

TDD entwickelt keine Anforderungen, obwohl einige Befürworter dies vorschlagen. Vielmehr bestimmen die Anforderungen die Komponententests, die wiederum den geschriebenen Code steuern. Sie erweitern keine Architektur aus Tests und entwickeln auch keine Anforderungen mit Tests. Stattdessen sind die Tests ein Ergebnis der festgelegten Architektur und Anforderungen.

Wenn sich die Anforderungen auf atomarer Ebene (Methoden- / Komponententest) der Softwareentwicklung ändern, würde ich vorschlagen, dass Ihre Anforderungen zu detailliert sind. Die Anforderungen sollten angeben, was die Software tut, nicht wie sie es tut. Wie die Software die Anforderungen erfüllt, liegt in der Domäne und Verantwortung der Softwareentwickler, nicht der Hauptakteure.

Anders ausgedrückt, ich sage dem Kunden oder Geschäftsinhaber nicht, wie er sein Unternehmen führen soll, und er sagt mir nicht, wie ich meine Klassen gestalten soll.

Robert Harvey
quelle
Ich denke, Sie haben es falsch verstanden oder ich habe meinen Standpunkt falsch dargestellt, sagen wir, es gibt eine Anforderung, Funktion A auszuführen, also habe ich einige Testfälle gegen Funktion A geschrieben, und dann ist morgen Funktion A nicht mehr erforderlich, oder die Anforderung von Funktion A war so stark geändert, dass alle von mir geschriebenen Testfälle nicht mehr gültig sind.
James Lin
4
Lesen Sie meinen vorletzten Absatz. Es gibt keine "Anforderung", die eine einzelne Funktion spezifiziert. Wenn ja, machst du es falsch.
Robert Harvey
Ich sage nicht Funktion als eigentliche Programmierfunktion, ich meinte Funktionsfunktion ...
James Lin
1
Das ist die Natur der iterativen Entwicklung. Manchmal ändern die Leute ihre Meinung darüber, was sie wollen.
Robert Harvey
6
Es liegt an der Firma / dem Kunden, zu entscheiden, ob dies eine verschwenderische Praxis ist oder nicht, und über die Anforderungen, die sie Ihnen stellen, wenn dies der Fall ist, genauer nachzudenken. Wenn die Leute Sie für einen langsamen Entwicklungsprozess verantwortlich machen, bedeutet dies, dass Sie Ihre Zeit nicht ausreichend aufzeichnen, sodass Sie die Stunden anzeigen können, die verschwendet werden, wenn jemand seine Meinung ändert.
Robert Harvey
3

Das Ändern von Anforderungen ist eine normale Sache, aber wenn sie sich täglich ändern und die Anforderungen während eines Sprints ändern, ist dies keine Umgebung, in der Software auf sinnvolle und qualitative Weise entwickelt werden kann. Mit anderen Worten, TDD ist das geringste Ihrer Probleme hier, sie sind grundlegender.

Sie erwähnen Sprints, was bedeutet, dass Sie eine Art agile Entwicklung durchführen, was eine gute Sache ist. Die Abwicklung der Entwicklung in kurzen Sprints eignet sich gut für Projekte, bei denen Prioritäten und Anforderungen volatil sind und sich in der Mitte des Projekts ändern können. Das ernste Problem ist, dass sich die Anforderungen an Ihre Entwicklungs- und Testteams während eines Sprints drastisch ändern.

Die Sprint-Prioritäten sollten sich nach dem Start des Sprints nicht ändern. Der Sprint soll eine Vereinbarung zwischen den Stakeholdern und dem Entwicklungsteam sein, dass die folgenden vereinbarten Funktionen und User Stories bis zu einem bestimmten Datum geliefert und getestet werden. Die Stakeholder halten an ihrem Ende der Vereinbarung nicht fest, wenn sie nach Beginn der Entwicklung beginnen, ihre Erwartungen an den Sprint zu ändern.

Die Stakeholder waren also nicht vorsichtig oder überlegten, wonach sie fragten, und werden ihre Erwartungen sofort ändern. Haben die Entwickler dann den Luxus, den Liefertermin für die Funktionen zu verschieben? Oft nicht. Bestenfalls waren die Stakeholder fahrlässig oder inkompetent und die Entwickler zahlen den Preis in Überstunden, um den Termin trotzdem einzuhalten. Manchmal tun dies sogar die Stakeholder absichtlich in dem Wissen, dass sie mehr Arbeit von ihren angestellten Entwicklern bekommen können.

Was ehrlich gesagt passieren sollte, wenn sich die Kernanforderungen so weit ändern, dass die aktuelle Arbeit für den Sprint nutzlos wäre, ist, die Sprintentwicklung sofort anzuhalten, bis ein neuer Sprint basierend auf den neuen Anforderungen geplant werden kann. Es gibt sicherlich keinen Grund, die nächsten anderthalb Wochen mit der Entwicklung von Software fortzufahren, die das Unternehmen Ihnen bereits mitgeteilt hat und die für sie ohnehin überhaupt nicht nützlich wäre.

Was wirklich passiert, ist, dass die Geschäftsakteure das Entwicklungsteam scheitern lassen, indem sie die Sprint-Verpflichtung nicht einhalten oder nicht einhalten. Sie zeigen entweder einen völligen Mangel an Kompetenz bei der Bestimmung, was sie von Software erwarten, oder sie haben einen völligen Mangel an Respekt für das Entwicklungsteam und wie Qualitätssoftware hergestellt wird.

Die einzige Möglichkeit für Unternehmensgruppen wie diese, sich einen Respekt für die Funktionsweise der Softwareentwicklung zu verdienen, besteht darin, ein externes Beratungsunternehmen oder einen Softwareanbieter zu beauftragen, um Software für sie zu entwickeln und per Sprint zu bezahlen. Sobald sie Geld für ein paar Sprints verlieren, die sie nicht nutzen können, werden sie erkennen, wie wichtig es ist, ihr Engagement als Stakeholder aufrechtzuerhalten und mit ihren Funktionen und Anforderungen sehr vorsichtig und spezifisch umzugehen.

maple_shaft
quelle
3

Ohne auf eine bestimmte agile Terminologie einzugehen, scheint das grundlegende Problem ein Mangel an Verständnis und / oder Engagement für die Verantwortung des Kunden während einer Iteration zu sein: Sobald der Satz implementierbarer Elemente (vom Kunden, von Entwicklern vereinbart) für eine ausgewählt wurde Iteration, der Kunde erklärt sich damit einverstanden, seine Meinung bis zum Ende der Iteration nicht zu ändern.

Dies gibt den Entwicklern für kurze Zeit ein stationäres Ziel.

Wenn die Anforderungen so instabil sind, dass sie einen Tag nicht alleine überleben können, hat das Projekt Probleme, die weit über die Methodik hinausgehen. In diesem Fall kehren Sie zu den Zielen des Projekts zurück und überdenken die vorgeschlagenen Funktionen.

Steven A. Lowe
quelle
1
Ich habe noch nie einen Kunden getroffen, der Agile "gekauft" hat, der sich bereit erklärte, die Anforderungen nicht zu ändern, aber nicht hart dafür kämpfte, bei jedem einzelnen Sprint Ausnahmen zu machen ... Jeder einzelne von ihnen stimmt theoretisch zu und ist in der Praxis nicht einverstanden. (Ja, ich weiß, das ist nur ein Einzelfall)
Andres F.
Hast du das von einem Handy aus gepostet? Es gibt eine Einstellung auf Ihrem Telefon, die automatisch das erste Wort in jedem Satz großschreibt. Es kann sogar den Punkt hinzufügen, wenn Sie die Leertaste zweimal drücken.
Robert Harvey
@ RobertHarvey: lol, nur in Eile posten. Danke für die Bearbeitung!
Steven A. Lowe
1

Ich glaube nicht, dass der Rest des Geschäfts helfen wird, da sie keinen Sinn für Entwicklungslebenszyklen haben und sich die Anforderungen innerhalb eines einzigen Sprints ständig ändern.

Eine Sache, auf die Unternehmen im Allgemeinen hören, ist alles, was sich auf das Budget auswirkt. Wenn sich die Anforderungen ständig leichtfertig ändern, sollten Sie ein Argument mit detaillierten Beispielen erstellen, um zu zeigen, wie sich solche Änderungen auf die Teameffizienz auswirken, überlappende Arbeit verursachen und das Unternehmen Geld kosten. Wenn andererseits die Änderungen notwendig sind und zu einem Verlust für das Unternehmen führen können, wenn sie nicht durchgeführt werden, müssen Sie sie möglicherweise einfach tragen und einen Weg finden, um mit sich ständig ändernden Anforderungen umzugehen.

Ich habe jedoch die Erfahrung gemacht, dass wenn sich die Dinge so schnell ändern, wie Sie es vorgeschlagen haben, dies folgende Gründe haben kann:

  • Das Konzept ist experimentell. In diesem Fall möchten Sie möglicherweise alle diese Änderungen vornehmen, anstatt sie direkt in den Produktionscode zu implementieren.
  • Das Konzept wurde nicht gründlich analysiert, was darauf hindeutet, dass das Produkt nicht wirklich durchdacht wurde und das Produkt während der Ausarbeitung codiert werden muss.
  • Ständiger Markt- und Wettbewerbsdruck führen zu ruckartigen Veränderungen
  • Eine schlechte Beziehung zwischen Projekttreibern, Managern und dem Implementierungsteam in Bezug auf die Fähigkeit aller Beteiligten, frei über die Notwendigkeit von Änderungen zu kommunizieren.
  • Schlechte Priorisierung von Aufgaben, und dies kann sowohl ein Fehler des Managements als auch des Implementierungspersonals sein.

Manchmal wissen Projektbesitzer nicht wirklich, wie das Produkt funktionieren soll, weil sie ein Grundkonzept im Auge haben. Sie müssen jedoch erst sehen, wie es funktioniert, bevor sie sich entscheiden. Dies kann daran liegen, dass die Problemdomäne nicht sehr gut verstanden wird oder dass sie nicht wirklich darüber nachgedacht haben, wie eine Geschäftsfunktion in eine softwarebasierte Lösung umgesetzt werden kann. Prototyping kann in solchen Fällen von Vorteil sein. Sie können GUIs mit Scheinobjekten einfach prototypisieren, wenn die Änderungen kosmetischer Natur sind, oder Sie können Komponententests verwenden, um algorithmische Änderungen zu testen und zu optimieren. Der Schlüssel besteht jedoch darin, sicherzustellen, dass Änderungen so systematisch wie möglich angewendet werden, um den Prozess relativ schlank und kostengünstig zu halten.

Wir haben vorgeschlagen, Prozesse einzurichten, um diesen Anforderungsänderungen auszuweichen und das Unternehmen über Entwicklungslebenszyklen aufzuklären.

Dies ist ein guter Anfang und ermöglicht es Ihnen, mit dem Management in Kontakt zu treten, um zu versuchen, positive Ergebnisse auf gemessene und strukturierte Weise zu erzielen. Bildung ist die effektivste Methode, um Probleme zu lösen, bei denen Entwickler und Management ideologisch nicht synchron sind. Um jedoch den größten Nutzen zu erzielen, muss die Ausbildung in beide Richtungen erfolgen, ebenso wie die Kommunikation. Sie müssen sich selbst und dem Management beibringen, Ihre Bedürfnisse zu kommunizieren und sich gegenseitig zu helfen, die Motivationen zu verstehen, die diese Bedürfnisse antreiben. Zu sagen, dass es "zu schwer" oder "viel Arbeit" oder "Zeitverschwendung" ist, wird nur als Beschwerde und "Faulheit" empfunden. Ihre Argumentation muss klar sein, und in einer Sprache, die zeigt, dass Sie daran arbeiten, positive Ergebnisse für das Unternehmen und das Produkt zu erzielen, an dem Sie arbeiten, und dass Ihre Motive diese Interessen berücksichtigen. Ebenso müssen Sie möglicherweise lernen, die Gründe zu akzeptieren, die Ihnen die Anzüge geben, warum sie das Bedürfnis haben, Dinge so schnell zu ändern. Vielleicht finden Sie zwischen Ihnen einen gut funktionierenden Mittelweg, wenn beide Seiten den Standpunkt des anderen verstehen können.

Was ist, wenn das Unternehmen nicht auf die Idee kommt? Was würden Sie tun?

Wenn Sie nicht das erhoffte Ergebnis erzielen, stimmt das Timing möglicherweise nicht. Vielleicht müssen Ihre Argumente anders gemacht werden. Vielleicht haben Sie alles falsch gemacht und müssen mehr darüber erfahren, was die andere Seite denkt. Wenn Ihr spezieller Ansatz fehlschlägt, liegt es letztendlich an Ihnen, zu entscheiden, wie wichtig es für Sie ist, sich damit befasst zu haben. Denken Sie jedoch positiv darüber nach, was Sie heute tun können, anstatt sich mit dem zu befassen, was passieren kann oder nicht. Die Probleme von morgen sind nicht unbedingt garantiert und es lohnt sich nicht, sich Sorgen zu machen, bis sie tatsächlich auftreten.

Ein letzter zu berücksichtigender Punkt. Ihr CTO ist möglicherweise besorgt über viele der gleichen Probleme wie Sie. Ein Dekret zur Einführung von TDD lässt mich vermuten, dass dies sehr wohl der Fall sein kann, da TDD in Situationen, in denen sich der Code häufig ändert, sehr effektiv ist. In einem Test-First-Szenario werden Tests am nächsten Tag nicht unbrauchbar, da Sie über ein Sicherheitsnetz verfügen, in dem Sie schnell und sicher Änderungen vornehmen können. Sie müssen jedoch noch einen Weg finden, um die Erwartungen der Personen, die Änderungen anfordern, zu verwalten, um Änderungen effizient verwalten zu können.

S.Robins
quelle
0

Um dies klarer zu machen, muss die Site in der Lage sein, ein Bild hochzuladen und die Größe auf unter 500 KB zu ändern, wenn die tatsächliche Größe über 500 KB liegt.

Eine Änderung der Anforderungen kann sein, dass diese Funktion nicht benötigt wird (meistens haben sie festgestellt, dass sie sie nicht wirklich benötigen, nachdem sie sie gesehen haben).

Wir haben vorgeschlagen, Prozesse einzurichten, um diesen Anforderungsänderungen auszuweichen und das Unternehmen über Entwicklungslebenszyklen aufzuklären. Was ist, wenn das Unternehmen nicht auf die Idee kommt?

Erstens klingt es so, als müssten Sie möglicherweise mehr Dummy-Prototyping durchführen. Das heißt, funktionierende, anklickbare Modelle, die keine echten Daten speichern oder abrufen, aber emulieren, wie sich die Software verhalten würde. Für Webapps bedeutet dies also, dass HTML / CSS / JavaScript vollständig ausgeführt ist und der Benutzer durch die Software klicken kann, obwohl nur sehr wenig Codierung durchgeführt wurde. Vielleicht kann dies den Benutzern helfen, zu erkennen, wonach sie fragen, bevor Sie die Arbeit in das Codieren investieren.

Als nächstes ist es wirklich nicht Sache der IT-Abteilung, zu entscheiden, wie das Geschäft funktioniert. Und es könnte sein, dass das Unternehmen für seine Softwareanforderungen Geschicklichkeit und Zuverlässigkeit schätzt. Es ist also wertvoller, HEUTE etwas zu ändern, als sicherzustellen, dass eine bestimmte Funktion 100% der Zeit funktioniert, im Gegensatz zu 95,5% der Zeit. Dies kann nur das Unternehmen selbst entscheiden. Wenn Ihre Abteilung nicht wegen Qualitätsproblemen zugeschlagen wird, sollten Sie vielleicht berücksichtigen, dass das Geschäft mit sich ändernden Anforderungen und nicht testgetriebenem Code völlig in Ordnung ist. Ihr CTO / CIO sagt, er möchte, dass Sie "testgetrieben" sind, aber wenn die Geschäftsanforderungen routinemäßig "diese Änderung bis 16 Uhr erledigen" sind, können Sie einfach nicht beides haben.

Graham
quelle