Es ist bekannt, dass End-to-End- und Integrationstests teuer sind. Wenn wir Anwendungen entwickeln, bei denen Menschen sterben könnten, wenn etwas schief geht, ist dies natürlich eine lohnende Investition. Wäre es in Anwendungen, in denen Fehler nicht das Ende der Welt sind, nicht billiger, die E2E-Tests und Integrationstests insgesamt zu überspringen und stattdessen einen Sicherungsplan zu erstellen, wenn etwas schief geht? Wie ist ein manueller Test von User Stories + Unit-Tests + mit einer statisch typisierten Sprache ausreichend?
Wie zum Beispiel, wenn ein Webshop eine Bestellung verloren hat, könnte er stattdessen den Artikel kostenlos + einen anderen Artikel als Entschuldigung senden. Der Endbenutzer könnte auf diese Weise noch glücklicher werden und das Unternehmen spart insgesamt Geld.
Ich denke, meine Frage ist im Allgemeinen, wie viel kostet ein Integrationstest und ein E2E-Test und wie viel Geld spart er? Gibt es dafür eine Möglichkeit, eine Risiko- / Kostenberechnung durchzuführen?
Antworten:
Es spielt keine Rolle, ob Sie E2E- und Integrationstests implementieren oder nicht, Sie benötigen in beiden Fällen einen Sicherungsplan . Erwarten Sie niemals, dass ein System fehlerfrei ist, nur weil es getestet wurde.
Daher vergleichen Sie in Ihrer Kostenschätzung die Kosten für die Implementierung von E2E-Tests nicht mit den Kosten, die Ihr Backup-Plan im Falle eines Fehlers schätzt. Sie vergleichen:
vs.
Wenn Sie diese E2E-Tests mehrmals verwenden können, gibt es normalerweise eine Reihe von Testläufen, bei denen die Kosten einen Break-Even-Punkt erreichen. Dies sollte die Metrik sein, die Sie anwenden, wenn Sie im Voraus planen möchten, welche E2E-Tests Sie manuell durchführen und welche Sie automatisieren.
Beachten Sie, dass es einige Arten von E2E-Tests geben kann, die einfach implementiert werden können, wenn der ROI sofort klar ist. Es gibt jedoch auch Arten von E2E-Tests, bei denen Entwicklung und Wartung möglicherweise teurer sind als die manuelle Durchführung über einen Zeitraum von mehreren Jahren.
quelle
Vielleicht intuitiv entgegengesetzt, kann automatisiertes Testen die Entwicklungszeit im Vergleich zu keinem Test verkürzen. Es ist also eine Win-Win-Situation.
Die Idee ist, dass die Tests auf mehreren Ebenen beitragen
Erzwingen Sie das strikte Sammeln und Spezifizieren von Anforderungen
Dies hat einen großen Einfluss auf die Entwicklungsgeschwindigkeit. Kein Zurück mehr nach mehr Details fragen, keine Missverständnisse, keine unnötigen Funktionen usw.
Entwickler wissen, wann eine Funktion abgeschlossen ist
Die meisten Tests werden von Entwicklern während des Schreibens des Codes durchgeführt, anstatt dass Tester ein fertiges Produkt überprüfen. Durch die Automatisierung dieser Tests wird diese Arbeitsbelastung verringert
Fehler, die durch neue Funktionen verursacht wurden, wurden sofort erkannt.
Diese können Sie leicht einen Sprint kosten und erfordern das Umschreiben eines gesamten Features, wenn sie nicht erkannt werden.
Schnellerer Freigabezyklus
Dies bedeutet weniger Code im Flug, was weniger Zusammenführen bedeutet, was weniger Arbeit und weniger Komplexität für Entwickler bedeutet
Insbesondere wenn Sie ein Test-Framework-Setup haben, dauert das Schreiben dieser Tests weniger Zeit, als Sie bei diesen Effizienzvorteilen sparen.
Außerdem sparen Sie Zeit beim manuellen Testen und erhalten am Ende ein besseres Produkt.
quelle
Meine Antwort? Vielleicht, wahrscheinlich nicht .
EOE-Tests sind gut, wenn sie sehr einfach sind. Wenn Sie grundlegende Szenarien abdecken möchten, können Sie mit EOE-Tests einige Vorteile erzielen. Wenn Sie jedoch eine wirklich komplexe und große Anwendung haben (geschäftskritisch oder nicht), ist die Wartung dieser EOE-Tests teuer und Sie müssen Ihr Szenario kennen, um zu bewerten, ob es sich lohnt.
Vor einigen Jahren diskutierte der Google Testing Blog dieses Thema. Ich kann nur dem Autor zustimmen. Ein guter Test muss schnell und zuverlässig sein und Fehler isolieren. Diese Funktionen können die EOE-Tests nicht für Sie bereitstellen.
Ich habe an einer Anwendung gearbeitet, die mehr als 12 Stunden End-to-End-Tests enthält, die viele Szenarien abdecken. Schließlich gelang es uns, diese Tests auf verschiedene Maschinen zu verteilen, den Start, die Ausführung und das Ende der Tests zu steuern und die Ergebnisse zu sammeln und zusammenzuführen. Die getestete Anwendung war eine Monolith-Anwendung (was einfacher zu installieren und auszuführen ist) und war ein Albtraum, um die Tests aufrechtzuerhalten.
Die meiste Zeit haben wir die Tests beibehalten, anstatt Fehler aus ihren Ergebnissen zu erkennen. Das Erkennen des Ursprungs eines Fehlers bei einem End-to-End-Test nimmt viel Zeit in Anspruch. Wir haben uns auch mit vielen "falsch-negativen" Tests und wenig Zeit befasst, um das Problem zu verstehen und zu beheben: Probleme beim Laden von Java-Applets, erwartetes Element, das nicht auf der Seite gefunden wurde (plus andere Probleme bezüglich der Automatisierungsgeschwindigkeit), pflegen den Abfragecode, der werden nur für den Datenbankspeichertest verwendet (da die ursprüngliche Abfrage datenbankspezifischen Code verwendet) usw.
All dies erfordert Menschen, die in Betrieb bleiben. Am Ende löschen wir einige EOE-Tests und ersetzen sie durch viele Unit- / Integrationstests.
Mein konservativer Rat ist also, die Testpyramide von Google zu verwenden:
quelle
Nach meiner Erfahrung ist das Testen von E2E unabhängig von der Kritikalität der App immer umsichtig. Ich denke immer im schlimmsten Fall, wenn die Dinge birnenförmig werden, fühlen Sie sich wohl, wenn Sie vor dem Management stehen und Ihren Ansatz rechtfertigen? Wenn nicht, müssen Sie Ihren Ansatz ändern. Viele Unternehmen minimieren die Bedeutung und die Ressourcen, die für das Testen bereitgestellt werden, aber seien Sie versichert, dass jeder, wenn etwas schief geht, nach jemandem sucht, dem er die Schuld geben kann. Wenn Sie die Entscheidung getroffen haben, das Testen einzuschränken, oder diesen Rat gegeben haben, sind Sie derjenige, der entlassen wird Linie.
Softwareentwicklung erfordert allzu oft ein Auge für die Organisationspolitik.
quelle
"Es ist bekannt, dass End-to-End- und Integrationstests teuer sind."
Ich glaube, ich bin mit dieser Behauptung nicht einverstanden.
Erstens sind E2E-Tests für Endbenutzer von Bedeutung und können die zeiteffektivsten / kostengünstigsten Optionen zum Testen komplexer Systeme sein. Wenn zum Beispiel jemand ein Auto kauft, ziehen die meisten Leute es nicht in Stücke und beginnen, Vergaser, Getriebe und Räder isoliert zu testen. Stattdessen machen sie eine Probefahrt.
Zweitens verlangsamt E2E in Bezug auf Werkzeuge die interne Entwicklung des Produkts nicht und hält länger. Wenn Sie darüber nachdenken, ändert sich die tatsächliche Funktionsfläche der meisten Produkte selten so stark, während sie intern allen möglichen Entwicklungen unterliegen kann. Sobald das Testwerkzeug betriebsbereit ist, hält es normalerweise sehr gut. Zum Beispiel, wenn wir zur Auto-Analogie zurückkehren. Der gleiche Testfall "Nehmen Sie es für eine Fahrt" würde auf Ford Model T so ziemlich funktionieren wie auf einem Tesla. Wie würden Investitionen in rollende Straßen, Windkanäle, Dichtheitsprüfungen usw. Wie viele der internen Komponententests hätten über ihre Lebensdauer einen so guten ROI erzielt?
Wo E2E-Tests tendenziell teurer / unangemessen sind, ist dies in der Ersteinrichtung und wenn es verwendet wird, um zu versuchen, alles zu testen. Pragmatisch gesehen denke ich, dass der beste Weg, um diese Falle zu umgehen, darin besteht, Prioritäten zu setzen, die das Testen von Dingen automatisieren, die:
Verwenden Sie jede Art von Test, einschließlich E2E, die Sie für angemessen halten. Konzentrieren Sie sich jedoch auf diese.
quelle
Sie können die Kosten für Integrationstests nicht wirklich mit den Kosten eines Best-Case- Szenarios vergleichen, bei dem ein Fehler nur eine einzelne Bestellung betrifft. Ein logischer Fehler würde wahrscheinlich eine große Anzahl von Bestellungen betreffen. Angenommen, ein Fehler bedeutet, dass keine Zahlungen erfasst werden - dies könnte katastrophale Auswirkungen auf jedes Unternehmen haben.
Sie sollten sich fragen, was der schlimmste Fehler ist, der aufgrund fehlender E2E-Tests realistisch in der Produktion landen könnte. Und erinnere dich an Murphys Gesetz.
quelle
Ich gehe davon aus, dass es sich bei dieser Frage um Unternehmenswebanwendungen handelt.
Meine Empfehlung für mittelkritische Dinge:
Ich denke, dass die meisten Tests auf API- oder Komponentenebene durchgeführt werden sollten. Unit-Tests, bei denen nur einige interne Funktionen ausgeführt werden, interessieren mich nicht.
quelle