Blog

Testautomatisierung #1 – Effektivität und Effizienz

In den letzten zwei Jahrzehnten hat sich die Softwareindustrie vom strikt prozessorientierten Wasserfall- hin zum Agile-Modus bewegt – die Rolle des Testens hat sich stark geändert. Wenn Sie in der Wasserfall-Ära Testmanager waren, mussten Sie ISO/IEC 9126, IEEE-829 und viele andere Standards kennen, um bei der Leitung von Tests erfolgreich zu sein. Heutzutage gibt es nur noch wenige Testmanager und auch kaum mehr Tester; der Fokus hat sich fast ausschließlich auf Exploratives Testen (ET) und automatisiertes Regressionstesten verlagert. Dieser Umstand wirft eine Frage auf: Können wir aus der Vergangenheit etwas lernen, um unsere Effektivität und Effizienz in unserer Agile-Welt zu verbessern?

Die Begriffe Effektivität und Effizienz werden oft verwendet, aber im Bereich Softwaretest und Testautomatisierung nicht ebenso oft definiert. Sie müssen die Vorgänge beim Testen und bei der Testautomatisierung trennen – eine Abhängigkeit zwischen beiden besteht dennoch. Testautomatisierungsarbeiten hängen von den definierten Testzielen ab, beispielsweise als Teil des Kriteriums Definition of Done. Die Ziele sollten zuerst aufgeschrieben werden, damit Sie wissen, warum/wer/wann/wo/was testet und dies nach Priorität automatisiert wird. An diesem Punkt können Agile-Projekte bereits nicht mehr mithalten, da die fünf Wörter „Exploratives Testen (ET) und automatisiertes Regressionstesten“ ungefähr das Einzige sind, was Sie zum Thema Testen in der Agile-Ära finden. Wir müssen zurück ins Jahr 1991 gehen und bei unserer Erklärung etwas ausholen. Kopieren wir einen Teil des Inhalts aus dem ISO 9126-Wikipedia-Artikel – dort klassifiziert ISO/IEC 9126-1 Softwarequalität mit einem strukturierten Set von Charakteristiken und Sub-Charakteristiken wie folgt:

  • Funktionalität [Angemessenheit, Interoperabilität, Sicherheit, Richtigkeit]
  • Zuverlässigkeit [Fehlertoleranz, Reife, Wiederherstellbarkeit]
  • Benutzbarkeit [Attraktivität, Bedienbarkeit, Erlernbarkeit, Verständlichkeit]
  • Effizienz [Zeitverhalten, Verbrauchsverhalten]
  • Änderbarkeit/Wartbarkeit [Analysierbarkeit, Modifizierbarkeit, Stabilität, Testbarkeit]
  • Übertragbarkeit  [Anpassbarkeit, Austauschbarkeit, Installierbarkeit, Koexistenz]

Diese 21 definierten Sub-Charakteristiken sollten fokussiert, priorisiert, geprüft und in die DevOps-Pipelines integriert werden. Leider liegt ein Großteil des Testfokus auf „Nachhaltigkeit“, die in positive automatisierte Regressionstestfälle in allen Testphasen übersetzt werden kann. Einige der Tests des Typs „Richtigkeit“ werden in ET-Sitzungen abgedeckt. Leider werden wichtige Qualitätscharakteristiken, wie z. B. jene zum Zeitverhalten und zur Benutzbarkeit, zu oft ignoriert, was zu langen Reaktionszeiten und komplexen Benutzerschnittstellen führt. Man könnte die Frage stellen, ob es in diesen Bereichen im Laufe der Zeit zu irgendwelchen Verbesserungen gekommen ist. Die einfache Antwort lautet „Ja und Nein“, da sich auch die Benutzeranforderungen geändert haben, insbesondere in den letzten 10 Jahren. Mit Reaktionszeitlimits von 0,1, 1 und 10 Sekunden kommt das menschliche Bewusstsein noch gut zurecht, aber bei 7-10 Sekunden scheint die Aufmerksamkeitsspanne des Benutzers auf drei Sekunden zu sinken – ein Umstand, der auch von Softwareteams berücksichtigt werden sollte und ebenso wenn es darum geht, wie sich die Validierung automatisieren lässt.

Der Begriff Effektivität steht für Strategie, also dafür, „die richtigen Dinge zu tun“. Wenn man über Teststrategien nachdenkt (in manchen Zusammenhängen auch als „Testansatz“ bekannt), so geht es dabei um die Definition des Testfokus verschiedener Qualitäts-Subcharakteristiken sowie das Festlegen von Zielen und Metriken für jede einzelne Teststrategie. Der Prozess wurde hier etwas vereinfacht, aber er hängt auch von der Projektgröße ab – je größer das Projekt ist, desto mehr Formalitäten benötigt es. Wenn Sie Ihre Ziele definiert haben, können Sie anfangen, das „Wie“ zu planen. Nehmen wir hier zur Verdeutlichung ein Beispiel, um einige Qualitätscharakteristiken für einen imaginären Online-Shop aufzulisten:

Wenn Sie die Ziele festgelegt haben, ist es viel einfacher, darüber nachzudenken, was automatisiert und was manuell getestet werden soll. Jetzt betreten wir die Welt der Operationen, die sich darum dreht, „es richtig zu machen“. Wenn man Strategie und Operationen zusammennimmt, erhalten wir die bekannte Aussage „die richtigen Dinge richtig machen“ – Effektivität und Effizienz. Wenn Sie die richtigen Dinge machen, überleben Sie. Wenn Sie die falschen Dinge richtig machen, sterben Sie schnell, aber wenn Sie die richtigen Dinge richtig machen, haben Sie Erfolg. Am wahrscheinlichsten dürften Sie in der Mitte liegen. Es ist aber wichtig, dass Sie wissen, wo Sie sind, so dass Sie kontinuierliche Verbesserungen in Richtung Erfolg vorantreiben können.

Beim Wie gibt es vier Dimensionen: Personen und Management, Prozesse, Methoden und Tools. In Projekten sind Personen involviert, die diese Projekte richtig verwalten müssen. Sie müssen auch die Prozesse für Entwicklung und Testen definieren sowie Methoden und Tools auswählen, die verwendet werden sollen. Jedes Mal, wenn Sie ein neues Tool zum Einsatz bringen, benötigen Sie neue Methoden, die an Ihre Prozesse angepasst sind. Am wichtigsten sind aber Personen – wie geht man damit um, wenn jemand die Änderungen ablehnt, da es in der menschlichen Natur liegt, den Status quo beizubehalten? Veränderungsmanagement ist sehr wichtig, aber wir kommen später in der Blogreihe auf dieses Thema zurück. In der Wasserfall-Ära waren alle Prozesse, Methoden und Tools irgendwie vorgegeben. Jetzt sind sie immer noch da, aber es wissen nur wenige um ihre Existenz, daher werden sie auch nur von wenigen beachtet. Das passiert erst, wenn die Scherereien eine gewisse Krisenhaftigkeit angenommen haben.

Testautomatisierungsstrategien und -operationen

Obwohl es eine Abhängigkeit zwischen Testen und Testautomatisierung gibt, müssen sie aus dem Blickwinkel der Strategie und der Operationen separat behandelt werden. Jedes Projekt ist anders, und der Erfolg eines Projekts hängt sehr stark von der Kompetenz der Personen ab, die an ihm arbeiten. Testautomatisierung ist nicht einfach, und ein Ferienjobber ist nicht der richtige für eine Evaluation der Testautomatisierungstools – hierfür ist von Anfang an ausreichend Kompetenz erforderlich. Natürlich spiegelt dies das Verständnis eines Managers wider, der diese Testautomatisierungsmaßnahmen anstößt, und oftmals kann die Auswahl von Testtools zu einem politischen Testtoolspielchen im Management mittlerer und größerer Unternehmen geraten. Glücklicherweise haben kontinuierliche Integration (CI) und Agile diese politischen Testtoolspielchen im letzten Jahrzehnt im Durchschnitt verringert.

Betrachten wir die Benutzerschnittstellen-Testautomatisierung. Der erste Schritt bei der Testautomatisierung – „Wie man es richtig macht“ – ist das Verständnis, dass 80 % der Testautomatisierungsprojekte als Softwareentwicklungsprojekte betrachtet werden sollten. Somit gelten dieselben Prinzipien und Gesetze. Der Aufwand für die Softwareentwicklung bei Testautomatisierungsprojekten kann in drei Haupttypen unterteilt werden:

  1. Die Testautomatisierung oder der Testautomatisierungsservice funktioniert hervorragend. Es gibt keinen Bedarf für projektspezifisches Testautomatisierungs-Codieren. Hierbei handelt es sich um einen seltenen Fall, der weniger als 20 % der Testautomatisierungsprojekte betrifft.
  2. Testautomatisierungsingenieure verwenden ausgewählte Testautomatisierungstools, und sie entwickeln auch einige eigene Bibliotheken und Testfunktionen, so dass die Automatisierungslösung in ihrem Projekt effizienter ist. Hierbei handelt es sich um einen typischen Fall, bei dem Kenntnisse im Bereich Softwareentwicklung erforderlich sind.
  3. Einige Softwareentwickler entwickeln verschiedene Testautomatisierungsbibliotheken, Schlüsselwörter und Testfunktionen für ein oder mehrere Projekte innerhalb derselben Organisation Hierbei handelt es sich um einen seltenen Fall, aber nahezu alle großen Unternehmen verfügen über interne Testautomatisierungsentwicklungsarbeit. Diese Vorgehensweise ist ein sehr empfehlenswerter Ansatz, auch für Unternehmen mittlerer Größe, die in „Tooling Services“ in DevOps integriert sind.

Natürlich gibt es auch zahlreiche andere Varianten, aber der wichtigste Begriff ist hier „Softwareentwicklung“. Testautomatisierungsprojekte wachsen schnell, daher sollten sie als Softwareentwicklungsprojekte betrachtet werden, die alle modernen Tools und Methoden beinhalten, die in CD-Pipelines verwendet werden. Jedes Mal, wenn Sie eine wiederverwendbare Testfunktion oder ein wiederverwendbares Schlüsselwort schreiben, müssen Sie auch automatisierte Modul-, Integrations- und Systemtestfälle schreiben und diese in CD-Pipelines einfügen – statische Analysen und Code-Reviews, auch bekannt als Git-Pull-Request (PR), nicht zu vergessen. Fehlendes Wissen um die neuesten optimalen Verfahren im Bereich Softwareentwicklung ist einer der Hauptgründe für erfolglose Testautomatisierungsprojekte.

Eine engere Auswahl der Testautomatisierungs-Operationselemente, die berücksichtigt werden sollten:

  1. Definieren Sie Ihre Testziele und die zu befolgenden Metriken.
  2. Definieren Sie Ihre auf die Testziele abgestimmte Testautomatisierungsstrategie mit Metriken wie beispielsweise Testfallautomatisierungszeit und Wartungsaufwand.
  3. Wenn Sie codieren, verwenden Sie Agile-Methoden: Backlog, Stand-up-Meetings und regelmäßige Demos etc.
  4. Zentralisieren Sie Entwicklung, Support und Trainingsmaßnahmen für die Testautomatisierung, wenn Sie mehrere Teams in derselben Organisation haben. Versuchen Sie, die besten 20 % der Testautomatisierungsexperten einzubinden.
  5. Bevor Sie Testfälle automatisieren, prüfen Sie, ob nicht zuerst die Testdaten oder das Testumgebungsmanagement automatisiert werden sollten. Automatisieren Sie nicht nur Testfälle, sondern automatisieren Sie alles.
  6. Berücksichtigen Sie Ihre Kundenanforderungen, wenn Sie automatisieren – der Kunde kann wie ein Kollege sein, der neben Ihnen sitzt. Fragen Sie: „Tell me what you want, what you really really want”.
  7. Integrationstests dürften bei weitem der effizienteste Ansatz bei der Testautomatisierung sein – versuchen Sie‘s.
  8. Wenn Sie Benutzerschnittstellen-Testfälle automatisieren, achten Sie auf die Anzahl der Schlüsselwörter bzw. Testfunktionen. Halten Sie sie unter 150.

Ein Hinweis zu Punkt 4: Aus dem Scrum-Leitfaden stammt folgende Beschreibung: „Selbstorganisierte Teams entscheiden selbst, wie sie ihre Arbeit am besten erledigen, statt von Personen außerhalb des Teams dirigiert zu werden.“ Dieser Aussage konnte ich noch nie uneingeschränkt zustimmen. Wenn Sie zwei, dutzende oder sogar hunderte Scrum-Teams haben, die am selben Produkt arbeiten, ist es viel effizienter, gemeinsame Tools, Methoden und Prozesse zu verwenden, statt eigene für jedes Team. Testautomatisierungsspezialisten gibt es nicht in jedem Team. Auf dieselben Probleme kann man in allen Arbeiten mit CD-Bezug stoßen. Bei Google können Sie hinsichtlich zentralisierter Toolentwicklung gute Beispiele für deren Vorgehensweise finden.

Fazit

Die Eingangsfrage lautete: Können wir aus der Vergangenheit etwas lernen, um unsere Effektivität und Effizienz in unserer Agile-Welt zu verbessern? Wenn wir etwas über die Geschichte der Softwareentwicklung und Testautomatisierung wissen, die noch nicht so lange zurückliegt, hilft uns das, unsere Gegenwart zu verstehen. Der Zweck dieses Blogposts war es, einige der etwas in Vergessenheit geratenen Methoden zu teilen, die auch heute noch ihre Gültigkeit haben und von denen einige sogar einen Mehrwert für Ihre Kunden in verschiedenen Formen bringen können. Als Fazit möchte ich auf Craig Larmans Worte aus dem Jahr 2014 verweisen: „Seit Mitte der 90er Jahre hat es keine bedeutenden Innovationen in der Testautomatisierung gegeben“. 2020 fügte er jedoch hinzu: „Seit 2014 gibt es etwas mehr oder weniger Neues in der Welt der Testautomatisierung: lernende Maschinen (‚KI‘)“. Es ist großartig, die nächsten Schritte und Innovationen in der Testautomatisierung in den 2020er Jahren zu sehen, die viele Jahrzehnte andauern können.

 

Der Autor:

Antti Heimola ist Senior Automation Architect bei Qentinel Oy in Finnland. Er hat mehr als 25 Jahre Erfahrung in der HW/SW-Automatisierung, einschließlich mehrerer Innovationen in diesem Bereich. Er hat in verschiedenen Funktionen gearbeitet, wie HW/SW-Designer, SW-Architekt, Programm-/Produktmanager, Testmanager und in der Agile/Lean-Berater. Coaching und die Weitergabe von Wissen liegen ihm heute besonders am Herzen.

 

Diese Blogreihe wird Stories zu den Themen Testautomatisierung, W-Modell und Agile vorstellen, insbesondere aber auch Dinge, die beim Aufbau einer Testautomatisierung berücksichtigt werden müssen – vom Ein-Mann-Betrieb bis zum tausendfachen Service wie bei dem Produkt https://qentinel.com/ Pace, das ich als Beispiel für die Themen Scripting-Techniken für Testautomatisierung und Test Automation as a Service verwende.

Leave a Comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.