Testabdeckung im Softwaretest: Wie man sie misst

⚡ Intelligente Zusammenfassung

Die Testabdeckung in der Softwareprüfung misst, wie viel einer Anwendung durch eine Reihe von Tests tatsächlich abgedeckt wird. Sie deckt ungetestete Anforderungen, Codepfade und Risiken auf, sodass Teams gezielte Testfälle hinzufügen und mit messbarer Sicherheit veröffentlichen können.

  • 🎯 Definition: Die Testabdeckungsberichte zeigen, welche Anforderungen, Funktionen und Codepfade bereits durch bestehende Tests abgedeckt werden.
  • 🧭 Arten: Aussage, Verzweigung, Bedingung, Pfad, Anforderungen und Risikoabdeckung beantworten jeweils eine andere Frage.
  • Code vs Test: Code Die Abdeckung misst die ausgeführten Quellcodezeilen, während die Testabdeckung den gesamten Testplan misst.
  • 🧮 Formel: Teilen Sie die Anzahl der ausgeführten Zeilen durch die Gesamtzahl der Zeilen und multiplizieren Sie das Ergebnis anschließend mit 100, um den Prozentsatz zu erhalten.
  • Techniken: Grenzwertanalyse, Entscheidungstabellen und Zustandsübergangstests erweitern die Abdeckung, ohne die Suite aufzublähen.
  • 📈 Optimierung: Ordnen Sie die Module nach Risiko, automatisieren Sie die Regressionstests und überprüfen Sie den Abdeckungstrend in jedem Sprint.
  • 🤖 KI-Unterstützung: KI-Tools generieren fehlende Unit-Tests und ordnen ungetestete Pfade nach Produktionsrisiko.

Was ist Testabdeckung?

Die Testabdeckung ist im Softwaretest als eine Metrik definiert, die den Umfang der von einer Testreihe durchgeführten Tests misst. Dazu gehört das Sammeln von Informationen darüber, welche Teile eines Programms beim Ausführen der Testsuite ausgeführt werden, um festzustellen, welche Zweige bedingter Anweisungen verwendet wurden.

Einfach ausgedrückt handelt es sich um eine Technik, mit der Sie sicherstellen können, dass Ihre Tests Ihren Code testen bzw. wie viel von Ihrem Code Sie durch die Ausführung des Tests beansprucht haben.

Was bewirkt die Testabdeckung?

In einem laufenden Projekt unterstützt die Testabdeckung vier praktische Aktivitäten:

  • Ermitteln des Bereichs einer Anforderung, der nicht durch eine Reihe von Testfällen umgesetzt wird
  • Hilft bei der Erstellung zusätzlicher Testfälle, um die Abdeckung zu erhöhen
  • Ermittlung eines quantitativen Maßes für die Testabdeckung, eine indirekte Methode zur Qualitätsprüfung
  • Identifizieren bedeutungsloser Testfälle, die die Abdeckung nicht erhöhen

Vorteile der Testabdeckung in der Softwareentwicklung

Diese Aktivitäten führen zu konkreten technischen Vorteilen.

  • Es kann die Qualität des Tests sicherstellen
  • Es kann dabei helfen, herauszufinden, welche Teile des Codes tatsächlich für die Veröffentlichung oder den Fix berührt wurden
  • Es kann alle Entscheidungspunkte und Pfade in Ihrer Anwendung ermitteln, die nicht getestet wurden, wodurch Sie die Testabdeckung erhöhen können.
  • Vorbeugen Defekt Leckage
  • Zeit, Umfang und Kosten können unter Kontrolle gehalten werden
  • Fehlerprävention in einem frühen Stadium des Projektlebenszyklus
  • Lücken in Anforderungen, Testfällen und Fehler auf Unit-Ebene und Code-Ebene können auf einfache Weise gefunden werden

Arten der Test-Abdeckung

Die Reichweite lässt sich nie in einer einzigen Zahl messen. Teams tracEs gibt mehrere Typen gleichzeitig, da jeder eine andere Frage zur selben Suite beantwortet. Die folgende Tabelle gruppiert die Typen, denen Sie am häufigsten begegnen.

Deckungstyp Was es misst am besten geeignet für
Aussage (Zeilenabdeckung) Die ausführbaren Zeilen werden mindestens einmal ausgeführt. Unit-Tests und Überprüfung von Legacy-Code
Zweig- oder Entscheidungsabdeckung Wahre und falsche Ergebnisse jeder Entscheidung Bedingte und Validierungslogik
Abdeckung der Bedingungen Jeder boolesche Teilausdruck kann als wahr oder als falsch interpretiert werden. Zusammengesetzte UND- oder ODER-Ausdrücke
Pfadabdeckung Einzigartige Routen, die durch ein Modul beschritten werden Sicherheitskritische und finanzielle Zahlungsströme
Funktionsabdeckung Funktionen oder Methoden, die von Tests aufgerufen werden API- und Serviceschichten
Anforderungen an die Abdeckung Anforderungen, die mindestens einem Test zugeordnet sind Akzeptanz und Konversiontractual sign-off
Risikoabdeckung Identifizierte Hochrisikogebiete durchgeführt Kurze Releasezyklen

Die ersten fünf Typen sind Maßnahmen auf Codeebene und gehören zu White-Box-TestsAnforderungen und Risikoabdeckung werden hingegen auf der Ebene des Testplans festgelegt.

Was sind die Hauptunterschiede zwischen Code Abdeckung und Testabdeckung?

Code Berichterstattung und Testabdeckung sind Messtechniken, mit denen Sie die Qualität Ihres Anwendungscodes beurteilen können.

Hier sind einige entscheidende Unterschiede zwischen den Ständen dieser Abdeckungsmethoden:

Kenngrößen Code Abdeckung Testabdeckung
Definition Code Der Begriff „Abdeckung“ wird verwendet, wenn Anwendungscode während der Ausführung einer Anwendung ausgeführt wird. Unter Testabdeckung versteht man den gesamten Testplan.
Ziel Code Abdeckungsmetriken können dem Team helfen, seine automatisierten Tests zu überwachen. Die Test-Abdeckung gibt Aufschluss darüber, in welchem ​​Ausmaß der schriftliche Code einer Anwendung getestet wurde.
Untertypen Code Die Abdeckung wird in Untertypen unterteilt, wie z. B. Anweisungsabdeckung, Bedingungsabdeckung und Zweigabdeckung. Toggle-Abdeckung, FSM-Abdeckung. Kein Untertyp der Testabdeckungsmethode.

Testabdeckungsformel

Um die Testabdeckung zu berechnen, müssen Sie die folgenden Schritte ausführen:

Schritt 1) Zu Zählen Y, die Gesamtzahl der Codezeilen in dem Softwarestück, das Sie testing

Schritt 2) Zu Zählen X, die Anzahl der Codezeilen, die alle Testfälle aktuell ausführen

Jetzt müssen Sie (X dividiert durch Y) multipliziert mit 100 ermitteln. Das Ergebnis dieser Berechnung ist Ihr Testabdeckungsprozentsatz.

Beispielsweise:

Wenn die Anzahl der Codezeilen in einer Systemkomponente 500 beträgt und die Anzahl der in allen vorhandenen Testfällen ausgeführten Zeilen 50 beträgt, dann ist Ihre Testabdeckung:

(50 / 500) * 100 = 10%   // executed lines divided by total lines

Beispiele für Testabdeckung

Der Prozentsatz allein ist nie die ganze Geschichte, wie die folgenden Beispiele zeigen.

Beispiel 1:

Wenn Sie beispielsweise ein Messer testen möchten, sollten Sie zunächst prüfen, ob es Gemüse oder Obst präzise schneidet. Dabei spielen aber auch andere Aspekte eine Rolle, etwa die einfache Handhabung.

Beispiel 2:

Wenn Sie beispielsweise die Notepad-Anwendung testen möchten, ist die Überprüfung ihrer grundlegenden Funktionen unerlässlich. Sie müssen jedoch auch andere Aspekte berücksichtigen, wie z. B. das erwartungsgemäße Verhalten der Anwendung in Kombination mit anderen Anwendungen, die intuitive Bedienbarkeit und das Fehlen von Abstürzen bei ungewöhnlichen Aktionen.

Testabdeckungstechniken

Beide Beispiele führen zum selben Schluss: Das Erreichen eines Testabdeckungsziels hängt weniger von der Anzahl der geschriebenen Tests ab, sondern vielmehr von der Wahl der richtigen Testdesigntechnik. Die folgenden Techniken erweitern die Testabdeckung und erhalten gleichzeitig die Testabdeckung aufrecht.ping Die Suite ist klein.

  • Grenzwertanalyse: Wählt Eingaben an den Rändern jedes gültigen Bereichs aus, wo die Fehler am stärksten gehäuft auftreten. Siehe Grenzwertanalyse für bearbeitete Fälle.
  • Äquivalenzzerlegung: Gruppiert Eingaben, die von der Anwendung identisch behandelt werden, sodass ein einzelner Fall sicher eine ganze Klasse von Werten repräsentieren kann.
  • Testen von Entscheidungstabellen: Umfasst Kombinationen von Bedingungen und deren erwartete Ergebnisse innerhalb eines einzigen Rasters.
  • Zustandsübergangstests: Prüft jeden gültigen und ungültigen Übergang zwischen Anwendungszuständen.
  • Basispfadprüfung: Leitet aus dem Kontrollflussgraphen die minimale Menge unabhängiger Pfade ab.
  • Risikobasiertes Testen: Die Funktionen werden nach ihrer geschäftlichen Auswirkung geordnet und die risikoreichsten zuerst behandelt.
  • Versuchsforschung: Deckt Lücken auf, die in inszenierten Fällen und Berichterstattungen nie sichtbar werden.

Wie kann eine umfassende Testabdeckung erreicht werden?

Sobald die Techniken ausgewählt sind, gewährleisten vier etablierte Routen die Netzabdeckung.

  • Die Testabdeckung kann durch die Anwendung statischer Überprüfungstechniken wie Peer-Reviews, Inspektionen und Komplettlösungen erreicht werden
  • Durch die Umwandlung der Ad-hoc-Fehler in ausführbare Testfälle
  • Auf Code- oder Unit-Test-Ebene kann die Testabdeckung durch den Einsatz der automatisierten Code-Coverage- oder Unit-Test-Coverage-Tools erreicht werden
  • Eine funktionale Testabdeckung kann mit Hilfe geeigneter Testmanagement-Tools erfolgen

Wie man die Testabdeckung verbessert

Die Sicherstellung der Testabdeckung ist der Ausgangspunkt; deren Erweiterung ist ein wiederholbarer Prozess. Führen Sie diese Schritte zu Beginn jedes Release-Zyklus durch.

  1. Als Ausgangspunkt dient der aktuelle Wert. Erstellen Sie einen Abdeckungsbericht und erfassen Sie die Abdeckung von Anweisungen, Verzweigungen und Anforderungen separat, damit Lücken pro Modul sichtbar bleiben und nicht in einem projektweiten Durchschnitt verborgen bleiben.
  2. Ordnen Sie Tests den Anforderungen zu. Build a tracEine Anforderungsmatrix, die jede Anforderung mit mindestens einem Testfall verknüpft. Jede leere Zeile stellt eine bestätigte Lücke dar, keinen Verdacht.
  3. Module nach Risiko einordnen. Zahlungs-, Authentifizierungs- und Datenmigrationslogik verdienen eine wesentlich ausführlichere Beschreibung als ein statischer Hilfebildschirm. Investieren Sie das Budget daher dort, wo ein Fehler am meisten schaden würde.
  4. Negative Fälle und Grenzfälle hinzufügen. Leere Eingabefelder, zu große Werte, Netzwerk-Timeouts und Berechtigungsfehler führen zu Verzweigungen, die bei Tests im Normalfall nie berührt werden.
  5. Die Testebenen werden übereinandergelegt. Kombinieren Unit-Test, Integrationstestsund durchgängige Prüfungen, da jede Ebene das abdeckt, was die anderen strukturell nicht können.
  6. Automatisieren Sie die Regressionssuite. Promodie stabilen Fälle in Automatisierungstests und führen Sie sie im Inneren aus CI / CD-Pipeline nach jedem Commit.
  7. Überflüssige Fälle aussortieren. Löschen Sie doppelte Tests, die zusätzliche Ausführungsminuten hinzufügen, ohne eine einzige nicht abgedeckte Zeile hinzuzufügen.
  8. RevBeobachte den Trend bei jedem Sprint. Track-Abdeckung neben DefektdichteSteigende Leckagen bei gleichzeitig flacher Abdeckung sind ein frühes Warnsignal für einen toten Winkel.

⚠️ Warnung: 100 Prozent sollten nicht als Ziel angesehen werden. Eine Testsuite mit 85 Prozent strengen Zusicherungen schützt eine Veröffentlichung weitaus besser als 95 Prozent oberflächliche Prüfungen, die Code ausführen, ohne das Ergebnis zu überprüfen.

Nachteile der Testabdeckung

Der Versicherungsschutz bleibt wertvoll, hat aber Grenzen, die vor der Angabe eines Prozentsatzes erwähnt werden sollten.

  • Die meisten Aufgaben in der Testabdeckung erfolgen manuell, da es keine Tools zur Automatisierung gibt. Daher ist die Analyse der Anforderungen und die Erstellung von Testfällen mit großem Aufwand verbunden.
  • Mit der Testabdeckung können Sie Features zählen und diese dann anhand mehrerer Tests messen. Es gibt jedoch immer Raum für Beurteilungsfehler.

Häufig gestellte Fragen

Die meisten Teams streben 70 bis 80 Prozent Testtiefe als realistisches Ziel an, bei sicherheitskritischen Modulen sogar 90 Prozent oder mehr. 100 Prozent anzustreben, lohnt sich selten. Konzentrieren Sie sich daher auf die Testtiefe in risikoreichen Logikbereichen, anstatt die Tests gleichmäßig über den gesamten Code zu verteilen.

Nein. Eine vollständige Testabdeckung beweist zwar, dass jedes Element ausgeführt wurde, aber nicht, dass jeder Wert, jede Anforderung oder jeder Benutzerablauf validiert wurde. Fehlende Anforderungen, schwache Zusicherungen und nicht-funktionale Fehler wie langsame Antwortzeiten bleiben selbst bei einer Testsuite mit 100-prozentiger Abdeckung unentdeckt.

Ein Abdeckungsbericht listet abgedeckte und nicht abgedeckte Zeilen, Zweige und Funktionen pro Datei auf, wobei die Prozentwerte nach Modul und Projekt zusammengefasst werden. Tools wie z. B. JaCoCo Markieren Sie auch teilweise abgedeckte Äste, da sich diese Lücken in der Regel am schnellsten schließen.

Die KI analysiert Quellcode, Ausführungshistorie und Fehlerdaten, um ungetestete, risikoreiche Pfade zu identifizieren und schlägt anschließend Lösungen vor, um diese zu beheben. Sie priorisiert außerdem die auszuführenden Tests und verkürzt so die Feedback-Phase, ohne die Testabdeckung zu beeinträchtigen.

Ja. Werkzeuge wie zum Beispiel Diffblau Automatische Unit-Tests für nicht abgedeckte Logik und generative Modelle wandeln Anforderungen in ausführbare Fälle um. Menschliche Überprüfung bleibt unerlässlich, da generierte Zusicherungen auch ohne Prüfung des sinnvollen Verhaltens erfolgreich sein können.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: