Što je gustoća defekta? Formula za izračunavanje s primjerom
⚡ Pametni sažetak
Gustoća grešaka mjeri broj potvrđenih grešaka u softverskom modulu podijeljen s veličinom tog modula, obično izražena po tisuću redaka koda, i signalizira je li verzija spremna za objavljivanje.
Što je gustoća defekta?
Gustoća defekta je broj potvrđenih nedostataka u softveru ili modulu tijekom određenog razdoblja rada ili razvoja, podijeljen s veličinom tog softvera ili modula. Omogućuje timu da odluči je li softver spreman za objavljivanje.
Gustoća grešaka broji se po tisuću redaka koda, također poznata kao KLOC. Budući da je broj normaliziran veličinom, veliki modul s mnogo grešaka i mali modul s malo grešaka mogu se usporediti na istoj skali, što sirovi broj grešaka nikada ne dopušta.
Metrika se obično izvještava na kraju testnog ciklusa i tracjedno izdanje iznad drugog, tako da se nalazi uz ostatak proces upravljanja nedostacima u životni ciklus testiranja softvera.
Kako izračunati gustoću defekata
Formula za mjerenje gustoće defekta:
Defect Density = Defect count/size of the release
Veličina izdanja može se mjeriti u smislu linije koda (LOC).
Tri detalja odlučuju hoće li dobiveni broj išta značiti:
- Jedinica veličine. LOC i KLOC su najčešće jedinice. Funkcijske točke se koriste tamo gdje timovi žele mjeru veličine koja se ne mijenja s programskim jezikom, a neki timovi umjesto toga normaliziraju po modulu ili komponenti.
- Što se smatra nedostatkom. U brojnik spadaju samo potvrđeni nedostaci. Duplikati, odbijena izvješća i zahtjevi za poboljšanje moraju se isključiti, inače se broj povećava bez ikakve promjene u kvaliteti koda.
- Prozor za mjerenje. Nedostaci pronađeni tijekom testiranja sustava, tijekom regresijsko testiranje, a nakon objavljivanja opisuju različite stvari, pa se točka mora navesti s brojem.
Primjer gustoće defekta
Pretpostavimo da u svoj softverski proizvod imate integrirana 3 modula. U svakom modulu otkriven je sljedeći broj grešaka:
- Modul 1 = 10 grešaka
- Modul 2 = 20 grešaka
- Modul 3 = 10 grešaka
Ukupno grešaka = 10 + 20 + 10 = 40
Ukupan broj linija koda za svaki modul je:
- Modul 1 = 1000 LOC
- Modul 2 = 1500 LOC
- Modul 3 = 500 LOC
Ukupni redak Code = 1000+1500+500 = 3000
Gustoća defekta izračunava se kao:
Defect Density = 40/3000 = 0.013333 defects/loc = 13.333 defects/Kloc
Isti izračun primijenjen po modulu korisniji je od kombinirane brojke, kao što pokazuje donji grafikon: Modul 2 ima 20 nedostataka u 1500 LOC, a Modul 3 ima 10 nedostataka u samo 500 LOC, tako da je Modul 3 gušći i rizičniji od ta dva iako je prijavio manje grešaka.
Standard za gustoću defekata
Ne postoji fiksni standard za gustoću defekata. Studije sugeriraju da jedna mana po tisuću redaka koda općenito se smatra znakom dobre kvalitete projekta, a ta je brojka najčešće citirano pravilo u industriji.
Očekivanje se mijenja s domenom. Sigurnosno kritičan i reguliran softver, poput avionike i medicinskih uređaja, drži se cilja znatno ispod jednog nedostatka po KLOC-u, dok su obične poslovne aplikacije rutinski iznad toga. Budući da se pravila brojanja, jedinice veličine i dubina testiranja razlikuju među organizacijama, referentna vrijednost uzeta iz objavljene studije usporediva je samo s projektom koji mjeri na isti način. Praktična upotreba metrike je stoga interna: usporedite izdanje s prethodnim izdanjem istog proizvoda, mjereno identično.
Čimbenici koji utječu na gustoću defekata
Ista kodna baza može proizvesti vrlo različite brojke gustoće defekata ovisno o sljedećim čimbenicima:
- Code složenost. Duboko ugniježđena logika i visoka ciklomatska složenost proizvode više grešaka po liniji nego jednostavan kod.
- Vrsta nedostataka koja se uzima u obzir. Brojanje samo funkcionalnih nedostataka ili uključivanje upotrebljivosti, dokumentacije i nefunkcionalni nalazi, znatno mijenja brojnik.
- Razmatrano vremensko trajanje. Brojka izmjerena tijekom dvotjednog testnog ciklusa nije usporediva s onom izmjerenom tijekom šest mjeseci proizvodne upotrebe.
- Vještine programera i testera. Iskusni programeri ubrizgavaju manje nedostataka, a iskusni testeri pronalaze više onih koji postoje, pa ta dva učinka povlače metriku u suprotnim smjerovima.
- Pokrivenost testom. Nedostaci koji nikada nisu traženi nikada se ne broje, stoga pokrivenost testom tiho ograničava koliko visoko izmjerena gustoća može ići.
Gustoća nedostataka u odnosu na druge metrike nedostataka
Gustoća defekata odgovara na jedno pitanje: koliko su koncentrirani poznati defekti. Tri prateće metrike odgovaraju na pitanja na koja ne može odgovoriti, a većina timova ih izvještava zajedno.
| metrički | Što mjeri | Pitanje na koje odgovara |
| Gustoća defekta | Potvrđeni nedostaci podijeljeni s veličinom (KLOC ili funkcionalne točke) | Koji moduli imaju najviše nedostataka za svoju veličinu? |
| Curenje zbog kvara | Nedostaci pronađeni nakon puštanja u promet kao udio svih nedostataka | Koliko je toga promaklo procesu testiranja, a dospjelo do korisnika? |
| Učinkovitost uklanjanja nedostataka | Nedostaci uklonjeni prije puštanja u promet kao udio svih nedostataka | Koliko je učinkovito bilo testiranje u pravovremenom otkrivanju nedostataka? |
| Indeks ozbiljnosti nedostataka | Nedostaci ponderirani prema težini, a ne jednako brojeni | Koliko su štetni nedostaci, ne samo koliko ih ima? |
Pročitani zajedno, sva četiri daju potpuniju sliku: niska gustoća defekata s visokim curenjem defekata ukazuje na plitko testiranje, a ne na čist kod, što je upravo pogrešno tumačenje na koje upozorava sljedeći odjeljak.
Prednosti gustoće defekata
Slijede prednosti gustoće defekata:
- Pomaže u mjerenju učinkovitosti testiranja.
- Pomaže u razlikovanju koncentracije nedostataka između komponenti i softverskih modula.
- Korisno je u identificiranju područja koja trebaju ispravku ili poboljšanje.
- Korisno je za ukazivanje na visokorizične komponente, što izravno utječe na testiranje na temelju rizika.
- Pomaže u identificiranju potreba za obukom različitih resursa.
- To može biti korisno u procjeni napora testiranja i prerade uzrokovanih nedostacima.
- Može procijeniti preostale nedostatke u softveru.
- Prije objavljivanja, pomaže utvrditi jesu li do sada provedena testiranja dovoljna.
- Gradi povijesnu osnovu s kojom se mogu mjeriti kasnija izdanja.
Ograničenja gustoće defekata
Metriku je lako izračunati i lako je pogrešno protumačiti. Sljedeća ograničenja određuju koliku joj je težinu u odluci o izdanju:
- Neotkriveni nedostaci su nevidljivi. Brojnik sadrži samo nedostatke koje je testiranje stvarno pronašlo, pa slabo testirani modul daje laskavu brojku.
- Ozbiljnost se zanemaruje. Jedan nedostatak koji oštećuje plaćanje i jedan kozmetički problem s poravnanjem računaju se isto, zbog čega je uz njih potreban prikaz ponderiran prema ozbiljnosti.
- Definicije nedostataka variraju. Dva tima koja različito broje proizvode brojeve koji se ne mogu usporediti, čak ni unutar iste organizacije.
- Linije koda su slaba zamjena za veličinu. Opširni kod smanjuje gustoću bez ikakvog poboljšanja, a jedinica nije usporediva u različitim programskim jezicima.
- Metrika se može manipulirati. Odbacivanje graničnih izvješća ili napuhavanje broja redaka poboljšavaju brojku bez poboljšanja proizvoda.
Ništa od ovoga ne čini gustoću nedostataka beskorisnom. To je čini pokazateljem trenda za jedan proizvod koji se dosljedno mjeri, a ne rezultatom za usporedbu timova jednih s drugima.
Kako smanjiti gustoću nedostataka
Smanjenje gustoće nedostataka stvarno, a ne samo na papiru, znači ranije sprječavanje nedostataka i pronalaženje ostalih prije objavljivanja. Prakse u nastavku su one koje se ponavljaju u objavljenim smjernicama:
- Testiranje poteza ranije. Uključivanje testera u fazi zahtjeva i dizajna otkriva dvosmislenost prije nego što postane kod, što je mjesto gdje je najjeftinije ukloniti nedostatke.
- Revpregledajte kod prije nego što se spoji. Stručna recenzija otkriva logičke pogreške, pogrešno shvaćene zahtjeve i nedostatke u dizajnu koji ne jedinični test napisano je za traženje.
- Automatizirajte regresijski paket. Pokretanje provjera na svakom commitu kontinuirana integracija sprječava povratak starih nedostataka dok se piše novi kod.
- Prvo napišite testove. Razvoj vođen testiranjem prisiljava svako ponašanje da bude specificirano prije nego što se implementira, i testiranje mutacija tada može potvrditi da dobiveni testovi doista nešto tvrde.
- Koristite statičku analizu. Automatizirano skeniranje koda označava null dereference, curenje resursa i vruće točke složenosti prije pokretanja jednog testa.
- Refaktorirajte guste module. Nakon što Defect Density identificira najgore komponente, njihovo dijeljenje i pojednostavljenje obično smanjuje i složenost i broj nedostataka.
- Vratite nedostatke natrag u proces. Analiza uzroka na retrospektivama pretvara pojedinačne nedostatke u ispravke procesa, a ne u jednokratne zakrpe.
Tracked izdanje nad izdanjem uz tehnike testiranja softvera i podacima o pokrivenosti, gustoća nedostataka postaje sustav ranog upozorenja, a ne izvještajna kartica.

