Testbarkeit
# Testbarkeit

Testbarkeit ist der Grad, zu dem ein Software-Artefakt (ein Software-System, ein Software-Modul, ein Anforderungs- oder Entwicklungsdokument) den Test in einem gegebenen Testkontext unterstützt.
Testbarkeit ist keine intrinsische Eigenschaft von Software-Artefakten und kann nicht direkt (wie z. B. der Software-Umfang) gemessen werden. Stattdessen ist Testbarkeit eine extrinsische Eigenschaft, die sich aus der Wechselwirkung der Software mit den Testzielen, Test-Ressourcen und eingesetzten Testverfahren (d. h. dem Testkontext) ergibt.
Je geringer die Testbarkeit ist, desto höher ist der Testaufwand. Im Extremfall ist bei schlechter Testbarkeit der Test von Teilen der Software-Anforderungen gar nicht möglich.

## Hintergrund

Der Aufwand und die Effektivität eines Software-Tests hängen unter anderem von den folgenden Faktoren ab:
* Software-Anforderungen
* Eigenschaften der Software wie Umfang, Komplexität und Testbarkeit
* Eingesetzte Testmethoden
* Entwicklungs- und Testprozess
* Qualifikation und Motivation der am Test beteiligten Personen

## Testbarkeit von Software

Die Testbarkeit von Software wird u. a. durch folgende Faktoren bestimmt:
* Kontrollierbarkeit: Das Testobjekt kann in den für den Test erforderlichen Zustand gebracht werden.
* Beobachtbarkeit: Das Testergebnis kann beobachtet werden.
* Isolierbarkeit: Das Testobjekt kann isoliert getestet werden.
* Trennung der Verantwortlichkeit: Das Testobjekt hat eine wohldefinierte Verantwortlichkeit.
* Verständlichkeit: Das Testobjekt ist selbsterklärend bzw. gut dokumentiert.
* Automatisierbarkeit: Die Tests lassen sich automatisieren.
* Heterogenität: Unterschiedliche Technologien erfordern den gleichzeitigen Einsatz von unterschiedlichen Testverfahren und -Werkzeugen.
Die Testbarkeit der Software wird verbessert durch:
* Testgetriebene Entwicklung
* Entwurf für Testbarkeit
Bei der Testbarkeit von Klassen wird zwischen nonmodalen, quasimodalen, unimodalen und modalen Klassen unterschieden. Nonmodale Klassen zeigen dasselbe Verhalten in egal welchem Zustand sie sich befinden und in egal welcher Reihenfolge ihre Methoden aufgerufen werden. Quasimodale Klassen zeigen unterschiedliches Verhalten zu unterschiedlichen Zuständen. Unimodale Klassen zeigen unterschiedliches Verhalten bei unterschiedlicher Reihenfolge der Aufrufe ihrer Methoden. Modale Klassen zeigen sowohl unterschiedliches Verhalten zu unterschiedlichen Zuständen und Aufrufreihenfolgen. Die Testbarkeit von nonmodalen Klassen ist am höchsten, da man nur alle Methoden unabhängig von Zustand und Reihenfolge testen muss. Bei den anderen Arten müssen alle Reihenfolgen und Zustände kombiniert getestet werden, was einen weitaus höheren Testaufwand nach sich zieht.

## Testbarkeit von Anforderungen

Anforderungen sind testbar, wenn sie folgende Kriterien erfüllen:
* konsistent
* vollständig
* eindeutig: Die Anforderung kann nicht unterschiedlich interpretiert werden.
* quantitativ formuliert: Eine Anforderung wie „schnelle Antwortzeit“ kann nicht verifiziert werden.
* praktisch verifizierbar: Der Test ist nicht nur theoretisch möglich, sondern auch mit begrenztem Aufwand in der betrieblichen Praxis durchführbar.