Ist es sinnvoll, von "agiler Entwicklung" zu sprechen oder zu behaupten, dass Sie eine "agile Methodik" anwenden, wenn die Codebasis, an der Sie arbeiten, eine Testabdeckung von 0% aufweist? (Und Sie als Team tun nichts dagegen).
Um es klar zu machen: Für mich macht es keinen Sinn. In meiner persönlichen Erfahrung stellte ich fest, dass Unit-Tests das einzige Tool sind, mit dem Sie wirklich "agil" sind (dh auf Änderungen reagieren, Ihr Design verbessern, Wissen teilen usw.), und TDD ist die einzige Übung, die Sie dorthin führt .
Vielleicht gibt es einige andere Möglichkeiten, aber ich kann immer noch nicht sehen, wie sie möglicherweise funktionieren können.
unit-testing
agile
tdd
Böse Kröte
quelle
quelle
Antworten:
Um pedantisch zu sein, enthält das Agile Manifest oder der Scrum Guide keinerlei Hinweise auf technische Praktiken wie Unit Testing oder TDD. Theoretisch könnten Sie also früh und häufig mit Fokus auf Zusammenarbeit und Wertschöpfung ohne sie liefern und sich selbst als agil bezeichnen , vielleicht sogar tatsächlich als agil .
In der Praxis ist es jedoch fast unmöglich, alle paar Wochen einen konstanten Wert ( in die Produktion ) zu liefern, ohne eine gute Testsuite. Dies beinhaltet sowohl Integrationstests als auch Unit-Tests. Unit-Tests gehen nur so weit. Es gibt einen Grund, warum es eine Pyramide ist und schließlich kein Rechteck.
Ohne die Tests als Sicherheitsnetz werden Sie entweder in jeder Version viele Regressionsfehler einführen oder Angst vor dem Refactoring haben. Beides wirkt sich stark auf Ihre Fähigkeit aus, in einem nachhaltigen Tempo fortzufahren . Wenn Sie nicht in der Lage sind, Ihr Tempo zu halten oder den Kurs zu ändern (Neugestaltung), haben Sie keine Beweglichkeit. Beweglichkeit ist schließlich das Ziel, das wir anstreben.
quelle
Das agile Manifest besagt einfach:
Individuen und Interaktionen über Prozesse und Werkzeuge
Arbeitssoftware über umfangreiche Dokumentation
Zusammenarbeit der Kunden bei Vertragsverhandlungen
Reagieren, um nach einem Plan umzuschalten
Keine Erwähnung von Unit-Tests. Selbst die 12 Prinzipien erwähnen das Testen nicht.
Technisch gesehen ist es also möglich, ein agiles Team zu sein, ohne Unit-Tests zu schreiben. In der Praxis ist es jedoch sehr schwierig zu erkennen, wie ein Team eine funktionierende Software in einer agilen Umgebung unterhalten kann, ohne Tests durchführen zu müssen, um ständige Änderungen vornehmen zu können.
quelle
Auch wenn es im agilen Manifest kein direktes Wort über Unit-Tests oder TDD oder irgendeine Art von Test gibt, wie andere hier geantwortet haben, glaube ich, dass ein guter Scrum-Meister oder -Entwickler in der Lage wäre, eine der Aussagen im Manifest zu erkennen.
Arbeitssoftware über umfangreiche Dokumentation.
Wie würde jemand wissen, ob die Software funktioniert? Das Manifest muss den Begriff „Prüfung“ nicht ausdrücklich angeben. Es ist kurz und bündig.
Unit-Tests (im Kontext des Themas) verlangsamen Ihre Codierungsphase in der früheren Phase, lohnen sich jedoch im weiteren Verlauf und beschleunigen die Entwicklung erheblich. Es ermöglicht Ihnen eine genaue Kontrolle der Körnung beim Testen auf Codeebene sowie eine Skalierbarkeit Ihres Designs, wodurch Sie sicher sein können, dass Ihre Software funktioniert und problemlos mit Regressionen umgehen kann. auf die Ihre Entwicklung agil machen würde.
quelle
Es macht absolut Sinn. Bei Agile geht es nicht um Tests, wie andere bereits erwähnt haben, sondern um die konkrete Beantwortung Ihrer Frage:
Nein, Sie brauchen überhaupt keinen Unit-Test.
Sie können einen agilen Prozess nur mit Integrationstests ausführen. Sie könnten beispielsweise jeden Abend einen automatisierten Integrationstest durchführen und Fehler beheben, die am nächsten Tag auftreten. Wenn Sie möchten, können Sie einen manuellen Tester verwenden, der fortlaufend Integrationstests durchführt. Unabhängig vom System ist der Komponententest völlig optional.
Möglicherweise finden Sie Unit-Tests, die Ihnen bei der Entwicklung helfen, und zwar fair genug, aber es gibt viele Dinge, die bei der Entwicklung hilfreich sein können, die Sie möglicherweise nicht haben.
Sie müssen allerdings eine Form von Tests durchführen, auch wenn es sich um die alten "Kunden-Beta-Tester" handelt. Wenn Ihr Kunde stark in den Prozess involviert ist und es ihm nichts ausmacht, Fehler zu finden, kann dies funktionieren - da er dazu neigt, Fehler zu finden, von denen niemand geglaubt hat, dass sie Fehler sind!
quelle
Es ist nicht erforderlich. Testen ist großartig, wenn Sie Leute haben, die wirklich wissen, wie man es benutzt. Wenn Sie dies nicht tun, ist dies nicht nur nicht erforderlich, sondern wird auch zur Haftung. Ich würde sagen, es gibt viele Programmierer, die nicht sehr gut darin sind.
Ich bin froh, dass Sie in Ihrer Frage bestätigt haben, dass es bei Agilität darum geht, wie Sie Software tatsächlich freigeben, anstatt einer bestimmten Methodik zu folgen. Das Agile Manifest ist eine schöne Referenz, aber es ist nicht der endgültige Leitfaden. Agile existierte, bevor es existierte. Es gibt Möglichkeiten, Software "agiler" zu entwickeln, aber für verschiedene Projekte können unterschiedliche Kombinationen verwendet werden.
Wenn Sie neue Software mit einer Geschwindigkeit veröffentlichen, die für den Kunden akzeptabel ist, sind Sie wahrscheinlich agil. Ich würde auch einschließen, nicht zu viel Push-Back zu haben und über Funktionsänderungen durch die Entwickler zu klagen. Eine Sache nur zu reparieren, um eine andere zu zerbrechen, ist auch nicht ideal. Wenn Ihre Benutzer beim Upgrade mehrere Versionen zurückliegen, sind Sie wahrscheinlich nicht sehr agil, unabhängig davon, ob Sie testen oder nicht.
quelle
Ich möchte dem entgegenhalten (andere Antworten), dass das Agile-Manifest klar etwas darüber aussagt, nämlich:
Ich mag die LeSS- Definition von technischer Exzellenz sehr und sie umfasst Unit-Testing und TDD. Jetzt können Sie argumentieren, dass Sie möglicherweise keine Unit-Tests oder TDD benötigen, um dies zu erreichen, aber dies ist die häufigste und wahrscheinlich empfohlene Methode.
Wenn Sie verhindern können, dass Ihr Produkt auf andere Weise Änderungen widersteht, sind Sie möglicherweise auf dem richtigen Weg, aber:
In Scrum mangelt es an technischen Methoden, aber Jeff hat Folgendes dazu gesagt:
Ich würde davon ausgehen, dass Scrum-Teams ohne technische Verfahren unter Verwendung von Retrospektiven eine ähnliche Vorgehensweise entwickeln. Sie wollen auch überproduktiv sein, nicht?
Das Agile Fluence- Modell erwähnt es in der Zwei-Sterne-Ebene:
Wenn Sie nur die erste Stufe der Agilen Geläufigkeit anstreben, können Sie die Übung überspringen, aber jedes größere und länger laufende Produkt sollte mindestens versuchen, eine Zwei-Sterne-Stufe zu erreichen.
Der allgemeine Konsens ist also, dass es ohne gute Unit-Tests, saubere Code- und Refactor-Praktiken derzeit nicht möglich ist, wirklich agil zu sein. Dies könnte sich in Zukunft ändern, wenn neue technische Praktiken entstehen.
Was denkst du, wäre die Antwort, wenn wir einige Unterzeichner des Manifests wie Robert C. Martin, Martin Fowler oder Kent Beck fragen? Vielleicht werden sie sagen, dass es abhängt, aber im Allgemeinen ist es etwas, was Sie tun sollten.
quelle