Systemtest
Der Systemtest ist eine sehr spannende Teststufe. Unittest und Integrationstest fokussieren sich mehr auf die inneren Aspekte der Applikation. Im...
Qualitätssicherung muss nicht nur effektiv, sondern auch effizient sein. Automatisierung ist hier das Mittel der Wahl zur Effizienzsteigerung und längst den Kinderschuhen entwachsen. Neue Herausforderungen an die Qualitätssicherung und insbesondere die Testautomatisierung lassen jedoch nicht auf sich warten: Höhere Effizienz, bessere Integration in agile und kontinuierliche Ansätze, komplexere Systeme mit mehr Schnittstellen gepaart mit Anforderungen an Safety, Security und Robustheit sind nur ein paar Aspekte, denen sich die Testautomatisierer heute stellen müssen.
Zu den Grundlagen der Softwareentwicklung gehört neben dem Design und dem Schreiben der Software auch die Qualitätssicherung dieser. Der Test ist das am häufigsten angewandte Mittel der Qualitätssicherung und vergleicht das tatsächliche Verhalten der Software mit dem erwarteten Verhalten.
Diese Prüfung kann jedoch sehr aufwendig sein. Insbesondere ist der Aufwand für Regressionstests nach kleineren Änderungen in der Software vergleichsweise hoch: Regressionstests müssen beispielsweise ausgeführt werden, um nachzuweisen, dass Änderungen in der Software keine unerwünschten Nebeneffekte haben. Da hierbei gerade auch Funktionalität getestet wird, die durch die Änderungen nicht betroffen sein soll, wird leicht offensichtlich, dass der Anteil der auszuführenden Tests an der Gesamtmenge der Tests, den Anteil der Softwareänderungen an der Gesamtmenge der Software übertrifft. Entsprechend aufwendig kann der Test gegenüber der Softwareerstellung werden, insbesondere wenn er manuell durchgeführt wird.
Da es sich bei der Durchführung von Tests und insbesondere von Regressionstests oft um Wiederholungen handelt, drängt sich die automatische Durchführung dieser Tests als Mittel der Effizienzsteigerung förmlich auf.
Lange Zeit war automatische Testdurchführung ein Add-on zur manuellen Testdurchführung – manchmal sogar nur Spielerei: Passende Testfälle wurden ausgewählt und mithilfe von Automatisierungswerkzeugen wurden entsprechende Testskripte aufgezeichnet oder implementiert. Das hat dann mehr oder weniger gut funktioniert und war auf Dauer eher weniger als gut wartbar. Oftmals auf Initiative Einzelner wurden Lösungen geschaffen, damit Werkzeuge und Testskripte weiterhin nutzbar waren.
Diese Zeiten liegen hinter uns. Nicht zuletzt durch Paradigmenwechsel wie agile Softwareentwicklung oder durch die zunehmende Komplexität der entwickelten Systeme ist Testautomatisierung heute unabdingbar. In vielen Projekten werden Tests über alle Ebenen mit verschiedensten Werkzeugen automatisiert durchgeführt und die Testüberdeckung sukzessive erhöht. Dies hat auch zu einem deutlichen Sprung bei der Werkzeugunterstützung geführt: Die Werkzeuge für die Testautomatisierung sind heute stabiler, bieten mehr Komfort, bieten leichtere Wartbarkeit der Testskripte und lassen sich allgemein den Bedürfnissen der Testautomatisierer besser anpassen.
Der Begriff Testautomatisierung wird oftmals mit automatischer Testdurchführung gleichgesetzt. Es gibt darüber hinaus natürlich den automatisierten Testentwurf. Um die mit steigender Anzahl von Testfällen ebenfalls steigenden Wartungskosten für die Testskripte überhaupt handhabbar zu halten, muss auch der Testentwurf automatisiert werden: Durch zusätzliche Abstraktionsebenen wird von Unwesentlichem abstrahiert – Testskripte können automatisch auf Basis von Modellen generiert werden.
Doch damit ist das Potenzial, welches die Automatisierung für den Test heute bietet, bei Weitem nicht ausgeschöpft – im gesamten Prozess lassen sich unzählige Aktivitäten finden, die automatisiert oder teilautomatisiert erstellt, durchgeführt oder geprüft werden können. Dabei verschwimmen die Grenzen zwischen Test, Qualitätssicherung und Entwicklung zusehends. Ein paar Beispiele finden sich im Kasten.
Gerade in agilen Projekten zeigt sich unserer Erfahrung nach ein interessantes Bild. Hier muss Testautomatisierung von Beginn an gelebt werden, da andernfalls eine hohe Qualität in der Software nicht zu halten ist. Doch hat die Testautomatisierung hier noch einen sozialen Aspekt, denn die notwendige Formalisierung vorab bringt verschiedene, auch (bislang) autark arbeitende Teilnehmer dazu, sich früher über ein gemeinsames Thema auszutauschen als zuvor – gerade wenn hybride Projektstrukturen vorherrschen, wo zum Beispiel der Fachbereich nicht Teil des Teams ist. So kann man überschwänglich sogar Testautomatisierung als teambildende Maßnahme sehen.
Stand 2018 ist die Testautomatisierung schon deutlich den Kinderschuhen entwachsen, auch wenn es immer noch genug Luft nach oben gibt. Testautomatisierung schafft es nun, die Versprechungen an Effizienz und Wiederholbarkeit zu erfüllen und ist in der Anwendung deutlich einfacher und pflegeleichter geworden. Aber nicht zuletzt lässt sich Testautomatisierung in Projekten dazu nutzen, verschiedene Rollen in Kontakt und ins Gespräch zu bringen, die bis dato eher autark agiert haben. Zum Beispiel um festzulegen, wo Automatisierung auch aus Risikosicht sinnvoll ist oder zum Value beiträgt.
Doch auch wenn die Unterstützung der Automatisierung in den letzten Jahren deutlich besser geworden ist, lauern immer noch Fallstricke: Inkompatibilitäten, Schnittstellenprobleme, instabile Umgebungen oder fehlende Datenqualität können den Aufwand für Erstellung und Wartung der Testskripte in die Höhe treiben. So sind immer mit einem Auge auch der Nutzen und die Risikoabschätzung im Blick zu behalten, damit die Testautomatisierung nicht zum Selbstzweck wird.
Die nächsten Jahre werden hier sehr spannend. Durch den Einsatz von Machine-Learning und Artificial Intelligence stehen ganz neue Felder und Einsatzmöglichkeiten offen, die gerade erst im Ansatz genutzt werden. Fakt ist, dass es diese Mechanismen brauchen wird, um die Qualität der Software und der Daten weiterhin hochzuhalten. Denn eines ist heute schon eingetreten: Oftmals überblickt keiner mehr die komplette Software, die Architektur oder die benötigten Daten. Hier sind intelligente Systeme gefragt, die uns diese Informationen verständlich präsentieren und automatisch Widersprüche aufdecken.
Der Systemtest ist eine sehr spannende Teststufe. Unittest und Integrationstest fokussieren sich mehr auf die inneren Aspekte der Applikation. Im...
Der Unittest ist für mich die essentiellste aller Teststufen. Auf sie schaue ich auch zuerst, wenn ich ein neues Beratungsprojekt starte. Warum? Hier...
Der Duden definiert Integration als “(Wieder)herstellung einer Einheit (aus Differenziertem); Vervollständigung” und somit ein großes Ziel, auf das...