Im Rahmen professioneller Software-Entwicklung innerhalb des E-Commerce-Umfeldes, muss das fertige Software-Produkt vor dessen Freigabe an den Endkunden konsequent getestet werden. Nur so können professionelle Dienstleister sicherstellen, dass das Endprodukt über einen hohen funktionalen Qualitätsstandard verfügt. Da ein Softwareprodukt im E-Commerce-Umfeld meistens über mehrere Jahre gewartet und weiterentwickelt wird, bedarf es eines fortlaufenden Funktions-Testings des gesamten Produktes nach jedem Release. Nur so kann garantiert werden, dass eine Software-Komponente sowie das gesammte System stets fehlerfrei funktionieren.

Vorteile automatischer Softwaretests?
Angesichts der ständigen Veränderungen und Ergänzungen an Anforderungen und Software, dienen automatische Softwaretests als wichtiger Kontrollmechanismus zur Gewährleistungen der Korrektheit und Stabilität der Software.

Wie funktionieren automatisierte Softwaretests?
Häufig kommt es vor, dass eine Software-Komponente für mehrere System-Versionen entwickelt werden muss. So entwickelt unser Unternehmen zum Beispiel seit mehreren Jahren Schnittstellen-Plugins für Oxid- und Shopware-Online-Shops. Diese Module dienen zur Anbindung von Kunden-Shops an Lager-Systeme, wie zum Beispiel von der Schweizer Post.

Software- Produkte weisen in der Regel eine hohe Komplexität auf, diese Komplexität steigt zusätzlich betrachtet man die Umgebung (z.B. E-Commerce Plattformen in verschiedenen Versionen und Editionen) in welcher das neue Software Produkt eingebunden werden muss. Das daraus resultierende Ergebnis: manuelles Testen wird zu einer langwierigen und zeitaufwendigen Angelegenheit, welche zusätzlich von unterschiedlichen Parteien durchgeführt wird. Die Folge: das Auftreten logischer Fehler, nicht behandelter Testfälle oder aber die fehlerhafte zwischenmenschliche Kommunikation, führen unweigerlichen zu Fehlerquellen im fertigen Produkt.

Automatische Tests simulieren die parallele Ausführung des Codes in mehreren Testumgebungen, sprich auf unterschiedlichen Betriebssystemen, verschiedenen Plattform-Versionen oder allgemein in unterschiedlichem Kontext. Beim automatischen Testen wird ein vorgängig ausgearbeiteter Testfall, in Form einer Testklasse, mit mehreren definierten Prämissen implementiert. Anschliessend werden die Prämissen in jeder Testumgebung überprüft und es werden automatische Echtzeitergebnisse bereitgestellt. Das Testsystem liefert die Ergebnisse, wenn der Testfall auf der Grundlage der gegebenen Voraussetzungen erfolgreich war oder fehlgeschlagen ist. Automatisierte Tests können beliebig viele Testklassen gleichzeitig ausführen. Dieses Testverfahren ist also extrem schnell.

Im Falle eines Fehlers liefert das System einen Fehlerbericht mit detaillierten Informationen zu den fehlerhaften Codezeilen, der fehlerhaften Prämisse, den Werten in den Variablen zum Zeitpunkt des Fehlers und vieles mehr. Anhand des Fehlerberichts lässt sich auf einfache Weise feststellen, unter welchen Umständen ein Fehler auftritt. Daher lässt sich der Code dann einfach aktualisieren, damit er in Zukunft den automatischen Test besteht. So wird sichergestellt, dass das Produkt in allen getesteten Umgebungen fehlerfrei ist und dort auch einwandfrei funktioniert.

Das automatisierte Testsystem basiert auf dem PHP-Unit-Testingkonzept, dem bekanntesten Testmechanismus in PHP. Dies ist die zuverlässigste Methode zum Testen von Software-Quellcode in verschiedenen Umgebungen, da tatsächlich jede Codezeile ausgeführt wird, während alle Werte in jeder Variabel verfolgt werden können und jede Prämisse berücksichtigt wird. PHP-Unit-Testklassen sind sehr flexibel und können verwendet werden, um jeder Art von Testfall zu definieren.

Aufbau einer beispielhaften Test-System-Architektur:
Als Voraussetzung für automatisierte Softwaretests ist eine entsprechende Entwicklungsumgebung nötig. Eine typische Infrastruktur für das Testing von einem selbst entwickeltem E-Shop-Modul sieht bei A-SIGN wie folgt aus:

    • PHP Unit Test: Zum Schreiben von Testklassen mit mehreren Prämissen gemäss Testfällen
    • Docker images : Zur Bereitstellung von mehreren verschiedenen Testumgebungen. Jedes Docker image kann an spezifische Anforderungen angepasst werden (z.B. unterschiedliches Betriebssystem, unterschiedliche Umgebungsvariabeln, Shop-Editionen, PHP-Versionen, Hostserver, usw.
    • Git: Zum Speichern der zu verwendeten Testklassen
    • Travis CI: Software zum automatischen Ausführen jeder Testklasse auf allen Docker Images. Travis ist mit Git verknüpft und wählt daher die Testklasse einzeln in der Warteschlaufe aus, führt sie zeilenweise auf jedem Docker image aus und zeichnet das Ergebnis auf. Die Travis-Berichte erhalten Erfolgs- oder Fehlermeldungen. Die Fehlermeldung enthält Details zu den Fehlern.

Für wen lohnt sich automatisiertes Testing und wie aufwändig es?
Unternehmen, die professionelle Software entwickeln lassen, sollten sich grundsätzlich mit automatisierten Softwaretests beschäftigen. Wenn Sie längerfristig den Einsatz von selbst entwickelten Software-Komponenten planen, muss auch das Umfeld betrachtet werden in welche Ihre Software agiert. Technische Neuerungen, sowie auch das Ausscheiden bestehender Technologien, haben Einfluss auf Ihr bestehendes individuelles System. Eine fehlerfreie Funktion Ihres Gesamtsystems sollte daher grundsätzlich sichergestellt werden. Automatische Softwaretests helfen Ihnen dabei sicherzustellen, dass Ihre Software stets aktuell und fehlerfrei ist. Grundsätzlich sollte das fehlerfreie Funktionieren von Ihrem Gesamtsystem durch regelmässiges Testing nach erfolgter Modifikation (Updates, etc.) sichergestellt werden.

Der Aufbau einer Test-Umgebung beinhaltet verschiedene Arbeitsschritte, welche einmalig umgesetzt werden müssen. Der initiale Aufwand amortisiert sich daher bereits nach wenigen Releasezykeln. Mittelfristig profitieren Sie von einer optimierten Testperformance, einer deutlich verringerten Fehleranfälligkeit, einem dadurch qualitativ hochwertigerem Softwareprodukt bei gleichzeitig geringerem Aufwand.

Beispielhafter Arbeitsplan und Aufwandschätzung:
Damit Sie einen ungefähren Anhaltspunkt zu den anfallenden Aufwänden haben, haben wir nachfolgend eine Auflistung der einzelnen Arbeitsschritte vorgenommen. Dieses Test-Szenario wurde für einen Kunden für individuelle E-Shop-Plugin-Entwicklung umgesetzt:

  1. Setup von PHP unit test
  2. Setup von GIT
  3. Setup von Docker
    • Erstellen von unterschiedlichen Docker images und Container
    • Installation von unterschiedlichen Applikations-Versionen auf Docker
  4. Setup von Travis CI
  5. Automatische Ausführung der Tests über Docker und Travis
  6. Entwicklung von Backend zur Auswahl der Anwendungsversion für den Test
  7. Identifizierung des versionsspezifischen Codes im aktuellen Plugin
  8. Erstellung von dynamischen Unit-Testklassen mit versionsspezifischer Konditionierung (pro Test)
  9. Testing/Debugging/Reserve

Ausgehend von 10 automatischen Tests, die einmalig aufgesetzt werden müssen, rechnet man mit einem totalen Personenaufwand von 170-210 Arbeitsstunden.

Nachdem die Test-Umgebung eingerichtet ist, können die Tests nach jeder Veränderung am Software-Produkt (Plugin) wieder automatisch durchführt werden. Sollten sich neue Fehler bei einzelnen Versionen herausstellen, können diese zukünftig ohne zeitintensive manuelle Fehleranalyse effizient identifiziert und behoben werden.

Bei weiteren Fragen rund um automatisiertes Software-Testing stehen wir Ihnen gerne zur Verfügung.