Ist Testen ein notwendiger Bestandteil der agilen Methodik?

24

Ich war in zahlreichen Teams, die versuchen, agile Methoden zu üben, und oft sind diese Teams testorientiert. Ist das Testen ein notwendiger Teil des Praktizierens der agilen Methodik oder ist es nur eine XP-Praxis, die im Laufe der Jahre angewendet wurde?

Stevebot
quelle
76
Testen ist ein notwendiger Bestandteil jeder Qualitätssoftwareentwicklung.
Telastyn
2
Mögliches Duplikat von Kannst du agil sein, ohne TDD zu machen (testgetriebene Entwicklung)? - Wenn Sie nicht einverstanden sind, lassen Sie es mich wissen ...
Murph
11
Ich bin mit dem Duplikat nicht einverstanden. Das Testen ist umfassender als TDD und die umfassendere Frage hat unterschiedliche Antworten.
Bart van Ingen Schenau
Ich bin mit @BartvanIngenSchenau einverstanden. Das Testen ist nicht nur eine weitaus umfassendere Aktivität als nur das Durchführen von TDD, sondern auch das Testen von TDD und Einheiten ist nicht dasselbe. Ich bin überrascht, dass so viele Leute die letzten beiden verwirren.
Andres F.
Möglicherweise wurde es in das Konzept "Definition of Done" integriert, was in Agile / Scrum bedeutet, dass es kontextabhängig ist. Wenn Agile auf Marketing, Vertrieb usw. angewendet wird, haben sie keine ähnlichen Konzepte wie Softwaretests, haben aber immer noch eine "Definition von erledigt". Bei Software sollte bei der Definition von "erledigt" die Qualität (sowohl sichtbare als auch interne, z. B. Codequalität) des Endergebnisses sowie der Grad der durchgeführten Tests berücksichtigt werden.
Rwong

Antworten:

33

Das Testen ist für Agile von entscheidender Bedeutung, vor allem, weil Agile auf inkrementellen Verbesserungen basiert: Die Schwierigkeit besteht darin, dass es manchmal schwierig ist zu erkennen, wie sich die aktuellen Änderungen auf Ihren alten Code auswirken. Der beste Weg, sicher zu sein, dass Sie etwas nicht kaputt gemacht haben, besteht darin, es zu testen und zu wissen, wie es zu testen ist. Auf diese Weise finden Sie den Fehler sofort und nicht später, wenn Sie genau vergessen haben, was Sie getan haben, als Sie den Code geschrieben haben, der ein altes Feature gebrochen hat.

Der Grund, warum dies anders ist als bei der herkömmlichen Top-Down-Design-Programmierung, ist, dass es in dieser Umgebung a) sehr schwierig zu testen ist, bis Sie das fertige Produkt haben. B) theoretisch berücksichtigen Sie alle Designkriterien gleichzeitig Daher ist es weniger wahrscheinlich, dass Sie eine Entwurfsentscheidung treffen, die frühere Entwurfsentscheidungen verletzt.

Micah
quelle
2
Es ist auch wichtig, dass zukünftige inkrementelle Änderungen frühere Funktionen nicht beeinträchtigen, und Unit-Tests sind eine einfache Möglichkeit, dies zu überprüfen.
1
Ich würde sagen, dass das Testen für die Softwareentwicklung absolut notwendig ist .
Andres F.
@Snowman Testing! = Einheitentest. Auch Unit-Tests! = TDD (nur für den Fall ...).
Andres F.
@AndresF. Es stimmt, ich denke normalerweise, dass Unit-Tests aus den oben genannten Gründen ein wesentlicher Bestandteil von Agile sind. Lesefehler.
8

Sie sprechen wahrscheinlich von automatisierten Tests, Komponententests, Integrationstests usw. Diese sind für Agile wichtiger als manuelle Tests (mit Testern usw.), da sie zu langsam sind und es daher nicht möglich ist, jede kleine Änderung zu testen, die Sie vornehmen. Da es sich bei Agile um schnelle kleine Iterationen handelt, ist es sehr nützlich, Tests durchzuführen, die die Richtigkeit in Sekunden oder Minuten und nicht in Stunden oder Tagen überprüfen.

Karthik T
quelle
8

Woher wissen Sie, dass Ihr Code funktioniert, wenn Sie keine Tests haben?

Bearbeiten: Die Behauptung, dass Tests nicht beweisen können , dass der Code funktioniert , definiert keinen entscheidenden Begriff, nämlich funktioniert . Was bedeutet es für ein Programm zu arbeiten? Wenn Sie diesen Begriff vage halten, gibt es keine Möglichkeit, zu beweisen oder sicherzustellen, dass ein Programm funktioniert. Je.

Andererseits können Sie Arbeiten als "Verhalten gemäß einer Spezifikation" definieren. Jetzt können Sie nicht nur Tests verwenden, um zu zeigen, dass Code funktioniert, sondern die Tests selbst können als ausführbare Spezifikation des Verhaltens Ihres Codes dienen. Mit anderen Worten, eine gut geschriebene Testsuite definiert, was Arbeit bedeutet.

Diese Denkweise zwingt Sie auch dazu, die Bedeutung eines Fehlers erneut zu untersuchen . Wenn Ihr Code alle Tests besteht, enthält der Code keine Fehler. Wenn sich das System trotzdem nicht so verhält, wie es sollte, ist sein Verhalten nicht richtig spezifiziert. Ich e. Der Fehler befindet sich in der Spezifikation, die durch Tests definiert wurde.

Diese Herangehensweise an die Softwareentwicklung entkoppelt die funktionale Spezifikation eines Systems von seiner Implementierung, was laut jedem Softwareentwicklungsbuch der Welt eine sehr gute Sache ist. Gleichzeitig stellt dieser Ansatz sicher, dass Ihre Implementierung immer der funktionalen Spezifikation entspricht.

Dima
quelle
13
Wann hören Kunden auf, Fehlerberichte einzureichen? :-)
gbjbaanb
3
Sie könnten es richtig beweisen. Clean Room Software Engineering ist TDD sehr ähnlich, hat jedoch nur automatisch statistische Tests generiert, die aus den Spezifikationen und Proofs generiert werden.
Jörg W Mittag
1
-1 - "Testen zeigt das Vorhandensein, nicht das Fehlen von Fehlern."
Telastyn
@Telastyn, Wenn keine Tests durchgeführt werden, ist das Vorhandensein von Fehlern nahezu sicher. Auf der anderen Seite bietet eine gut geschriebene Reihe von Tests eine ausführbare Spezifikation dessen, was Ihr Code tut.
Dima
Ich bin damit nicht einverstanden, aber viele Tests beweisen nicht, dass Ihr Code funktioniert.
Telastyn
5

Nein, es ist nicht notwendig"

Die Prinzipien von Agile sagen nichts direkt über das Testen aus.

Aber es ist sehr ratsam

Angesichts des Engagements von Agile für einen nachhaltigen Prozess, eine kontinuierliche / inkrementelle Bereitstellung und Softwarequalität ist das automatisierte Testen die derzeit beste Lösung für die meisten Projekte

Ausnahmen (wie von Jörg W Mittag bemerkt) sind nachweislich korrekte Entwicklungswerkzeuge, Meta-Programmiersysteme, die Code generieren, et al. Solche Systeme sind jedoch selten.

Steven A. Lowe
quelle
4

Sowohl Agile als auch XP versuchen, Big Design Up Front zu vermeiden . In BDUF werden Anforderungen gesammelt, eine formale Spezifikation erstellt, dann die Codierung durchgeführt und dann die Tests durchgeführt. Dies ist sinnvoll für genau definierte, missions- und lebenswichtige Systeme wie medizinische Geräte, Raumsonden usw.

Agile vermeidet diesen Fluss, weil es bei Problemen, die nicht genau definiert sind, nicht gut funktioniert , zum Beispiel "was auch immer der Client für diese Woche ändert". Wir brauchen noch eine formale Spezifikation, damit wir wissen, was zu tun ist und wann wir fertig sind, aber anstatt eines schriftlichen Dokuments verwenden wir Code in Form von automatisierten Tests.

Automatisierte Komponententests sind schnell zu schreiben, schnell auszuführen und sehr modular / entkoppelt. Dies macht sie zu einer schnellen Möglichkeit, die Anforderungen formal zu spezifizieren und zu überprüfen.

Warbo
quelle