Co je hustota defektů? Vzorec pro výpočet s příkladem

⚡ Chytré shrnutí

Hustota defektů měří počet potvrzených defektů v softwarovém modulu dělený velikostí tohoto modulu, obvykle vyjádřená na tisíc řádků kódu, a signalizuje, zda je sestavení připraveno k vydání.

  • 🔘 Vzorec: Hustota defektů se rovná potvrzenému počtu defektů dělenému velikostí uvolněného materiálu, nejčastěji se měří v KLOC.
  • ☑️ Zpracovaný příklad: Čtyřicet defektů na třech tisících řádcích kódu dává 0.0133 defektů na LOC, neboli 13.333 defektů na KLOC.
  • (Tj. Benchmark: Přibližně jedna chyba na tisíc řádků kódu je všeobecně považována za známku dobré kvality projektu.
  • 🧪 Vlivy: Code Složitost, pravidla pro počítání vad, měřicí okno a týmové dovednosti – to vše ovlivňuje číslo.
  • 📊 Srovnání: Indexy úniku vad, účinnosti odstraňování vad a závažnosti samy o sobě neodpoví na otázky, na které hustota vad sama o sobě odpovědět nemůže.
  • ⚠️ Upozornění: Nízká hodnota může znamenat slabé testování spíše než čistý kód, takže tato metrika nikdy nestojí sama o sobě.

Hustota defektů

Co je hustota defektů?

Hustota defektů je počet defektů potvrzených v softwaru nebo modulu během určitého období provozu nebo vývoje dělený velikostí daného softwaru nebo modulu. Umožňuje týmu rozhodnout, zda je software připraven k vydání.

Hustota defektů se počítá na tisíc řádků kódu, známá také jako KLOC. Protože je počet normalizován podle velikosti, lze velký modul s mnoha defekty a malý modul s malým počtem defektů porovnávat ve stejném měřítku, což hrubý počet chyb nikdy neumožňuje.

Metrika se obvykle hlásí na konci testovacího cyklu a tracjedno vydání za druhým, takže sedí vedle zbytku proces správy vad v životní cyklus testování softwaru.

Jak vypočítat hustotu defektů

Vzorec pro měření hustoty defektů:

Defect Density = Defect count/size of the release

Velikost vydání lze měřit z hlediska řádku kódu (LOC).

O tom, zda výsledné číslo něco znamená, rozhodují tři detaily:

  • Jednotka velikosti. LOC a KLOC jsou nejběžnější jednotky. Funkční body se používají tam, kde týmy chtějí míru velikosti, která se nemění s programovacím jazykem, a některé týmy místo toho normalizují podle modulu nebo komponenty.
  • Co se počítá jako vada. Do čitatele patří pouze potvrzené vady. Duplikáty, zamítnuté zprávy a požadavky na vylepšení musí být vyloučeny, jinak se číslo nafoukne beze změny kvality kódu.
  • Měřicí okno. Závady zjištěné během testování systému, během regresní testování, a po vydání popisují různé věci, takže tečka musí být uvedena s číslem.

Příklad hustoty defektu

Předpokládejme, že máte ve svém softwarovém produktu integrované 3 moduly. V každém modulu byl objeven následující počet chyb:

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

Celkem chyb = 10 + 20 + 10 = 40

Celkový počet řádků kódu pro každý modul je:

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

Celková řada Code = 1000+1500+500 = 3000

Hustota defektu se vypočítá takto:

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

Stejný výpočet aplikovaný na každý modul je užitečnější než kombinovaná hodnota, jak ukazuje graf níže: Modul 2 obsahuje 20 defektů v 1500 LOC a Modul 3 obsahuje 10 defektů pouze v 500 LOC, takže Modul 3 je z těchto dvou hustší a rizikovější, i když hlásil méně chyb.

Sloupcový graf porovnávající počet defektů a řádky kódu tří modulů použitých při výpočtu hustoty defektů

Standard pro hustotu defektů

Neexistuje žádný pevný standard pro hustotu defektů. Studie naznačují, že jedna vada na tisíc řádků kódu je obecně považováno za známku dobré kvality projektu a toto číslo je v oboru nejčastěji uváděným pravidlem.

Očekávání se s doménou mění. Bezpečnostně kritický a regulovaný software, jako je avionika a zdravotnické prostředky, je držen na cílové hodnotě výrazně nižší než jedna vada na KLOC, zatímco běžné obchodní aplikace ji běžně přesahují. Protože se pravidla počítání, jednotky velikosti a hloubka testování v jednotlivých organizacích liší, je benchmark z publikované studie srovnatelný pouze s projektem, který měří stejným způsobem. Praktické využití metriky je proto interní: porovnejte verzi s předchozí verzí stejného produktu, měřenou identicky.

Faktory ovlivňující hustotu defektů

Stejná kódová základna může produkovat velmi odlišné hodnoty hustoty defektů v závislosti na následujících faktorech:

  • Code složitost. Hluboce vnořená logika a vysoká cyklomatická složitost produkují více defektů na řádek než přímočarý kód.
  • Typ vad, které se berou v úvahu. Počítání pouze funkčních vad, nebo zahrnutí použitelnosti, dokumentace a nefunkční zjištění, podstatně mění čitatel.
  • Uvažovaná doba trvání. Hodnota naměřená během dvoutýdenního testovacího cyklu není srovnatelná s hodnotou naměřenou během šesti měsíců produkčního používání.
  • Dovednosti vývojáře a testerů. Zkušení vývojáři vnášejí méně defektů a zkušení testeři nacházejí více těch, které existují, takže tyto dva efekty ovlivňují metriku opačnými směry.
  • Testovací pokrytí. Vady, které nebyly nikdy hledány, se nikdy nepočítají, takže pokrytí testu tiše omezuje, jak vysoko může naměřená hustota dosáhnout.

Hustota defektů vs. jiné metriky defektů

Hustota defektů odpovídá na jednu otázku: jak koncentrované jsou známé defekty. Tři doprovodné metriky odpovídají na otázky, na které odpovědět nemůže, a většina týmů je uvádí společně.

metrický Co měří Otázka to odpovídá
Hustota defektů Potvrzené vady dělené velikostí (KLOC nebo funkční body) Které moduly mají vzhledem ke své velikosti nejvíce vad?
Únik z vady Vady zjištěné po uvolnění jako podíl všech vad Kolik uniklo testovacímu procesu a dostalo se k uživatelům?
Účinnost odstraňování vad Vady odstraněné před vydáním jako podíl všech vad Jak efektivní bylo testování při včasném odhalování vad?
Index závažnosti vad Vady vážené podle závažnosti, nikoli započítávané rovnoměrně Jak škodlivé jsou tyto vady, nejen kolik jich je?

Dohromady tyto čtyři ukazatele poskytují ucelenější obrázek: nízká hustota defektů s vysokým únikem defektů poukazuje spíše na povrchní testování než na čistý kód, což je přesně ono chybné pochopení, před kterým varuje následující část.

Výhody hustoty defektů

Následují výhody hustoty defektů:

  • Pomáhá měřit efektivitu testování.
  • Pomáhá rozlišovat koncentraci vad mezi komponentami a softwarovými moduly.
  • Je to užitečné při identifikaci oblastí, které je třeba opravit nebo vylepšit.
  • Je to užitečné pro poukázání na vysoce rizikové komponenty, což přímo vede k testování založené na riziku.
  • Pomáhá identifikovat vzdělávací potřeby různých zdrojů.
  • Může to být užitečné při odhadu úsilí potřebného k testování a přepracování v důsledku vad.
  • Dokáže odhadnout zbývající vady v softwaru.
  • Před vydáním pomáhá určit, zda je dosud provedené testování dostatečné.
  • Vytváří historickou základnu, s níž lze porovnávat pozdější vydání.

Omezení hustoty defektů

Tuto metriku lze snadno vypočítat a snadno ji lze špatně interpretovat. Následující omezení určují, jakou váhu si zaslouží při rozhodování o vydání:

  • Nezjištěné vady jsou neviditelné. Čitatel obsahuje pouze vady, které testování skutečně odhalilo, takže slabě testovaný modul hlásí lichotivé číslo.
  • Závažnost se ignoruje. Jedna vada, která poškodí platbu, a jedna kosmetická vada se zarovnáním se počítají stejně, a proto je k nim nutný pohled s vážením závažnosti.
  • Definice vad se liší. Dva týmy, které počítají různě, produkují čísla, která nelze porovnávat, a to ani v rámci stejné organizace.
  • Řádky kódu jsou slabou zástupnou hodnotou velikosti. Podrobný kód snižuje hustotu, aniž by cokoli zlepšil, a jednotka není srovnatelná napříč programovacími jazyky.
  • S metrikou se dá manipulovat. Odmítání hraničních zpráv nebo nafukování počtu řádků zlepšuje dané číslo, aniž by se zlepšil produkt.

Nic z toho neznamená, že hustota defektů je zbytečná. Díky tomu je to spíše ukazatel trendu pro jeden produkt měřený konzistentně než skóre pro porovnávání týmů mezi sebou.

Jak snížit hustotu vad

Snižování hustoty vad skutečně, nikoli jen na papíře, znamená včasné předcházení vadám a odhalování zbývajících před vydáním. Níže uvedené postupy se opakují v publikovaných pokynech:

  • Testování přesunu dříve. Zapojení testerů ve fázi požadavků a návrhu odhaluje nejednoznačnosti ještě předtím, než se z nich stane kód, což je oblast, kde se vady odstraňují nejlevněji.
  • Revzobrazit kód před jeho sloučením. Vzájemné hodnocení odhaluje logické chyby, nesprávně pochopené požadavky a konstrukční nedostatky, které nejsou jednotkový test bylo napsáno k hledání.
  • Automatizujte sadu regresních algoritmů. Spouštění kontrol u každého commitu průběžná integrace Zabraňuje návratu starých defektů během psaní nového kódu.
  • Nejdříve napište testy. Vývoj řízený testy vynucuje specifikaci každého chování před jeho implementací a testování mutací pak může potvrdit, že výsledné testy skutečně něco tvrdí.
  • Použijte statickou analýzu. Automatizované skenování kódu označuje dereference s hodnotami null, úniky zdrojů a kritická místa složitosti ještě před spuštěním jednotlivých testů.
  • Refaktorujte husté moduly. Jakmile metoda Defect Hustota identifikuje nejhorší komponenty, jejich rozdělení a zjednodušení obvykle snižuje jak složitost, tak i počet defektů.
  • Vraťte vady zpět do procesu. Analýza hlavních příčin při retrospektivách proměňuje jednotlivé vady v opravy procesů, nikoli v jednorázové záplaty.

Tracked vydání nad vydáním vedle techniky testování softwaru a data o pokrytí se hustota defektů stává spíše systémem včasného varování než výkazem.

Nejčastější dotazy

Většina týmů ji počítá na konci testování systému, kdy jsou hlášení o závadách vytříděna a potvrzena. Měření v polovině cyklu údaj podhodnocuje, protože hlášení jsou stále otevřená, a měření pouze po vydání z něj dělá metriku úniku.

Ne. Počítejte pouze kód, který tým napsal a který může změnit. Zahrnutí generovaných souborů, knihoven dodavatelů nebo testovacího kódu uměle nafukuje jmenovatel a snižuje hustotu, což skrývá moduly, které skutečně potřebují pozornost.

Ano. Týmy obvykle hlásí i druhé číslo omezené na kritické a vysoce závažné vady. Modul se střední celkovou hustotou, ale s několika kritickými vadami, představuje větší riziko vydání než modul s mnoha kosmetickými problémy.

Ano, s jiným jmenovatelem. Agilní týmy často normalizují vady na uživatelský příběh, na bod příběhu nebo na dodanou funkci. Jednotka má menší význam než konzistentní používání té samé napříč sprinty.

Modely predikce defektů se učí z historických metrik kódu a procesů, jako je složitost, fluktuace a počty defektů v minulosti, aby seřadily soubory s největší pravděpodobností vadných. Testeři se poté zaměří na moduly s nejvyšším rizikem, než se provede měření sestavení.

Nepřímo. Copilot rychle vytváří jednotkové testy, edge-case scénáře a standardizovaná tvrzení (boilerplate assertions), což zvyšuje pokrytí a dříve odhaluje vady. Také generuje kód, který vyžaduje stejnou kontrolu jako jakýkoli jiný, takže nikdy neodstraňuje potřebu vzájemného hodnocení.

Vedoucí testu nebo manažer QA to obvykle hlásí, ale pravidla počítání musí být nejprve dohodnuta s vývojovým oddělením a projektovým manažerem. Bez dohodnuté definice potvrzené chyby a spočetného kódu není toto číslo na schůzce o vydání obhajitelné.

Ne nutně. Nárůst často znamená, že testování konečně dosáhlo modulu, který byl dříve nedotčen, což je dobrá zpráva, která byla zjištěna pozdě. Než to budete považovat za selhání kvality, přečtěte si to společně s pokrytím a trendem vad.

Shrňte tento příspěvek takto: