Lohnen sich End-to-End- und Integrationstests für nicht geschäftskritische Dinge?

9

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?

Marc
quelle
4
Gibt es dafür eine Möglichkeit, eine Risiko- / Kostenberechnung durchzuführen? Anders als tatsächlich beides zu tun und dann zu vergleichen, nein.
Robbie Dee
4
Sie müssen den ROI von allem im Entwicklungsprozess berücksichtigen. Lohnen sich Unit-Tests? Lohnt sich das manuelle Testen? Lohnt sich die Codequalität? Lohnt es sich überhaupt, die Software zu erstellen? Das sind wichtige Geschäftsfragen. Was natürlich generell nicht beantwortet werden kann. Dabei geht es mehr um Business Administration als um Software Engineering.
Christian Hackl
Was sind Ihrer Meinung nach die geschäftlichen Auswirkungen, wenn ein Webshop wie Amazon einige Stunden oder Bestellungen verloren hat? Sie können versuchen, die Artikel kostenlos erneut zu versenden, aber was würde dies für ihren Ruf bedeuten?
Bart van Ingen Schenau
@BartvanIngenSchenau Ich denke, ein riesiges Unternehmen wie Amazon kann sich Integrationstests und E2E leisten. Es ist leicht zu sehen, dass einige Stunden Bestellungen Millionen kosten. Aber ich frage mich, ob für kleinere Unternehmen die Kosten für die Reputation geringer sind als die Kosten für die Tests selbst. Zumal es äußerst wertvoll sein kann, unglückliche Kunden in zufriedene Kunden zu verwandeln, bedeutet dies möglicherweise, dass dies zunächst nicht einmal Kosten verursacht. Ich habe einfach keine Erfahrung, um Schlussfolgerungen zu ziehen, daher frage ich.
Marc

Antworten:

12

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:

  • Kosten für die manuelle Durchführung von E2E-Tests (mehrmals vor jeder neuen Version)

vs.

  • Kosten für den Aufbau (und die Wartung) automatisierter E2E-Tests

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.

Doc Brown
quelle
Danke, das ist eine großartige Antwort. Was sind Beispiele für E2E-Tests, die einfach zu implementieren sind, aber später zu mehr Entwicklung und Wartung führen?
Marc
2
@Marc: Ich denke, Sie haben meinen letzten Satz falsch verstanden. Ich habe über verschiedene Tests gesprochen: diejenigen, die einfach zu implementieren / zu warten sind, und diejenigen, die es nicht sind.
Doc Brown
Richtig, die bearbeitete Version macht es klarer.
Marc
@Marc: Nach meiner Erfahrung sind Tests über Benutzeroberflächen (insbesondere komplexe) häufig ein Kandidat, bei dem die Testautomatisierung weniger kosteneffektiv ist als andere Tests - dies hängt jedoch stark von der Kategorie der Software, den verfügbaren Tools und der Spezifikation ab beteiligten Technologien.
Doc Brown
7

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

  1. 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.

  2. 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

  3. 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.

  4. 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.

Ewan
quelle
Für mich steht oder fällt diese Antwort, je nachdem, ob das OP über Integrationstests hinaus über Unit-Tests spricht. Wenn es bereits sind Unit - Tests, dann wäre die Antwort scheint zu sein , bestenfalls spekulativ . Wenn es keine Komponententests gibt, sind natürlich einige automatisierte Tests besser als gar keine.
Robbie Dee
Ja, ich gehe davon aus, dass wir Unit-Tests haben
Marc
1

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:

Als gute erste Vermutung schlägt Google häufig eine Aufteilung von 70/20/10 vor: 70% Komponententests, 20% Integrationstests und 10% End-to-End-Tests. Die genaue Mischung ist für jedes Team unterschiedlich, aber im Allgemeinen sollte diese Pyramidenform beibehalten werden.

Dherik
quelle
0

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.

user1232212
quelle
0

"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:

  1. Sind einfach zu automatisieren und benötigen wahrscheinlich nicht viel Wartung, um weiter zu laufen.
  2. Nehmen Sie sich die meiste Zeit, um konsistente, angemessene manuelle Testprozesse anzuwenden.
  3. Riskieren Sie, dass Sie oder Ihr Chef wie Idioten aussehen, wenn das Produkt mit einem kaputten Produkt veröffentlicht wird.

Verwenden Sie jede Art von Test, einschließlich E2E, die Sie für angemessen halten. Konzentrieren Sie sich jedoch auf diese.

schlurfenb
quelle
0

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.

JacquesB
quelle
0

Ich gehe davon aus, dass es sich bei dieser Frage um Unternehmenswebanwendungen handelt.

Meine Empfehlung für mittelkritische Dinge:

  • Führen Sie automatisierte Tests für Ihre Backend-APIs durch und stellen Sie sicher, dass das Backend wie erwartet funktioniert. Diese Tests sollten von den Entwicklern während der Implementierung einer API geschrieben werden.
  • Kümmern Sie sich nicht um automatisierte UI-Tests, dh führen Sie die Frontend-Tests manuell durch.

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.

Mike76
quelle