Entwerfen und Erstellen eines Hyper-Fast Test Automation-Stacks

Warum Sie eine End-to-End-Testautomatisierung in Echtzeit benötigen und Ratschläge für die besten Produkte, um diese zu erstellen.

Roboterläufer, der einen Sprint startet

Als Berater, Trainer, Autor und Entwickler, der auf Softwarequalität und automatisiertes Testen spezialisiert ist, werde ich häufig nach meinen Meinungen und Ratschlägen zum Entwurf eines Testautomatisierungsstacks gefragt.

Daher dachte ich heute, ich würde es vorziehen, einige Auszüge aus meinem bevorstehenden Handbuch zu veröffentlichen, in denen meine Meinung dazu enthalten ist, was einen guten Testautomatisierungsstapel ausmacht und wie Sie vorgehen können, um einen für sich selbst zu erstellen.

Was macht einen guten Testautomatisierungsstapel aus?

Meine Meinung zu einzelnen Produkten und Anbietern ändert sich mit der Zeit, genau wie die Produkte selbst. Was sich jedoch niemals ändern wird, sind meine vier goldenen Regeln für die Testautomatisierung:

1. Der Zweck der Testautomatisierung besteht darin, Entwicklern ein superschnelles Feedback zu geben.

"Feedback" bedeutet sowohl die Bestätigung des Erfolgs als auch die Benachrichtigung über ein Problem. Ein Fehler ist beispielsweise eine Art von Rückmeldung, die auf ein Problem hinweist, das normalerweise gemeldet wird, wenn der Entwickler denkt, dass seine Arbeit abgeschlossen ist. Ebenso ist ein Testfehler eine andere Form der Rückmeldung, und dies geschieht zum Codierungszeitpunkt.

Warum ist das so wichtig?

Wegen meiner zweiten goldenen Regel, die sich auf das Feedback selbst bezieht und besagt:

2. Je länger Feedback in einem System lebt, desto teurer ist es, sich damit auseinanderzusetzen.

Stellen Sie sich einen Fehler vor, der schnell behoben wird, wenn der Entwickler, der den Code geschrieben hat, noch Kontext hat, im Vergleich zu dem Zeitpunkt, zu dem der Fehler Wochen später entdeckt und von jemandem behoben wird, der den Code neu lernen muss. Was wäre schneller und damit billiger zu reparieren?

In Ergänzung,

3. Je mehr ungelöstes Feedback sich in einem Produkt ansammelt, desto geringer ist die Qualität des Produkts.

Wenn Kunden beispielsweise Feedback geben, dass das Produkt nicht ihren Anforderungen entspricht, und dieses Feedback erfasst, aber nicht bearbeitet wird, erfüllt das Produkt nicht den potenziellen Wert für seine Benutzer und ist daher von geringer Qualität.

Alles oben Gesagte entspricht meiner vierten Regel:

4. Je schneller Sie Feedback erkennen und verarbeiten können, desto geringer sind die Entwicklungskosten und desto höher ist die Qualität Ihres Produkts.

Sie können die Qualität steigern, wenn Sie sich darauf konzentrieren, Feedback zu erkennen und damit umzugehen. So einfach ist das. Daher muss jede Entscheidung, die Sie beim Entwurf und der Implementierung eines Teststapels treffen, dazu dienen, die Geschwindigkeit der Erfassung von Rückmeldungen zu optimieren, da dies der erste Schritt ist, um damit umzugehen.

Wer sollte Ihren Testautomatisierungsstapel entwerfen?

Jedes Mitglied Ihres Teams kann zum Entwurf und zur Implementierung Ihres Teststacks beitragen. Natürliche Anführer der Bemühungen sind in der Regel die technischen Architekten, ein starker Full-Stack-Entwickler oder vielleicht der Leiter des QA-Teams. Vor allem aber

Die Entwickler selbst MÜSSEN den Teststack besitzen.

Um zu verstehen, warum, denken Sie an die bereits erwähnte goldene Regel zurück: "Die erste Priorität der Testautomatisierung besteht darin, den Entwicklern ein superschnelles Feedback zu geben."

Diese goldene Regel gilt für jeden Aspekt Ihres Lieferzyklus, insbesondere jedoch in der lokalen Entwicklungsumgebung. Damit ein Testautomatisierungsstack in der Praxis erfolgreich ist, muss er den Workflow der Entwickler ergänzen und Feedback in Echtzeit liefern, während Code geschrieben wird. Nicht danach, sondern während.

Zu oft sehe ich, dass das QA-Team die Testautomatisierung besitzt, aber das QA-Team arbeitet nach der Entwicklung und das ist zu spät! In fortgeschritteneren Teams verlassen sich Entwickler bei der Ausführung ihrer automatisierten Tests ausschließlich auf ihre Continuous-Integration-Server. Dies ist zwar ein paar Jahre vor dem QA-Team, das die Testautomatisierung besitzt, aber immer noch nicht optimal.

Stellen Sie sich das so vor: Wenn Sie mit einem GPS-System irgendwohin fahren und falsch abbiegen, möchten Sie es lieber sofort erfahren, oder möchten Sie lieber warten, bis Sie am falschen Ziel ankommen?

Qualität bei jedem Schritt schützen

Wie können Sie eine hyperschnelle Rückkopplungsschleife aufbauen?

Sie erhöhen das Feedback in jeder Bauphase.

Und das bedeutet, dass in jeder Phase des Softwareentwicklungszyklus keine Fehler in das System eindringen können. Lassen Sie uns ein Beispiel durchgehen.
Nehmen wir an, wir bauen eine Klimaanlage (AC), um eine reale Metapher zu verwenden.

  1. Sauber
    Der erste Schritt besteht darin, alle Dateien zu entfernen, die aus früheren Builds generiert wurden, z. B. kompilierte Dateien, und den Build-Lebenszyklus von einer neuen Basislinie aus zu starten.
    Dies ist so, als würden Sie Ihre Werkbank von allen Kleinigkeiten befreien, bevor Sie anfangen, etwas Neues zu bauen.
  2. Code kompilieren
    In diesem Schritt werden Quellcodedateien in ausführbaren Code umgewandelt. In diesem Schritt wird der Code für eine bestimmte Komponente erstellt.
    Dieser Schritt entspricht der Herstellung der Komponenten, die zum Aufbau der Wechselstromversorgung benötigt werden, z. B. des Lüfters für den Luftantrieb und des Motors, der den Lüfter dreht.
  3. Führen Sie Komponententests durch
    Unit-Tests sind nur ein anderer Name für ausführbare Komponentenspezifikationen, aus denen hervorgeht, ob die Komponenten wie angegeben funktionieren. Wenn Komponenten nicht vorhanden sind, gibt es keinen Grund, das System weiter aufzubauen. Denken Sie daran, dass der Wert mithilfe von Komponenten erstellt wird, sodass eine fehlerhafte Komponente zu einem fehlerhaften Wert führen würde.
    Im AC-Beispiel würde ein Einheitentest sicherstellen, dass die Lüfterflügel in der Lage sind, Luft anzutreiben, wenn sie gedreht werden. Wenn die Lüfterflügel nicht funktionieren, ist es besser, zuerst die Lüfterflügel zu reparieren und dann den Erstellungsprozess neu zu starten.
  4. Führen Sie Integrationstests aus
    Sobald wir wissen, dass die Komponenten einzeln funktionieren, können wir sie zusammenfügen und prüfen, ob sie gemeinsam Wert schaffen. Dies ist der Zweck von Integrationstests. Diese Tests kombinieren gerade genug Einheiten, um Wert zu schaffen. Wenn wir wie im vorherigen Schritt feststellen, dass die Komponenten nicht wie angegeben zusammenarbeiten, gibt es keinen Grund, das System weiter aufzubauen, da der Wert fehlerhaft ist.
    Zurück zum AC-Beispiel: Wenn wir den Lüfter und den Motor zusammenbauen und feststellen, dass keine Luft angetrieben wird, weil die Spindel nicht passt, ist es sinnlos, die Baugruppe mit dem Rest des AC zu kombinieren.
  5. App bereitstellen
    Wenn wir an diesen Punkt gelangen und eine gute Testabdeckung haben, bedeutet dies, dass alle Komponenten einzeln und gemeinsam arbeiten, um Wert zu schaffen. Dies gibt uns großes Vertrauen, das gesamte System zusammenzubauen. Wir sind jedoch immer noch nicht zu 100% zuversichtlich, dass es funktionieren wird, da im End-to-End-Montageprozess etwas anderes schief gehen kann. Aus diesem Grund müssen wir nach der Bereitstellung der App weitere Tests durchführen.
    Bei der AC-Metapher geht es in dieser Phase darum, alle Komponenten und Baugruppen zusammenzufügen und an das Stromnetz anzuschließen.
  6. Führen Sie End-to-End-Tests durch
    Wenn das System vollständig implementiert ist, können wir jetzt sicherstellen, dass es dem Verbraucher den beabsichtigten Wert bietet. Diese Tests stellen sicher, dass die Wertespezifikationen erfüllt werden.
    Drücken Sie die Ein-Taste, drehen Sie den Temperaturregler auf die Kaltstufe und stellen Sie sicher, dass kalte Luft gefördert wird.

Zu diesem Zeitpunkt sind wir sehr zuversichtlich, dass der neue Code den beabsichtigten Wert liefert, und wir können den AC an den Kunden senden.

Jedoch…

Wenn diese Schritte nacheinander am Ende jeder Funktion ausgeführt werden (wie dies normalerweise der Fall ist), erhält der Entwickler erst dann eine echte Rückmeldung, wenn der gesamte Vorgang abgeschlossen ist. Und das dauert viel zu lange und ist deshalb zu teuer.

Mit einem superschnellen Teststapel erhalten Sie jedoch ein hohes Maß an Sicherheit, während Sie tatsächlich Code eingeben!

Ja! Es ist absolut möglich, Entwicklern während der Entwicklung ein End-to-End-Feedback in Echtzeit zu geben. Lesen Sie weiter, um herauszufinden, wie.

Passen Sie Ihren Teststapel an Ihren Tech-Stapel an

Angesichts der Tatsache, dass Teststacks den Entwicklungsfähigkeiten genau folgen sollten, ist es sinnvoll, Ihren technischen Stack als Ausgangspunkt für die Auswahl eines Teststacks zu betrachten.

Dieser Artikel befasst sich mit einem Node.js-Tech-Stack. Ich liebe Node.js, weil es so verdammt schnell ist, Aufgaben wie das Erstellen, Testen und Bereitstellen auszuführen, und weil Techniken wie das Ausführen von Tests beim Ändern von Dateien die Norm sind.

Wenn Sie Node.js nicht verwenden

Dieser Artikel sollte dennoch nützlich sein, da die Konzepte identisch sind. Durchsuchen Sie einfach Google nach den entsprechenden Tools für Ihren Tech-Stack und teilen Sie mir mit, was Sie in den Kommentaren unten oder auf Twitter finden.

Die besten Produkte für einen hyperschnellen Teststapel

In Bezug auf den oben definierten Prozess finden Sie hier eine Liste meiner Empfehlungen zum Testen der Qualität bei jedem dieser Hauptschritte.

Für Echtzeit-Unit-Tests vor Ort

Ich empfehle Wallaby.js
Wallaby.js zeigt Ihnen bei jedem Tastendruck an, ob ein Test in Echtzeit bestanden wurde oder nicht!

Mit jeder einzelnen Taste, die ich drücke, teilt Wallaby mir mit, ob etwas kaputt gegangen oder bestanden ist. Es wendet eine sehr clevere Technik an, um genau zu wissen, welche Tests ausgeführt werden sollen, und es werden alle parallel ausgeführt. Das Ergebnis lässt Sie sagen: „Wow!“

Ein Video malt eine Million Wörter (von der Wallaby.js-Site):

Weitere Informationen: https://wallabyjs.com

Für Echtzeit-Integrationstests vor Ort

Ich empfehle Chimp.js
Chimp überprüft Ihre Geschäftsdomänenlogik jedes Mal, wenn Sie eine Datei speichern.

Ich verwende den Domain-Testmodus von Chimp. Es ist ein Tool, das wir in meiner Firma geschrieben haben und das das Dateisystem überwacht und die Servicetests bei jeder Änderung erneut durchführt. Das Ergebnis ist eine schnelle Rückmeldung zum Status der Domänenlogik für Node.js-Apps.

Weitere Informationen: http://chimpjs.com

Für Ende-zu-Ende-Tests in Echtzeit vor Ort

Ich empfehle auch Chimp.js
Chimp überprüft jedes Mal, wenn Sie eine Datei speichern, die End-to-End-Funktion, an der Sie gerade arbeiten.

Ich verwende den End-to-End-Testmodus von Chimp. Anstatt alle End-to-End-Tests für jede gesicherte Datei auszuführen (was viel zu lange dauern würde), sucht Chimp nach einem bestimmten Tag und führt die markierten Tests erneut aus. Mit diesem einfachen Trick können Sie sich voll und ganz auf Ihre eigentliche Aufgabe konzentrieren und erhalten gleichzeitig ein superschnelles End-to-End-Feedback.

Chimp funktioniert auch für jede Webanwendung - unabhängig vom Backend.

Weitere Informationen: http://chimpjs.com

Für die Orchestrierung

Ich empfehle Gulp.js
Gulp ist der Dirigent des Orchesters.

Es kann eine Herausforderung sein, alle Teile nahtlos zusammenzubringen, und Sie benötigen ein Werkzeug, das so schnell arbeitet wie Sie. Hier kommt Gulp.js ins Spiel.

Gulp.js ist ein Streaming-Build-System, das sich hervorragend für die Orchestrierung eignet. Ich verwende es, um komplexe Aufgaben lokal auszuführen - zum Beispiel: Starten Sie den App-Server, warten Sie auf eine Nachricht und starten Sie dann Chimp. Auf dem Continuous Integration Server werden Unit-Tests mit Mocha & Karma ausgeführt, Code-Coverage erfasst und Rauch-Tests ausgeführt.

Sie können Gulp auch mit anderen Technologien als Node.js verwenden. Ich habe Gulp kürzlich verwendet, um Maven-Aufgaben für ein Java-Projekt zu steuern, da Gulp überlegene Funktionen zum Überwachen von Dateien bietet.

Weitere Informationen: http://gulpjs.com

Möchten Sie mehr wissen?

Diese Informationen sind ein gekürzter Auszug aus meiner in Kürze veröffentlichten Wissensdatenbank und dem Leitfaden „Quality Faster“. Darin beschreibe ich detailliert, wie diese und andere Technologien im Rahmen eines ganzheitlichen Full-Team-Full-Stack-Ansatzes implementiert werden zu höherer Softwarequalität.

Das ausführliche schriftliche Handbuch wird von Codebeispielen auf GitHub begleitet und bietet Zugang zu einer engagierten Community von Entwicklern, Qualitätssicherungsleitern und Produktmanagern, die alle Aspekte von Tests und Qualität diskutieren und austauschen.

Kommen Sie und probieren Sie es jetzt aus.

In meinem nächsten Beitrag

Ich zeige Ihnen, wie Sie die Philosophie des schnellen Feedbacks, die in der Entwicklungsumgebung erstellt wurde, auf ein breiteres Team ausweiten können. Außerdem zeige ich Ihnen, wie Sie einen ganzheitlichen Qualitätsprozess erstellen, der für ein schnelleres Feedback bei jedem Schritt ausgelegt ist.

Einverstanden oder nicht einverstanden?

Wenn Sie mit meinen Empfehlungen für Tools nicht einverstanden sind oder andere Tools oder Techniken kennen, von denen Sie glauben, dass sie für hyper-schnelles Feedback sogar noch besser sind, möchte ich immer davon hören! Also lass es mich bitte über das Kommentarfeld hier oder über Twitter unter @sam_hatoum wissen

Und wenn Ihnen das Gelesene gefällt, können Sie es mit anderen teilen, indem Sie auf die Schaltfläche "Empfehlen" klicken.

Vielen Dank und ich freue mich darauf, Ihnen dabei zu helfen, qualitativ hochwertigere Software schneller zu liefern.

Sam.

Andere Artikel, die ich geschrieben habe: