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.

Was ist Unit Testing?

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-Teststufen
Unit-Teststufen
  1. Unit-Tests helfen, Fehler frühzeitig im Entwicklungszyklus zu beheben und Kosten zu sparen.
  2. Es hilft den Entwicklern, die Testcodebasis zu verstehen und ermöglicht es ihnen, schnell Änderungen vorzunehmen
  3. Gute Unit-Tests dienen der Projektdokumentation
  4. 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
  • Automatisiert

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. Sie würden later Kommentieren Sie den Testcode aus und entfernen Sie ihn schließlich, wenn die Anwendung bereitgestellt wirdyed.
  • 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 des Unit-Tests ist 1) Testfälle erstellen 2) Überprüfen/Überarbeiten 3) Baseline 4) Testfälle ausführen.

Unit-Testtechniken

Das Unit-Testtechniken werden hauptsächlich in drei Teile kategorisiert, nämlich Schwarz box Tests, die das Testen der Benutzeroberfläche sowie der Ein- und Ausgabe umfassen, White box Tests, bei denen das funktionale Verhalten der Softwareanwendung und von Gray getestet wird box Tests, die zur Ausführung von Testsuiten, Testmethoden, Testfällen und zur Durchführung von Risikoanalysen verwendet 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:

  1. Junit: Junit ist ein kostenloses Testtool für die Programmiersprache Java. Es stellt Behauptungen zur Identifizierung der Testmethode bereit. Dieses Tool testet zunächst die Daten und fügt sie dann in den Code ein.
  2. 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.
  3. 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.
  4. EMMA: EMMA ist ein Open-Source-Toolkit zum Analysieren und Berichten von in Java geschriebenem Code. Emma unterstützt Coverage-Typen wie Methode, Linie, Basisblock. Es basiert auf Java, ist also nicht von externen Bibliotheken abhängig und kann auf den Quellcode zugreifen.
  5. 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-Testing-Tool für Ihre Programmieranforderungen finden, unabhängig von der Sprache, die Sie verwenden.

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:

UNIT-Test-Mythos

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.
  • Unit-Tests ermöglichen es dem Programmierer, Code auf einmal umzugestalten later Datum und stellen Sie sicher, dass das Modul noch ordnungsgemäß 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.

Best Practices 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.

Best Practices für Unit-Tests

Zusammenfassung

  • Unter UNIT TESTING versteht man eine Art Softwaretest, bei dem einzelne Einheiten oder Komponenten einer Software getestet werden.
  • Wie Sie sehen, kann beim Unit-Testen viel Aufwand betrieben werden. Es kann com seinplex oder eher einfach, abhängig von der zu testenden Anwendung und den Teststrategien, Tools und philoSophies verwendet. Unit-Tests sind auf einer bestimmten Ebene immer notwendig. Das ist eine Gewissheit.