Ce este densitatea defectelor? Formula de calculat cu Exemplu

โšก Rezumat inteligent

Densitatea defectelor mฤƒsoarฤƒ numฤƒrul de defecte confirmate รฎntr-un modul software รฎmpฤƒrศ›it la dimensiunea acelui modul, de obicei exprimatฤƒ la o mie de linii de cod, ศ™i semnaleazฤƒ dacฤƒ o versiune este gata de lansare.

  • ๐Ÿ”˜ Formula: Densitatea defectelor este egalฤƒ cu numฤƒrul de defecte confirmate รฎmpฤƒrศ›it la dimensiunea eliberฤƒrii, cel mai adesea mฤƒsuratฤƒ รฎn KLOC.
  • โ˜‘๏ธ Exemplu lucrat: Patruzeci de defecte pe trei mii de linii de cod dau 0.0133 defecte per LOC sau 13.333 defecte per KLOC.
  • โœ… Etalon: Aproximativ un defect la o mie de linii de cod este considerat, รฎn general, un semn al unei bune calitฤƒศ›i a proiectului.
  • ๐Ÿงช Influenศ›e: Code complexitatea, regulile de numฤƒrare a defectelor, fereastra de mฤƒsurare ศ™i abilitฤƒศ›ile echipei - toate influenศ›eazฤƒ numฤƒrul.
  • ๐Ÿ“Š Comparaลฃie: Scurgerea defectelor, eficienศ›a eliminฤƒrii defectelor ศ™i indicii de severitate nu pot rฤƒspunde la รฎntrebฤƒrile pe care densitatea defectelor singurฤƒ nu le poate lua.
  • โš ๏ธ Prudenศ›ฤƒ: O valoare micฤƒ poate รฎnsemna o testare slabฤƒ, mai degrabฤƒ decรขt un cod curat, astfel รฎncรขt metrica nu este niciodatฤƒ independentฤƒ.

Densitatea defectelor

Ce este densitatea defectelor?

Densitatea defectelor este numฤƒrul de defecte confirmate รฎntr-un software sau รฎntr-un modul รฎn timpul unei anumite perioade de operare sau dezvoltare, รฎmpฤƒrศ›it la dimensiunea software-ului sau modulului respectiv. Acesta permite unei echipe sฤƒ decidฤƒ dacฤƒ un software este gata de lansare.

Densitatea defectelor este calculatฤƒ la o mie de linii de cod, cunoscutฤƒ ศ™i sub numele de KLOC. Deoarece numฤƒrarea este normalizatฤƒ รฎn funcศ›ie de dimensiune, un modul mare cu multe defecte ศ™i un modul mic cu puศ›ine defecte pot fi comparate la aceeaศ™i scarฤƒ, lucru pe care un numฤƒr brut de erori nu รฎl permite niciodatฤƒ.

Metrica este raportatฤƒ รฎn mod normal la sfรขrศ™itul unui ciclu de testare ศ™i traclansare peste lansare, deci se aflฤƒ alฤƒturi de restul procesul de management al defectelor รฎn ciclul de viaศ›ฤƒ al testฤƒrii software.

Cum se calculeazฤƒ densitatea defectelor

O formulฤƒ pentru mฤƒsurarea densitฤƒศ›ii defectelor:

Defect Density = Defect count/size of the release

Mฤƒrimea lansฤƒrii poate fi mฤƒsuratฤƒ รฎn termeni de linie de cod (LOC).

Trei detalii decid dacฤƒ numฤƒrul rezultat are vreo semnificaศ›ie:

  • Unitatea de mฤƒrime. LOC ศ™i KLOC sunt cele mai comune unitฤƒศ›i. Punctele funcศ›ionale sunt utilizate acolo unde echipele doresc o mฤƒsurฤƒ de dimensiune care nu se modificฤƒ odatฤƒ cu limbajul de programare, iar unele echipe normalizeazฤƒ รฎn funcศ›ie de modul sau de componentฤƒ.
  • Ceea ce se calificฤƒ drept defect. Doar defectele confirmate aparศ›in numฤƒrฤƒtorului. Duplicatele, rapoartele respinse ศ™i solicitฤƒrile de รฎmbunฤƒtฤƒศ›ire trebuie excluse, altfel cifra creศ™te fฤƒrฤƒ nicio modificare a calitฤƒศ›ii codului.
  • Fereastra de mฤƒsurare. Defecte descoperite รฎn timpul testฤƒrii sistemului, รฎn timpul testarea regresieiศ™i dupฤƒ lansare descriu lucruri diferite, aศ™a cฤƒ perioada trebuie indicatฤƒ cu numฤƒrul.

Exemplu de densitate a defectelor

Sฤƒ presupunem cฤƒ aveศ›i 3 module integrate รฎn produsul dvs. software. Fiecare modul are urmฤƒtorul numฤƒr de erori descoperite:

  • Modulul 1 = 10 bug-uri
  • Modulul 2 = 20 bug-uri
  • Modulul 3 = 10 bug-uri

Total erori = 10 + 20 + 10 = 40

Numฤƒrul total de linii de cod pentru fiecare modul este:

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

Linie totalฤƒ de Code = 1000+1500+500 = 3000

Densitatea defectului se calculeazฤƒ astfel:

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

Acelaศ™i calcul aplicat per modul este mai util decรขt cifra combinatฤƒ, aศ™a cum aratฤƒ graficul de mai jos: Modulul 2 are 20 de defecte รฎn 1500 LOC, iar Modulul 3 are 10 defecte รฎn doar 500 LOC, deci Modulul 3 este cel mai dens ศ™i mai riscant dintre cele douฤƒ, chiar dacฤƒ a raportat mai puศ›ine erori.

Diagramฤƒ cu bare care comparฤƒ numฤƒrul de defecte ศ™i liniile de cod ale celor trei module utilizate รฎn calculul densitฤƒศ›ii defectelor

Un standard pentru densitatea defectelor

Nu existฤƒ un standard fix pentru densitatea defectelor. Studiile sugereazฤƒ cฤƒ este posibil sฤƒ defect Valoarea per mia de linii de cod este รฎn general consideratฤƒ un semn al calitฤƒศ›ii bune a proiectului, iar aceastฤƒ cifrฤƒ este regula generalฤƒ cea mai citatฤƒ รฎn industrie.

Aศ™teptฤƒrile se modificฤƒ odatฤƒ cu domeniul. Software-ul critic pentru siguranศ›ฤƒ ศ™i reglementat, cum ar fi avionica ศ™i dispozitivele medicale, este limitat la o ศ›intฤƒ mult sub un defect per KLOC, รฎn timp ce aplicaศ›iile de business obiศ™nuite se situeazฤƒ รฎn mod obiศ™nuit peste aceasta. Deoarece regulile de numฤƒrare, unitฤƒศ›ile de dimensiune ศ™i profunzimea testelor diferฤƒ รฎntre organizaศ›ii, un criteriu de referinศ›ฤƒ preluat dintr-un studiu publicat este comparabil doar cu un proiect care mฤƒsoarฤƒ รฎn acelaศ™i mod. Prin urmare, utilizarea practicฤƒ a metricii este internฤƒ: comparaศ›i o versiune cu versiunea anterioarฤƒ a aceluiaศ™i produs, mฤƒsuratฤƒ identic.

Factorii care afecteazฤƒ densitatea defectelor

Aceeaศ™i bazฤƒ de cod poate produce cifre foarte diferite privind densitatea defectelor, รฎn funcศ›ie de urmฤƒtorii factori:

  • Code complexitate. Logicฤƒ profund imbricatฤƒ ศ™i รฎnaltฤƒ complexitate ciclomaticฤƒ produce mai multe defecte pe linie decรขt codul simplu.
  • Tipul de defecte luat รฎn considerare. Luรขnd รฎn considerare doar defectele funcศ›ionale sau incluzรขnd utilizabilitatea, documentaศ›ia ศ™i nefuncศ›ional constatฤƒri, modificฤƒ substanศ›ial numฤƒrฤƒtorul.
  • Durata de timp consideratฤƒ. O cifrฤƒ mฤƒsuratฤƒ pe parcursul unui ciclu de testare de douฤƒ sฤƒptฤƒmรขni nu este comparabilฤƒ cu una mฤƒsuratฤƒ pe parcursul a ศ™ase luni de utilizare รฎn producศ›ie.
  • Abilitฤƒศ›i de dezvoltator ศ™i tester. Dezvoltatorii experimentaศ›i injecteazฤƒ mai puศ›ine defecte, iar testerii experimentaศ›i gฤƒsesc mai multe dintre cele existente, astfel รฎncรขt cele douฤƒ efecte trag metrica รฎn direcศ›ii opuse.
  • Acoperire de testare. Defectele care nu au fost niciodatฤƒ cฤƒutate nu sunt niciodatฤƒ luate รฎn considerare, aศ™adar acoperirea testului limiteazฤƒ รฎn tฤƒcere cรขt de mare poate ajunge densitatea mฤƒsuratฤƒ.

Densitatea defectelor vs. alte metrici ale defectelor

Densitatea defectelor rฤƒspunde la o รฎntrebare: cรขt de concentrate sunt defectele cunoscute. Trei metrici รฎnsoศ›itoare rฤƒspund la รฎntrebฤƒrile pe care nu le poate rฤƒspunde, iar majoritatea echipelor le raporteazฤƒ รฎmpreunฤƒ.

metric Ce mฤƒsoarฤƒ รŽntrebare รฎi rฤƒspunde
Densitatea defectelor Defecte confirmate รฎmpฤƒrศ›ite รฎn funcศ›ie de dimensiune (KLOC sau puncte funcศ›ionale) Care module prezintฤƒ cele mai multe defecte pentru dimensiunea lor?
Scurgere de defecte Defecte gฤƒsite dupฤƒ lansare ca pondere din totalul defectelor Cรขt a scฤƒpat de procesul de testare ศ™i a ajuns la utilizatori?
Eficienศ›a eliminฤƒrii defectelor Defecte eliminate รฎnainte de lansare ca parte din toate defectele Cรขt de eficientฤƒ a fost testarea รฎn detectarea defectelor la timp?
Indicele de severitate a defectelor Defecte ponderate รฎn funcศ›ie de gravitate, mai degrabฤƒ decรขt numฤƒrate รฎn mod egal Cรขt de dฤƒunฤƒtoare sunt defectele, nu doar cรขte sunt?

Citite รฎmpreunฤƒ, cele patru oferฤƒ o imagine mai completฤƒ: o densitate scฤƒzutฤƒ a defectelor cu puncte de scurgere a defectelor ridicate la testarea superficialฤƒ, mai degrabฤƒ decรขt la cod curat, exact interpretarea greศ™itฤƒ despre care avertizeazฤƒ secศ›iunea urmฤƒtoare.

Avantajele densitฤƒศ›ii defectelor

Urmฤƒtoarele sunt avantajele densitฤƒศ›ii defectelor:

  • Ajutฤƒ la mฤƒsurarea eficacitฤƒศ›ii testฤƒrii.
  • Ajutฤƒ la diferenศ›ierea concentraศ›iei de defecte รฎntre componente ศ™i modulele software.
  • Este util รฎn identificarea domeniilor care necesitฤƒ corecศ›ii sau รฎmbunฤƒtฤƒศ›iri.
  • Este util รฎn indicarea componentelor cu risc ridicat, care influenศ›eazฤƒ direct testarea bazatฤƒ pe risc.
  • Ajutฤƒ la identificarea nevoilor de formare ale diferitelor resurse.
  • Poate fi util รฎn estimarea efortului de testare ศ™i refacere cauzat de defecte.
  • Poate estima defectele rฤƒmase รฎn software.
  • รŽnainte de lansare, acest lucru ajutฤƒ la determinarea dacฤƒ testele efectuate pรขnฤƒ รฎn prezent sunt suficiente.
  • Construieศ™te o bazฤƒ istoricฤƒ รฎn raport cu care pot fi comparate versiunile ulterioare.

Limitฤƒrile densitฤƒศ›ii defectelor

Metrica este uศ™or de calculat ศ™i uศ™or de interpretat greศ™it. Urmฤƒtoarele limitฤƒri decid cรขtฤƒ importanศ›ฤƒ are รฎn luarea unei decizii de lansare:

  • Defectele nedetectate sunt invizibile. Numฤƒrฤƒtorul conศ›ine doar defectele pe care testarea le-a gฤƒsit efectiv, astfel รฎncรขt un modul slab testat raporteazฤƒ o cifrฤƒ favorabilฤƒ.
  • Severitatea este ignoratฤƒ. Un defect care corupe o platฤƒ ศ™i o problemฤƒ de aliniere cosmeticฤƒ sunt considerate la fel, motiv pentru care este necesarฤƒ o vizualizare ponderatฤƒ รฎn funcศ›ie de severitate alฤƒturi de acestea.
  • Definiศ›iile defectelor variazฤƒ. Douฤƒ echipe care numฤƒrฤƒ diferit produc numere care nu pot fi comparate, nici mฤƒcar รฎn cadrul aceleiaศ™i organizaศ›ii.
  • Liniile de cod sunt un proxy de dimensiune slabฤƒ. Codul detaliat reduce densitatea fฤƒrฤƒ a รฎmbunฤƒtฤƒศ›i nimic, iar unitatea nu este comparabilฤƒ รฎntre limbaje de programare.
  • Metrica poate fi manipulatฤƒ. Respingerea rapoartelor la limitฤƒ sau umflarea numฤƒrului de linii รฎmbunฤƒtฤƒศ›esc cifra fฤƒrฤƒ a รฎmbunฤƒtฤƒศ›i produsul.

Nimic din toate acestea nu face Densitatea Defectelor inutilฤƒ. O transformฤƒ รฎntr-un indicator de tendinศ›ฤƒ pentru un produs mฤƒsurat constant, mai degrabฤƒ decรขt รฎntr-un scor pentru a compara echipele รฎntre ele.

Cum sฤƒ reduci densitatea defectelor

Reducerea densitฤƒศ›ii defectelor, mai degrabฤƒ decรขt pe hรขrtie, รฎnseamnฤƒ prevenirea defectelor mai devreme ศ™i gฤƒsirea restului รฎnainte de lansare. Practicile de mai jos sunt cele care se regฤƒsesc รฎn ghidurile publicate:

  • Mutฤƒ โ€‹โ€‹testarea mai devreme. Implicarea testerilor รฎn etapa de cerinศ›e ศ™i proiectare depisteazฤƒ ambiguitatea รฎnainte ca aceasta sฤƒ devinฤƒ cod, acesta fiind punctul รฎn care defectele sunt cel mai ieftin de eliminat.
  • RevVizualizaศ›i codul รฎnainte de a se รฎmbina. Evaluarea inter pares identificฤƒ erorile logice, cerinศ›ele interpretate greศ™it ศ™i defectele de proiectare pe care nu le poate identifica. test de unitate a fost scris pentru a cฤƒuta.
  • Automatizaศ›i suita de regresie. Rularea verificฤƒrilor la fiecare commit prin integrare continuฤƒ รฎmpiedicฤƒ reapariศ›ia defectelor vechi รฎn timp ce se scrie cod nou.
  • Scrieศ›i teste mai รฎntรขi. Dezvoltare bazatฤƒ pe teste obligฤƒ fiecare comportament sฤƒ fie specificat รฎnainte de a fi implementat ศ™i testarea mutaศ›iilor poate apoi confirma cฤƒ testele rezultate afirmฤƒ รฎntr-adevฤƒr ceva.
  • Foloseศ™te analiza staticฤƒ. Scanarea automatฤƒ a codului semnaleazฤƒ dereferenศ›ele nule, scurgerile de resurse ศ™i punctele sensibile la complexitate รฎnainte de rularea unui singur test.
  • Refactorizaศ›i modulele dense. Odatฤƒ ce Densitatea Defectelor a identificat cele mai nefavorabile componente, divizarea ศ™i simplificarea acestora reduce de obicei atรขt complexitatea, cรขt ศ™i numฤƒrul de defecte.
  • Introduceศ›i defectele รฎnapoi รฎn proces. Analiza cauzelor principale รฎn cadrul retrospectivelor transformฤƒ defectele individuale รฎn remedieri de proces, mai degrabฤƒ decรขt รฎn โ€‹โ€‹corecศ›ii unice.

Traclansare ked peste lansare alฤƒturi de tehnici de testare a software-ului ศ™i datele de acoperire, Densitatea Defectelor devine un sistem de avertizare timpurie, mai degrabฤƒ decรขt un raport.

รŽntrebฤƒri frecvente

Majoritatea echipelor calculeazฤƒ acest lucru la sfรขrศ™itul testฤƒrii sistemului, cรขnd rapoartele de defecte au fost triate ศ™i confirmate. Mฤƒsurarea la mijlocul ciclului subestimeazฤƒ cifra, deoarece rapoartele sunt รฎncฤƒ deschise, iar mฤƒsurarea doar dupฤƒ lansare o transformฤƒ รฎntr-o metricฤƒ a scurgerilor.

Nu. Luaศ›i รฎn considerare doar codul scris de echipฤƒ ศ™i pe care รฎl poate modifica. Includerea fiศ™ierelor generate, a bibliotecilor furnizorilor sau a codului de testare umflฤƒ numitorul ศ™i reduce artificial densitatea, ceea ce ascunde modulele care au nevoie cu adevฤƒrat de atenศ›ie.

Da. Echipele raporteazฤƒ de obicei o a doua cifrฤƒ limitatฤƒ la defecte critice ศ™i de severitate ridicatฤƒ. Un modul cu o densitate generalฤƒ moderatฤƒ, dar cu mai multe defecte critice, prezintฤƒ un risc de lansare mai mare decรขt unul cu multe probleme cosmetice.

Da, cu un numitor diferit. Echipe agile Deseori, se normalizeazฤƒ defectele per poveste utilizator, per punct de poveste sau per funcศ›ionalitate livratฤƒ. Unitatea conteazฤƒ mai puศ›in decรขt utilizarea aceleiaศ™i unitฤƒศ›i รฎn mod constant รฎn sprinturi.

Modelele de predicศ›ie a defectelor รฎnvaศ›ฤƒ din codul istoric ศ™i din metricile de proces, cum ar fi complexitatea, rata de abandon ศ™i numฤƒrul de defecte din trecut, pentru a clasifica fiศ™ierele care sunt cel mai probabil sฤƒ fie defecte. Apoi, testerii รฎศ™i concentreazฤƒ eforturile asupra modulelor cu cel mai mare risc รฎnainte de a mฤƒsura o versiune.

Indirect. Copilot elaboreazฤƒ rapid teste unitare, scenarii limitฤƒ ศ™i aserศ›iuni standard, ceea ce creศ™te acoperirea ศ™i evidenศ›iazฤƒ defectele mai devreme. De asemenea, genereazฤƒ cod care necesitฤƒ aceeaศ™i revizuire ca oricare altul, deci nu eliminฤƒ niciodatฤƒ necesitatea revizuirii inter pares.

รŽn mod normal, ศ™eful de teste sau managerul de asigurare a calitฤƒศ›ii raporteazฤƒ acest lucru, dar regulile de numฤƒrare trebuie convenite mai รฎntรขi cu departamentul de dezvoltare ศ™i cu managerul de proiect. Fฤƒrฤƒ o definiศ›ie convenitฤƒ a unui defect confirmat ศ™i a codului numฤƒrabil, numฤƒrul nu este justificabil รฎntr-o รฎntรขlnire de lansare.

Nu neapฤƒrat. Un vรขrf de performanศ›ฤƒ รฎnseamnฤƒ adesea cฤƒ testarea a ajuns รฎn sfรขrศ™it la un modul care anterior nu era afectat, ceea ce este o veste bunฤƒ descoperitฤƒ tรขrziu. Citiศ›i-l รฎmpreunฤƒ cu acoperirea ศ™i tendinศ›a defectelor รฎnainte de a-l trata ca pe o eroare de calitate.

Rezumaศ›i aceastฤƒ postare cu: