Programmeringskompleksitet - Programming complexity
Programmeringskompleksitet (eller softwarekompleksitet ) er et udtryk, der inkluderer mange egenskaber ved et stykke software, som alle påvirker interne interaktioner. Ifølge flere kommentatorer skelnes der mellem begreberne komplekse og komplicerede. Kompliceret indebærer at være vanskelig at forstå, men med tid og kræfter, i sidste ende kendelig. Kompleks beskriver på den anden side interaktionerne mellem et antal enheder. Efterhånden som antallet af enheder stiger, ville antallet af interaktioner mellem dem stige eksponentielt, og det ville nå et punkt, hvor det ville være umuligt at kende og forstå dem alle. Tilsvarende øger højere niveauer af kompleksitet i software risikoen for utilsigtet at forstyrre interaktioner og øger dermed chancen for at indføre defekter, når der foretages ændringer. I mere ekstreme tilfælde kan det gøre det umuligt at ændre softwaren. Ideen om at forbinde softwarekompleksitet med vedligeholdeligheden af softwaren er blevet udforsket grundigt af professor Manny Lehman , der udviklede sine love om softwareudvikling ud fra sin forskning. Han og hans medforfatter Les Belady udforskede adskillige mulige softwaremetrikker i deres ofte citerede bog, der kunne bruges til at måle tilstanden til softwaren og til sidst nå frem til den konklusion, at den eneste praktiske løsning ville være at bruge en, der bruger deterministisk kompleksitet modeller.
Foranstaltninger
Mange målinger af softwarekompleksitet er blevet foreslået. Mange af disse egner sig ikke til nem måling, selvom de giver en god gengivelse af kompleksitet. Nogle af de mere almindeligt anvendte målinger er
- McCabes cyklomatiske kompleksitetsmåling
- Halsteads software videnskabelige målinger
- Henry og Kafura introducerede softwarestrukturmålinger baseret på informationsflow i 1981, som måler kompleksitet som en funktion af blæser og blæser. De definerer fan-in af en procedure som antallet af lokale strømme ind i den procedure plus antallet af datastrukturer, hvorfra proceduren henter information. Fan-out defineres som antallet af lokale strømme ud af proceduren plus antallet af datastrukturer, som proceduren opdateres. Lokale strømme vedrører data, der sendes til og fra procedurer, der kalder eller kaldes af, den pågældende procedure. Henry og Kafuras kompleksitetsværdi er defineret som "procedurelængden ganget med kvadratet af ventilator-ind ganget med ventilator-ud" (Længde × (ventilator-ind × ventilator-ud) ²).
- En metrics-suite til objektorienteret design blev introduceret af Chidamber og Kemerer i 1994 med fokus, som titlen antyder, på målinger specifikt til objektorienteret kode. De introducerer seks OO-kompleksitetsmålinger; vægtede metoder pr. klasse, kobling mellem objektklasser, respons for en klasse, antal børn, dybden af arvetræet og manglende sammenhæng mellem metoder
Der er flere andre målinger, der kan bruges til at måle programmeringskompleksitet:
- Forgreningskompleksitet (Sneed Metric)
- Dataadgangskompleksitet (kortmetrisk)
- Datakompleksitet (Chapin Metric)
- Datastrømskompleksitet (Elshof metrisk)
- Beslutningskompleksitet (McClure Metric)
Teslers lov er et ordsprog i interaktion mellem menneske og computer, der siger, at enhver applikation har en iboende mængde af kompleksitet, der ikke kan fjernes eller skjules.
Typer
Associeret med og afhængig af kompleksiteten i et eksisterende program er kompleksiteten forbundet med at ændre programmet. Kompleksiteten af et problem kan opdeles i to dele:
- Utilsigtet kompleksitet: Forholder sig til vanskeligheder, som en programmør står over for på grund af de valgte software-engineering-værktøjer. Et bedre passende sæt værktøjer eller et mere programmeringssprog på højt niveau kan reducere det. Utilsigtet kompleksitet er ofte også en konsekvens af manglen på at bruge domænet til at indramme formen på løsningen, dvs. koden. En praksis, der kan hjælpe med at undgå utilsigtet kompleksitet, er domænestyret design .
- Væsentlig kompleksitet: Er forårsaget af problemets egenskaber, der skal løses, og kan ikke reduceres.
Chidamber og Kemerer Metrics
Chidamber og Kemerer foreslog et sæt programmeringskompleksitetsmålinger, der er meget brugt i mange målinger og akademiske artikler. De er WMC, CBO, RFC, NOC, DIT og LCOM, beskrevet nedenfor:
- WMC - vægtede metoder pr. Klasse
- n er antallet af metoder på klassen
- er metodens kompleksitet
- CBO - kobling mellem objektklasser
- antal andre klasser, der er koblet (bruger eller bruges)
- RFC - svar til en klasse
- hvor
- er sæt af metoder kaldet ved metode i
- er det sæt metoder i klassen
- NOC - antal børn
- summen af alle klasser, der arver denne klasse eller en efterkommer af den
- DIT - arvets trædybde
- maksimal dybde af arvetræet for denne klasse
- LCOM- manglende sammenhæng mellem metoder
- Måler skæringspunktet mellem de attributter, der bruges til fælles med klassemetoderne
- Hvor
- Og
- Med er det sæt attributter (instansvariabler), der er tilgængeligt (læst fra eller skrevet til) ved den -th metode i klassen
Se også
- Softwarekrise (og efterfølgende programmeringsparadigmeløsninger )
- Softwaremetrik - kvantitativ måling af nogle egenskaber ved et program.