what is cyclomatic complexity learn with an example
Cyclomatische complexiteit is een veelgebruikt modewoord in de ontwikkelingsgemeenschap. Deze techniek wordt voornamelijk gebruikt om de complexiteit van een stukje code of functionaliteit te bepalen.
De techniek is ontwikkeld door MaCabe en helpt bij het identificeren van de onderstaande 3 vragen voor de programma's / features
- Is de functie / het programma testbaar?
- Wordt de feature / het programma door iedereen begrepen?
- Is het kenmerk / programma betrouwbaar genoeg?
Als QA kunnen we deze techniek gebruiken om het 'niveau' van onze tests te identificeren. Het is een praktijk dat als het resultaat van cyclomatische complexiteit meer of een groter aantal is, we dat stuk functionaliteit als complex van aard beschouwen en daarom concluderen we als tester; dat het stuk code / functionaliteit diepgaande tests vereist.
Aan de andere kant, als het resultaat van de cyclomatische complexiteit een kleiner getal is, concluderen we als QA dat de functionaliteit minder complex is en beslissen we de reikwijdte dienovereenkomstig.
Laat me stap voor stap gaan: eerst begrijpen hoe het wordt berekend, en dan gaan we verder om te begrijpen hoe het testniveau wordt bepaald.
Wat je leert:
- Hoe de cyclomatische complexiteit te berekenen?
- Cyclomatische complexiteitsformule
- Cyclomatische complexiteitsvoorbeeld
- Hoe kunnen testers het gebruiken?
- Nu komt de snelkoppeling-
- Aanbevolen literatuur
Hoe de cyclomatische complexiteit te berekenen?
De berekening van CC draait om 2 concepten
hoe u elementen toevoegt in een array java
- Knooppunten
- Randen
Statements in een programma worden weergegeven als knooppunten, en controlepaden van de ene instructie naar de andere worden gerepresenteerd door Edges.
Cyclomatische complexiteitsformule
De formule voor het berekenen van CC is als:
CC = E ~ N + 2
Waar:
E = aantal randen
N = aantal knooppunten.
(Er is een snelkoppeling om het te berekenen, maar niet nu ... later ...)
Cyclomatische complexiteitsvoorbeeld
Laten we het onderstaande voorbeeld nemen om het te begrijpen.
Beschouw de onderstaande controlestroomgrafiek:
Ik heb de NETTO stippen om de knooppunten te identificeren en BLAUW lijnen om de randen te identificeren:
Dus hier in dit voorbeeld:
Aantal knooppunten (rode stippen) = 14
Aantal randen (blauwe lijnen) = 15
Dus de cyclomatische complexiteit = N ~ E + 2 = (14-15) +2 = 3
Hoe kunnen testers het gebruiken?
In de praktijk kunnen testers bij ontwikkelaars zitten om de controlestroomgrafiek voor een bepaald stuk code af te leiden. En als we eenmaal de grafiek hebben, kunnen we de complexiteit afleiden met deze formule. Maar het verhaal voor testers houdt hier niet op: - het belangrijkste punt is hier - wat is het nut van dit nummer voor het testteam?
Welnu, testers kunnen van dit nummer gebruik maken om het niveau van hun tests te bepalen.
In de praktijk zijn er 2 testniveaus:
- Lengte testen
- Breedte testen
Beschouw de onderstaande matrix voor verschillende kenmerken van een module: -
Lengtetest is een manier waarop we proberen het hele bereik te bestrijken door de belangrijke testgevallen voor elke functie te selecteren. Bijvoorbeeld , in dit geval, stel dat ik ervoor kies om te impliceren met de lengtetest, dan kan ik selecteren -
- Subfunctie 1.1 en Subfunctie 1.3 voor functie 1
- Subfunctie 2.2 van Feature 2
- Sub Feature 3.3 van Feature 3
- Subfunctie 4.2 en Subfunctie 4.3 van functie 4
- Sub Feature 5.3 van Feature 5
Dus hier raak ik de hele functie aan zonder uitputtend in te gaan op de subfuncties.
Als het resultaat van de CC een groter aantal is, dan kies ik ervoor om met Breadth-testen te gaan, ik zal eigenlijk elke functie en elke subfunctie testen.
de primaire toegangsrechten voor bestanden in unix zijn:
Dus op basis van uw huidige projectvereiste, omgevingsbetrouwbaarheid, kunnen testers samenwerken met het ontwikkelteam en een standaard creëren voor het identificeren van het niveau en de reikwijdte van testen. Bijvoorbeeld -
- Als het CC<=15 – Basic sanity test
- Als de CC tussen de 16 en 30 - lengtetest is
- Als de CC tussen 31 en 50 is - Breedte testen
- Als de CC> 50 - Het is een chaotische functionaliteit en moet verder worden afgebroken
Nu komt de snelkoppeling-
Tel gewoon het aantal gesloten regio's en tel er 1 bij op.
In ons voorbeeld hierboven - aantal gesloten gebieden = 2 (geel ingevuld), dus de CC = 2 + 1 = 3
In het echte werk is het erg moeilijk om het resultaat te concluderen als we uitspraken doen als -
- '... ..deze functionaliteit is erg moeilijk te implementeren'
Wat bedoel je met moeilijk? Is het complex, ingewikkeld of chaotisch?
Hoe kwam u tot de conclusie dat dit moeilijk is?
- '... dit zou tegen het einde van de dag beschikbaar moeten zijn'
Wat is het einde van de dag? Uw einde van de dag is 19.00 uur, waarschijnlijk de mijne is 18.00 uur?
- '... Ik zou hiervoor gedetailleerde tests moeten doen'
Wat is gedetailleerd testen? Er is geen testtechniek genaamd 'Gedetailleerd testen'
- '... de code moet van goede kwaliteit zijn voordat we deze implementeren voor QA'
Hoe meet je goede kwaliteit?
In plaats daarvan, als ik de uitspraken anders formuleer als -
De cyclomatische complexiteit voor het stuk code wordt berekend als 75 en volgens onze normen; deze functionaliteit is van Chaos-aard. Daarom raden we aan om het verder te ontbinden.
Over
- '... ..deze functionaliteit is erg moeilijk te implementeren'
De functionaliteit wordt om 17.00 uur CST in de QA-omgeving geïmplementeerd.
Over
- '... dit zou tegen het einde van de dag beschikbaar moeten zijn'
Aangezien de cyclomatische complexiteit wordt berekend als 48, zouden we volgens onze standaard de systeemtests uitvoeren samen met de integratie- en regressietests voor de functie.
Over
- '.... Ik zou hiervoor gedetailleerde tests moeten doen'
Volgens Sonar is de CC nu 102. We hebben de CC gestandaardiseerd naar 10. We zullen de code implementeren wanneer we de code verbeteren om de CC minder dan 10 te maken.
Over
- '.... De code moet van goede kwaliteit zijn voordat we deze implementeren voor QA'
Wat is het verschil tussen de twee uitspraken?
Welnu, het verschil hier is de meting. Ik heb elk van mijn uitspraken ondersteund met passende metingen die mijn belanghebbenden zouden helpen precies te weten wat ik wil zeggen.
Gebruik op dezelfde manier Cyclomatic-complexiteit bij het testen van software om de exacte mate van uw testinspanningen te bepalen en u kunt het gebruiken om niet alleen de reikwijdte van uw tests te bepalen, maar ook de soorten tests die u zou moeten uitvoeren.
Aanbevolen literatuur
- Wat is componenttesten of moduletesten (leer met voorbeelden)
- Wat is vergelijkingstesten (leren met voorbeelden)
- Software Testing Career Package eBook
- Wat is System Integration Testing (SIT): leer met voorbeelden
- Beste softwaretesttools 2021 (QA Test Automation Tools)
- Primer eBook downloaden testen
- 5 belangrijke diagrammen die testers moeten leren gebruiken
- TestRail Review-zelfstudie: leer end-to-end-testcasebeheer