Vad är en design av Contract®?
Design by Contract® är en metod som används för att utveckla programvara som förlitar sig på upprättandet av väldefinierade gränssnittsparametrar, eller kontrakt, för alla delar av ett program. Även om Design by Contract® kan ses som en konceptuell utvecklingsstil som implementeras genom dokumentation eller modellering, används den mer allmänt för att hänvisa till en infödd eller tredje parts mekanism inom vissa programmeringsspråk som faktiskt kräver implicit kodning av kontrakten inom ett program. Målet med att använda Design by Contract® är att ett program kommer att utvecklas och så småningom kodas på ett mycket mer fullständigt sätt som tar bort mer triviala fel, medan genomförandet av kontrakten med det stödjande språket gör att återstående fel lätt kan hittas och fångas. Ett program som använder kontrakt för funktioner och klasser kan ha en mer modulär design där enskilda klasser lätt kan återanvändas i andra program på grund av den tydliga definitionen av deras kontrakt.
Grunden för programmeringsfilosofin Design by Contract® är idén om verkliga affärskontrakt. I denna modell definierar varje metod och klass i ett objektorienterat program ett kontrakt som alla andra metoder eller objekt som interagerar med den måste följa. Varje klass kan också ha ett kontrakt, kallat en klass invariant, som den måste följa internt för att säkerställa att externa kontrakt inte äventyrar dess förmåga att fungera.
De två delarna av ett kontrakt som är viktigast under design och kodning är förutsättningarna och eftervillkoren. Dessa två delar av Design by Contract®-modellen definierar programmets tillstånd innan en metod anropas och programmets tillstånd efter att metoden har slutfört körningen. Andra delar av ett kontrakt kan variera beroende på implementering men kan innehålla korsreferenser till andra moduler, synkroniseringsvillkor och beställningsorder.
Genom att utveckla kontrakt för varje klass och metod kan interaktionen mellan de olika delarna av ett program enkelt kartläggas och förutsägas. Genomförandet av kontrakten, antingen genom användning av påståenden eller andra mekanismer, säkerställer också att programmet inte kommer att försöka genomföra om det finns ett brott mot kontrakten, eftersom all produktion som produceras i det tillståndet tekniskt skulle vara ogiltigt ändå. När implementerad som ett moderspråkfunktion kan Design by Contract® hjälpa till att säkerställa att en slutprodukt fungerar som förväntat med liten chans för oförutsedda fel.
Några av de komplikationer som följer med användningen av Design by Contract®-filosofin inkluderar längre designtider och mer granulär utveckling av ett system innan kodningen börjar, vilket ibland kan vara svårt med ett stort projekt. Mer praktiskt kan kontraktsvalideringsmekanismen som används på ett programmeringsspråk som naturligt stödjer kontrakt kan bromsa programgenomförandet. En dålig förståelse av metoden Design by Contract® kan leda till ett program som använder kontrakt för att utföra grundläggande felkontroll, vilket potentiellt kan leda till en applikation som är benägen att plötsliga kraschar efter utgivningen.