Cyklomatická zložitosť (cyclomatic complexity) opisuje počet nezávislých vykonávacích ciest cez jednu jednotku kódu. Každý rozhodovací bod pridáva ďalšiu možnú trasu. Metrika dáva auditu legacy codebase konzistentný spôsob, ako nájsť funkcie alebo moduly, ktorých riadenie toku môže byť ťažko pochopiteľné, overiteľné a zmeniteľné.
Čo metrika počíta
Priamočiary kód má jednu trasu od vstupu po výstup. Podmienené vetvenia, cykly a ďalšie rozhodnutia v riadení toku pridávajú cesty. Analytické nástroje počítajú metriku z grafu riadenia toku, takže presné spracovanie jazykových konštrukcií sa môže nástroj od nástroja líšiť.
Číslo je štrukturálny signál. Nehovorí, či je biznis pravidlo potrebné, ani či je implementácia správna. Krátka funkcia s množstvom podmienok môže dosiahnuť vyššie skóre než dlhá funkcia, ktorá vykonáva jednu lineárnu postupnosť.
| Tvar kódu | Signál zložitosti | Otázka do review |
|---|---|---|
| Priama postupnosť | Málo nezávislých ciest | Je správanie jasné a pokryté? |
| Vnorené podmienky | Niekoľko možných trás | Dá sa overiť každý výsledok? |
| Opakované vetvenie | Logika roztrúsená do mnohých prípadov | Nemiešajú sa zodpovednosti? |
| Cesty pre výnimky a fallbacky | Alternatívne trasy pri zlyhaní | Pokrývajú testy aj degradované správanie? |
Prečo na tom v legacy kóde záleží
Zložité riadenie toku sťažuje zmenu, pretože vývojár musí zachovať správanie naprieč väčším počtom ciest. V staršom systéme môžu niektoré z týchto ciest predstavovať biznis výnimky, ktoré už nikto nezdokumentoval. Iné môžu byť obranným kódom pre integrácie alebo dátové formáty, ktoré v produkcii stále existujú.
Počas auditu legacy codebase sa oblastiam s vysokou zložitosťou venuje pozornejšie čítanie. Metrika pomáha nájsť ich, no dôvod existencie jednotlivých vetiev vysvetlia až ľudia, ktorí systém udržiavajú, testy a dôkazy z reálneho behu aplikácie.
Ako audit s výsledkom pracuje
Metrika je najužitočnejšia ako filter naprieč veľkým repozitárom. Audit ju vie porovnať s históriou zmien a dôkazmi z testov, aby našiel kód, ktorý je zložitý, často menený a slabo chránený. Táto kombinácia je akčnejšia než ktorákoľvek jednotlivá miera.
Review sa potom pýta:
- Na ktorých cestách záleží? Identifikujte bežné, výnimočné a fallback správanie.
- Ktoré cesty sú otestované? Priraďte testy k výsledkom, nielen k riadkom kódu.
- Prečo tie vetvy existujú? Oddeľte platné pravidlá od zastaraných workaroundov.
- Dá sa logika rozdeliť? Izolujte zodpovednosti bez zmeny správania.
Čo metrika rozhodnúť nedokáže
Cyklomatická zložitosť nemeria architektúru, čitateľnosť, bezpečnosť ani biznisovú hodnotu. Dokáže tiež podceniť náročnosť tam, kde sú jednoduché funkcie silne previazané naprieč systémom. Nízke skóre teda nie je dôkazom, že kód sa dá bezpečne zmeniť.
Audit dopĺňa metriku o technický dlh, analýzu závislostí a priame review. Tento širší súbor dôkazov pomáha tímu rozhodnúť, kde refactoring reálne znižuje riziko zmeny. Pomáha tiež ohraničiť prácu na migrácii legacy kódu okolo správania, ktoré treba pochopiť skôr, než sa pohne z miesta.