In diesem Beitrag möchten wir einmal beleuchten welchen Gemachanger die Testautomatisierung für Ihren Entwicklungsprozess darstellt. Dazu betrachten wir einmal in vereinfachter Form, wie ein Entwicklungsprojekt typischerweise abläuft, wenn man auf manuelle Softwaretests setzt und zeigen, welchen Unterschied es macht, wenn das gleiche Projekt unter gleichen Rahmenbedingungen mit automatisierten Tests durchgeführt wird.
Die Rahmenbedingungen sind:
Es werden 3 große Features entwickelt. Die Entwicklung von Feature A dauert 2 Monate, Feature B ist etwas größer und benötigt 4 Monate, Feature C benötigt 2 Monate. Bei der Programmierung von Feature B wird versehentlich ein Bug in Feature A erzeugt. Beim Programmieren von Feature C wird ein Bug in Feature B erzeugt.
Betrachten wir nun welchen Einfluss die Testautomatisierung gegenüber des manuellen Testens auf den Projektverlauf hat.
Projektverlauf mit manuellen Tests

Wenn Feature A fertig programmiert ist, wird es manuell getestet. Vollständige manuelle Tests eines Features sind sehr zeitaufwändig – in unserem Beispiel nehmen wir einmal an dass der manuelle Test 1 Woche in Anspruch nimmt. Der Test kann von einem Tester parallel zur Firmwareentwicklung von Feature B durchgeführt werden. Wir gehen davon aus, dass der Test ein „passed“ Ergebnis liefert.
Wenn Feature B fertig programmiert ist, wird Feature B manuell getestet. Da dieses Feature doppelt so umfangreich ist wie Feature A gehen wir von einer Testdauer von 2 Wochen aus. Um Zeit zu sparen wird nur das neue Feature B getestet. Dadurch fällt der entstandene Bug für Feature A an dieser Stelle nicht auf.
Wenn Feature C fertig programmiert ist, wird zunächst Feature C manuell getestet. Auch dieser Test wird bestanden und der Bug, der sich in Feature B eingeschlichen hat, fällt zunächst nicht auf. Da die Firmwareentwicklung nun abgeschlossen ist und Geräte ausgeliefert werden sollen, werden die Tests für Feature A und B vorsichtshalber noch einmal wiederholt, um sicherzustellen, dass alle Tests mit der fertigen Software durchgeführt wurden. Die Bugs in Feature A und B fallen nun bei diesem Test nun auf und werden an den/die Firmwareentwickler gemeldet.
Wann genau die beiden Bugs entstanden sind, ist in diesem Szenario unbekannt. Die Entwickler werden sich zunächst Feature A noch einmal genauer ansehen. Da die Entwicklung dieses Features zu diesem Zeitpunkt bereits mehr als ein halbes Jahr zurückliegt, wird es einige Zeit in Anspruch nehmen, sich wieder in den Code einzuarbeiten. Handelt es sich bei dem Fehler z.B. um einen Buffer Overflow, wird der Entwickler in der Komponente A nicht direkt fündig und es folgen sehr aufwändige Debugging-Sessions, bis die verursachende Codestelle in Feature B gefunden werden kann. Das gleiche gilt auch für den Bug 2. In diesem Szenario gehen wir deshalb von 1 Monat Fehlersuche + Bugfixing aus.
Da beim Bugfixing der Code geändert wird, ist es dringend zu empfehlen, vor der Auslieferung noch einmal alle Features zu testen – dieser manuelle Test dauert weitere 4 Wochen.
In diesem Szenario kann das erste Gerät nach 11 Monaten ausgeliefert werden.
Projektverlauf mit Testautomatisierung

Betrachten wir nun das gleiche Szenario mit Testautomatisierung.
Während Feature A programmiert wird, kann parallel ein automatisierter Test für dieses Feature programmiert werden. Als Grundlage für den Test dient das Anforderungsprofil. Mit der embedded Testplattform von emintes ist es realistisch einen solchen Test in ca. 3 Wochen zu erstellen.
Ist Feature A fertig programmiert, kann der automatisierte Test für dieses Feature aktiviert werden. Der Test wird nun bei jeder Codeänderung automatisch über die CI-Tools ausgeführt. Die Entwickler erhalten somit direkt nach jeder Codeänderung in weniger als einer Stunde eine Rückmeldung, ob der Test bestanden wurde.
Während der Programmierung von Feature B entsteht nun der Bug in Feature A. Durch die automatisierten Tests bekommt der Entwickler nun sofort das Feedback, dass seine Codeänderung zu einem Bug in Feature A geführt hat (z.B. durch einen Buffer Overflow). Die Fehlerursache kann dadurch auf wenige Zeilen Code eingegrenzt werden. Damit ist es für den Entwickler sehr einfach, den Bug in kurzer Zeit zu beheben. Wir setzen hier einmal großzügig eine Woche zusätzlichen Aufwand für die Behebung des Bugs an. Nachdem der Bug behobenist, meldet der Test auch wieder ein passed Ergebnis und der Firmwareentwickler kann seine Arbeit an Feature B fortsetzen.
Das gleiche Schema gilt für die Programmierung von Feature C. Der entstandene Bug wird sofort erkannt und kann dadurch schnell behoben werden.
Ist Feature C fertig entwickelt, läuft der automatisierte Test erneut durch und Testet alle 3 Features. Da der Test automatisiert abläuft dauert dieser weniger als 1 Tag.
Eine Auslieferung des ersten Gerätes kann in diesem Szenario nach 8,5 Monaten erfolgen.
Zusammenfassung
Stellen wir einmal die Aufwände der beiden Szenarien gegenüber:
mit manuellen Tests
Firmwareenticklung
9 Monate
Testdurchführung
11 Wochen
Start bis Auslieferung
11 Monate
mit automatisierten Tests
Firmwareentwicklung
8,5 Monate
Testentwicklung
12 Wochen
Start bis Auslieferung
8,5 Monate
Insgesamt verkürzt sich die Projektlaufzeit durch die Testautomatisierung um 23% bei nahezu gleichem Arbeitsaufwand.
Auf den ersten Blick erscheinen die 12 Wochen (3 Monate) Arbeit, die in die Testentwicklung fließen, zunächst recht hoch. Betrachtet man jedoch den Aufwand, der in die manuellen Tests fließt, so summieren sich hier auch 11 Wochen auf. Insbesondere wenn manuelle Tests mehrfach wiederholt werden müssen (was häufig der Fall ist), kommen hierfür sehr viele Stunden/Tage zusammen. Eine Testautomatisierung lohnt sich daher in den meisten Fällen. Auch wenn zu einem späteren Zeitpunkt noch Änderungen an der Software vorgenommen werden müssen, profitiert man massiv davon, wenn automatisierte Tests vorhanden sind und man diese nur noch einmal durchführen muss und schnell ein Ergebnis erhält.
Ein genauerer Blick auf das Beispiel zeigt aber auch: Wenn zu viel Aufwand (und Kosten) in die Testautoamtisierung gesteckt werden muss, können die Vorteile unter Umständen wieder zunichte gemacht werden. Bei der Entwicklung unserer Embedded Testplattform stand deshalb die Einfachheit des Testsystems im Vordergrund. Die Erstellung eines automatisierten Tests soll schnell und einfach sein – mit unserem Testsystem lohnt sich die Testautomatisierung daher fast immer.