Agil ohne Unit-Tests

27

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.

Böse Kröte
quelle
14
Agile hat eine viel größere Chance, dass es mit automatisierten Tests zum Sichern gelingt. Ich bin gezwungen, Agile ohne vorherige Tests anzuwenden, und es ist eine Falle. Dies ist nur eine bequeme Methode, um technische Schulden schneller als zuvor zu akkumulieren.
MetaFight
5
TDD ist nicht unbedingt die einzige Übung, die Sie dorthin führt. Es ist jedoch weit verbreitet. Ich persönlich halte BDD für einen pragmatischeren Ansatz.
MetaFight
6
"Agile hat eine viel größere Chance, mit automatisierten Tests erfolgreich ein Backup zu erstellen": Dies gilt auch für nicht-agile Projekte. Ich denke, automatisierte Tests sind eher orthogonal zu der verwendeten Methodik: Sie geben Ihnen mehr Sicherheit, dass Ihr Code korrekt ist, und helfen Ihnen, ihn sauber zu halten.
Giorgio
Übrigens kann diese Frage Unit-Test und TDD gemischt haben Sie Unit-Test ohne TDD.
Walfrat
Als ich die Antworten hier lese, wundere ich mich, wie sehr sich die Dinge geändert haben, seit ich Mitte der 00er agil gelernt habe. TDD und Paarprogrammierung wurden als die WESENTLICHEN agilen Praktiken angesehen, um qualitativ hochwertigen Code in einem hohen Tempo aufrechtzuerhalten.
Nomen

Antworten:

37

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.

Badeente
quelle
Müssen Sie das Agile Manifest befolgen, um agil zu sein?
JeffO
Nein @JeffO. Sie nicht, aber es hilft bestimmt. Ich redigierte, um meine Absicht zu erklären.
RubberDuck
1
IMO Die agilsten Programmierer sind diejenigen, die sehr pragmatisch sind, obwohl sie noch nie von dem agilen Manifest gehört haben.
Giorgio
1
Ich kann dir da nicht widersprechen @Giorgio. Ich war Jahre in einem agilen Team, bevor einer von uns jemals von Agile gehört hat.
RubberDuck
2
@CortAmmon - Wenn Sie Agile definieren möchten (großes "A", wie in Ihrer Methodik), stimme ich Ihnen zu, aber wenn Sie agil sein möchten (kleines "A", wie wenn Sie tatsächlich agil sind, um Änderungen besser handhaben zu können) ), dann müssen Sie überhaupt keine bestimmte Methodik befolgen. Wenn Sie einen Wasserfall schaffen und trotzdem mit Änderungen umgehen können (schwierig, aber nicht unmöglich), wen interessiert das dann?
JeffO
30

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.

David Arno
quelle
4
Es ist schwer zu erkennen, wie ein Team ohne Tests funktionierende Software in jeder Umgebung warten kann .
Bryan Oakley
6
Nur weil etwas schwer zu sehen ist, ist es nicht unmöglich
Ampt
8

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.

Axel
quelle
3
Sie können es manuell testen. Sie brauchen keine Unit-Tests dafür. Sie helfen. VIEL. Sie sind wie das Beste, was einen Prozess verbessern kann. Sie sind jedoch keineswegs notwendig, um Software zu liefern.
T. Sar - Reinstate Monica
Ja natürlich. Ich habe nicht gesagt, dass Sie es nicht manuell tun können. Ich habe jede Art von Test gesagt. Ich habe keinerlei Meinungsverschiedenheiten in Bezug auf das Testen angegeben. Und was Ihre manuellen Tests angeht, ist es eine andere Perspektive, wie Sie agil bleiben können, wenn Sie sich Rückschritten gegenübersehen.
Axel
Ich verstehe Ihren Standpunkt. Bei der Frage geht es jedoch um Unit-Tests in speziellen, nicht ganz allgemeinen Tests. Wenn Sie Ihre Antwort im Zusammenhang mit der Frage lesen, wird Ihr Test als "Komponententest" betrachtet!
T. Sar - Wiedereinsetzung von Monica
Entschuldigung.
Axel
2
@ThalesPereira, ein Gerät zu testen , die Ihnen , ob die Änderung sagt , dass Sie 40 Sekunden vor brach etwas gemacht viel agiler als der Bericht ist , dass Sie wieder aus der QA - Abteilung bekommen sagen Ihnen , dass etwas jemand vor drei Tagen geändert brach es.
Solomon Slow
2

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!

gbjbaanb
quelle
Sie können einen agilen Prozess nur mit Integrationstests ausführen. Ist das theoretisch oder aus Erfahrung gesprochen?
R Sahu
1

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.

JeffO
quelle
1

Ich möchte dem entgegenhalten (andere Antworten), dass das Agile-Manifest klar etwas darüber aussagt, nämlich:

Kontinuierliche Aufmerksamkeit für technische Exzellenz und gutes Design erhöht die Beweglichkeit.

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.

Die organisatorische Agilität wird durch die technische Agilität eingeschränkt

Mit anderen Worten, wenn Sie nur langsam Änderungen an Ihrem Produkt vornehmen, spielt es keine Rolle, wie Sie Ihre Teams strukturieren, welche Organisation Sie verwenden oder welche Rahmenbedingungen Sie einhalten, Sie werden nur langsam auf Änderungen reagieren.

Wenn Sie verhindern können, dass Ihr Produkt auf andere Weise Änderungen widersteht, sind Sie möglicherweise auf dem richtigen Weg, aber:

Ich habe Extreme Programming erfunden, um die Welt für Programmierer sicher zu machen. - Kent Beck

In Scrum mangelt es an technischen Methoden, aber Jeff hat Folgendes dazu gesagt:

Ich habe noch nie ein hyperproduktives Scrum-Team gesehen, das keine Entwicklungspraktiken für Extreme Programming angewendet hat. - Jeff Sutherland

Zitiert aus diesem Artikel: http://ronjeffries.com/articles/017-02ff/gathering2017/

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:

Nützliche Techniken umfassen kontinuierliche Integration, testgetriebene Entwicklung , Paarprogrammierung und kollektives Eigentum.

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.

Niels van Reijmersdal
quelle
1
Tatsache ist, dass es nicht unbedingt ein "Unit-Test" sein muss, sondern nur ein Integrationstest, der ausreicht. Wenn Sie jedoch nichts haben und alles manuell testen, werden Sie sehr wahrscheinlich nur langsam auf Änderungen reagieren oder regelmäßig eine Menge Regression liefern.
Walfrat
2
Technisch gesehen ist dies nicht der Fall, aber Tests auf höheren Ebenen sind oft spröder, schwerer zu warten und verlangsamen Sie am Ende wahrscheinlich, wenn Sie zu viele davon haben. Ich mag es, wie Martin Fowler es ausdrückt: "Wenn Sie bei einem High-Level-Test einen Fehler bekommen, haben Sie nicht nur einen Fehler in Ihrem Funktionscode, sondern auch einen fehlenden oder falschen Komponententest." von martinfowler.com/bliki/TestPyramid.html
Niels van Reijmersdal
Testen Sie auf einer höheren Ebene nicht die gleichen Dinge, also lassen Sie Löcher zu, aber denken Sie, dass das Risiko derzeit ausreichend ist. Für eine Website könnte das ausreichen, für ein kritisches Finanzsystem -> auf keinen Fall.
Walfrat