Was ist Fehlerdichte? Formel zur Berechnung mit Beispiel

โšก Intelligente Zusammenfassung

Die Fehlerdichte misst die Anzahl der bestรคtigten Fehler in einem Softwaremodul geteilt durch die GrรถรŸe dieses Moduls, รผblicherweise ausgedrรผckt pro tausend Codezeilen, und signalisiert, ob ein Build zur Verรถffentlichung bereit ist.

  • ๐Ÿ”˜ Formel: Die Defektdichte entspricht der Anzahl der bestรคtigten Defekte geteilt durch die GrรถรŸe der Freisetzung, die meist in KLOC gemessen wird.
  • โ˜‘๏ธ Ausgearbeitetes Beispiel: Vierzig Fehler in dreitausend Codezeilen ergeben 0.0133 Fehler pro LOC bzw. 13.333 Fehler pro KLOC.
  • โœ… Benchmark: Ein Fehler pro tausend Codezeilen gilt allgemein als Zeichen fรผr eine gute Projektqualitรคt.
  • ๐Ÿงช Einflรผsse: Code Komplexitรคt, Regeln zur Fehlerzรคhlung, Messfenster und Teamkompetenz beeinflussen die Zahl.
  • ๐Ÿ“Š Vergleich: Fehlerleckage, Effizienz der Fehlerbeseitigung und Schweregradindizes beantworten Fragen, die die Fehlerdichte allein nicht beantworten kann.
  • โš ๏ธ Vorsicht: Ein niedriger Wert kann eher auf mangelhafte Tests als auf sauberen Code hindeuten, daher ist diese Metrik nie fรผr sich allein zu betrachten.

Defektdichte

Was ist Fehlerdichte?

Defektdichte Die Fehlerquote gibt die Anzahl der in einer Software oder einem Modul wรคhrend eines bestimmten Betriebs- oder Entwicklungszeitraums bestรคtigten Fehler an, geteilt durch die GrรถรŸe dieser Software oder dieses Moduls. Sie ermรถglicht es einem Team zu entscheiden, ob eine Software zur Verรถffentlichung bereit ist.

Die Fehlerdichte wird pro tausend Codezeilen (KLOC) angegeben. Da die Anzahl grรถรŸenbezogen normalisiert wird, lassen sich ein groรŸes Modul mit vielen Fehlern und ein kleines Modul mit wenigen Fehlern auf derselben Ebene vergleichen, was mit einer reinen Fehlerzรคhlung nicht mรถglich ist.

Diese Kennzahl wird normalerweise am Ende eines Testzyklus gemeldet und tracked release over release, so it is inside the rest of the Fehlermanagementprozess in England, Lebenszyklus von Softwaretests.

Wie berechnet man die Defektdichte?

Eine Formel zur Messung der Fehlerdichte:

Defect Density = Defect count/size of the release

Die GrรถรŸe eines Releases kann in Zeilen von Code (LOC) gemessen werden.

Drei Details entscheiden darรผber, ob das Ergebnis รผberhaupt eine Aussage hat:

  • Die GrรถรŸenangabe. LOC und KLOC sind die gebrรคuchlichsten Einheiten. Funktionspunkte werden verwendet, wenn Teams ein GrรถรŸenmaรŸ wรผnschen, das sich nicht mit der Programmiersprache รคndert; manche Teams normalisieren stattdessen nach Modul oder Komponente.
  • Was gilt als Mangel? Nur bestรคtigte Fehler gehรถren in den Zรคhler. Duplikate, abgelehnte Berichte und Verbesserungsvorschlรคge mรผssen ausgeschlossen werden, da sonst die Zahl ohne Verbesserung der Codequalitรคt unnรถtig ansteigt.
  • Das Messfenster. Fehler, die wรคhrend der Systemtests festgestellt wurden, wรคhrend Regressionstestsund nach der Verรถffentlichung werden unterschiedliche Dinge beschrieben, daher muss der Zeitraum mit der Zahl angegeben werden.

Beispiel fรผr die Fehlerdichte

Angenommen, Ihr Softwareprodukt enthรคlt drei Module. In jedem Modul wurden die folgenden Fehler entdeckt:

  • Modul 1 = 10 Fehler
  • Modul 2 = 20 Fehler
  • Modul 3 = 10 Fehler

Gesamtzahl der Kรคfer = 10+20+10 = 40

Die Gesamtanzahl der Codezeilen fรผr jedes Modul betrรคgt:

  • Modul 1 = 1000 LOC
  • Modul 2 = 1500 LOC
  • Modul 3 = 500 LOC

Gesamtzeile Code = 1000+1500+500 = 3000

Die Fehlerdichte wird wie folgt berechnet:

Defect Density = 40/3000 = 0.013333 defects/loc = 13.333 defects/Kloc

Die gleiche Berechnung pro Modul ist aussagekrรคftiger als die kombinierte Zahl, wie die folgende Grafik zeigt: Modul 2 weist 20 Fehler in 1500 LOC auf, Modul 3 hingegen nur 10 Fehler in 500 LOC. Somit ist Modul 3 das dichter bestรผckte und risikoreichere der beiden, obwohl es weniger Fehler meldet.

Balkendiagramm zum Vergleich der Fehleranzahl und der Codezeilen dreier Module, die bei der Berechnung der Fehlerdichte verwendet wurden.

Ein Standard fรผr die Defektdichte

Es gibt keinen festgelegten Standard fรผr die Defektdichte. Studien deuten darauf hin, dassโ€ฆ Defekt Die Anzahl der Codezeilen pro tausend Zeilen wird allgemein als Zeichen guter Projektqualitรคt angesehen, und diese Zahl ist die am hรคufigsten zitierte Faustregel in der Branche.

Die Erwartungshaltung variiert je nach Anwendungsbereich. Sicherheitskritische und regulierte Software, wie beispielsweise Avionik und Medizinprodukte, unterliegt einem Zielwert von deutlich unter einem Fehler pro KLOC, wรคhrend gรคngige Geschรคftsanwendungen diesen Wert regelmรครŸig รผberschreiten. Da Zรคhlregeln, GrรถรŸeneinheiten und Testtiefe zwischen Organisationen variieren, ist ein Benchmark aus einer verรถffentlichten Studie nur mit einem Projekt vergleichbar, das nach denselben Kriterien gemessen wird. Die praktische Anwendung dieser Kennzahl beschrรคnkt sich daher auf interne Zwecke: Man vergleicht eine neue Version mit der vorherigen Version desselben Produkts, die nach denselben Kriterien gemessen wurde.

Faktoren, die die Defektdichte beeinflussen

Dieselbe Codebasis kann je nach folgenden Faktoren sehr unterschiedliche Fehlerdichtewerte erzeugen:

  • Code Komplexitรคt. Tief verschachtelte Logik und hohe zyklomatische Komplexitรคt erzeugen mehr Fehler pro Zeile als unkomplizierter Code.
  • Die Art der berรผcksichtigten Defekte. Zรคhlen Sie nur funktionale Mรคngel oder beziehen Sie auch Benutzerfreundlichkeit, Dokumentation und nicht funktionsfรคhig Die Ergebnisse verรคndern den Zรคhler erheblich.
  • Die betrachtete Zeitdauer. Ein Wert, der รผber einen zweiwรถchigen Testzyklus ermittelt wurde, ist nicht vergleichbar mit einem Wert, der รผber sechs Monate Produktionsnutzung ermittelt wurde.
  • Entwickler- und Testerfรคhigkeiten. Erfahrene Entwickler bauen weniger Fehler ein, und erfahrene Tester finden mehr der vorhandenen Fehler, sodass die beiden Effekte die Kennzahl in entgegengesetzte Richtungen ziehen.
  • Testabdeckung. Mรคngel, nach denen nie gesucht wurde, werden nie gezรคhlt, daher Testabdeckung begrenzt stillschweigend, wie hoch die gemessene Dichte maximal sein kann.

Fehlerdichte im Vergleich zu anderen Fehlerkennzahlen

Die Fehlerdichte beantwortet eine Frage: Wie konzentriert sind die bekannten Fehler? Drei ergรคnzende Kennzahlen beantworten die Fragen, die sie nicht beantworten kann, und die meisten Teams berichten diese gemeinsam.

Metrisch Was es misst Fragen, die es beantwortet
Defektdichte Bestรคtigte Fehler nach GrรถรŸe aufgeteilt (KLOC oder Funktionspunkte) Welche Module weisen im Verhรคltnis zu ihrer GrรถรŸe die meisten Defekte auf?
Defektleckage Anteil der nach der Verรถffentlichung festgestellten Mรคngel an allen Mรคngeln Wie viel davon entging dem Testprozess und erreichte die Nutzer?
Effizienz der Fehlerbeseitigung Vor der Verรถffentlichung behobene Mรคngel als Anteil aller Mรคngel Wie effektiv waren die Tests bei der rechtzeitigen Erkennung von Fehlern?
Schweregradindex fรผr Defekte Fehler werden nach Schweregrad gewichtet und nicht gleich gezรคhlt Wie gravierend sind die Mรคngel, nicht nur wie viele?

Zusammengenommen ergeben die vier ein umfassenderes Bild: Eine niedrige Fehlerdichte bei gleichzeitig hoher Fehlerleckage deutet eher auf oberflรคchliche Tests als auf sauberen Code hin, was genau die Fehlinterpretation ist, vor der im nรคchsten Abschnitt gewarnt wird.

Vorteile der Defektdichte

Im Folgenden werden die Vorteile der Defektdichte aufgefรผhrt:

  • Es hilft dabei, die Effektivitรคt von Tests zu messen.
  • Es hilft dabei, die Fehlerkonzentration zwischen Komponenten und Softwaremodulen zu differenzieren.
  • Es ist hilfreich, um die Bereiche zu identifizieren, die Korrekturen oder Verbesserungen benรถtigen.
  • Es ist hilfreich, um auf risikoreiche Komponenten hinzuweisen, was sich direkt auf Folgendes auswirkt: risikobasiertes Testen.
  • Es hilft dabei, den Schulungsbedarf verschiedener Ressourcen zu ermitteln.
  • Es kann hilfreich sein, den durch Fehler verursachten Aufwand fรผr Tests und Nacharbeiten abzuschรคtzen.
  • Es kann die verbleibenden Fehler in der Software abschรคtzen.
  • Vor der Verรถffentlichung hilft es festzustellen, ob die bisher durchgefรผhrten Tests ausreichend sind.
  • Es schafft eine historische Basis, an der spรคtere Verรถffentlichungen gemessen werden kรถnnen.

Grenzen der Defektdichte

Die Kennzahl ist leicht zu berechnen, aber auch leicht falsch zu interpretieren. Die folgenden Einschrรคnkungen bestimmen, wie viel Gewicht ihr bei einer Freigabeentscheidung zukommt:

  • Unentdeckte Mรคngel sind unsichtbar. Im Zรคhler werden nur die Fehler berรผcksichtigt, die bei den Tests tatsรคchlich gefunden wurden. Daher liefert ein nur unzureichend getestetes Modul einen schmeichelhaften Wert.
  • Der Schweregrad wird ignoriert. Ein Fehler, der eine Zahlung beeintrรคchtigt, und ein kosmetisches Ausrichtungsproblem werden gleich gezรคhlt, weshalb zusรคtzlich eine nach Schweregrad gewichtete Betrachtung erforderlich ist.
  • Die Definitionen von Defekten variieren. Zwei Teams, die unterschiedlich zรคhlen, liefern Zahlen, die selbst innerhalb derselben Organisation nicht vergleichbar sind.
  • Die Anzahl der Codezeilen ist ein schwacher Indikator fรผr die CodegrรถรŸe. Ausfรผhrlicher Code verringert die Dichte, ohne irgendetwas zu verbessern, und die Einheit ist nicht รผber verschiedene Programmiersprachen hinweg vergleichbar.
  • Diese Kennzahl kann manipuliert werden. Das Ablehnen von Grenzwertberichten oder das Aufblรคhen der Zeilenanzahl verbessern zwar die Kennzahl, aber nicht das Produkt.

Nichts davon macht die Fehlerdichte nutzlos. Sie dient lediglich als Trendindikator fรผr ein einzelnes Produkt, der kontinuierlich gemessen wird, anstatt als Vergleichswert fรผr verschiedene Teams.

Wie man die Defektdichte reduziert

Die tatsรคchliche Reduzierung der Fehlerdichte, nicht nur auf dem Papier, bedeutet, Fehler frรผhzeitig zu erkennen und die verbleibenden Fehler vor der Verรถffentlichung zu finden. Die folgenden Vorgehensweisen werden in den verรถffentlichten Leitlinien immer wieder genannt:

  • Die Tests werden vorgezogen. Durch die Einbindung von Testern bereits in der Anforderungs- und Entwurfsphase werden Unklarheiten aufgedeckt, bevor sie zu Code werden, und genau dort lassen sich Fehler am gรผnstigsten beheben.
  • Revรœberprรผfen Sie den Code vor dem Zusammenfรผhren. Die Peer-Review deckt Logikfehler, falsch interpretierte Anforderungen und Designmรคngel auf, die sonst niemandem auffallen wรผrden. Gerรคtetest wurde geschrieben, um danach zu suchen.
  • Automatisieren Sie die Regressionssuite. Durchfรผhren von Prรผfungen bei jedem Commit kontinuierliche integration verhindert, dass alte Fehler wรคhrend der Entwicklung neuen Codes wieder auftreten.
  • Schreiben Sie zuerst die Tests. Testgetriebene Entwicklung erzwingt, dass jedes Verhalten vor seiner Implementierung spezifiziert werden muss, und Mutationstests Man kann dann รผberprรผfen, ob die resultierenden Tests tatsรคchlich etwas aussagen.
  • Verwenden Sie statische Analyse. Die automatisierte Codeanalyse erkennt Null-Dereferenzierungen, Ressourcenlecks und Komplexitรคtsschwerpunkte, bevor รผberhaupt ein Testlauf ausgefรผhrt wird.
  • Refaktorieren Sie die dichten Module. Sobald die Fehlerdichteanalyse die problematischsten Komponenten identifiziert hat, fรผhrt deren Aufteilung und Vereinfachung in der Regel zu einer Verringerung sowohl der Komplexitรคt als auch der Fehleranzahl.
  • Fehler werden wieder in den Prozess eingespeist. Die Ursachenanalyse im Rahmen von Retrospektiven wandelt einzelne Fehler in Prozesskorrekturen um, anstatt nur einmalige Ausbesserungen vorzunehmen.

Tracked release over release along Softwaretesttechniken Anhand von Abdeckungsdaten wird die Defektdichte eher zu einem Frรผhwarnsystem als zu einer Leistungsbewertung.

Hรคufig gestellte Fragen

Die meisten Teams berechnen den Wert nach Abschluss der Systemtests, nachdem Fehlerberichte priorisiert und bestรคtigt wurden. Eine Messung wรคhrend des Testzyklus fรผhrt zu einer Unterschรคtzung, da die Berichte noch offen sind, und eine Messung erst nach der Verรถffentlichung macht daraus eine Kennzahl fรผr Datenlecks.

Nein. Zรคhlen Sie nur den Code, den das Team geschrieben hat und รคndern kann. Die Einbeziehung generierter Dateien, externer Bibliotheken oder Testcodes vergrรถรŸert den Nenner und senkt die Codedichte kรผnstlich, wodurch die Module, die tatsรคchlich Aufmerksamkeit benรถtigen, verdeckt werden.

Ja. Teams melden รผblicherweise eine zweite Zahl, die sich auf kritische und schwerwiegende Fehler beschrรคnkt. Ein Modul mit einer moderaten Gesamtfehlerdichte, aber mehreren kritischen Fehlern, birgt ein hรถheres Verรถffentlichungsrisiko als eines mit vielen kosmetischen Problemen.

Ja, mit einem anderen Nenner. agile Teams Fehler werden oft pro User Story, pro Story Point oder pro ausgeliefertem Feature normalisiert. Die Einheit ist weniger wichtig als die konsequente Verwendung derselben รผber alle Sprints hinweg.

Fehlervorhersagemodelle lernen aus historischen Code- und Prozessmetriken wie Komplexitรคt, ร„nderungsrate und Anzahl vergangener Fehler, um die Dateien mit dem hรถchsten Fehlerrisiko zu ermitteln. Tester konzentrieren ihre Bemรผhungen dann auf die Module mit dem hรถchsten Risiko, bevor ein Build gemessen wird.

Indirekt. Copilot erstellt schnell Unit-Tests, Grenzfall-Szenarien und Standard-Assertions, was die Testabdeckung erhรถht und Fehler frรผhzeitig aufdeckt. Der generierte Code muss jedoch genauso geprรผft werden wie jeder andere, sodass die Notwendigkeit eines Peer-Reviews nie entfรคllt.

Der Testleiter oder QA-Manager meldet dies normalerweise, die Zรคhlregeln mรผssen jedoch zuvor mit der Entwicklung und dem Projektmanager abgestimmt werden. Ohne eine vereinbarte Definition eines bestรคtigten Fehlers und des zรคhlbaren Codes ist die Anzahl in einem Release-Meeting nicht nachvollziehbar.

Nicht unbedingt. Ein plรถtzlicher Anstieg bedeutet oft, dass die Tests endlich ein Modul erreicht haben, das zuvor unberรผhrt war โ€“ eine gute Nachricht, die man erst spรคt entdeckt hat. Betrachten Sie dies im Zusammenhang mit der Testabdeckung und dem Fehlertrend, bevor Sie es als Qualitรคtsmangel werten.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: