Testen und Testautomatisierung in agilen Projekten DR. WILHELM HUMMER wh@techtalk.at COPYRIGHT 2011, TECHTALK - WWW.TECHTALK.AT
Wie es zu diesem Vortrag kam COPYRIGHT 2011, TECHTALK - WWW.TECHTALK.AT
Testen in agilen Projekten Scrum Herausforderungen Lösungsansätze Kurze Sprints Fertigstellung Tests am Sprintende Multifunktionale Teams Tests = Detailspezifikation Häufige Änderungen Anzahl/Aufwand Regressionstests Automatisierung 3
Meine Behauptungen Testautomatisierung wird teuer 1. wenn man alle Testfälle automatisiert 2. wenn man manuelle Testfälle automatisch ablaufen lässt. 3. wenn die Testfälle durch die Automatisierung unlesbar werden. 4. wenn sie erst nach Fertigstellung der Entwicklung erfolgt. 4
Behauptung #1 Die Abdeckung Automatisieren Sie Testfälle, die riskante Teile der Anwendung abdecken oft mit verschiedenen Daten durchlaufen sollen die Behebung eines Fehlers testen Automatisieren Sie Testfälle nicht, die Anforderungen abdecken, die sich noch ändern werden stabile Teile der Anwendung abdecken bereits durch Unit Tests abgedeckt sind schwer durch einen Automaten zu verifizieren sind 5
Behauptung #2 Die Struktur Prüft Struktur Setup Workflow-Test Mehrere Features im Zusammenhang ACT-ASSERT- ACT-ASSERT- ACT-ASSERT- Abhängig von Testdaten, anderen Testfällen Akzeptanzkriterien Isoliertes Feature, einzelnen Aspekt ARRANGE ACT ASSERT Unabhängig von - anderen Testfällen, - anderen Features 6
Test Automation Pyramid Explorativ Nach Mike Cohn 7
Die Schlussfolgerung Jeden Aspekt in der niedrigst möglichen Ebene testen! Möglichst viele Akzeptanzkriterien Nur das, was nicht durch Akzeptanzkriterien getestet werden kann, durch Workflow-Tests (ev. über UI) prüfen 8
Behauptung #3 Die Lesbarkeit // Go to web page 'http://fundbuero.techtalk.at' using new browser instance BrowserWindow localhostbrowser = BrowserWindow.Launch( new System.Uri(this.RecordedMethod1Params.Url)); // Click 'Fundstück erfassen' link Mouse.Click(uIFundstückerfassenHyperlink, new Point(56, 9)); // Click 'Speichern' button Mouse.Click(uISpeichernButton, new Point(44, 14)); int fundnr1 = int.parse(uifundnr127pane.innertext.substring(9)); // Click 'Fundstück erfassen' link Mouse.Click(uIFundstückerfassenHyperlink, new Point(63, 7)); // Click 'Speichern' button Mouse.Click(uISpeichernButton, new Point(34, 11)); int fundnr2 = int.parse(uifundnr128pane.innertext.substring(9)); Assert.IsTrue(fundNr1 + 1 == fundnr2); // Click 'Close' button Mouse.Click(uICloseButton, new Point(26, 11)); 9
Ein lesbarer Testfall Szenario: Ein neues Fundstück bekommt die nächste Fundnummer des laufenden Jahres Angenommen Das letzte Fundstück des laufenden Jahres hatte die Fundnummer 145 Wenn ich ein neues Fundstück erfasse Dann hat das letzte Fundstück des laufenden Jahres die Fundnummer 146 10
Lesbar und wartbar! Gherkin-Spezifikationen Granulare/Wiederverwendbare Testschritte Fokussiert auf Businessintention Kopplung/Kapselung technischer Details Binding: Controller, Webservice, UI (z.b. Selenium), Community mit über 50.000 Nutzern Plattformen: Java,.NET, Ruby SpecFlow.NET-Implementierung für Gherkin-Spezifikationen Open Source Projekt, von TechTalk vor 2 Jahren initiiert 11
Definition des Produkts Behauptung #4 Zeitpunkt der Tests Anwendersicht Akzeptanzkriterien (ATDD, BDD) Unit Tests (TDD) Explorative Tests Workflow Tests Performance, Skalierbarkeit, Sicherheit, Kritik am Produkt Technische Sicht Agile Testing Quadrants, Brian Marick Neue Dimension: Definition des Produkts! Grenze von Test-Spec und Anforderung verschwindet! Synergie: Spezifikation für Anforderungen und Test! 12
Zusammenarbeit: 3 Amigos Happy Path Technische Machbarkeit Ausnahmen, Grenzfälle 16
Zusammenfassung Sinnvolle Testabdeckung Pyramide zur Testautomatisierung Lesbare Testfälle Synergie Analyse-Test. 17