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?
Antworten:
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.
quelle
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.
quelle
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.
quelle
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:
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.
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.
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.
quelle
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.
quelle