Tässä artikkelissa perehdymme Sopimuspohjainen ohjelmointi:n jännittävään maailmaan. Tutkimme sen alkuperää, sen vaikutusta moderniin yhteiskuntaan ja sen merkitystä nykypäivän ympäristössä. Sopimuspohjainen ohjelmointi on aihe, joka on kiinnittänyt niin asiantuntijoiden kuin harrastajienkin huomion, ja kun etenemme tämän artikkelin läpi, huomaamme sen merkityksen ja vaikutuksen jokapäiväisen elämän eri osa-alueisiin. Sopimuspohjainen ohjelmointi on sen perustamisesta nykypäivän kehitykseen osoittautunut kiehtovaksi ja merkittäväksi aiheeksi, ja tämän artikkelin kautta syvennymme sen kiehtovaan maailmaan ymmärtääksemme paremmin sen laajuutta ja merkitystä nykyään.
Sopimuspohjainen ohjelmointi on tietokoneohjelmistojen suunnittelutapa. Sen mukaan ohjelmistosuunnittelijoiden tulisi määritellä muodolliset, täsmälliset ja tarkastettavat rajapintamääritykset ohjelmistokomponenteille. Nämä määritykset laajentavat tavallisten abstraktien tietotyyppien määritelmää alkuehdoilla, loppuehdoilla ja invarianteilla. Näitä määrityksiä kutsutaan sopimuksiksi konseptin käyttämän liike-elämän sopimusten ehtojen ja velvollisuuksien metaforan mukaan.
Termin otti ensimmäisenä käyttään Bertrand Meyer suunnittelemansa Eiffel-ohjelmointikielen yhteydessä ja kuvailtiin ensimmäisenä useissa artikkeleissa alkaen vuodesta 1986[1][2][3] ja kahdessa peräkkäisessä versiossa (1988, 1997) kirjastaan Object-Oriented Software Construction. Eiffel Software haki menetelmän englanninkieliselle nimelle ”Design by Contract” tavaramerkkisuojaa joulukuussa 2003, ja se myönnettiin joulukuussa 2004.[4][5] Tavaramerkin nykyinen omistaja on Eiffel Software.[6][7]
Keskeinen idea sopimuspohjaisessa ohjelmoinnissa on se, kuinka ohjelmistojärjestelmän osaset työskentelevät yhdessä yhteisten ”velvoitteiden” ja ”hyötyjen” pohjalta. Metafora tulee liike-elämästä, jossa asiakas ja toimittaja sopivat sopimuksesta joka esimerkiksi määrittää, että:
Vastaavasti, jos olio-ohjelmoinnin luokassa oleva rutiini tarjoaa tiettyä toiminnallisuutta, se voi:
Sopimus on näiden velvoitteiden ja hyötyjen muodollistamista (formalisointia). Sopimuspohjaisen ohjelmoinnin voi tiivistää seuraaviin ”kolmeen kysymykseen”,joita suunnittelijan tulee jatkuvasti kysyä:
Monissa kielissä on mahdollisuus tehdä tällaisia vakuutuksia. Sopimuspohjainen ohjelmointi kuitenkin pitää näitä sopimuksia niin elintärkeinä ohjelmiston oikeellisuudelle että niiden tulisi olla osa suunnitteluprosessia. Käytännössä sopimuspohjainen ohjelmointi kehottaa kirjoittamaan nämä vakuutukset ensin. Sopimuksen merkintä ulottuu metodi/proseduuri-tasolle asti; jokaisen metodin sopimus sisältää normaalisti seuraavat tiedot:
Yksikkötestaus testaa moduulia eristyksessä tarkastaakseen, että se toteuttaa sopimuksensa olettaen, että alihankkijat toteuttavat omansa. Integraatiotestaus tarkastaa että eri moduulit toimivat oikein yhdessä.
Kieliä, jotka toteuttavat useimmat sopimuspohjaisen ohjelmoinnin ominaisuuksista, ovat esimerkiksi:
Monia kirjastoja, esikääntäjiä ja muita työkaluja on kehitetty olemassaoleville ohjelmointikielille ilman natiivia sopimuspohjaisen ohjelmoinnin tukea.