Holen Sie sich die UMFANGREICHSTE Abdeckung für die Einhaltung von MISRA C! Erfahren Sie mehr >>

Holen Sie sich mit der Laufzeitanalyse weitere Vorteile von Unit-Tests

Von Kapil Bhandari

2. November 2018

5  min lesen

Um die Vorteile von Unit-Tests zu realisieren, können Sie einen Unit-Test während seiner Ausführung über eine Laufzeitanalyse beobachten. Die Laufzeitanalyse während der Ausführung von Komponententests ist entscheidend für die Verbesserung der Testeffizienz und -effektivität.

Unit-Tests sind eine bewährte Methode, um einzelne Einheiten/Komponenten einer Software zu testen, aber es kann für Java-Entwickler mühsam und kostspielig sein. Es ist mühsam, jede Unit mit manuellen Behauptungen auf korrektes Verhalten zu testen und jede Methode durch Spott zu isolieren, und Unit-Tests selbst sind anfällig für Fehler und missverstandenes Verhalten. Um diese Situation zu verbessern, können Sie ein Laufzeitanalysetool verwenden, um den Daten- und Kontrollfluss sowie externe Abhängigkeiten zu erkennen und die Testcodeabdeckung zu berechnen.

Mit diesen gesammelten Daten aus der Laufzeitanalyse kann eine Enterprise-Lösung wie Parasoft Jtest kann den Entwickler auffordern, wie die Tests verbessert werden können, indem automatisch Behauptungen für korrektes Verhalten und Methoden zum Verspotten empfohlen werden, um die Testisolation zu verbessern. Diese Integration zwischen automatischer Unit-Test-Generierung und Laufzeitanalyse reduziert den manuellen Eingriff, der für Unit-Tests für Java erforderlich ist.

Vorteile von Unit-Tests

Unit-Tests sind eine bekannte Praxis, deren Implementierung jedoch in vielen Projekten verbessert werden muss. Gut durchgeführte Unit-Tests verbessern die Agilität agiler Prozesse, erhöhen Qualität und Sicherheit und bringen langfristige Kosteneinsparungen.

Ungeachtet dieser Vorteile können Entwickler trotz des Wunsches nach besseren Ergebnissen immer noch Probleme mit Unit-Tests haben. Der Zeit- und Arbeitsaufwand für die Erstellung und Wartung von Tests kann zu hoch sein, um einen zunehmenden Testaufwand zu rechtfertigen. Testsuiten sind häufig aufgrund der schlechten Isolation von Einheiten / Objekten von Abhängigkeiten anfällig. Das richtige Verspotten von Abhängigkeiten wird zum Fluch der Softwaretester, ebenso wie das Erstellen der Aussagen, die zur Bestimmung der korrekten Programmlogik erforderlich sind. Selbst die Parametrisierung von Tests für Szenarien kann langwierig und zeitaufwändig sein.

Softwareentwicklungsteams müssen diese Probleme mit der Erstellung, Isolierung und Wartung von Tests lösen, wenn sie die Vorteile gründlicher Komponententests nutzen möchten. Die Antwort beginnt mit Testautomatisierungstools, aber es reicht nicht aus, nur die Ausführung von Tests zu automatisieren und Ergebnisse zu sammeln. Die Laufzeitanalyse, das Beobachten einer laufenden ausführbaren Datei und das Aufzeichnen von Schlüsselmetriken, ist eine innovative Methode, um die Erstellung, das Verspotten und die Teststabilität von Komponententests zu verbessern.

Die Laufzeitanalyse kann das Testen von Einheiten verbessern

In den meisten Fällen halten Entwickler die Laufzeitanalyse in frühen Phasen des Komponententests nicht für wichtig. Die meisten Tools werden zum Abfangen von Fehlern verwendet, die beim Testen von Einheiten übersehen wurden, oder einfach zum Berechnen der Codeabdeckung. Obwohl diese Vorteile wichtig sind, kann die Laufzeitanalyse auch die Ausführung der ersten Iteration eines Komponententests beobachten, um Empfehlungen zur Verbesserung des Tests abzugeben und Änderungen an der Testlaufzeitumgebung zu erkennen, die die Teststabilität beeinträchtigen.

Test-Frameworks wie JUnit erzeugen spärlichen Code, der weiteren Entwickler-Input erfordert. Diese Arbeit ist langwierig und kann daher automatisiert werden, um mehr Details auf der Grundlage der beobachteten Programmlogik einzugeben. Die folgende Java-Unit-Test-Beispiel kann automatisch von Parasoft Jtest generiert werden:

In ähnlicher Weise für Unit-Tests mit parametrisierten Eingängen, die unten gezeigt werden:

Da die erstellten Tests von Anfang an ausführbar sind, können sie durch Laufzeitanalyse sowohl für die Ergebnisse als auch für den Ausführungsfluss beobachtet werden. Beispielsweise kann ein Test aufgrund einer ausgelösten Ausnahme (siehe unten) fehlschlagen.

Erkennen von Abhängigkeiten und Verspotten mit der Laufzeitanalyse

Darüber hinaus beobachten Laufzeit-Tools den Ausführungspfad in Abhängigkeiten und empfehlen potenzielle Mocks, um die Isolation des Tests zu erhöhen. Obwohl die visuelle Überprüfung eines zu testenden Objekts seine Abhängigkeiten aufdeckt, erspart die Automatisierung der Erkennung und Verspottung dieser Abhängigkeiten viel mühsame und fehleranfällige Arbeit.

Im folgenden Beispiel bietet Parasoft Jtest dem Entwickler die Wahl, was basierend auf der Ausführungsspur des Komponententests verspottet werden soll:

In diesem Fall wird durch Hinzufügen eines verspottbaren Methodenmusters die Methode zu einer Liste von Verspottungen hinzugefügt, die von einem Verspottungsframework wie PowerMock verarbeitet werden sollen.

Das Verspotten statischer Konstruktoren ist ebenfalls möglich, wie unten gezeigt.

Verbessern der Testtreue mit Laufzeitanalyse

Mit vollständiger Kenntnis des Ausführungsflusses und den in Methodenaufrufen verwendeten Parametern kann die Laufzeitanalyse verwendet werden, um dem Entwickler nützliche Empfehlungen zur Verbesserung des Testcodes zu geben. Obwohl Zusicherungen statisch bereitgestellt werden, werden sie beim Erstellen eines Tests möglicherweise nicht aktiviert oder korrigiert. Bei der Testausführung lösen fehlgeschlagene und fehlende Zusicherungen Warnungen aus, die dann zu Empfehlungen zur Behebung des Problems führen.

Nachdem Sie beispielsweise einen neuen Test erstellt haben und keine empfohlenen Aussagen kommentiert wurden, wird Folgendes angezeigt:

Wenn beispielsweise eine Zusicherung fehlschlägt, wird Folgendes angezeigt:

Was auch immer passiert, es ist das ständige Feedback über Korrekturmaßnahmen für Behauptungen, das die Schleife bei der Testerstellung schließt, um den Komponententest abzuschließen. Wenn Änderungen an der zu testenden Einheit geändert werden, können diese Änderungen auf die gleiche Weise behandelt werden, wodurch die erforderliche manuelle Testwartung kontinuierlich reduziert wird.

Verbesserung der Teststabilität durch Laufzeitanalyse

Die Laufzeitanalyse kann auch Änderungen in der Testumgebung während der Ausführung erkennen, die sich auf die Fähigkeit auswirken, eine identische Testumgebung für nachfolgende Tests wiederherzustellen. Tests, die auf einmal bestehen und später fehlschlagen, können eine große Ursache für Frustration und Zeit- und Arbeitsverlust sein. Einige Beispiele für Instabilitäten, die Sie mit der Laufzeitanalyse erkennen können, sind:

  • Eine geänderte Systemeigenschaft während eines Tests, der nicht in seinen ursprünglichen Zustand zurückgekehrt ist. Ein nachfolgender Test kann sich auf diese Eigenschaft stützen.
  • Zusätzliche Ausführungsthreads im Hintergrund, die einen Testlauf stören können.
  • Eine neue Dateierstellung während der Testausführung, die sich auf nachfolgende Läufe auswirken kann, wenn sie sich auf die Datei und ihren Inhalt stützen.
  • Geänderte statische Felder Dies könnte sich auf zukünftige Tests auswirken, die dieselben Felder verwenden.

Es ist wichtig, dass jede Testausführung einen identischen Ausgangspunkt hat, um zuverlässige Ergebnisse zu gewährleisten. Durch das Verhindern von Testinstabilität mit Laufzeiterkennung werden Rätselraten aus der Test-Debug-Phase entfernt.

Sie sehen also, dass die Laufzeitanalyse nicht nur zur Berechnung der Codeabdeckung dient. Die Laufzeitanalyse während der Testausführung ist entscheidend für die Verbesserung der Testeffizienz und -effektivität. Das Überwachen von Ausführungspfaden bietet Informationen zu Abhängigkeiten, um den Umgang mit Abhängigkeiten und das Verspotten zu verbessern. Behauptungen können überwacht werden und automatische Empfehlungen kann helfen, die Testtreue zu verbessern. Das Erkennen von Änderungen in der Laufzeit-Testumgebung, die sich auf die Teststabilität auswirken, beseitigt Frustrationen und reduziert die Debugging-Zyklen für Testcode.

Erstellen Sie mit Parasoft Jtest Unit Test Assistant für Java Apps in kürzerer Zeit bessere Komponententests

Von Kapil Bhandari

Kapil ist Produktmanager bei Parasoft und konzentriert sich auf Parasoft Jtest. Kapil hatte verschiedene technische Positionen inne, die vom Softwareentwickler bis zum Entwicklungsleiter reichten, bevor er zum Produktmanagement wechselte.

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.