Syklomaattinen kompleksisuus ohjelmistotestauksessa esimerkin avulla
โก รlykรคs yhteenveto
Syklomaattinen kompleksisuus on Thomas McCaben vuonna 1976 kehittรคmรค ohjelmistometriikka, joka laskee ohjelman lรคpi kulkevat riippumattomat polut. Se lasketaan ohjausvuograafista ja antaa tรคydellisen haarautumisen kattamiseen tarvittavien testitapausten mรครคrรคn.

Mikรค on McCaben syklomaattinen monimutkaisuus?
Syklomaattinen monimutkaisuus ohjelmistotestauksessa on testausmittari, jota kรคytetรครคn ohjelmiston monimutkaisuuden mittaamiseen. Se on riippumattomien polkujen kvantitatiivinen mitta ohjelmiston lรคhdekoodissa. Syklomaattinen monimutkaisuus voidaan laskea kรคyttรคmรคllรค ohjausvuokaavioita tai funktioita, moduuleja, menetelmiรค tai luokkia ohjelmistossa.
Itsenรคinen polku mรครคritellรครคn poluksi, jolla on vรคhintรครคn yksi reuna, jota ei ole kuljettu aiemmin muilla poluilla.
Tรคmรคn mittarin on kehittรคnyt Thomas J. McCabe vuonna 1976, ja se perustuu ohjelman ohjausvirran esitykseen. Ohjausvirtaus kuvaa ohjelman kaaviona, joka koostuu solmuista ja reunoista.
Graafissa solmut edustavat kรคsittelytehtรคviรค, kun taas reunat edustavat ohjausvirtaa solmujen vรคlillรค.
Vuokaavion merkintรคtapa ohjelmalle
Ohjelman Flow Graph -merkintรค mรครคrittelee useita reunojen kautta yhdistettyjรค solmuja. Alla on vuokaaviot lauseille, kuten if-else, While, till ja normaali virtaussekvenssi.
Kuinka laskea syklomaattinen monimutkaisuus
Matemaattinen esitys:
Matemaattisesti se on joukko riippumattomia polkuja graafikaavion lรคpi. Code ohjelman monimutkaisuus voidaan mรครคritellรค kaavalla โ
V(G) = E - N + 2
Missรค,
E โ Reunojen lukumรครคrรค
N โ Solmujen mรครคrรค
V (G) = P + 1
Missรค P = predikaattisolmujen lukumรครคrรค (solmu, joka sisรคltรครค ehdon)
Esimerkki -
i = 0; n=4; //N-Number of nodes present in the graph while (i<n-1) do j = i + 1; while (j<n) do if A[i]<A[j] then swap(A[i], A[j]); end do; j=j+1; end do;
Tรคmรคn ohjelman vuokaavio on
Laskemalla matemaattisesti,
- V(G) = 9 โ 7 + 2 = 4
- V(G) = 3 + 1 = 4 (ehtosolmut ovat 1,2, 3 ja XNUMX solmua)
Perussetti, neljรค toisistaan โโriippumatonta suorituspolkua:
- 1, 7
- 1, 2, 6, 1, 7
- 1, 2, 3, 4, 5, 2, 6, 1, 7
- 1, 2, 3, 5, 2, 6, 1, 7
Syklomaattisen kompleksisuuden ominaisuudet
Seuraavat ovat syklomaattisen monimutkaisuuden ominaisuudet:
- V (G) on riippumattomien polkujen enimmรคismรครคrรค kaaviossa
- V (G) >=1
- G:llรค on yksi polku, jos V (G) = 1
- Yleisesti kรคytetty ohje on pitรครค V(G) arvossa 10 tai sen alapuolella yksittรคisellรค moduulilla.
Kuinka tรคmรค mittari on hyรถdyllinen ohjelmistotestauksessa
Peruspolkutestaus on yksi White Box -tekniikoista, ja se takaa ainakin yhden lausekkeen suorittamisen testauksen aikana. Se tarkistaa jokaisen lineaarisesti riippumattoman polun ohjelman lรคpi, mikรค tarkoittaa, ettรค tarvittavien testitapausten mรครคrรค on yhtรค suuri kuin ohjelman syklomaattinen monimutkaisuus.
Tรคmรค mittari on hyรถdyllinen syklomaattisen monimutkaisuuden (M) ominaisuuksien vuoksi โ
- M voi olla testitapausten lukumรครคrรค haaran kattavuuden saavuttamiseksi (ylรคraja)
- M voi olla kaavioiden lรคpi kulkevien polkujen lukumรครคrรค. (alaraja)
Mieti tรคtรค esimerkkiรค -
If (Condition 1) Statement 1 Else Statement 2 If (Condition 2) Statement 3 Else Statement 4
Tรคmรคn ohjelman syklomaattinen monimutkaisuus on 8-7+2=3.
Koska monimutkaisuus on laskettu arvoksi 3, tarvitaan kolme testitapausta yllรค olevan esimerkin tรคydelliseen polun kattamiseen.
Noudatettavat vaiheet
Seuraavia vaiheita tulee noudattaa syklomaattisen monimutkaisuuden ja testitapausten suunnittelussa.
Vaihe 1 โ Graafin rakentaminen koodista solmujen ja reunojen kanssa
Vaihe 2 โ Itsenรคisten polkujen tunnistaminen
Vaihe 3 โ Syklomaattisen monimutkaisuuden laskenta
Vaihe 4 โ Testitapausten suunnittelu
Kun perussarja on muodostettu, TESTITAPAUKSET tulee kirjoittaa suorittamaan kaikki polut.
Lisรครค V:stรค (G)
Syklomaattinen monimutkaisuus voidaan laskea manuaalisesti, jos ohjelma on pieni. Automaattisia tyรถkaluja on kรคytettรคvรค, jos ohjelma on erittรคin monimutkainen, koska se sisรคltรครค enemmรคn vuokaavioita. Monimutkaisuusluvun perusteella tiimi voi tehdรค johtopรครคtรถksen toimista, jotka on suoritettava mittaamiseksi.
Seuraava taulukko antaa yleiskatsauksen kompleksisuusluvusta ja sitรค vastaavasta v(G):n merkityksestรค:
| Monimutkaisuusnumero | Merkitys |
|---|---|
| 1 ja 10 |
Strukturoitu ja hyvin kirjoitettu koodi Korkea testattavuus Kustannukset ja vaiva ovat pienemmรคt |
| 11 ja 20 |
Monimutkainen koodi Keskitasoinen testattavuus Kustannukset ja vaiva ovat keskitasoa |
| 21 ja 40 |
Hyvin monimutkaista koodia Alhainen testattavuus Kustannukset ja vaiva ovat korkeat |
| > 40 |
Ei ollenkaan testattavissa Erittรคin korkeat kustannukset ja vaiva |
Tyรถkaluja syklomaattisen kompleksisuuden laskemiseen
Kรคytettรคvissรค on monia tyรถkaluja sovelluksen monimutkaisuuden mรครคrittรคmiseen. Tietyissรค teknologioissa kรคytetรครคn joitain monimutkaisuuden laskentatyรถkaluja. Monimutkaisuus lรถytyy ohjelman pรครคtรถspisteiden lukumรครคrรคstรค. Pรครคtรถskohdat ovat if, for-for-each, while, do, catch, tapauslausekkeet lรคhdekoodissa.
Esimerkkejรค tyรถkaluista ovat
- OCLint โ Staattinen koodianalysaattori C:lle ja siihen liittyville kielille
- SonarQube โ Raportoi syklomaattista ja kognitiivista kompleksisuutta yli 25 kielellรค
- Visual Studio Code Mittarit โ Sisรครคnrakennettu syklomaattinen monimutkaisuusanalyysi .NET-kokoonpanoille
- Radon ja Lizard โ Komentorivin monimutkaisuusanalysaattorit Python ja vastaavasti monikielisille projekteille
- GMetrics โ Etsi mittareita Java liittyviรค sovelluksia
Syklomaattisen kompleksisuuden kรคyttรถtarkoitukset
Syklomaattinen monimutkaisuus voi osoittautua erittรคin hyรถdylliseksi
- Auttaa kehittรคjiรค ja testaajia mรครคrittรคmรครคn itsenรคisten polkujen suorituksia
- Kehittรคjรคt voivat varmistaa, ettรค kaikki polut on testattu ainakin kerran
- Auttaa meitรค keskittymรครคn enemmรคn paljastamattomiin polkuihin
- Paranna koodin kattavuutta Ohjelmistotuotanto
- Arvioi sovellukseen tai ohjelmaan liittyvรค riski
- Nรคiden mittareiden kรคyttรคminen syklin varhaisessa vaiheessa vรคhentรครค ohjelman riskiรค
Kuinka vรคhentรครค syklomaattista monimutkaisuutta
Korkea kompleksisuusluku on signaali, ei tuomio. Neljรค refaktorointia selittรครค suurimman osan kรคytรคnnรถssรค saavutettavissa olevasta vรคhennyksestรค.
- Extract-menetelmรค. Haaran siirtรคminen omaksi funktiokseen jakaa monimutkaisuuden kahden moduulin kesken. Kokonaisuus pysyy samana koko jรคrjestelmรคssรค, mutta jokaisesta yksikรถstรค tulee itsenรคisesti testattava.
- Korvaa ehdollinen ketju haulla. Pitkรคstรค if-else-if-tikapuusta, joka testaa samaa muuttujaa, tulee kartta tai kytkin, joka kutistaa useita pรครคtรถspisteitรค yhdeksi.
- Kรคytรค suojalausekkeita. Virheellisen syรถtteen aikainen palauttaminen poistaa yhden suuren if-else-lohkon luoman sisรคkkรคisyyden muuttamatta toimintaa.
- Korvaa ehtolauseet polymorfismilla. Kun ehtolauseke kytkee tyypin pรครคlle, jokaisen haaran siirtรคminen omaan luokkaan poistaa pรครคtรถksen kokonaan.
Ennen, kun V(G) = 4:
if (user != null) { if (user.isActive()) { if (user.hasRole("admin")) { return grantAccess(); } } } return denyAccess();
Jรคlkeenpรคin, samalla toiminnalla ja sisรคkkรคisyyden poistamisella:
if (user == null) return denyAccess(); if (!user.isActive()) return denyAccess(); if (!user.hasRole("admin")) return denyAccess(); return grantAccess();
Varoitus mittarista. Syklomaattinen monimutkaisuus laskee pรครคtรถksiรค, ei vaikeutta. Switch-lauseke, jossa on kaksikymmentรค yksinkertaista tapausta, saa 21 pistettรค, mutta on silti helppo lukea, kun taas syvรคlle sisรคkkรคiseen lohkoon, jossa on 8 pistettรค, voi olla paljon vaikeampi ymmรคrtรครค. Kรคytรค numeroa etsiรคksesi ehdokkaita tarkastelua varten, รคlรคkรค pelin kohteena.


.png)
.png)