Die Einheitsprüfung ist Teil der Extreme Programming-Methodik, die darauf abzielt, maximale Softwarequalität zu gewährleisten. Wer aber führt die Einheitsprüfung durch? In der Tat werden Einheitsprüfungen von Entwicklern durchgeführt, nicht von Qualitätssicherungsingenieuren. Ein Entwickler, der Einheitsprüfungen durchführt, kann bereits in frühen Entwicklungsphasen Codeabweichungen erkennen. Wenn Entwickler Software während der Entwicklung testen, ist es für das Qualitätssicherungsteam viel einfacher, weitere, komplexere Tests durchzuführen.

Letztendlich tragen all diese Testphasen zur höheren Softwarequalität bei. Allerdings ist die Softwaretestspezifische Hilfe nur ein Aspekt der Softwarequalitätssicherung. Erfahren Sie, wie wir dies auf anderen Ebenen sicherstellen, indem wir alle Aspekte berücksichtigen. Projektbeschränkungen.

In diesem Artikel über die Testung von Software-Einheiten besprechen wir:

  • Warum Unit-Testing von Webanwendungen wichtig ist 
  • Best Practices für die korrekte Einheitenprüfung
  • Vorteile der Einzellaufensprüfungen
  • Die Struktur der Einheitenprüfung basiert auf einem Codebeispiel eines Yalantis-Entwicklers, der Einheitentests schreibt. 
  • Automatisierungsframeworks für Einheitstests und Dienstleistungen für Anbieter von Einheitstests

Die Bedeutung der Tests und warum wir sie brauchen

Die Einheitsprüfung ist die erste Stufe der Softwareprüfung, die für jede Art von Software erforderlich ist. Es gibt für alle Projekte eine Standard-Testliste, aber wir richten uns auch individuell an jedes Softwaresystem, um festzulegen, welche zusätzlichen Tests wir durchführen müssen. Zum Beispiel für Eine Plattform für elektronische medizinische Verschreibungen, Wir haben uns für ein erweitertes Testpaket entschieden, da diese Art von Software besondere Aufmerksamkeit für die Sicherheit der Patientendaten erfordert.

In diesem Abschnitt werfen wir einen Blick auf die Einheitenprüfung sowie die Integrations-, System- und Akzeptanzprüfung.

1. Einheitstests

Was ist Unit Testing? Ganz einfach gesagt ist Unit Testing eine Methode zur Testung von Code-Einheiten, typischerweise einzelner Funktionen, isoliert voneinander. Eine Einheit ist ein unteilbarer Funktionsblock mit seiner eigenen logischen Struktur, der nicht aufgeteilt werden kann. Im Kern ist ein Unit Test auch Code; daher gelten alle Anforderungen, die für das Schreiben guter Code gelten, auch teilweise für das Schreiben eines guten Unit Tests. In Unit Testing werden die kleineren Teile des Codes getestet, um bessere Ergebnisse zu erzielen. Außerdem laufen Tests schneller bei kleineren Einheiten. Warum Unit Testing? Das Hauptziel von Unit Testing in der Webentwicklung besteht darin, das Wachstum des Softwareprojekts zu unterstützen und sicherzustellen Stabile Versionen.

2. Integrationsprüfung

Während automatisierte Einheitstests die Funktionsweise isolierter Teile Ihres Codes überprüfen, decken Integrationstests für Webanwendungen die Interaktionen zwischen verschiedenen Teilen Ihrer Anwendung ab. Dies ist die nächste Stufe der Software-Tests, da Integrationstests prüfen, ob die verschiedenen Einheiten der Software in der Realität korrekt zusammenarbeiten. Integrationstests validieren komplexe Szenarien, weshalb sie mehr Aufwand und zusätzliche Ressourcen erfordern können, wie beispielsweise Datenbanken oder Webserver.
Einheitstests und Integrationstests sind eine großartige Kombination, da sie sicherstellen, dass jede einzelne Einheit korrekt funktioniert und dass mehrere Einheiten bei der Integration einwandfrei und wie erwartet funktionieren.

Niveaus der Web-Software-Tests

3. Systemtest

Nach erfolgreicher Durchführung der Integrationsprüfung können Sie mit der Systemprüfung beginnen. Dies ist der erste Schritt, bei dem Sie das System als Ganzes testen. Die Systemprüfung überprüft, ob alle Komponenten integriert sind und richtig funktionieren. Für die Systemprüfung ist es entscheidend, eine Umgebung zu erstellen, die der realen Umgebung ähnelt, in der das System eingesetzt werden soll. Die Systemprüfung überprüft, ob das System die funktionalen, technischen und geschäftlichen Anforderungen erfüllt.

4. Akzeptanzprüfung

Die Akzeptanzprüfung wird nach der Einheitstests-, Integrations- und Systemprüfung durchgeführt. In dieser Phase prüft das QA-Team die Qualität der Anwendung anhand vordefinierter Testszenarien und Testfälle. Der Zweck der Akzeptanzprüfung besteht darin, die Einhaltung der Geschäftsanforderungen des Systems zu bewerten. Dies ist das letzte Testlevel und überprüft, ob das System für die Veröffentlichung bereit ist.

In dem nächsten Abschnitt gehen wir näher auf die folgenden Themen ein: 

  • Weitere Details zu tatsächlichen Einheitstests in der Softwareentwicklung
  • Ein Beispiel für eine Einheitsprüfung für eine Webanwendung
  • Die Struktur der Website-Einheitstests
  • Best Practices für die Einheitenprüfung

 

Einheitstests in Aktion

Sie könnten fragen: Warum Unit Testing? Denn jedes kleine Codeelement hängt von anderen kleinen Elementen ab. Ihre Webanwendung besteht aus einer Reihe kleiner Einheiten, die zusammenarbeiten; wenn Sie eine Einheit ändern, kann dies zu einem Fehler führen. Unit-Test-Automatisierungs-Tools können problematische Teile Ihres Codes erkennen, sodass Sie wissen, wo das Problem liegt und wie das korrekte Verhalten aussehen sollte.

Eine Unit-Testsstrategie ist auch ein entscheidender Bestandteil der testgestützten Entwicklung (TDD). Diese Herangehensweise legt den Schwerpunkt auf die Testauswertung als wichtigsten Element der Softwareentwicklung und erfordert, dass Sie Tests schreiben, bevor der Produktionscode erstellt wird. TDD funktioniert jedoch am besten bei Lösungen mit gut definierten Dokumentationen und klaren Geschäftsbedürfnissen. Auf diese Weise kann ein Entwickler über ausreichende Informationen verfügen, um zuerst den richtigen Test zu schreiben und zu verstehen, wie der Code am Ende aussehen soll. TDD besteht aus drei Kernschritten: 

  • Erstellen Sie einen fehlerhaften Test, um festzulegen, wie bestimmte Funktionen verhalten sich
  • Code schreiben, der die Prüfung besteht
  • Den Code neu strukturieren, um seine Lesbarkeit und Wartbarkeit zu verbessern

Webanwendung für Einzeltests: Struktur und Funktionsprinzipien

Verschiedene Methoden der Einheitstests helfen, das Verhalten kleiner Teile Ihrer Anwendung unabhängig von anderen Code-Teilen zu überprüfen. In der Regel besteht eine Einheitstestphase aus drei Phasen: Organisieren – Testen – Feststellen:

  • Anordnen: Die Einrichtung des Tests für ein bestimmtes Element einer Anwendung (das sogenannte Testsystem)
  • Akt: Die eigentliche Durchführung der Tests (Interaktion mit dem zu testenden System)
  • Aussagen: Die beobachtete Verhaltensweise und die Überprüfung, ob die Erwartungen erfüllt wurden

Wenn das resultierende Verhalten den Erwartungen entspricht, besteht der Test erfolgreich; alles funktioniert korrekt. Andernfalls erlischt der Test und deutet auf ein Problem mit dem zu testenden System hin.
Damit der Einheitstest ordnungsgemäß ablaufen kann, folgen wir dem FIRST-Prinzip innerhalb der Einheitstest-Methodik:

  • F — schnell. Die beste Einheitstests sind schnell; andernfalls handelt es sich nicht um Einheitstests. Einheitstests müssen die Codeleistung schnell überprüfen, ohne auf Abhängigkeiten wie Datenbanken oder andere Dienste angewiesen zu sein.
  • Ich – isoliert. Einheitstests müssen isoliert durchgeführt werden und sich gegenseitig nicht beeinflussen, um die erwarteten Ergebnisse zu liefern. Entwickler sollten in der Lage sein, Einheitstests in beliebiger Reihenfolge und zu beliebigen Zeitpunkten auszuführen.
  • R — wiederholbar. Jeder Einheitstest muss beim Ausführen immer denselben Ergebnis liefern. 
  • S — selbstvalidierend. Einheitstests müssen programmiert werden, um festzustellen, ob sie fehlschlagen oder erfolgreich sind; deshalb muss der Entwickler die Ergebnisse nicht manuell bewerten. 
  • T — rechtzeitig. Einheitstests sollten so geschrieben werden, dass sie den Code rechtzeitig überprüfen lassen, wenn dies am dringendsten nötig ist.

Wenn der Entwickler die korrekte Struktur der Einheitenprüfung sicherstellt und das FIRST-Prinzip der Einheitenprüfung-Strategien befolgt, wird die Einheitenprüfung höchstwahrscheinlich die erwarteten Ergebnisse liefern. Und selbst wenn dies nicht der Fall ist, wird der Entwickler wissen, dass der Grund dafür ein Problem im System liegt, nicht in der Prüfung selbst.

Lesen Sie auch: Best Practices für die Durchführung von Tests und der Qualitätssicherung

Beispiel für Unit-Tests

Was ist der beste Ansatz für die Testung einer Website oder einer Webanwendung? Lassen Sie uns ein Beispiel ansehen. Sehen Sie, wie man eine Einheitstests auf das folgende Modell anwenden kann. Im Code unten ist eine klare Unterscheidung zwischen den drei Phasen zu sehen.

es('sollte keine zusätzlichen Farbstoffe enthalten', () => {
  //Anordnen: Objekte unter Test und erforderlicher Umgebung initialisieren
  lassen Regenbogen = Neu CustomRainbow('Schwarz', 'Weiß');
  // Akt: tatsächliche Anrufaktion durchführen
  lassen res = rainbow.contains('Blau');
  // Assert: die Validierung des Ergebnisses
  expect(res).toBe(Falsch);
})

Best Practices für die Einheitenprüfung

Hier finden Sie einige Best Practices für die Durchführung ordnungsgemäßer Einheitentests für Webanwendungen:

  • Relevanz. Web-Unit-Tests sollten immer relevant sein und tatsächlich etwas überprüfen. Wenn das Ergebnis des Tests keine zusätzlichen Informationen zur Analyse des Systemverhaltens liefert, ist der Test somit irrelevant.

  • Klare Erwartungen. Wir sollten genau wissen, welches Ergebnis wir von jeder Einheitenprüfung erwarten, damit wir das Ergebnis richtig interpretieren können. Im Falle unerwarteter Ergebnisse sollten wir die AAA-Struktur der Einheitenprüfung analysieren, um das Problem zu identifizieren. 

  • Beibehaltung der Codelogik. Wie bei regulären Codeelementen sollte auch die Testausführung nach gängigen Regeln und Anforderungen strukturiert sein, beispielsweise indem Code in Klassen und Methoden unterteilt wird.

Softwareentwickler mit umfangreicher Erfahrung In schriftlichen Testen sowie in anderen Arten von Tests sind wir uns der besten Praktiken bewusst, die sicherstellen, dass der Test genau so funktioniert, wie er geplant ist. Für unseren Logistikkunden, der sein Lager- und Transportmanagement-System umstellen wollte von einer monolithischen Architektur zu Mikroservices, Wir haben außerdem eine geeignete Testumgebung eingerichtet. 

Mit einer monolithischen Architektur musste unser Kunde das gesamte System auch nach den kleinsten Änderungen testen. Wir implementierten einen geeigneten Continuous Integration- und Delivery-Workflow, der uns dabei half, Tests für jeden Commit durchzuführen. Dank dieses Ansatzes konnten wir die Codequalität verbessern und eine geeignete Code-Management-Umgebung gewährleisten.

Nun wechseln wir zu den Vorteilen, die Sie durch die Testung von Softwareentwicklungseinheiten erhalten.

Vorteile von Unit-Testing-Diensten

Nun, da wir wissen, wie verschiedene Arten von Tests funktionieren, erfahren wir mehr über die Vorteile der Einheitsprüfung. Viele Menschen glauben, dass Einheitsprüfungen Zeitverschwendung sind, wenn man automatisierte Tests verwendet. Das stimmt nicht.

Wenn wir beispielsweise nur hochgradige Tests durchführen, wie z. B. UI-Automatisierungs-Tests mit vielen Schritten, um das endgültige Ergebnis zu erreichen. Und wenn einer dieser Schritte fehlschlägt, müssen wir viel Zeit damit verbringen, das Problem in dem Code zu finden, das fehlschlägt. Andererseits ist es einfacher, bei niedrigeren Einheiten-Tests genau festzustellen, welches Element und welche Teil der Einheit fehlschlägt, falls unser hochgradiger Test fehlschlägt.

Aber wie können wir genau von Unit Tests profitieren?

Fehler frühzeitig finden und beheben

Einheitstests sind hervorragend dafür geeignet, Fehler zu finden, bevor Code an die Qualitätssicherungsabteilung weitergeleitet wird. Sie helfen Entwicklern, Software bereits in den frühen Phasen zu debuggen. Die frühzeitige Erkennung und Behebung von Fehlern durch Einheitstests reduziert die Kosten der Debugging-Arbeit in späteren Entwicklungsphasen. 
Unit-Tests können Teil des Continuous-Integration- und Delivery-Prozesses werden. Mit zunehmender Software-Skalierung und dem Wachstum der Codebasis werden Unit-Tests automatisch ausgeführt. Mit Unit-Tests können Softwareingenieure die Ursache für Fehler leicht identifizieren und Code debuggen.

Bessere Codeänderungen und Refactoring

Refactoring ist der Prozess der Änderung der Funktionsweise des Codebasiswerks, ohne die Funktionsweise der App zu verändern. Einheitstests können Kopfschmerzen reduzieren, da sie sicherstellen, dass der Code nach dem Refactoring ordnungsgemäß funktioniert. Einheitstests sind wichtig bei der Code-Refactoring und wenn die Codebasis infolge von Software-Reengineering größer wird.

Mit Einheitstests erhalten Sie sofortige Rückmeldung, wenn Sie Code zerlegen, sodass Sie ihn sicher weiterentwickeln können. Da sich die Codebasis der Software jedoch verändert und wächst, ist es wichtig, auch die Einheitstests zu refactoren, um sicherzustellen, dass Sie die Komponenten korrekt testen.

Bessere Zusammenarbeit zwischen Entwicklern

Wenn Entwickler unerwartete Code-Teile schreiben, können sie diese entweder mit Kommentaren kennzeichnen (obwohl sie oft nicht bemerkt werden) oder sie unter Verwendung von Unit-Tests testen. Wenn andere Entwickler auf diese scheinbar seltsamen Code-Fragmente stoßen, die über Testfälle verfügen, erkennen sie sofort, dass der Code einen bestimmten Zweck hat.

Dokumentation bereitstellen

Viele Softwareentwickler sind der Meinung, dass Einheitstests zu einer Arbeitsdokumentation ihres Codes werden können. Einheitstests zeigen nämlich, wie man eine Bibliothek oder ein Framework verwendet. Außerdem sind Einheitstests stets aktuell, da sie die neueste Funktionalität verwenden (und alle möglichen Funktionen zeigen).

Ist das ein Vorteil? Ja, da die Dokumentation es mehreren Entwicklern erleichtert, zusammenzuarbeiten und das Projekt später an andere Entwickler weiterzugeben. Aber das gilt nur, wenn die Entwickler wissen, wie man klare Einheitsprüfungen schreibt und regelmäßig schreibt.

Automatisierte Einheiten-Testwerkzeuge

Entwickler verwenden Testwerkzeuge und -frameworks zur schnellen und einfachen Erstellung von Unit-Tests, da die meisten Programmiersprachen die Unterstützung für Unit-Tests mit dem integrierten Compiler nicht unterstützen. Es gibt verschiedene Frameworks, um verschiedene Arten von Unit-Tests zu implementieren. Wir stellen Ihnen einige Beispiele für die Tools vor, die wir bei Yalantis zur Automatisierung der Testausführung von JavaScript- und Go-Code verwenden. Dank Automatisierungstechniken konnten wir die Testzeit für Unser medizinisches PACS-Projekt. Wir haben sichergestellt, dass das System Tests parallel und jederzeit durchführen konnte. Es war außerdem entscheidend für uns, sicherzustellen, dass das System die Implementierung von Codeänderungen auf allen Testebenen ermöglicht.

Jasmine

Jasmine-Logo

Jasmine Jasmine ist ein behavior-driven Development Framework für die Testung von JavaScript-Code. Es eignet sich für Websites, Node.js-Projekte und überall dort, wo JavaScript verwendet wird. Jasmine setzt keine Browser- und JavaScript-Frameworks voraus. Es erfordert auch kein DOM (document object model).

Jasmine bietet eine einfache Initialisierung mit Assertions, Spies und Mockups. Sie bietet alles, was Sie für die Entwicklung von Unit-Tests benötigen, da sie aus dem Regal viele grundlegende Funktionen enthält. Zudem ist sie in jeder Entwicklungsmethodik einfach zu implementieren. Jasmine unterstützt asynchrone Tests und verwendet Spies zur Implementierung von Test-Doppel.

Der Hauptvorteil von Jasmine ist, dass es nicht von Browsern, Frameworks und Plattformen abhängig ist. Neben der Verwendung für behavior-driven development (BDD) kann Jasmine auch für test-driven development (TDD) verwendet werden, einer der wichtigsten Techniken der agilen Entwicklung. Bei TDD geht es darum, zuerst den Testcode zu schreiben, damit dieser Ihre Implementierung leiten kann.

Jest

Jest-Logo

Jest Es wurde von Facebook entwickelt und basiert auf Jasmine. Es wird von Instagram, Airbnb, Facebook und vielen anderen Unternehmen verwendet. Die Jest-Community schätzt seine Geschwindigkeit und Einfachheit. Jest führt gleichzeitig Tests durch, sodass die gesamte Testsuite schnell läuft. Außerdem bietet es die Funktion „Watch“, um nur die von Ihren Änderungen im Editor betroffenen Tests auszuführen.

Der Hauptvorteil von Jest ist, dass es bereits mit minimaler Einrichtung und Konfiguration funktioniert. Es enthält eine Assertion-Bibliothek und Unterstützung für Mocking. Tests werden in einem behavior-driven Development-Stil geschrieben, wie bei den meisten beliebten Testbibliotheken.

Die Kombination aus Mocha und Chai

Logo von Chai und Mocha

Mocha ist ein featurereiche JavaScript-Testframework, das auf Node.js und in einem Browser ausgeführt wird. Bei Yalantis verwenden wir das Testframework Mocha zusammen mit Chai Assertion-Bibliothek, die sich gut für JavaScript-Code eignet, der für Datenmodelle, Geschäftslogik und Hilfsprogramme verwendet wird.

Mocha zieht viele Entwickler an, weil es eine einfache und flexible Modulstruktur hat. Mocha-Tests werden seriell ausgeführt und ermöglichen eine präzise und flexible Berichterstellung sowie die Zuordnung von unerkannten Ausnahmen zu den entsprechenden Testfällen.

Ginkgo

Ginkgo-Logo

Ginkgo ist ein Allzweck-Testframework für Go. Es wird aktiv für die Testung von Einheiten, Integrationen, Systemen, Akzeptanztests und Performancetests eingesetzt. Ginkgo funktioniert am besten in Kombination mit dem Gomega library. Mit Ginkgo können Entwickler verschiedene Tests parallel ausführen und diese anschließend anhand von Etiketten gruppieren. Dieses Framework kann außerdem Tests automatisch ausführen, wenn seine ginkgowatch Das Tool erkennt alle Änderungen in einem Test. So erhalten Sie während des TDD stets schnelle Rückmeldungen.

Ginkgo erfordert eine komplizierte Einrichtung, bietet aber eine hervorragende Testorganisation und viele Funktionen. Ginkgo und Gomega bieten eine umfangreiche Dokumentation, was sie ideal für Anfänger macht. Dank der vielseitigen Möglichkeiten bietet Ginkgo vielen Entwicklern die Möglichkeit, große Projekte zu realisieren.

Obwohl Unit Testing als eine grundlegende Form der Testausführung gilt, kann ihre Bedeutung nicht unterschätzt werden. Der Zweck von Unit Testing besteht darin, die Grundlage für qualitativ hochwertigen Softwarecode zu legen, der uns dabei hilft, die beste Performance für unser Softwaresystem zu gewährleisten. Es ist auch entscheidend, Unit Tests auch bei der Refactoring von Anwendungen oder der Einführung neuer Funktionen durchzuführen. Bei Yalantis führen wir Unit Tests für jedes Projekt durch und verfügen über umfangreiche Erfahrung in allen Arten von Softwaretests. Wenn Sie mit uns Ihr nächstes Projekt entwickeln, können Sie sicher sein, dass Ihr System gründlich getestet wird, um höchste Qualität zu erreichen.

Sie benötigen Qualitätskontrolltests?

Wir können helfen

Kontakt

Über den Autor

Foto von Yuliia Panasenko

Marktforscher

Yuliia bringt ihr scharfsinniges redaktionelles Auge und ihr tiefes Verständnis der Technologiebranche ein, um Inhalte zu liefern, die sowohl Fachleute als auch breitere Zielgruppen informieren, inspirieren und begeistern.