Mikä on Design by Contract®?

Design by Contract® on menetelmä, jolla kehitetään ohjelmistoja, jotka perustuvat tarkasti määriteltyjen rajapintaparametrien tai sopimusten luomiseen ohjelman kaikkiin osiin. Vaikka Design by Contract® voidaan katsoa käsitteelliseksi kehitystyyliksi, joka toteutetaan dokumentaation tai mallinnuksen avulla, sitä käytetään laajemmin viittaamaan alkuperäiseen tai kolmannen osapuolen mekanismiin joillakin ohjelmointikielillä, joka todella edellyttää sopimusten implisiittistä koodausta ohjelma. Design by Contract® -ohjelman käytön tavoitteena on, että ohjelma kehitetään ja lopulta koodataan paljon täydellisemmällä tavalla, joka poistaa enemmän triviaaleja virheitä, kun taas sopimusten noudattaminen tukikielellä tekee jäännösvirheet helposti löydettäviksi ja talteenotettaviksi. Ohjelmalla, joka käyttää sopimuksia toimintoihin ja luokkiin, voi olla modulaarisempi rakenne, jossa yksittäisiä luokkia voidaan käyttää helposti muissa ohjelmissa, koska niiden sopimukset on määritelty selkeästi.

Design by Contract® -ohjelmointifilosofian perusta on ajatus todellisista liiketoimintasopimuksista. Tässä mallissa jokainen menetelmä ja luokka olio -ohjelmassa määrittelee sopimuksen, jota minkä tahansa muun sen kanssa vuorovaikutuksessa olevan menetelmän tai objektin on noudatettava. Jokaisella luokalla voi myös olla sopimus, jota kutsutaan luokan invariantiksi, jota sen on noudatettava sisäisesti, jotta ulkopuoliset sopimukset eivät vaaranna sen toimintakykyä.

Sopimuksen kaksi osaa, jotka ovat tärkeimpiä suunnittelun ja koodauksen aikana, ovat ennakkoehdot ja jälkiehdot. Nämä kaksi Design by Contract® -mallin osaa määrittävät ohjelman tilan ennen menetelmän kutsumista ja ohjelman tilan sen jälkeen, kun menetelmä on suoritettu. Muut sopimuksen osat voivat vaihdella toteutuksen mukaan, mutta ne voivat sisältää ristiviittauksia muihin moduuleihin, synkronointiehdot ja suoritusjärjestysvaatimukset.

Kehittämällä sopimuksia kullekin luokalle ja menetelmälle, ohjelman eri osien vuorovaikutus voidaan helposti kartoittaa ja ennustaa. Sopimusten täytäntöönpano joko väitteiden tai muiden mekanismien avulla varmistaa myös sen, että ohjelma ei yritä suorittaa sitä, jos sopimuksia rikotaan, koska kaikki tässä tilassa tuotetut tulokset olisivat joka tapauksessa teknisesti pätemättömiä. Kun Design by Contract® on otettu käyttöön äidinkielenä, se voi auttaa varmistamaan, että lopputuote toimii odotetulla tavalla ilman pieniä mahdollisuuksia odottamattomiin virheisiin.

Jotkin Design by Contract® -filosofian käyttöön liittyvät komplikaatiot sisältävät pidemmät suunnitteluajat ja yksityiskohtaisemman järjestelmän kehittämisen ennen koodauksen aloittamista, mikä voi joskus olla vaikeaa isossa projektissa. Käytännössä sopimusten validointimekanismi, jota käytetään ohjelmointikielellä, joka tukee sopimuksia, voi hidastaa ohjelman suorittamista. Design by Contract® -menetelmän huono ymmärtäminen voi johtaa ohjelmaan, joka käyttää sopimuksia virheiden perustarkistuksen suorittamiseen, mikä voi johtaa sovellukseen, joka on altis äkillisille kaatumisille julkaisun jälkeen.