Wat is defectdichtheid? Formule om te berekenen met Voorbeeld

โšก Slimme samenvatting

Defectdichtheid meet het aantal bevestigde defecten in een softwaremodule gedeeld door de grootte van die module, meestal uitgedrukt per duizend regels code, en geeft aan of een build klaar is voor release.

  • ๐Ÿ”˜ Formule: De defectdichtheid is gelijk aan het aantal bevestigde defecten gedeeld door de omvang van de vrijgave, meestal gemeten in KLOC.
  • โ˜‘๏ธ Uitgewerkt voorbeeld: Veertig fouten verdeeld over drieduizend regels code levert 0.0133 fouten per regel code op, oftewel 13.333 fouten per KLOC.
  • โœ… Benchmark: Ongeveer รฉรฉn fout per duizend regels code wordt algemeen beschouwd als een teken van goede projectkwaliteit.
  • ๐Ÿงช Invloeden: Code Complexiteit, regels voor het tellen van defecten, het meetvenster en de vaardigheden van het team hebben allemaal invloed op het cijfer.
  • ๐Ÿ“Š Vergelijking: Defectlekkage, de efficiรซntie van defectverwijdering en de ernstindexen beantwoorden vragen die de defectdichtheid alleen niet kan beantwoorden.
  • โš ๏ธ Voorzichtigheid: Een lage waarde kan duiden op zwakke tests in plaats van schone code, dus de metriek staat nooit op zichzelf.

Defectdichtheid

Wat is defectdichtheid?

Defectdichtheid Het aantal bevestigde defecten in een softwareonderdeel of module gedurende een specifieke periode van gebruik of ontwikkeling, gedeeld door de omvang van die software of module. Hiermee kan een team bepalen of een softwareonderdeel klaar is om te worden uitgebracht.

De defectdichtheid wordt geteld per duizend regels code, ook wel KLOC genoemd. Omdat de telling is genormaliseerd naar grootte, kunnen een grote module met veel defecten en een kleine module met weinig defecten op dezelfde schaal worden vergeleken, iets wat met een ruwe telling van het aantal bugs nooit mogelijk is.

De meetwaarde wordt normaal gesproken aan het einde van een testcyclus gerapporteerd en tracked release na release, dus het staat naast de rest van de defectbeheerproces in de levenscyclus van softwaretests.

Hoe bereken je de defectdichtheid?

Een formule om de defectdichtheid te meten:

Defect Density = Defect count/size of the release

De omvang van een release kan worden gemeten in termen van een regel code (LOC).

Drie details bepalen of het resulterende getal betekenis heeft:

  • De maateenheid. LOC en KLOC zijn de meest gebruikte eenheden. Functiepunten worden gebruikt wanneer teams een maatstaf voor de omvang willen die niet verandert met de programmeertaal, en sommige teams normaliseren in plaats daarvan per module of per component.
  • Wat wordt beschouwd als een defect? Alleen bevestigde defecten horen in de teller thuis. Dubbele meldingen, afgewezen rapporten en verbeteringsverzoeken moeten worden uitgesloten, anders loopt het cijfer op zonder dat de codekwaliteit verbetert.
  • Het meetvenster. Defecten die tijdens systeemtesten zijn gevonden, tijdens regressietestenEn na de publicatie worden er verschillende dingen beschreven, dus de periode moet met het getal worden aangegeven.

Voorbeeld van defectdichtheid

Stel dat uw softwareproduct drie modules bevat. In elke module zijn het volgende aantal bugs gevonden:

  • Module 1 = 10 bugs
  • Module 2 = 20 bugs
  • Module 3 = 10 bugs

Totaal aantal bugs = 10 + 20 + 10 = 40

Het totale aantal regels code voor elke module is:

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

Totale lijn van Code = 1000+1500+500 = 3000

Defectdichtheid wordt berekend als:

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

Dezelfde berekening per module toegepast is nuttiger dan het gecombineerde cijfer, zoals de onderstaande grafiek laat zien: Module 2 bevat 20 defecten in 1500 regels code en Module 3 bevat 10 defecten in slechts 500 regels code. Module 3 is dus de module met de hoogste foutdichtheid en het grootste risico van de twee, ondanks het feit dat er minder fouten in zijn gerapporteerd.

Staafdiagram waarin het aantal defecten en het aantal regels code van drie modules die in de berekening van de defectdichtheid worden gebruikt, met elkaar worden vergeleken.

Een standaard voor defectdichtheid

Er bestaat geen vaste norm voor defectdichtheid. Studies suggereren dat รฉรฉn defect Een aantal fouten per duizend regels code wordt over het algemeen beschouwd als een teken van goede projectkwaliteit, en dat cijfer is de meest geciteerde vuistregel in de branche.

De verwachtingen veranderen met het domein. Voor veiligheidskritische en gereguleerde software, zoals avionica en medische apparatuur, geldt een doelstelling van ruim onder de รฉรฉn defect per KLOC, terwijl gewone bedrijfsapplicaties daar doorgaans boven zitten. Omdat telregels, meeteenheden en testdiepte per organisatie verschillen, is een benchmark uit een gepubliceerde studie alleen vergelijkbaar met een project dat op dezelfde manier meet. Het praktische gebruik van de meetmethode is daarom intern: vergelijk een release met de vorige release van hetzelfde product, die op identieke wijze is gemeten.

Factoren die de defectdichtheid beรฏnvloeden

Dezelfde codebasis kan zeer verschillende waarden voor de defectdichtheid opleveren, afhankelijk van de volgende factoren:

  • Code complexiteit. Diep geneste logica en hoge cyclomatische complexiteit produceert meer fouten per regel dan eenvoudige code.
  • Het type gebreken dat in aanmerking wordt genomen. Alleen functionele defecten meetellen, of ook bruikbaarheid, documentatie en niet-functioneel bevindingen, verandert de teller aanzienlijk.
  • De beschouwde tijdsduur. Een waarde die is gemeten tijdens een testperiode van twee weken is niet vergelijkbaar met een waarde die is gemeten over zes maanden productiegebruik.
  • Ontwikkelaars- en testersvaardigheden. Ervaren ontwikkelaars introduceren minder fouten, terwijl ervaren testers juist meer van de bestaande fouten vinden. Deze twee effecten trekken de meetwaarde dus in tegengestelde richtingen.
  • Testdekking. Gebreken waarnaar nooit is gezocht, worden nooit meegeteld, dus test dekking Het beperkt op een stille manier hoe hoog de gemeten dichtheid kan oplopen.

Defectdichtheid versus andere defectstatistieken

Defectdichtheid beantwoordt รฉรฉn vraag: hoe geconcentreerd zijn de bekende defecten? Drie aanvullende meetwaarden beantwoorden de vragen die defectdichtheid niet kan beantwoorden, en de meeste teams rapporteren deze samen.

metrisch Wat het meet Vraag het beantwoordt
Defectdichtheid Bevestigde defecten, onderverdeeld naar grootte (KLOC of functionele punten). Welke modules vertonen de meeste defecten in verhouding tot hun grootte?
Defecte lekkage Het percentage defecten dat na de release is gevonden, ten opzichte van alle defecten. Hoeveel is er door het testproces heen geglipt en heeft de gebruikers bereikt?
Efficiรซntie van defectverwijdering Defecten die vรณรณr de release zijn verholpen, vormen een deel van alle defecten. Hoe effectief was de testmethode in het tijdig opsporen van defecten?
Defecternstindex Gebreken worden gewogen op basis van ernst in plaats van gelijk meegeteld. Hoe schadelijk zijn de gebreken, en niet alleen hoeveel er zijn?

Samen geven de vier aspecten een completer beeld: een lage defectdichtheid met een hoge defectlekkage wijst op oppervlakkige tests in plaats van schone code, en dat is precies de verkeerde interpretatie waar in het volgende gedeelte voor wordt gewaarschuwd.

Voordelen van defectdichtheid

De voordelen van defectdichtheid zijn als volgt:

  • Het helpt om de effectiviteit van tests te meten.
  • Het helpt om de concentratie van defecten te onderscheiden tussen componenten en softwaremodules.
  • Het is nuttig om de gebieden te identificeren die correctie of verbetering behoeven.
  • Het is nuttig om risicovolle onderdelen aan te wijzen, wat direct van invloed is op risicogebaseerd testen.
  • Het helpt bij het vaststellen van de trainingsbehoeften van verschillende medewerkers.
  • Het kan nuttig zijn bij het inschatten van de test- en herstelwerkzaamheden die door defecten worden veroorzaakt.
  • Het kan de resterende defecten in de software inschatten.
  • Vรณรณr de release helpt het om te bepalen of de tot nu toe uitgevoerde tests voldoende zijn.
  • Het creรซert een historische basislijn waaraan latere publicaties kunnen worden afgemeten.

Beperkingen van de defectdichtheid

De meetwaarde is eenvoudig te berekenen, maar ook eenvoudig verkeerd te interpreteren. De volgende beperkingen bepalen hoeveel gewicht deze waarde heeft bij een beslissing over een release:

  • Niet-opgemerkte defecten zijn onzichtbaar. De teller bevat alleen defecten die daadwerkelijk tijdens de tests zijn gevonden, waardoor een module die onvoldoende is getest een gunstiger cijfer rapporteert.
  • De ernst van de situatie wordt genegeerd. Een defect dat een betaling verstoort en een cosmetisch uitlijningsprobleem tellen hetzelfde mee, daarom is een beoordeling op basis van ernst noodzakelijk.
  • De definities van defecten variรซren. Twee teams die op verschillende manieren tellen, produceren cijfers die niet met elkaar te vergelijken zijn, zelfs niet binnen dezelfde organisatie.
  • Het aantal regels code is een zwakke maatstaf voor de omvang. Overdreven code verlaagt de dichtheid zonder iets te verbeteren, en de eenheid is niet vergelijkbaar tussen programmeertalen.
  • De meetmethode kan gemanipuleerd worden. Het afwijzen van twijfelachtige rapporten of het overdrijven van het aantal regels verbetert zowel het cijfer als het product zelf.

Dit alles maakt de defectdichtheid niet nutteloos. Het maakt het eerder een trendindicator voor รฉรฉn product, consistent gemeten, in plaats van een score om teams met elkaar te vergelijken.

Hoe verlaag je de defectdichtheid?

Het daadwerkelijk verlagen van de defectdichtheid, en niet alleen op papier, betekent het vroegtijdig voorkomen van defecten en het opsporen van de overige defecten vรณรณr de release. De onderstaande werkwijzen komen steeds terug in gepubliceerde richtlijnen:

  • Verplaats de tests naar een eerder tijdstip. Door testers al in de fase van de vereisten en het ontwerp te betrekken, worden onduidelijkheden opgespoord voordat ze in de code terechtkomen. In die fase zijn defecten het goedkoopst te verhelpen.
  • RevBekijk de code voordat deze wordt samengevoegd. Peer review brengt logische fouten, verkeerd geรฏnterpreteerde eisen en ontwerpfouten aan het licht die anders niet zouden voorkomen. hoofdstuk toets werd geschreven om naar te zoeken.
  • Automatiseer de regressietestsuite. Het uitvoeren van controles op elke commit via continue integratie Voorkomt dat oude fouten terugkeren tijdens het schrijven van nieuwe code.
  • Schrijf eerst de tests. Test gedreven ontwikkeling dwingt elk gedrag af om gespecificeerd te worden voordat het wordt geรฏmplementeerd, en mutatie testen Dan kan men bevestigen dat de resultaten van de tests daadwerkelijk iets aantonen.
  • Gebruik statische analyse. Geautomatiseerde codescans signaleren null-dereferenties, resourcelekken en complexe knelpunten nog voordat er ook maar รฉรฉn test is uitgevoerd.
  • Herstructureer de complexe modules. Zodra Defect Density de slechtste componenten heeft geรฏdentificeerd, leidt het opsplitsen en vereenvoudigen ervan doorgaans tot een vermindering van zowel de complexiteit als het aantal defecten.
  • Voer defecten terug in het proces. Een oorzaakanalyse tijdens retrospectieve evaluaties zet individuele defecten om in procesverbeteringen in plaats van eenmalige lapmiddelen.

Tracked release over release alongside software testtechnieken En met behulp van dekkingsgegevens wordt de defectdichtheid een vroegtijdig waarschuwingssysteem in plaats van een rapportcijfer.

Veelgestelde vragen

De meeste teams berekenen dit aan het einde van de systeemtests, wanneer defectrapporten zijn beoordeeld en bevestigd. Meten halverwege de cyclus geeft een onderschatting van het aantal, omdat er dan nog steeds rapporten openstaan, en meten pas na de release maakt er in plaats daarvan een lekindicator van.

Nee. Tel alleen de code mee die het team zelf heeft geschreven en kan wijzigen. Het meerekenen van gegenereerde bestanden, externe bibliotheken of testcode verhoogt de noemer en verlaagt de dichtheid kunstmatig, waardoor modules die echt aandacht nodig hebben, verborgen blijven.

Ja. Teams rapporteren doorgaans een tweede cijfer dat beperkt is tot kritieke en zeer ernstige defecten. Een module met een gemiddelde algehele dichtheid maar meerdere kritieke defecten vormt een groter risico voor de release dan een module met veel cosmetische problemen.

Ja, maar met een andere noemer. Wendbare teams Vaak worden defecten genormaliseerd per gebruikersverhaal, per story point of per opgeleverde functionaliteit. De eenheid is minder belangrijk dan het consequent gebruiken van dezelfde eenheid gedurende alle sprints.

Modellen voor defectvoorspelling leren van historische code- en processtatistieken, zoals complexiteit, verloop en eerdere defectaantallen, om te bepalen welke bestanden het meest waarschijnlijk defect zijn. Testers richten hun inspanningen vervolgens op de modules met het hoogste risico voordat een build wordt getest.

Indirect. Copilot stelt snel unit tests, scenario's voor randgevallen en standaard beweringen op, waardoor de testdekking toeneemt en defecten eerder aan het licht komen. Het genereert ook code die dezelfde beoordeling nodig heeft als alle andere code, waardoor de noodzaak voor collegiale toetsing nooit verdwijnt.

Normaal gesproken rapporteert de testleider of QA-manager dit, maar de telregels moeten eerst worden afgestemd met de ontwikkelaars en de projectmanager. Zonder een overeengekomen definitie van een bevestigd defect en van telbare code is het aantal niet te verdedigen tijdens een releasevergadering.

Niet per se. Een piek betekent vaak dat het testen eindelijk een module heeft bereikt die voorheen onaangeraakt was, wat goed nieuws is dat laat is ontdekt. โ€‹โ€‹Bekijk het in samenhang met de testdekking en de defecttrend voordat je het als een kwaliteitsfout beschouwt.

Vat dit bericht samen met: