Programmering

Sådan analyseres den cyklomatiske kompleksitet i din kode

Der er forskellige faktorer, der kan bidrage til kompleksiteten af ​​en type eller en metode, der vedrører en type i din applikations kode. Cyklomatisk kompleksitet er en populær metric, der bruges til at måle dit programs kompleksitet. Med andre ord er det en softwaremetrik, der giver et kvantitativt mål for kompleksiteten af ​​et program.

I det væsentlige er cyklomatisk kompleksitet et mål for de lineært uafhængige stier, der er tilgængelige gennem dit program. Dens værdi afhænger faktisk af antallet af betingede grene eller konstruktioner i din kode. Så cyklomatisk kompleksitet vil være høj for metoder, der har et stort antal betingede konstruktioner (dvs., switch / if / while / for / foreach-udsagn).

MSDN siger: "Cyklomatisk kompleksitet måler antallet af lineært uafhængige stier gennem metoden, som bestemmes af antallet og kompleksiteten af ​​betingede grene. En lav cyklomatisk kompleksitet indikerer generelt en metode, der er let at forstå, teste og vedligeholde."

Sådan beregnes cyklomatisk kompleksitet:

CC = E - N + 1

Hvor,

CC betegner cyklomatisk kompleksitet

E angiver antallet af kanter i grafen

N angiver antallet af noder i grafen

Bemærk, at en node repræsenterer den logiske gren, og en kant repræsenterer den forbundne linje mellem noderne. Jo lavere værdien af ​​en metodes cyklomatiske kompleksitet er, jo lettere er det at teste og vedligeholde, derfor jo bedre. Du kan drage fordel af cyklomatisk kompleksitet til at beregne kompleksiteten af ​​metoder, typer og også moduler i din applikation.

Da cyklomatisk kompleksitet angiver de uafhængige stier gennem programmet, jo mere værdien af ​​den cyklomatiske kompleksitet, jo mere er antallet af testcases, du har brug for til dit program - antallet af testcases, du har brug for, svarer typisk til det cyclomatic kompleksitet i dette tilfælde. Hvis værdien af ​​cyklomatisk kompleksitet er mindre (en værdi mindre end eller lig med 10 betragtes som fantastisk), antages koden at være velstruktureret, meget testbar og vedligeholdelig.

Hvordan kontrollerer jeg cyklomatisk kompleksitet?

De nyere versioner af Visual Studio understøtter beregning af cyklomatisk kompleksitet ved hjælp af Visual Studio IDE. Du kan beregne kodemetrik for hele løsningen eller for de projekter, du har valgt. Når du kører det, viser vinduet Kodemetrikresultater dig kodeanalyseresultaterne organiseret i Vedligeholdelsesindeks, cyklomatisk kompleksitet, arvedybde, klassekobling og også kodelinjerne. I dette indlæg vil vi undersøge cyklomatisk kompleksitet, og jeg vil præsentere en diskussion om de andre punkter i et senere indlæg her.

Se nu kodestykket nedenfor.

privat ugyldigt DisplayMessage (streng str)

       {

Console.WriteLine (str);

       }

Når du beregner den cyklomatiske kompleksitet for DisplayMessage-metoden ved hjælp af Visual Studio, viser den værdien som 1. Overvej nu denne metode, der indeholder en kontrol for at se, om parameteren, der sendes til metoden som et argument, er nul eller tom.

privat ugyldigt DisplayTextMessage (strengstr)

       {

hvis (! streng.IsNullOrEmpty (str))

Console.WriteLine (str);

       }

Hvis du kører kodemetrik til løsningen igen, vil du bemærke, at den cyklomatiske kompleksitet for DisplayTextMessage-metoden er 2.

Hvordan reducerer jeg cyklomatisk kompleksitet i koden?

Selv om det i nogle tilfælde er vanskeligt at overholde en bestemt strategi for at reducere den cyklomatiske kompleksitet i din kode, da de betingede konstruktioner kan være, fordi det er iboende for dit problem, kan du vedtage forskellige strategier for at opnå en lavere cyklomatisk kompleksitetsværdi. De to tilgange, som du skal følge for at afbøde høj cyklomatisk kompleksitet, er gennem enhedstest og kodeomdannelse. Mens enhedstest hjælper dig med at minimere risiciene, bør du udnytte kodeomdannelse for at gøre din kode mindre kompleks, lettere at teste og vedligeholde.

Du kan reducere den cyklomatiske kompleksitet i dit program ved at erstatte de betingede konstruktioner med polymorfisme. Ved brug af polymorfisme kan du tilføje en masse fleksibilitet til din kode - din kode bliver mere testbar, og du kan tilføje, redigere eller endda fjerne betingelser uden meget ændringer i din kode. I det væsentlige, jo mindre værdi af cyklomatisk kompleksitet, jo mere er din kode let at læse, teste og vedligeholde. I nogle tilfælde vil jeg anbefale, at du drager fordel af de adfærdsmæssige designmønstre som f.eks. Strategi-designmønsteret for at reducere cyklomatisk kompleksitet i din kode.

$config[zx-auto] not found$config[zx-overlay] not found