Forum IT Moldova

Cyclomatic Complexi...
 
Notificări
Șterge tot

Cyclomatic Complexity/ Complexitatea ciclometrică a lui Thomas J. McCabe


Luna
Postări: 279
 Luna
Admin
Topic starter
(@elucy)
Reputable Member
S-a alăturat: 3 ani în urmă

Cyclomatic Complexity/ Complexitatea ciclometrică a lui Thomas J. McCabe

 

 

Pentru a înțelege complexitatea ciclometrică, să înțelegem mai întâi  ce este Software Metric. Măsurarea nu este altceva decât o indicație cantitativă a mărimii/dimensiunii/capacității unui atribut al unui produs/proces. Valoarea software-ului este definită ca o măsură cantitativă a unui atribut pe care un sistem software îl posedă în ceea ce privește costul, calitatea, dimensiunea și programul.

 

Exemplu

Măsură - Nr. de erori

Valori - Numărul de erori găsite per persoană

 

 

Complexitatea ciclometrică în testarea software-ului

 

Complexitatea ciclometrică în testarea software-ului este o măsurătoare de testare utilizată pentru măsurarea complexității unui program software. Este o măsură cantitativă a căilor independente din codul sursă al unui program software. Complexitatea ciclometrică poate fi calculată utilizând grafice de flux de control sau cu privire la funcții, module, metode sau clase dintr-un program software.

Calea independentă este definită ca o cale care are cel puțin o margine care nu a fost parcursă înainte în alte căi.

 

Această măsurătoare a fost dezvoltată de Thomas J. McCabe în 1976 și se bazează pe o reprezentare a fluxului de control a programului. Fluxul de control descrie un program ca un grafic care constă din Noduri și Muchii.

 

În grafic, nodurile reprezintă sarcini de procesare, în timp ce marginile reprezintă fluxul de control între noduri.

 

Notarea graficului de flux pentru un program

Notația Flow Graph pentru un program definește mai multe noduri conectate prin margini. Mai jos sunt diagrame de flux pentru instrucțiuni precum if-else, While, until și secvența normală a fluxului.

 

Calcularea complexității ciclometrice

 

Reprezentare matematică:

Din punct de vedere matematic, este un set de căi independente prin diagrama grafică. Complexitatea codului programului poate fi definită folosind formula:

V(G) = E - N + 2

Unde,

E – Numărul de muchii

N – Numărul de noduri

V (G) = P + 1

Unde P = Numărul de noduri predicate (nodul care conține condiția)

 

Exemplu 

i = 0;

n=4; //N-Numărul de noduri prezente în grafic


în timp ce (i<n-1) fac

j = i + 1;


în timp ce (j<n) face


dacă A[i]<A[j] atunci

swap(A[i], A[j]);


sfârşitul face;

i=i+1;


sfârşitul face;

 

Graficul de flux pentru acest program va fi

 

Calculul matematic:

  • V(G) = 9 – 7 + 2 = 4
  • V(G) = 3 + 1 = 4 (Condiția nodurilor sunt 1,2 și 3 noduri)
  • Set de bază – Un set de posibile căi de execuție a unui program
  • 1, 7
  • 1, 2, 6, 1, 7
  • 1, 2, 3, 4, 5, 2, 6, 1, 7
  • 1, 2, 3, 5, 2, 6, 1, 7

 

 

Proprietăți ale complexității ciclometrice:

 

Următoarele sunt proprietățile complexității ciclometrice:

  1. V (G) este numărul maxim de căi independente din grafic
  2. V (G) >=1
  3. G va avea o cale dacă V (G) = 1
  4. Reduceți complexitatea la 10

 

 

Cum este utilă această măsură pentru testarea software-ului?

 

Testarea căii de bază este una dintre tehnicile cutiei albe și garantează executarea a cel puțin o declarație în timpul testării. Verifică fiecare cale liniar independentă prin program, ceea ce înseamnă că numărul cazurilor de testare va fi echivalent cu complexitatea ciclometrică a programului.

 

Această măsurătoare este utilă datorită proprietăților complexității ciclometrice (M):

  1. M poate fi numărul de cazuri de testare pentru a atinge acoperirea sucursalei (limită superioară)
  2. M poate fi numărul de căi prin grafice. (Limita inferioară)

 

Luați în considerare acest exemplu:

Dacă (Condiția 1)

Afirmația 1




Altfel

Afirmația 2




Dacă (condiția 2)

Afirmația 3




Altfel

Afirmația 4

 

Complexitatea ciclometrică pentru acest program va fi 8-7+2=3.

Deoarece complexitatea a calculat ca 3, sunt necesare trei cazuri de testare pentru acoperirea completă a căii pentru exemplul de mai sus.

 

 

Pași de urmat pentru cazurile de testare

 

Următorii pași ar trebui urmați pentru calcularea complexității ciclometrice și proiectarea cazurilor de testare.

Pasul 1 – Construcția graficului cu noduri și muchii din cod

Pasul 2 – Identificarea căilor independente

Pasul 3 – Calculul complexității ciclometrice

Pasul 4 – Proiectarea cazurilor de testare

 

Odată ce setul de bază este format, CAZURI DE TEST ar trebui să fie scrise pentru a executa toate căile.

 

Mai multe despre V (G):

Complexitatea ciclometrică poate fi calculată manual dacă programul este mic. Instrumentele automate trebuie utilizate dacă programul este foarte complex, deoarece acesta implică mai multe grafice de flux. Pe baza numărului de complexitate, echipa poate concluziona asupra acțiunilor care trebuie luate pentru măsură.

 

Următorul tabel oferă o privire de ansamblu asupra numărului de complexitate și semnificația corespunzătoare a lui v (G):

Număr de complexitate

Sens

1-10

Cod structurat și bine scris

Testabilitate ridicată

Costul și efortul sunt mai mici

10-20

Cod complex

Testabilitate medie

Costul și efortul sunt medii

20-40

Cod foarte complex

Testabilitate scăzută

Costul și Efortul sunt mari

>40

Deloc testabil

Cost și efort foarte ridicat

 

 

Instrumente pentru calculul complexității ciclometrice

 

Sunt disponibile multe instrumente pentru a determina complexitatea aplicației. Unele instrumente de calcul al complexității sunt utilizate pentru anumite tehnologii. Complexitatea poate fi găsită după numărul de puncte de decizie dintr-un program. Punctele de decizie sunt declarațiile if, for, for-each, while, do, catch, case într-un cod sursă.

Exemple de instrumente sunt:

  • OCLint – Analizor de cod static pentru C și limbi înrudite
  • Reflector Add In – Măsuri de cod pentru ansambluri .NET
  • GMetrics – Găsiți valori în aplicațiile legate de Java

 

 

Utilizări ale complexității ciclometrice

 

Complexitatea ciclometrică se poate dovedi a fi de mare ajutor:

  • Ajută dezvoltatorii și testerii să determine execuții independente ale căilor.
  • Dezvoltatorii se pot asigura că toate căile au fost testate cel puțin o dată.
  • Ne ajută să ne concentrăm mai mult pe căile descoperite.
  • Îmbunătățiți acoperirea codului în Inginerie software.
  • Evaluați riscul asociat aplicației sau programului.
  • Utilizarea acestor valori la începutul ciclului reduce mai mult riscul programului.

 

Deci, Cyclomatic Complexity este o metrică software utilă pentru testarea structurată sau White Box. Este folosit în principal pentru a evalua complexitatea unui program. Dacă punctele de decizie sunt mai multe, atunci complexitatea programului este mai mare. Dacă programul are un număr mare de complexitate, atunci probabilitatea de eroare este mare cu un timp crescut pentru întreținere și depanare.

Distribuie: