Wir sind ein sehr kleines Team (1 Frontend-Entwickler, 1 Backend-Entwickler/Lösungsarchitekt, 1 PM/UX), das in Scrum mit 2-wöchigen Sprints arbeitet.
Bis jetzt haben wir hauptsächlich an Prototypprojekten gearbeitet, die keine Tests erforderten, aber eines unserer MVPs gewinnt an Zugkraft, und wir haben begonnen, Unit-Tests als Teil unserer Definition of Done für unsere User Stories zu implementieren.
Allerdings haben wir jetzt ein Problem, bei dem das Testen aus zwei Hauptgründen genauso viel Zeit in Anspruch nimmt, wenn nicht sogar länger als die Entwicklungs-/Codierzeit:
Dies hat dazu geführt, dass wir Sprints nicht bestanden haben, weil Unit-Tests am Ende so lange dauern, dass die Stories nicht vor dem Ende des Sprints fertig sind. Dies wird problematisch für mittelgroße Stories, die nicht in kleinere Stories aufgeteilt werden können, denn wenn wir die Unit-Test-Schätzung hinzufügen, werden diese Stories am Ende so groß, dass eine einzelne Story fast die Hälfte der Sprint-Kapazität einnimmt.
Hätten Sie Tipps, wie Sie diesen Prozess verbessern können, damit das Testen rationalisierter/schneller ist? Unser Front-End verwendet React und derzeit JEST für Unit-Tests, und unser Back-End wurde mit .NET auf AWS erstellt, hat aber noch nicht mit der Implementierung von Unit-Tests begonnen.
Meine Entwickler sind nicht an Unit-Testing-Frameworks gewöhnt und lernen noch
Dies wird sich im Laufe der Zeit verbessern, wenn sie mehr Erfahrung sammeln.
Es gibt nur 2 von ihnen und jeder mit seiner Spezialität (Front-End und Back-End), sodass sie sowohl die Codierung als auch die Komponententests für ihre Seite der Geschichten durchführen müssen.
Das ist absolut normal. Wer sonst würde Tests schreiben? Selbst wenn Sie jemand anderen zum Schreiben von Tests hätten, müssten Sie ihn wahrscheinlich zum gleichen Satz wie die Entwickler einstellen und bezahlen. Tests erscheinen nicht auf magische Weise.
Dies hat dazu geführt, dass wir Sprints nicht bestanden haben, weil Unit-Tests am Ende so lange dauern, dass die Stories nicht vor dem Ende des Sprints fertig sind.
Ja. Ihre Schätzungen liegen völlig daneben, denn Sie haben bisher keine funktionierende, produktionsreife Software geliefert, Sie haben halbwegs getestete Prototypen geliefert. Und das ist gut für Prototypen, das sind sie: nicht serienreif. Das ist der Sinn eines Prototyps, etwas in Gang zu bringen, sich nicht in Details zu verlieren, zu zeigen, dass ein Konzept umsetzbar ist. Aber jetzt müssen Sie Software in Produktionsqualität liefern. Und das dauert länger als Prototypen. Es gibt wenig, was Sie tun können. Verbessern Sie Ihre Schätzungen, um dies zu berücksichtigen, damit Sie bei Sprints nicht scheitern.
Aber wenn Ihr Team nicht genug in der von Ihnen benötigten Qualität produziert, gibt es keine Wunderwaffe. Sie brauchen mehr Leute. Stellen Sie einen weiteren Frontend-Entwickler und Backend-Entwickler ein. Die Produktion von produktionsreifer Software anstelle von Prototypen ist leicht die doppelte Arbeit.
Auch wenn Sie nicht gefragt haben: Wenn Sie mehr Leute einstellen, haben Sie die Chance, Ihre Prozesse zu verbessern. Wenn Sie einen Frontend-Entwickler und einen Backend-Entwickler haben, die jeweils Kenntnisse über ihre Domäne haben, gibt es ungefähr keine Option für Teamarbeit. Ich meine sicher, Backend und Frontend müssen miteinander reden, aber das ist nicht die Teamarbeit, von der ich spreche. Es gibt niemanden, der mit dem Backend hilft, wenn sie stecken bleiben. Es gibt niemanden zu fragen, wenn das Frontend bei einem Problem hängen bleibt. Im Moment haben Sie kein Team, Sie haben ein Fließband. Sie brauchen mehr Leute mit demselben Spezialgebiet, damit sie sich gegenseitig helfen und als Team arbeiten können. Sie müssen in der Lage sein, zu kompensieren, wenn einer von ihnen eine Woche Urlaub hat oder sich krank melden muss. Sie müssen Ihr Team auf Produktionsgröße bringen. Als erster Schritt zu einem minimalen, Barebones-Team könnten Sie einen Full-Stack-Entwickler einstellen, der bei einem Teil oder dem Projekt helfen kann. Besser wäre von jeder Rolle eine mehr. Scrum funktioniert nicht sehr gut mit einem Zwei-Personen-Team.
Das eigentliche Problem dabei ist, dass Ihr Unternehmen die Testkosten als unerwünschten Overhead und nicht als erwartete und notwendige Kosten für die Geschäftstätigkeit für Produktentwicklung, Wartung und Support betrachtet. Konzentrieren Sie sich darauf, das zu beheben.
Hätten Sie Tipps, wie Sie diesen Prozess verbessern können, damit das Testen rationalisierter/schneller ist?
TDD und BDD sind keine "schneller gehen"-Tasten. Während Teams im Laufe der Zeit beim Testen oft etwas effizienter werden, sind die Ziele des Testens enger ausgerichtet an :
Während diese Dinge das Hinzufügen neuer Funktionen oder das Finden/Beheben von Fehlern in der Zukunft einfacher machen, beschleunigen sie die aktuelle Entwicklung normalerweise nicht. Tatsächlich führt das Refactoring (oder schlimmer noch, das Redesign) von Code für die Testbarkeit unweigerlich zu kurzfristigem Widerstand und langfristigem Overhead. Darüber hinaus erfordert es Zeit und Mühe, alle mit neuen Werkzeugen und Techniken vertraut zu machen, und verbraucht per Definition Teamkapazität.
Hier gilt es einiges zu beachten:
Beachten Sie, dass es in vielen agilen Frameworks auch vollkommen akzeptabel ist, architektonische Runway- Elemente direkt zum Product Backlog hinzuzufügen . Da Sie gerade dabei sind, einen neuen Testansatz zu übernehmen, kann und sollte die Arbeit im Zusammenhang mit Werkzeugen, Schulungen und anderem Overhead, die sonst nicht einem typischen Feature zugeordnet werden können, vom Product Owner im Product Backlog priorisiert werden . Dadurch wird sichergestellt, dass diese notwendige Arbeit als geplante Arbeit und nicht als unerwarteter oder unerwünschter Mehraufwand behandelt wird. Bei Verwendung dieses Ansatzes werden architektonische Start- und Landebahn- und Testaktivitäten ordnungsgemäß als Geschäftskosten behandelt.
Um zu wiederholen, was die anderen angedeutet haben:
Das Testen ist eine entscheidende Komponente bei der Bereitstellung hochwertiger (oder zumindest funktionierender) Software.
Denken Sie daran, dass Sie nur eine Chance haben, einen ersten Eindruck zu hinterlassen, und die Bereitstellung fehlerhafter Software Ihren Ruf zerstört.
Um Ihre Frage zu beantworten: Sie müssen mehr Zeit für das Testen einplanen – und noch mehr Zeit für das Beheben von Fehlern, die entdeckt werden, sobald das Testen beginnt.
Um "diesen Prozess zu verbessern, damit das Testen rationalisierter/schneller ist", stellen Sie das Testen in den Mittelpunkt und nicht eine Bestrafung, die nach der Planung hinzugefügt wird.
Also, wie gehen Sie vor?
Sie erwähnen, dass Ihre Geschichten groß sind und nicht geschrumpft werden können. Möglicherweise benötigen Sie die Hilfe eines erfahrenen technischen Projektmanagers, um Ihrem Team zu erklären, wie Sie die Stories verkleinern können .
Große Storys = große Code-Blöcke = größere Wahrscheinlichkeit von Fehlern = schwieriger zu beheben.
Ein erfahrener (Ex-)Programmierer/PjM zeigt Ihrem Team, wie Sie Ihre Geschichten in überschaubare Bits (oder Bytes) verkleinern können.
Beispielsweise würden Techniken wie Stubbing verwendet werden; Während Sie fortschreiten, verwandeln Sie jeden Stub in echten Code. Aber inzwischen haben Sie viele kleine Geschichten – eine pro Funktion – die codiert und einheitengetestet und sogar von Experten begutachtet werden können, da sie mit einer einzigen Funktion eine überschaubare Größe haben.
Und es wird nicht länger dauern - es wird wahrscheinlich die Zeitleiste verkürzen, da mehr Zeit in die Planung des Codes investiert wird, bevor er geschrieben wird.
Daniel
Todd A. Jacobs