Wann sollte man Tests automatisieren?

Eine interessante Dauerfrage ist aus meiner Sicht, welche Tests man automatisieren sollte und welche nicht. Ob nun mittels Unit Tests oder mittels GUI Testrunner sei dabei nicht maßgeblich.

Ich habe mir dafür einmal folgende visuelle Entscheidungshilfe entworfen:

WhenToAutomate

Die Entscheidung für oder gegen Automatisierung sollte von den Faktoren des Fehlerausmaßes, dem Aufwand zum Erstellen und Pflegen der Tests und der Alternative des Aufwandes des manuellen Tests abhängen. Es Ergeben sich ein paar Kombinationen:

  1. Hohes Fehlerausmaß, aufwendige manuelle Entdeckung, geringer Aufwand der Automatisierung: ganz klar automatisieren!
  2. Hohes Fehlerausmaß, akzeptable manuelle Entdeckung, geringer Aufwand der Automatisierung: hier sollte tendenziell automatisiert werden, da der Nutzen Ausfälle schneller z.B. im Continuous Integration Server festzustellen meist lohnenswert ist
  3. Hohes Fehlerausmaß, aufwendige manuelle Entdeckung, hoher Aufwand der Automatisierung: hier muss trotz des Aufwandes automatisiert werden, da die Alternative manueller Test nicht greift
  4. Hohes Fehlerausmaß, einfache manuelle Entdeckung, hoher Aufwand der Automatisierung: es wäre unökonomisch hier zu automatisieren, hier gilt es effiziente manuelle Testprozesse wie z.B. Smoketests bei jedem Release einzuführen
  5. Niedriges Fehlerausmaß, aufwendige manuelle Entdeckung, geringer Aufwand der Automatisierung: hier sollte i.d.R. automatisiert werden, allerdings könnte man auch pragmatisch kalkulieren das bei einer niedrigen Regressionsrate durch hohe Qualität auftretende Mängel akzeptabel sind und auch auf die Automatisierung verzichten!
  6. Niedriges Fehlerausmaß, einfache manuelle Entdeckung, geringer Aufwand der Automatisierung: je nachdem, ob eher Entwickler oder manuelle Tester ein Engpass sind, sind beide Varianten denkbar. Wenn z.B. manuelle Testressourcen dringend für kritische Tests benötigt werden, aber Entwickler verfügbar sind, sollte durchaus eher automatisiert werden
  7. Niedriges Fehlerausmaß, aufwendige manuelle Entdeckung, aufwendige Automatisierung: hier sollte i.d.R. nicht automatisiert werden, allerdings  macht wahrscheinlich auch der manuelle Test wenig Sinn. Hier hilft wohl i.d.R. nur ein kalkuliertes Risiko oder die Reduzierung der Release-Zyklen, um den manuellen Test wirtschaftlicher zu machen
  8. Niedriges Fehlerausmaß, einfache manuelle Entdeckung, aufwendige Automatisierung: hier sollte auf keinen Fall automatisiert werden!