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: