Was ist Unit Testing?
Was ist Unit Testing?
Unit Tests ist eine Art Softwaretest, bei dem einzelne Einheiten oder Komponenten einer Software getestet werden. Der Zweck besteht darin, zu überprüfen, ob jede Einheit des Softwarecodes wie erwartet funktioniert. Unit-Tests werden während der Entwicklung (Codierungsphase) einer Anwendung von den Entwicklern durchgeführt. Unit-Tests isolieren einen Codeabschnitt und überprüfen seine Richtigkeit. Eine Einheit kann eine einzelne Funktion, Methode, Prozedur, ein Modul oder ein Objekt sein.
Im SDLC-, STLC- und V-Modell ist Unit-Test die erste Teststufe, die vor dem Integrationstest durchgeführt wird. Unit-Tests sind ein ProblemBox Testtechnik, die normalerweise vom Entwickler durchgeführt wird. Allerdings führen QA-Ingenieure in der Praxis aufgrund von Zeitmangel oder der Zurückhaltung der Entwickler gegenüber Tests auch Unit-Tests durch.
Video-Erklärung zum Unit-Test
Warum Unit-Tests durchführen?
Unit Tests Dies ist wichtig, da Softwareentwickler manchmal versuchen, durch minimale Unit-Tests Zeit zu sparen. Dies ist ein Mythos, da unangemessene Unit-Tests zu hohen Kosten führen Defekt Fixierung während Systemtest, Integrationstests und sogar Betatests nach der Erstellung der Anwendung. Wenn in der frühen Entwicklung ordnungsgemäße Unit-Tests durchgeführt werden, spart das am Ende Zeit und Geld.
Hier sind die Hauptgründe für die Durchführung von Unit-Tests in der Softwareentwicklung:
- Unit-Tests helfen, Fehler frühzeitig im Entwicklungszyklus zu beheben und Kosten zu sparen.
- Es hilft den Entwicklern, die Testcodebasis zu verstehen und ermöglicht es ihnen, schnell Änderungen vorzunehmen
- Gute Unit-Tests dienen der Projektdokumentation
- Unit-Tests helfen bei der Wiederverwendung von Code. Migrieren Sie Ihren beiden Code und Ihre Tests zu Ihrem neuen Projekt. Optimieren Sie den Code, bis die Tests erneut ausgeführt werden.
So führen Sie Unit-Tests durch
Um Unit-Tests auszuführen, schreiben Entwickler einen Codeabschnitt, um eine bestimmte Funktion in einer Softwareanwendung zu testen. Entwickler können diese Funktion auch isolieren, um sie strenger zu testen, wodurch unnötige Abhängigkeiten zwischen der getesteten Funktion und anderen Einheiten aufgedeckt werden, sodass die Abhängigkeiten beseitigt werden können. Entwickler verwenden im Allgemeinen UnitTest-Framework automatisierte Testfälle für Unit-Tests zu entwickeln.
Es gibt zwei Arten von Unit-Tests
- Manuell
- Automated
Unit-Tests werden üblicherweise automatisiert, können aber dennoch manuell durchgeführt werden. Software Engineering bevorzugt nicht das eine gegenüber dem anderen, aber die Automatisierung wird bevorzugt. Bei einem manuellen Ansatz für Unit-Tests kann ein Schritt-für-Schritt-Anleitungsdokument zum Einsatz kommen.
Unter dem automatisierten Ansatz-
- Ein Entwickler schreibt einen Codeabschnitt in die Anwendung, nur um die Funktion zu testen. Später kommentiert er den Testcode aus und entfernt ihn schließlich, wenn die Anwendung bereitgestellt wird.
- Ein Entwickler könnte die Funktion auch isolieren, um sie gründlicher zu testen. Hierbei handelt es sich um eine gründlichere Unit-Test-Praxis, bei der Code kopiert und in die eigene Testumgebung eingefügt wird als in die natürliche Umgebung. Durch die Isolierung des Codes können unnötige Abhängigkeiten zwischen dem getesteten Code und anderen Einheiten oder Datenräumen aufgedeckt werden im Produkt. Diese Abhängigkeiten können dann beseitigt werden.
- Ein Programmierer verwendet im Allgemeinen ein UnitTest Framework, um automatisierte Testfälle zu entwickeln. Mithilfe eines Automatisierungsframeworks codiert der Entwickler Kriterien in den Test, um die Richtigkeit des Codes zu überprüfen. Während der Ausführung der Testfälle protokolliert das Framework fehlgeschlagene Testfälle. Viele Frameworks kennzeichnen diese auch automatisch und melden sie zusammenfassend fehlgeschlagene Testfälle. Abhängig von der Schwere eines Fehlers kann das Framework nachfolgende Tests stoppen.
- Der Workflow beim Unit-Testing ist 1) Testfälle erstellen 2) RevAnsicht/Überarbeitung 3) Basislinie 4) Testfälle ausführen.
Unit-Testtechniken
Die Unit-Testtechniken werden hauptsächlich in drei Teile unterteilt: Black-Box-Tests, bei denen die Benutzeroberfläche zusammen mit der Eingabe und Ausgabe getestet wird, White-Box-Tests, bei denen das funktionale Verhalten der Softwareanwendung getestet wird, und Gray-Box-Tests, bei denen Test-Suites, Testmethoden und Testfälle ausgeführt und Risikoanalysen durchgeführt werden.
Im Folgenden sind die beim Unit-Test verwendeten Code-Coverage-Techniken aufgeführt:
- Aussagedeckung
- Entscheidungsabdeckung
- Zweigstellenabdeckung
- Zustandsabdeckung
- Finite-State-Machine-Abdeckung
Weitere Informationen finden Sie unter https://www.guru99.com/code-coverage.html
Beispiel für Unit-Tests: Scheinobjekte
Bei Unit-Tests werden Scheinobjekte erstellt, um Codeabschnitte zu testen, die noch nicht Teil einer vollständigen Anwendung sind. Scheinobjekte ersetzen die fehlenden Teile des Programms.
Beispielsweise könnten Sie über eine Funktion verfügen, die Variablen oder Objekte benötigt, die noch nicht erstellt wurden. Bei Unit-Tests werden diese in Form von Scheinobjekten berücksichtigt, die ausschließlich für den Zweck der Unit-Tests erstellt werden, die für diesen Codeabschnitt durchgeführt werden.
Unit-Testing-Tools
Es stehen mehrere automatisierte Unit-Test-Software zur Verfügung, die Unit-Tests beim Softwaretesten unterstützen. Im Folgenden stellen wir Ihnen einige Beispiele vor:
- Juni: Junit ist ein kostenloses Testtool für Java Programmiersprache. Es stellt Behauptungen bereit, um Testmethoden zu identifizieren. Dieses Tool testet zuerst die Daten und fügt sie dann in den Code ein.
- NUnit: NUnit ist ein weit verbreitetes Unit-Testing-Framework für alle .net-Sprachen. Es handelt sich um ein Open-Source-Tool, das das manuelle Schreiben von Skripten ermöglicht. Es unterstützt datengesteuerte Tests, die parallel ausgeführt werden können.
- JMockit: JMockit ist ein Open-Source-Unit-Test-Tool. Es handelt sich um ein Code-Coverage-Tool mit Zeilen- und Pfadmetriken. Es ermöglicht das Verspotten der API mit Aufzeichnungs- und Überprüfungssyntax. Dieses Tool bietet Leitungsabdeckung, Pfadabdeckung und Datenabdeckung.
- EMMA: EMMA ist ein Open-Source-Toolkit zur Analyse und Berichterstellung von Code, der in Java Sprache. Emma unterstützt Coverage-Typen wie Methode, Zeile, Basisblock. Es ist Java-basiert, sodass es keine Abhängigkeiten von externen Bibliotheken hat und auf den Quellcode zugreifen kann.
- PHPUnit: PHPUnit ist ein Unit-Test-Tool für PHP-Programmierer. Es werden kleine Teile des Codes benötigt, die als Einheiten bezeichnet werden, und jede davon einzeln getestet. Das Tool ermöglicht es Entwicklern auch, vordefinierte Assertionsmethoden zu verwenden, um sicherzustellen, dass sich ein System auf eine bestimmte Art und Weise verhält.
Dies sind nur einige der verfügbaren Unit-Test-Tools. Es gibt noch viel mehr, insbesondere für C-Sprachen und Java, aber Sie werden sicher ein Unit-Test-Tool für Ihre Programmieranforderungen finden, unabhängig von der von Ihnen verwendeten Sprache.
Testgetriebene Entwicklung (TDD) und Unit-Tests
Unit-Tests in TDD erfordern einen umfangreichen Einsatz von Test-Frameworks. Um automatisierte Unit-Tests zu erstellen, wird ein Unit-Test-Framework verwendet. Unit-Testing-Frameworks gibt es nicht nur für TDD, aber sie sind für TDD unerlässlich. Im Folgenden sehen wir uns einiges an, was TDD in die Welt des Unit-Tests bringt:
- Tests werden vor dem Code geschrieben
- Verlassen Sie sich stark auf Test-Frameworks
- Alle Klassen in den Anwendungen werden getestet
- Eine schnelle und einfache Integration wird ermöglicht
Unit-Testing-Mythos
Mythos: Es braucht Zeit und ich bin immer überlastet
Mein Code ist absolut solide! Ich brauche keine Unit-Tests.
Mythen sind von Natur aus falsche Annahmen. Diese Annahmen führen zu einem Teufelskreis wie folgt:
Die Wahrheit ist, dass Unit-Tests die Entwicklungsgeschwindigkeit erhöhen.
Programmierer glauben, dass Integrationstests alle Fehler abfangen und den Komponententest nicht ausführen. Sobald Einheiten integriert sind, dauert es sehr lange, bis sehr einfache Fehler, die in getesteten Einheiten leicht gefunden und behoben werden könnten, aufgespürt und behoben werden können.
Unit-Testing-Vorteil
- Entwickler, die erfahren möchten, welche Funktionalität eine Einheit bietet und wie sie verwendet wird, können sich die Komponententests ansehen, um ein grundlegendes Verständnis der Einheiten-API zu erlangen.
- Durch Unit-Tests kann der Programmierer den Code zu einem späteren Zeitpunkt umgestalten und sicherstellen, dass das Modul immer noch korrekt funktioniert (d. h. Regressionstests). Das Verfahren besteht darin, Testfälle für alle Funktionen und Methoden zu schreiben, sodass immer dann, wenn eine Änderung einen Fehler verursacht, dieser schnell identifiziert und behoben werden kann.
- Aufgrund des modularen Charakters des Unit-Tests können wir Teile des Projekts testen, ohne auf die Fertigstellung anderer warten zu müssen.
Nachteile von Unit-Tests
- Man kann nicht erwarten, dass Unit-Tests jeden Fehler in einem Programm erkennen. Selbst in den trivialsten Programmen ist es nicht möglich, alle Ausführungspfade auszuwerten
- Unit-Tests konzentrieren sich naturgemäß auf eine Codeeinheit. Daher können keine Integrationsfehler oder allgemeine Fehler auf Systemebene erkannt werden.
Es wird empfohlen, Unit-Tests in Verbindung mit anderen Testaktivitäten zu verwenden.
Bewährte Methoden für Unit-Tests
- Unit-Testfälle sollten unabhängig sein. Im Falle von Erweiterungen oder Änderungen der Anforderungen sollten Unit-Testfälle nicht betroffen sein.
- Testen Sie jeweils nur einen Code.
- Befolgen Sie klare und einheitliche Namenskonventionen für Ihre Unit-Tests
- Im Falle einer Codeänderung in einem Modul stellen Sie sicher, dass eine entsprechende Einheit vorhanden ist Testfall für das Modul, und das Modul besteht die Tests, bevor es die Implementierung ändert
- Während des Unit-Tests festgestellte Fehler müssen behoben werden, bevor mit der nächsten Phase in SDLC fortgefahren wird
- Nehmen Sie einen „Test als Ihr Code“-Ansatz an. Je mehr Code Sie schreiben, ohne ihn zu testen, desto mehr Pfade müssen Sie auf Fehler prüfen.
Zusammenfassung
- Unter UNIT TESTING versteht man eine Art Softwaretest, bei dem einzelne Einheiten oder Komponenten einer Software getestet werden.
- Wie Sie sehen, kann Unit-Testing eine Menge Arbeit erfordern. Je nach getesteter Anwendung und den verwendeten Teststrategien, -tools und -philosophien kann es komplex oder eher einfach sein. Unit-Testing ist auf einer gewissen Ebene immer notwendig. Das ist sicher.