Testen – wahrscheinlich der am meisten unterschätzte Teil der Anwendungsentwicklung
Veröffentlicht: 2018-04-03Warum sollte ich Sie bezahlen, um Ihre eigene Arbeit zu testen?
Diese Frage habe ich im Laufe der Jahre oft gehört, wenn ich mit Kunden über Testbudgets gesprochen habe. Für den Uneingeweihten klingt es wie eine berechtigte Frage. Jeder, der sich mit Softwareentwicklung beschäftigt, weiß jedoch, wie komplex und zeitaufwändig das Testen sein kann. Testen ist in der Tat einer der wichtigsten Teile eines jeden Softwareentwicklungsprojekts.
Eine große E-Commerce-Plattform ist eine unglaublich komplexe Sache mit Millionen von Codezeilen, Gigabyte an Daten und vielen Integrationspunkten. Es gibt so viele miteinander verbundene bewegliche Teile; so viele Glieder in der Kette, dass sehr leicht etwas schief gehen kann. Die Anwendung wird auf Millionen verschiedener Arten über eine Vielzahl von Browsern auf zahlreichen Desktop- und Mobilgeräten verwendet. Das Entwicklungsprojekt wird mindestens 6 Monate gedauert haben, an dem viele verschiedene Personen gearbeitet haben. Die Anzahl der Bereiche und Szenarien, die getestet werden könnten, ist nahezu unbegrenzt. Es ist ein Wunder, dass überhaupt etwas funktioniert!
Das Testen kann in verschiedene Bereiche aufgeteilt werden, aber jeder Testbereich ist wichtig zu berücksichtigen. Jedes Projekt ist ein wenig anders; Einige Kunden übernehmen gerne einen Großteil des Testens selbst, andere lagern es gerne aus, während andere erwarten, dass ihr Entwickler alles erledigt. Auch das Testen ist keine feste Größe; Sie können viel testen und Sie können ein wenig tun. Je mehr Sie testen, desto risikoärmer wird das Projekt, aber desto länger dauert es und desto mehr kostet es.
Unit-Tests
Ein Komponententest ist ein Test, der kleine „Einheiten“ von Code testet, um sicherzustellen, dass sie wie erwartet funktionieren. Wenn beispielsweise ein Formular gesendet wird, sollte es die eingegebenen Details in einer Datenbanktabelle speichern. Es handelt sich um einen eigenständigen Test, der speziell und ausschließlich sicherstellt, dass das Gerät wie erwartet funktioniert. Unter Verwendung einer echten testgetriebenen Entwicklungsmethodik schreibt ein Entwickler zuerst einen Test, bevor er tatsächlich Code erstellt, sodass der Code erst dann als abgeschlossen betrachtet werden kann, wenn der Test bestanden wird. In der Praxis werden Unit-Tests nur in einigen Schlüsselbereichen der Anwendung verwendet, um sicherzustellen, dass Kernfunktionen wie erwartet funktionieren. Unit-Tests können zwar die Wahrscheinlichkeit des Auftretens von Funktionsproblemen verringern, aber auch die Entwicklungszeit verlängern.
Rauchtest
Sie werden Ihre Entwicklungsagentur wahrscheinlich oft über Rauchtests sprechen hören. Ein Rauchtest ist eine pragmatische Teilmenge von Testfällen, die die wichtigsten Benutzerwege und Funktionen in Ihrer gesamten Anwendung abdecken. Zumindest sollte von Ihrem Entwickler erwartet werden, dass er Rauchtests durchführt, bevor er Ihnen etwas für UAT übergibt.
UI-Tests
Das Testen von Benutzeroberflächen (UI) kann sehr komplex und zeitaufwändig sein. Die große Auswahl an mobilen, Tablet- und Desktop-Geräten, Betriebssystemen und Browsern, die für den Zugriff auf eine Website verwendet werden, macht es fast unmöglich, jede Kombination manuell umfassend zu testen. Aufgrund der großen Anzahl unterschiedlicher Variationen, die abgedeckt werden müssen, ist UI-Testen ein perfekter Kandidat für automatisiertes Testen. Automatisierte Testwerkzeuge sind in der Lage, einer geskripteten Reise durch Ihre Website zu folgen und zu testen, ob die erwarteten Ergebnisse erzielt werden. Sie können auch jede Fahrt aufzeichnen, damit jede einzelne abgespielt werden kann. Obwohl diese Methode nicht perfekt ist, kann sie die Anzahl der größeren UI-Probleme, mit denen eine Website konfrontiert sein kann, erheblich reduzieren.
Einige Testdienste von Drittanbietern wie Bug Finder bieten einen Crowdsourcing-Service an, bei dem Hunderte von freiberuflichen menschlichen Testern aus der ganzen Welt zum Testen einer Website eingesetzt werden und bezahlt werden, wenn sie ein Problem finden. Dieser Ansatz kann eine relativ kostengünstige Methode zum Testen Ihrer Anwendung auf Hunderten von Geräte-/Plattform-/Browser-Kombinationen sein. Es ist normal, dass in einem Testzyklus etwa 200 Probleme gemeldet werden. Die Herausforderung besteht oft darin, die Probleme zu kategorisieren und zu priorisieren, damit Sie Ihre Ressourcen auf die Behandlung der wichtigsten konzentrieren können. Jede Website wird einen ständigen Rückstand von Problemen auf niedriger Ebene haben, die wahrscheinlich nie gelöst werden.
Regressionstests
Regressionstests sind ein äußerst wichtiger Teil der laufenden Entwicklung. Es soll testen, ob Änderungen an einem Teil der Anwendung ein Problem mit einem anderen Teil verursacht haben. Beispielsweise könnte eine Änderung an einer JavaScript-Funktion, die zur Validierung des Kontaktformulars verwendet wird, potenziell Auswirkungen auf Formulare haben, die beim Checkout verwendet werden. Aufgrund der Komplexität jeder E-Commerce-Plattform sind Regressionsprobleme keine Seltenheit, daher ist die Entwicklung eines soliden Regressionstestplans von entscheidender Bedeutung, um sicherzustellen, dass die Erfahrung Ihrer Benutzer nicht durch diese Probleme beeinträchtigt wird.
UAT
User Acceptance Testing (UAT) ist ein kritischer Bestandteil jedes Entwicklungsprojekts und beinhaltet, dass der Kunde vollständige End-to-End-Tests der Plattform durchführt, bevor sie live geht. UAT ist der Prozess, den ich am häufigsten unterschätzt sehe. Es ist auch der Teil eines Projekts, der zuerst leidet, wenn die Zeitvorgaben knapp sind. Dies führt jedoch wahrscheinlich zu einer höheren Ausfallrate. Für jede neue Website empfehlen wir, mindestens 2 Monate UAT einzuplanen. Ihre E-Commerce-Website ist nur ein Teil Ihres Handelsgeschäfts und der End-to-End-Prozess, der Suche, Kasse, Bestellverwaltung, Zahlung, Versand, Kundendienst, Finanzen und alle anderen Teile der Kette umfasst, muss es sein geprüft.

UAT wird oft mit SIT (System Integration Testing) verwechselt oder zusammengeführt, bei dem Sie speziell die Integration zwischen mehreren Systemen testen. SIT ist Teil des End-to-End-Tests, der sicherstellt, dass alle Teile der Kette korrekt zusammenarbeiten.
Eine gute UAT beinhaltet die Erstellung von Testfällen und Testplänen. Diese haben im Allgemeinen die Form einer Reihe von Skripten (ein Skript ist eine Reihe von auszuführenden Aufgaben), die ein manueller Tester durchläuft und den Test je nach Ergebnis entweder besteht oder nicht besteht. Es ist nicht ungewöhnlich, dass ein End-to-End-UAT-Testplan über 500 Testfälle umfasst.
Das A in UAT ist einer der Gründe, warum es so wichtig ist. Am Ende des UAT-Prozesses wird davon ausgegangen, dass Sie die Anwendung angenommen haben. Daher ist es wichtig, dass Sie sie gründlich getestet haben, um sicherzustellen, dass sie genau so funktioniert, wie Sie es erwartet haben. Dies bedeutet nicht, dass unentdeckte Fehler nicht unter die Garantie fallen, aber wenn eine Funktionalität nicht so funktioniert, wie Sie es erwartet haben, muss dies in UAT behoben werden. Der andere Grund, warum es so wichtig ist, ist, dass es die letzte Chance ist, Probleme aufzugreifen, bevor es live geht. Alle Fehler und Probleme wirken sich wahrscheinlich negativ auf die Benutzererfahrung aus.
UAT erfordert einen hohen Aufwand für den Kunden, was oft unterschätzt wird. Einige Kunden nutzen externe Testagenturen, um sie während der UAT zu unterstützen, wodurch das Risiko eines Projekts erheblich verringert werden kann, wenn der Kunde nicht über die Arbeitskraft verfügt, um UAT effektiv durchzuführen.
Sicherheitstests
Ich bin manchmal sehr überrascht, wie manche Händler Sicherheitstests nicht ernst genug nehmen. Es ist nicht ungewöhnlich, dass der Einzelhändler nicht weiß, wann er zuletzt einen Penetrationstest auf seiner Webplattform durchgeführt hat. Dies sind in der Regel diejenigen, die noch nicht von einem Cyberangriff betroffen waren (oder noch nicht wissen, dass sie getroffen wurden). Im aktuellen Klima, in dem Cyberkriminalität an Häufigkeit und Raffinesse zunimmt, und insbesondere mit der DSGVO am Horizont in Europa, werden Sicherheitstests immer wichtiger. Alle E-Commerce-Webplattformen sollten mindestens einmal jährlich, idealerweise zweimal jährlich, von einem spezialisierten Drittanbieter einem Penetrationstest unterzogen werden. Es ist auch ratsam, Ihre Anwendung regelmäßig mit Spezialsoftware wie Nessus auf Schwachstellen zu scannen. Bei Envoy scannen wir die Webplattformen unserer Kunden in der Regel wöchentlich, um sicherzustellen, dass Anwendungsschwachstellen sehr schnell erkannt werden. Zumindest sollten Sie vor jeder Freigabe für die Produktion Anwendungssicherheitsscans durchführen. Es bringt nichts, 6 Monate bis zum nächsten Penetrationstest zu warten, wenn Sie eine neue Anwendungsschwachstelle eingeführt haben.
Leistungstest
Leistungstests werden im Allgemeinen verwendet, um festzustellen, wie viel Verkehr, Seitenaufrufe, gleichzeitige Benutzer und Bestellvolumen Ihre Website verarbeiten kann. Es ist ein schwierigerer Prozess, als Sie sich vielleicht vorstellen können, da Sie zum genauen Testen das reale Benutzerverhalten nachahmen müssen, und wie Sie wissen, tun echte Benutzer viele verschiedene Dinge. Das Beste, was Sie tun können, ist, Ihre Key User Journeys wie Suchen, Hinzufügen zum Warenkorb und Bezahlen nachzuahmen. Idealerweise möchten Sie Lasttests eher in Ihrer Produktionsumgebung als in einer Staging-Umgebung durchführen, da Sie dadurch ein viel zutreffenderes Bild erhalten, aber dies wird Ihre Plattform wahrscheinlich irgendwann während des Tests offline schalten.
Die meisten Einzelhändler neigen dazu, Belastungstests einmal im Jahr durchzuführen, normalerweise vor Haupthandelszeiten wie Black Friday oder Weihnachten. Das Problem, das dies verursachen kann, besteht darin, dass seit dem letzten jährlichen Test möglicherweise eine große Anzahl von Änderungen an der Anwendung vorgenommen wurden, von denen sich einige möglicherweise inkrementell auf die Leistung ausgewirkt haben. Wenn ein jährlicher Belastungstest einen Leistungsabfall im Vergleich zum Vorjahr zeigt, ist es sehr schwer festzustellen, welche Änderung oder Änderungen im vergangenen Jahr zu diesem Leistungsabfall beigetragen haben. Dies gibt Ihnen möglicherweise auch nicht genügend Zeit, um die Leistungsprobleme zu lösen, bevor der Spitzenhandel beginnt.
Um dem entgegenzuwirken, ist es ratsam, vor jedem neuen Code-Release Performance-Benchmarks durchzuführen. Diese müssen nicht in einer Produktionsumgebung durchgeführt werden, solange jeder Test in derselben Umgebung durchgeführt wird, da das Ziel darin besteht, festzustellen, ob die Leistung im Vergleich zur letzten Version zugenommen oder abgenommen hat. Dieser Ansatz ermöglicht es Entwicklungsteams zu verstehen, woher Leistungssteigerungen oder -minderungen kommen. Dies erfordert natürlich Zeit und erhöht daher die Entwicklungszeit und die Kosten
Obwohl die obige Liste nicht vollständig ist, können Sie sehen, dass der Umfang des Testens innerhalb der Softwareentwicklung sehr groß und komplex sein kann. Jede Art von Prüfung erfordert Zeit und Mühe, und Sie sollten nicht einfach davon ausgehen, dass dies standardmäßig ohne zusätzliche Kosten erfolgt. Unternehmen, die sich stark auf das Testen konzentrieren, wenden bis zu 40 % der Projektzeit für das Testen auf, was eine sehr überraschende Menge sein kann. Gutes Testen kann ein Projekt risikoärmer machen und sich langfristig auszahlen, da es zu weniger Fehlern, besserer Leistung und einem besseren Gesamterlebnis für Ihre Kunden führt.
