Složitost programování - Programming complexity

Složitost programování (nebo složitost softwaru ) je termín, který zahrnuje mnoho vlastností softwaru, které všechny ovlivňují interní interakce. Podle několika komentátorů existuje rozdíl mezi pojmy komplexní a komplikované. Komplikované znamená obtížné pochopení, ale s časem a úsilím, v konečném důsledku poznatelné. Complex na druhou stranu popisuje interakce mezi řadou entit. Jak se počet entit zvyšuje, počet interakcí mezi nimi by exponenciálně rostl a dostal by se do bodu, kdy by bylo nemožné je všechny znát a porozumět jim. Podobně vyšší úrovně složitosti softwaru zvyšují riziko neúmyslného zasahování do interakcí a zvyšují tak šanci na zavedení defektů při provádění změn. V extrémnějších případech může být úprava softwaru prakticky nemožná. Myšlenku propojení složitosti softwaru s udržovatelností softwaru prozkoumal rozsáhle profesor Manny Lehman , který na základě svého výzkumu vyvinul své zákony evoluce softwaru . On a jeho spoluautor Les Belady prozkoumali ve své často citované knize četné možné softwarové metriky , které by mohly být použity k měření stavu softwaru, a nakonec dospěly k závěru, že jediným praktickým řešením by bylo použít ten, který využívá deterministickou složitost modely.

Opatření

Bylo navrženo mnoho opatření složitosti softwaru. Mnoho z nich, i když poskytuje dobrou reprezentaci složitosti, se nehodí pro snadné měření. Některé z běžněji používaných metrik jsou

  • McCabeova metrika cyklomatické složitosti
  • Metriky Halsteads softwarové vědy
  • Henry a Kafura představili v roce 1981 metriky softwarové struktury založené na toku informací, které měří složitost jako funkci ventilátoru a ventilátoru. Definují fan-in procedury jako počet místních toků do této procedury plus počet datových struktur, ze kterých tato procedura načítá informace. Fan-out je definován jako počet místních toků z této procedury plus počet datových struktur, které procedura aktualizuje. Místní toky se vztahují k datům předávaným do az procedur, které volají nebo jsou volány danou procedurou. Hodnota složitosti Henryho a Kafury je definována jako „délka procedury vynásobená druhou mocninou fan-in vynásobená fan-out“ (Délka × (fan-in × fan-out) ²).
  • Sada metrik pro objektově orientovaný design představili Chidamber a Kemerer v roce 1994 a zaměřili se, jak název napovídá, na metriky konkrétně pro objektově orientovaný kód. Představují šest metrik složitosti OO; vážené metody na třídu, vazba mezi třídami objektů, reakce na třídu, počet dětí, hloubka stromu dědičnosti a nedostatek soudržnosti metod

Existuje několik dalších metrik, kterými lze měřit složitost programování:

  • Složitost větvení (metrika Sneed)
  • Složitost přístupu k datům (metrika karty)
  • Složitost dat (Chapinova metrika)
  • Složitost datového toku (Elshof Metric)
  • Rozhodovací složitost (McClure Metric)

Teslerův zákon je pořekadlo v interakci člověka s počítačem , které uvádí, že každá aplikace má inherentní množství složitosti, kterou nelze odstranit nebo skrýt.

Typy

Přidružená a v závislosti na složitosti existujícího programu je složitost spojená se změnou programu. Složitost problému lze rozdělit do dvou částí:

  1. Náhodná složitost: Týká se obtíží, kterým programátor čelí kvůli vybraným nástrojům softwarového inženýrství. Lepší sada nástrojů nebo programovací jazyk vyšší úrovně to mohou snížit. Náhodná složitost je často také důsledkem nedostatečného používání domény k vytvoření formy řešení, tj. Kódu. Jednou praxí, která může pomoci vyhnout se náhodné složitosti, je návrh založený na doméně .
  2. Základní složitost: Je způsobena charakteristikami problému, který má být vyřešen, a nelze jej snížit.

Chidamber a Kemererova metrika

Chidamber a Kemerer navrhli sadu metrik složitosti programování, široce používaných v mnoha měřeních a akademických článcích. Jsou to WMC, CBO, RFC, NOC, DIT a LCOM, popsané níže:

  • Metody vážené WMC na třídu
    • n je počet metod ve třídě
    • je složitost metody
  • CBO - vazba mezi třídami objektů
    • číslo jiné třídy, která je spojena (používá nebo se používá)
  • RFC - odpověď pro třídu
    • kde
    • je sada metod nazývaných metodou i
    • je sada metod ve třídě
  • NOC - počet dětí
    • součet všech tříd, které zdědí tuto třídu nebo její potomka
  • DIT - hloubka dědičného stromu
    • maximální hloubka dědičného stromu pro tuto třídu
  • LCOM - nedostatečná soudržnost metod
    • Měří průnik atributů používaných společně metodami třídy
    • Kde
    • A
    • With is the set of attributes (instance variables) accessed (read from or written to) by the -th method of the class

Viz také

Reference