Automatisierbarkeit von Softwaretests 1

Dieser Artikel beschreibt die Automatisierbarkeit von Tests und legt die Vor und Nachteile dar. Des weiteren wird das Ergebnis automatisierter Tests kritisch bewertet.

1. Wichtigkeit von Tests
Bei der Softwareentwicklung ergeben sich häufig sehr komplexe Zusammenhänge, die sich über mehrere Dateien erstrecken und Funktionen werden an verschiedenen Stellen aufgerufen. Daher kann ein Entwickler, der eine Funktion anpasst, nicht immer an alle Stellen denken, an denen diese Funktion vielleicht aufgerufen wird. Besonders schwierig ist das bei größeren Projekten, an denen mehrere Entwickler beteiligt sind. So kann es vorkommen, dass ein anderer Entwickler die betreffende Funktion an einer anderen Stelle ebenfalls verwendet. Unter Umständen passiert es sogar, dass an dieser anderen Stelle das fehlerhafte verhalten dieser Funktion bewusst verwendet wird. Wenn diese Funktion z.B. 0 statt eigentlich -1 liefert, und dies an einer Stelle zu einem Fehler führt, kann es an der anderen Stelle sein, dass bewusst die 0 weiterverarbeitet wird. Daher wird es an der anderen Stelle möglicherweise zu einem Fehler führen, wenn der Entwickler das Ergebnis von 0 auf -1 ändert. Deshalb ist es wichtig, die Software nach einer Änderung zu testen, um derartige Seiteneffekte zu vermeiden.

2.
Manuelles Testen ist häufig sehr umfangreich und aufwendig. Ein wenig aussagekräftiges Ergebnis erhält man, wenn wenig geschultes Personal oder der Entwickler selbst die Tests übernimmt. Dies geschieht in der Praxis leider häufig, um Kosten zu sparen. Die Nachvollziehbarkeit eines solches Tests, wie später beschrieben, ist ebenfalls nicht gegeben. Stresstests und Lasttests lassen sich manuell kaum durchführen, da eine erhebliche Anzahl an Testern gleichzeitig das System bedienen müssten, um dessen Grenzen auszutesten. Das Automatisieren der Tests bringt den Vorteil, dass man die gesamte Software automatisch testen kann, ohne selbst wertvolle Arbeitszeit zu investieren.

3.
Die Umgebung, auf der die Tests aufgeführt werden, sollte möglichst nahe an der späteren Produktivumgebung liegen. So kann z.B. eine inkompatible PHP-Version vermieden werden, oder Funktionen die nur unter Linux oder nur unter Windows zur Verfügung stehen können erkannt werden. Dies gestaltet sich bei Server basierten Anwendungen leichter, als bei Client-Software. So müssen beispielsweise Webseiten in verschiedenen Browsern hinsichtlich aussehen und Javascript-Funktionalität getestet werden, da diverse Browser auf verschiedenen Betriebssystemen gegebenenfalls Befehle unterschiedlich interpretieren. Client-Software, wie beispielsweise ein Texteditor, muss auf verschiedenen Betriebssystemversionen getestet werden.

3.1. Automatisches erstellen automatischer Tests
Es ist weiterhin möglich, anhand von Kommentaren im Quelltext zu generieren. Der Entwickler schreibt in den Kommentar für die jeweilige Funktion einen definierten Tag, wie z.B. @assert (-1) == -2
Daraus kann später ein Unit-Test generiert werden, welcher die Funktion mit dem Parameter -1 aufruft und als Ergebnis -2 erwartet. Dadurch kann das Erstellen automatischer Tests beschleunigt werden und schon während der der Funktion die Definition für den Test festgelegt werden. Das kann zu einer erheblichen Verkürzung des Testaufwandes führen, da sich der Entwickler während er die Funktion implementiert Gedanken machen muss, was genau die Funktion tun soll, und dies auch im Kommentar entsprechend vermerken kann.

nächster Teil

Dieser Beitrag wurde unter Sonstiges, Webserver abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.