Megosztás a következőn keresztül:


Kódmetrikák – Ciklonalapú összetettség

A kódmetrikák használatakor úgy tűnik, hogy az egyik legkevésbé érthető elem ciklonalapú összetettségnek tűnik. Lényegében a ciklonos összetettség miatt a magasabb számok rosszak, az alacsonyabb számok pedig jóak. A ciklonos összetettség használatával képet kaphat arról, hogy egy adott kód milyen nehéz lehet a teszteléshez, karbantartáshoz vagy hibaelhárításhoz, valamint annak jelzéséhez, hogy a kód milyen valószínűséggel okoz majd hibákat. Magas szinten a ciklonmatikus összetettség értékét úgy határozzuk meg, hogy megszámoljuk a forráskódban hozott döntések számát. Ebben a cikkben egy egyszerű ciklonalapú összetettségi példával kezdi a koncepció gyors megértését, majd további információkat talál a tényleges használatról és a javasolt korlátokról. Végül van egy szakasz idézetek, amelyek segítségével mélyebbre áshat ebben a témában.

Példa

A ciklomatikus összetettség a "döntési logika mennyiségének mérése egy forráskódfüggvényben" NIST235. Egyszerűen fogalmazva, minél több döntést kell meghozni a kódban, annál összetettebb.

Nézzük meg működés közben. Hozzon létre egy új konzolalkalmazást, majd azonnal számítsa ki a kód metrikáit a következő módon: lépjen a következőre: Elemzés, majd válassza a > Kódmetrikák számítása megoldáshoz lehetőséget.

1. ciklonmatikus összetettségi példa

Figyelje meg, hogy a ciklonmatikus összetettség értéke 2 (a lehető legalacsonyabb érték). Ha nem döntési kódot ad hozzá, figyelje meg, hogy az összetettség nem változik:

2. ciklonmatikus összetettségi példa

Ha döntést ad hozzá, a ciklonmatikus összetettség értéke egy lépéssel feljebb kerül:

3. ciklonmatikus összetettségi példa

Ha az if utasítást egy négy döntéssel rendelkező kapcsolóutasításra módosítja, az az eredeti kettőről hatra változik:

4. ciklonmatikus összetettségi példa

Tekintsünk meg egy (hipotetikus) nagyobb kódbázist.

5. ciklonmatikus összetettségi példa

Figyelje meg, hogy a legtöbb elem, ahogy részletezi az Products_Related osztályt, egy értékkel rendelkezik, de néhányuk összetettsége öt. Önmagában ez a különbség nem feltétlenül nagy dolog, de mivel a legtöbb tagnak van egy egy osztályban, határozottan közelebb kell néznie ezt a két elemet, és látnia kell, hogy mi van bennük. Részletesebben is megnézheti, ha a jobb gombbal az elemre kattint, és a helyi menüből választja Ugrás a forráskódra lehetőséget. Tekintse meg közelebbről a Product.set(Product):

6. ciklonmatikus összetettségi példa

Az összes ha utasítást figyelembe véve láthatja, hogy a ciklonmatikus összetettség miért ötnél van. Ezen a ponton dönthet úgy, hogy ez az eredmény elfogadható összetettségi szint, vagy újrabontással csökkentheti az összetettség mértékét.

A varázslatos szám

Az iparág számos mérőszámához hasonlóan nincs pontos ciklonmatikus összetettségi korlát, amely minden szervezetnek megfelel. A NIST235 azonban azt jelzi, hogy a 10-es korlát jó kiindulópont:

"A határként használandó pontos szám azonban kissé ellentmondásos. A McCabe által javasolt eredeti 10-s korlát jelentős bizonyítékokkal rendelkezik, de a 15-ös korlátot is sikeresen alkalmazták. A 10-et meghaladó korlátokat olyan projektek számára kell fenntartani, amelyek számos működési előnnyel rendelkeznek a tipikus projektekhez képest, például tapasztalt személyzet, formális tervezés, modern programozási nyelv, strukturált programozás, kódbemutatók és átfogó tesztelési terv. Más szóval, a szervezet választhat egy 10-nél nagyobb összetettségi korlátot, de csak akkor, ha biztos abban, hogy tudja, mit csinál, és hajlandó az összetettebb modulok által megkövetelt további tesztelési erőfeszítéseket fordítani." NIST235

Ciklonmatikus összetettség és vonalszámok

A kódsorok számának önmagában való megvizsgálása a legjobb esetben a kódminőség nagyon széles körű előrejelzése. Van néhány alapvető igazság abban a gondolatban, hogy minél több sornyi kód található egy függvényben, annál valószínűbb, hogy hibák merülnek fel. Ha azonban a ciklona összetettségét kódsorokkal kombinálja, sokkal világosabb képet ad a hibák lehetségességéről.

A NASA Szoftvergarancia Technológiai Központ (SATC) leírása szerint:

"A SATC megállapította, hogy a leghatékonyabb értékelés a méret és a (ciklonmatikus) összetettség kombinációja. A nagy összetettségű és nagy méretű modulok általában a legalacsonyabb megbízhatósággal rendelkeznek. Az alacsony mérettel és nagy összetettséggel rendelkező modulok megbízhatósági kockázatot is jelentenek, mivel általában nagyon tömör kódok, amelyeket nehéz változtatni vagy módosítani. SATC

Kódelemzés

A kódelemzés tartalmazza a karbantarthatósági szabályok egy kategóriáját. További információ: Karbantarthatósági szabályok. Az örökölt kódelemzés használatakor a kiterjesztett tervezési útmutató szabálykészlet egy karbantarthatósági területet tartalmaz:

ciklonos összetettségi tervezési irányelvek szabálykészletei

A karbantarthatósági területen belül a bonyolultság egyik szabálya:

ciklonos összetettségi karbantarthatósági szabály

Ez a szabály figyelmeztetést ad ki, amikor a ciklonmatikus összetettség eléri a 25-öt, így elkerülhető a túlzott összetettség. Az alábbiak megismeréséhez lásd a CA1502 szabályt

Az egészet összehozva

A lényeg az, hogy a magas összetettségi szám nagyobb valószínűséggel jelenti a hibák valószínűségét, és növeli a karbantartáshoz és a hibaelhárításhoz szükséges időt. Tekintse meg közelebbről a nagy összetettségű függvényeket, és döntse el, hogy át kell-e őket képezni, hogy kevésbé összetettek legyenek.

Idézetek

MCCABE5

McCabe, T. and A. Watson (1994), Software Complexity (CrossTalk: The Journal of Defense Software Engineering).

NIST235

Watson, A. H., & McCabe, T. J. (1996). Strukturált tesztelés: Tesztelési módszertan a ciklonmatikus összetettségi metrikával (NIST Special Publication 500-235). Lekért május 14, 2011, a McCabe Software webhelyről: http://www.mccabe.com/pdf/mccabe-nist235r.pdf

SATC

Rosenberg, L., Hammer, T., Shaw, J. (1998). Szoftvermetrikák és -megbízhatóság (Az IEEE Nemzetközi Szimpózium a szoftver-megbízhatósági tervezésről). Beolvasva 2011. május 14-én a Penn State University webhelyéről: https://citeseerx.ist.psu.edu/pdf/31e3f5732a7af3aecd364b6cc2a85d9495b5c159