Tests: Die wichtigste Nebensache …

von

Bei der Erstellung eines Angebots muss jeweils der erforderliche Umfang einer Aufgabe geschätzt werden. Daran schließt sich üblicherweise eine Diskussion über die Höhe der Aufwände an, bei der verschiedene Plausibilitäten geprüft und die Kostenschätzungen eventuell mit Werten ähnlicher Projekte verglichen werden. Darüber hinaus stellen wir uns immer die Frage, ob die Aufwandsposten auch für unsere Kunden nachvollziehbar sind.

Insbesondere die Implementierungsaufgaben, bei denen der Anteil von Tests hoch oder das Testen generell aufwändig ist, führen regelmäßig zu Meinungsverschiedenheiten. Warum ist das so?

Wenn wir den Aufwand für das Implementieren von Funktionen schätzen, gehört neben der reinen Programmierung der Funktionen auch dazu, sie zu testen. Auf den ersten Blick – und so geht es auch vielen Kunden – hat man aber meist nur die Umsetzung der reinen Funktionalität im Kopf. Mit dieser Sichtweise wirken Kostenschätzungen, die das Testen berücksichtigen, erst mal viel zu hoch. Dabei kommt es nicht selten vor, dass die Implementierung von Tests der aufwändigste Teil der Aufgabe ist.

Bereits auf Unit Ebene, das heißt für einzelne Funktionen oder Module, werden Tests programmiert, damit diese regelmäßig automatisiert durchgeführt werden. Nach Fertigstellung eines neuen Moduls oder einer Funktion fügt der Entwickler es in das Code Repository ein. Die automatisierte Ausführung aller Tests stellt sicher, dass neue Funktionalitäten bei bereits vorhandenen Funktionen nicht zu Fehlern führen.

Dieses Vorgehen setzt sich auf anderen Ebenen der Software fort mit sogenannten Integrationstests – so werden beispielsweise Tests für Services und Controller geschrieben, jeweils mit und ohne Einbindung anderer Komponenten. Bei Bedarf programmieren wir sogenannte Mocks, die eine verwendete Komponente / einen Service simulieren, damit Teile der Software ohne Einfluss der (eventuell noch nicht fertig gestellten) Komponente getestet werden können.

Die Beschreibungen lassen schon erahnen, zu welcher Erkenntnis man in Summe gelangt: Das Testen erfordert nochmal mindestens den gleichen Aufwand wie die Implementierung der eigentlichen Funktion.

Auch wenn das Programmieren von Testcases bei vielen Entwicklern nicht immer die Lieblingsbeschäftigung ist und viel Zeit kostet, werden wir u.a. aufgrund der folgenden Vorteile darauf nicht verzichten:

  • Automatisiert ausführbare Testcases sorgen für eine stabile Software. Nicht nur einmal haben die Tests dazu geführt, dass die Auslieferung eines Releases verhindert wurde, weil sich fehlerhafte Querauswirkungen von Anpassungen gezeigt haben.
  • Insbesondere wenn Software regelmäßig in weiteren Releases weiterentwickelt wird, zahlt sich eine konsequente Implementierung von automatisierten Testcases aus.
  • Software mit zahlreichen Schnittstellen muss die Stabilität seiner Schnittstellen sicherstellen – abgesichert durch automatisierte Testcases.

Folgende Aspekte beschreiben Ansätze, um den Aufwand für die Implementierung oder die Durchführung von Tests zu steuern:

  • Mit dem Einsatz von geeigneten Frameworks lässt gegebenenfalls die Umsetzung vereinfachen.
  • Umfangreiche Oberflächentests sollten vermieden werden, wenn im weiteren Verlauf viele Anpassungen am User Interface zu erwarten sind. Diese sorgen später sehr häufig für aufwändige Anpassungen oder sogar Neuimplementierung der Tests.
  • Eine hohe Test-Abdeckung in „tieferen“ Schichten kann gegebenenfalls den Bedarf / Umfang an integrativen (automatisierten) Tests reduzieren.
  • Eine klare Abgrenzung der Testziele und des Testumfangs zwischen Kunde und Dienstleister kann redundantes Testen vermeiden und Aufwände einsparen.
  • Eine Bewertung des Risikos einer Funktion (welche Auswirkungen / Konsequenzen hat ein Fehler in einer Funktion) gibt Hinweise, welche Teile besonders intensiv getestet werden müssen (und welche Teile mit normaler oder reduzierter Intensität getestet werden).

Testen ist extrem wichtig und wertvoll – insbesondere automatisiert ausführbare Tests. Transparenz gegenüber dem Kunden sorgt auch für eine entsprechende Akzeptanz der benötigten Aufwände. Letztlich haben beide Seiten einen langfristigen Nutzen.

Kategorien: Testing

Zurück