Programmeringskompleksitet - Programming complexity

Programmeringskompleksitet (eller programvarekompleksitet ) er et begrep som inkluderer mange egenskaper til et programvare, som alle påvirker interne interaksjoner. I følge flere kommentatorer skilles det mellom begrepene komplekse og kompliserte. Komplisert innebærer å være vanskelig å forstå, men med tid og krefter, til slutt kunnskapsrik. Kompleks beskriver derimot interaksjonen mellom en rekke enheter. Når antall enheter øker, ville antall interaksjoner mellom dem øke eksponentielt, og det ville komme til et punkt der det ville være umulig å kjenne og forstå dem alle. Tilsvarende øker høyere nivåer av kompleksitet i programvaren risikoen for utilsiktet forstyrrelse av interaksjoner, og øker dermed sjansen for å innføre feil når du gjør endringer. I mer ekstreme tilfeller kan det gjøre endring av programvaren praktisk talt umulig. Ideen om å knytte programvarekompleksitet til programvarens vedlikehold har blitt utforsket grundig av professor Manny Lehman , som utviklet sine lover for programvareutvikling fra sin forskning. Han og hans medforfatter Les Belady utforsket mange mulige programvaremetoder i sin ofte siterte bok, som kan brukes til å måle tilstanden til programvaren, og til slutt komme til konklusjonen at den eneste praktiske løsningen ville være å bruke en som bruker deterministisk kompleksitet modeller.

målinger

Mange tiltak for programvarekompleksitet er blitt foreslått. Mange av disse gir seg ikke til enkel måling, selv om de gir en god fremstilling av kompleksiteten. Noen av de mest brukte beregningene er

  • McCabes syklomatiske kompleksitetsmåling
  • Halsteads programvarevitenskapelige beregninger
  • Henry og Kafura introduserte Software Structure Metrics Based on Information Flow i 1981 som måler kompleksitet som en funksjon av fan in and fan out. De definerer innblåsning av en prosedyre som antall lokale strømmer til den prosedyren pluss antall datastrukturer som prosedyren henter informasjon fra. Fan-out er definert som antall lokale strømmer ut av denne prosedyren pluss antall datastrukturer som prosedyren oppdaterer. Lokale strømmer er relatert til data som sendes til og fra prosedyrer som ringer eller blir ringt av, den aktuelle prosedyren. Henry og Kafuras kompleksitetsverdi er definert som "prosedyrelengden multiplisert med kvadratet av fan-in multiplisert med fan-out" (Lengde × (fan-in × fan-out) ²).
  • En Metrics Suite for Object-Oriented Design ble introdusert av Chidamber og Kemerer i 1994 med fokus, som tittelen antyder, på beregninger spesielt for objektorientert kode. De introduserer seks OO-kompleksitetsberegninger; vektede metoder per klasse, kobling mellom objektklasser, respons for en klasse, antall barn, dybde på arvetreet og manglende sammenheng av metoder

Det er flere andre beregninger som kan brukes til å måle programmeringskompleksitet:

  • Forgreningskompleksitet (Sneed Metric)
  • Kompleksitet for datatilgang (Card Metric)
  • Datakompleksitet (Chapin Metric)
  • Dataflytskompleksitet (Elshof Metric)
  • Beslutningskompleksitet (McClure Metric)

Teslers lov er et ordtak i interaksjon mellom menneske og datamaskin som sier at hver applikasjon har en iboende mengde kompleksitet som ikke kan fjernes eller skjules.

Typer

Assosiert med, og avhengig av kompleksiteten til et eksisterende program, er kompleksiteten knyttet til endring av programmet. Kompleksiteten til et problem kan deles i to deler:

  1. Utilsiktet kompleksitet: Forholder seg til vanskeligheter en programmerer står overfor på grunn av de valgte programvaretekniske verktøyene. Et bedre passende sett med verktøy eller et mer høyt nivå programmeringsspråk kan redusere det. Utilsiktet kompleksitet er ofte også en konsekvens av mangelen på å bruke domenet til å ramme inn løsningen, dvs. koden. En praksis som kan hjelpe til med å unngå utilsiktet kompleksitet er domenedrevet design .
  2. Essensiell kompleksitet: Er forårsaket av egenskapene til problemet som skal løses og kan ikke reduseres.

Chidamber og Kemerer Metrics

Chidamber og Kemerer foreslo et sett med målinger for programmeringskompleksitet, mye brukt i mange målinger og akademiske artikler. De er WMC, CBO, RFC, NOC, DIT og LCOM, beskrevet nedenfor:

  • WMC - vektede metoder per klasse
    • n er antall metoder på klassen
    • er kompleksiteten i metoden
  • CBO - kobling mellom objektklasser
    • antall andre klasser som er koblet (bruker eller brukes)
  • RFC - respons for en klasse
    • hvor
    • er sett med metoder kalt etter metode i
    • er settet med metoder i klassen
  • NOC - antall barn
    • summen av alle klassene som arver denne klassen eller en etterkommer av den
  • DIT - dybden på arvetreet
    • maksimal dybde på arvetreet for denne klassen
  • LCOM- manglende sammenheng av metoder
    • Måler skjæringspunktet mellom attributtene som brukes til felles med klassemetodene
    • Hvor
    • Og
    • Med er settet med attributter (instansvariabler) tilgjengelig (lest fra eller skrevet til) etter den -th metoden i klassen

Se også

Referanser