Maßnahmen für Testbarkeit

Um Fehler in Softwaresystemen aufspüren zu können, müssen Architekten Vorsorge leisten. Das Stichwort heißt Entwurf für Testbarkeit.

In Pocket speichern vorlesen Druckansicht 4 Kommentare lesen
Lesezeit: 2 Min.
Von
  • Dr. Michael Stal

Um Fehler in Softwaresystemen aufspüren zu können, müssen Architekten Vorsorge leisten. Das Stichwort heißt Entwurf für Testbarkeit.

Stark verkürzt ausgedrückt, liefert Testen Information über ein System, um mögliche Probleme beziehungsweise Problemursachen zu ermitteln. Daraus folgt unweigerlich als Voraussetzung, dass sich die benötigte Information zur Fehlernachverfolgung und Fehlereingrenzung überhaupt ermitteln lässt, und ebenfalls, dass wir das System zur Fehleranalyse in bestimmte Zustände bringen können. 

Will man zum Beispiel das Verhalten eines zuverlässigen Systems bei Stromausfall eines bestimmten Servers testen, kann man solange warten, bis tatsächlich ein Stromausfall eintritt. Oder man zieht einfach den Netzstecker und prüft, ob das System tatsächlich gemäß Spezifikation innerhalb kurzer Zeit nahtlos auf einen aktiven Backup-Server wechselt.

Hier muss die Architektur Hilfestellung leisten, indem sie "Design for Testability" umsetzt.  Entwurf zur Testbarkeit besteht aus zwei Aspekten, Kontrollierbarkeit und Beobachtbarkeit:

  • Beobachtbarkeit heißt, dass das System jederzeit die benötigte Information liefert, um seinen augenblicklichen Zustand zu ermitteln.
  • Kontrollierbarkeit heißt, dass wir das System gezielt in bestimmte Zustände überführen können, um sein Verhalten in diesen Zuständen zu analysieren.

Um keine Daten-Tsunamis zu erzeugen, sollten Architekten und Entwickler genau überlegen, welche Information für das Testen tatsächlich notwendig ist. Negativbeispiel: In einem System für Abbuchung von Prepaid-Telefonkarten wurden mehrere Gigabytes von Information lokal erzeugt. Die zugehörigen Server befanden sich in infrastrukturschwachen Staaten. Daher dauerte der entfernte Abruf dieser Daten zur Fehleranalyse aus Deutschland Stunden. Für den betroffenen Mobilnetz-Provider ist das schlicht inakzeptabel. Es erweist sich daher als wichtig, vorab zu planen, welche (minimale) Information vom System abrufbar sein muss und vor allem wie.

Apropos "Wie": Testrelevante Information lässt sich zum Beispiel über Logs/Traces erzeugen. Testschnittstellen erlauben den Abruf des aktuellen Systemzustands und das gezielte Einstellen des Systems auf bestimmte Zustände. Mock-Objekte "simulieren" fehlende Systemteile. Selbstredend sollten Testschnittstellen möglichst einfach und einheitlich aufgebaut sein. Achtung: Testschnittstellen sollten in ausgelieferten Systemen entweder deaktiviert oder vor Missbrauch geschützt sein.

Konsequentes Test-Driven Design (TDD) ist übrigens ein hervorragendes Hilfsmittel, um Testbarkeit zu adressieren. Denn bei TDD geht es es schließlich darum, schon vor dem Entwurf an den Test zu denken.

()