Hva er et design av Contract®?
Design by Contract® er en metode som brukes til å utvikle programvare som er avhengig av etablering av veldefinerte grensesnittparametere, eller kontrakter, for alle deler av et program. Selv om Design by Contract® kan sees på som en konseptuell utviklingstil som implementeres gjennom dokumentasjon eller modellering, blir den mer utbredt brukt til å referere til en innfødt eller tredjepartsmekanisme i noen programmeringsspråk som faktisk krever implisitt koding av kontraktene i et program. Målet med å bruke Design by Contract® er at et program skal utvikles og til slutt kodes på en mye mer fullstendig måte som fjerner mer trivielle feil, mens håndhevelse av kontraktene ved hjelp av språket gjør at restfeil lett blir funnet og fanget. Et program som bruker kontrakter for funksjoner og klasser kan ha en mer modulær utforming der enkeltklasser lett kan gjenbrukes i andre programmer på grunn av den klare definisjonen av kontraktene.
Grunnlaget for programmeringsfilosofien Design by Contract® er ideen om virkelige forretningskontrakter. I denne modellen definerer hver metode og klasse i et objektorientert program en kontrakt som enhver annen metode eller objekt som samhandler med den må overholde. Hver klasse kan også ha en kontrakt, kalt en klassevikant, som den må følge internt for å sikre at utenforstående kontrakter ikke går på bekostning av funksjonsevnen.
De to delene av en kontrakt som er viktigst under design og koding er forutsetningene og etterbetingelsene. Disse to delene av Design by Contract®-modellen definerer tilstanden til programmet før en metode kalles og tilstanden til programmet etter at metoden er fullført. Andre deler av en kontrakt kan variere etter implementering, men kan omfatte kryssreferanser til andre moduler, synkroniseringsbetingelser og utførelsesrekkefølge.
Ved å utvikle kontrakter for hver klasse og metode, kan samspillet mellom de forskjellige delene av et program lett kartlegges og forutsi. Håndhevelsen av kontraktene, enten ved bruk av påstander eller andre mekanismer, sikrer også at programmet ikke vil forsøke å utføre hvis det er brudd på kontrakter, fordi all produksjon produsert i den tilstanden teknisk sett vil være ugyldig uansett. Når implementert som et morsmålstrekk, kan Design by Contract® bidra til å sikre at et sluttprodukt vil fungere som forventet med liten sjanse for uforutsette feil.
Noen av komplikasjonene som følger med bruken av Design by Contract®-filosofien inkluderer lengre designtider og mer granulær utvikling av et system før koding begynner, noe som noen ganger kan være vanskelig med et stort prosjekt. Mer praktisk kan valideringsmekanismen for kontrakten som brukes på et programmeringsspråk som innfødt støtter kontrakter, bremse programutførelsen. En dårlig forståelse av metoden Design by Contract® kan føre til et program som bruker kontrakter for å utføre grunnleggende feilkontroll, og potensielt føre til et program som er utsatt for plutselige krasjer etter utgivelse.