Om de cyclomatische complexiteit te begrijpen, laten we eerst begrijpen -
Wat is softwaremetriek?
Meting is niets anders dan een kwantitatieve indicatie van de grootte / afmeting / capaciteit van een attribuut van een product / proces. Softwaremetriek wordt gedefinieerd als een kwantitatieve maatstaf van een attribuut dat een softwaresysteem bezit met betrekking tot kosten, kwaliteit, omvang en planning.
Voorbeeld-
Maatregel - aantal foutenStatistieken - aantal gevonden fouten per persoon
In deze tutorial leer je-
- Wat is softwaremetriek?
- Wat is cyclomatische complexiteit?
- Stroomgrafieknotatie voor een programma:
- Hoe cyclomatische complexiteit te berekenen
- Eigenschappen van cyclomatische complexiteit:
- Hoe is deze statistiek nuttig voor het testen van software?
- Meer over V (G):
- Hulpmiddelen voor berekening van cyclomatische complexiteit:
- Gebruik van cyclomatische complexiteit:
Cyclomatische complexiteit bij softwaretests
Cyclomatische complexiteit bij softwaretests is een teststatistiek die wordt gebruikt om de complexiteit van een softwareprogramma te meten. Het is een kwantitatieve maat voor onafhankelijke paden in de broncode van een softwareprogramma. Cyclomatische complexiteit kan worden berekend met behulp van controlestroomgrafieken of met betrekking tot functies, modules, methoden of klassen binnen een softwareprogramma.
Onafhankelijk pad wordt gedefinieerd als een pad dat ten minste één rand heeft die nog niet eerder is doorlopen in andere paden.
Deze statistiek is in 1976 ontwikkeld door Thomas J. McCabe en is gebaseerd op een weergave van de controlestroom van het programma. De controlestroom geeft een programma weer als een grafiek die bestaat uit knooppunten en randen.
In de grafiek vertegenwoordigen knooppunten verwerkingstaken, terwijl randen de besturingsstroom tussen de knooppunten vertegenwoordigen.
Stroomgrafieknotatie voor een programma:
Flow Graph-notatie voor een programma definieert verschillende knooppunten die via de randen zijn verbonden. Hieronder vindt u stroomdiagrammen voor uitspraken als if-else, While, tot en de normale stroomvolgorde.
Hoe cyclomatische complexiteit te berekenen
Wiskundige weergave:
Wiskundig gezien is het een reeks onafhankelijke paden door het grafiekdiagram. De codecomplexiteit van het programma kan worden gedefinieerd met behulp van de formule -
V (G) = E - N + 2
Waar,
E - Aantal randen
N - Aantal knooppunten
V (G) = P + 1
Waar P = aantal predikaatknooppunten (knooppunt dat conditie bevat)
Voorbeeld -
i = 0;n = 4; // N-aantal knooppunten aanwezig in de grafiekterwijl (iDe stroomgrafiek voor dit programma zal zijn
Wiskundig computergebruik,
- V (G) = 9 - 7 + 2 = 4
- V (G) = 3 + 1 = 4 (Conditieknooppunten zijn 1,2 en 3 knooppunten)
- Basisset - Een set van mogelijke uitvoeringspaden van een programma
- 1, 7
- 1, 2, 6, 1, 7
- 1, 2, 3, 4, 5, 2, 6, 1, 7
- 1, 2, 3, 5, 2, 6, 1, 7
Eigenschappen van cyclomatische complexiteit:
Hieronder volgen de eigenschappen van cyclomatische complexiteit:
- V (G) is het maximale aantal onafhankelijke paden in de grafiek
- V (G)> = 1
- G heeft één pad als V (G) = 1
- Minimaliseer de complexiteit tot 10
Hoe is deze statistiek nuttig voor het testen van software?
Basis Path-testen is een van de White box-technieken en het garandeert dat tijdens het testen ten minste één instructie wordt uitgevoerd. Het controleert elk lineair onafhankelijk pad door het programma, wat betekent dat het aantal testgevallen gelijk zal zijn aan de cyclomatische complexiteit van het programma.
Deze statistiek is handig vanwege eigenschappen van cyclomatische complexiteit (M) -
- M kan het aantal testgevallen zijn om filiaaldekking te bereiken (bovengrens)
- M kan het aantal paden door de grafieken zijn. (Ondergrens)
Beschouw dit voorbeeld -
If (voorwaarde 1)Stelling 1AndersStelling 2If (voorwaarde 2)Stelling 3AndersStelling 4Cyclomatische complexiteit voor dit programma is 8-7 + 2 = 3.
Omdat de complexiteit is berekend als 3, zijn er drie testgevallen nodig om de volledige paddekking voor het bovenstaande voorbeeld te bereiken.
Te volgen stappen:
De volgende stappen moeten worden gevolgd voor het berekenen van de cyclomatische complexiteit en het ontwerp van testcases.
Stap 1 - Opbouw van een grafiek met knooppunten en randen uit de code
Stap 2 - Identificatie van onafhankelijke paden
Stap 3 - Cyclomatische complexiteitsberekening
Stap 4 - Ontwerp van testcases
Zodra de basisset is gevormd, moet TEST CASES worden geschreven om alle paden uit te voeren.
Meer over V (G):
Cyclomatische complexiteit kan handmatig worden berekend als het programma klein is. Geautomatiseerde tools moeten worden gebruikt als het programma erg complex is, omdat dit meer stroomdiagrammen met zich meebrengt. Op basis van het complexiteitsgetal kan het team besluiten welke acties moeten worden ondernomen om te meten.
De volgende tabel geeft een overzicht van het complexiteitsgetal en de bijbehorende betekenis van v (G):
Complexiteitsgetal Betekenis 1-10 Gestructureerde en goed geschreven code Hoge testbaarheid Kosten en moeite zijn minder 10-20 Complexe code Gemiddeld Testbaarheid Kosten en moeite zijn gemiddeld 20-40 Zeer complexe code Lage testbaarheid Kosten en inspanning zijn hoog > 40 Helemaal niet testbaar Zeer hoge kosten en moeite Hulpmiddelen voor berekening van cyclomatische complexiteit:
Er zijn veel tools beschikbaar om de complexiteit van de applicatie te bepalen. Sommige tools voor het berekenen van complexiteit worden gebruikt voor specifieke technologieën. Complexiteit kan worden gevonden door het aantal beslissingspunten in een programma. De beslissingspunten zijn if, for, for-each, while, do, catch, case statements in een broncode.
Voorbeelden van tools zijn
- OCLint - Statische code-analysator voor C en verwante talen
- Reflector Add In - Code metrische gegevens voor .NET-assembly's
- GMetrics - Vind metrics in Java-gerelateerde applicaties
Gebruik van cyclomatische complexiteit:
Cyclomatische complexiteit kan zeer nuttig blijken te zijn bij
- Helpt ontwikkelaars en testers om onafhankelijke paduitvoeringen te bepalen
- Ontwikkelaars kunnen er zeker van zijn dat alle paden minstens één keer zijn getest
- Helpt ons om ons meer te concentreren op de onbedekte paden
- Verbeter de codedekking in Software Engineering
- Evalueer het risico dat verband houdt met de toepassing of het programma
- Door deze statistieken vroeg in de cyclus te gebruiken, wordt het risico van het programma kleiner
Gevolgtrekking:
Cyclomatische complexiteit is softwaremetriek die nuttig is voor gestructureerd of White Box-testen. Het wordt voornamelijk gebruikt om de complexiteit van een programma te evalueren. Als de beslissingspunten meer zijn, dan is de complexiteit van het programma meer. Als het programma een hoog complexiteitsgetal heeft, is de kans op fouten groot met meer tijd voor onderhoud en probleemoplossing.