Design by Contract® je metoda, ki se uporablja za razvoj programske opreme, ki temelji na vzpostavitvi dobro definiranih vmesniških parametrov ali pogodb za vse dele programa. Čeprav je Design by Contract® mogoče razumeti kot konceptualni razvojni slog, ki se izvaja z dokumentacijo ali modeliranjem, se širše uporablja za sklicevanje na domači mehanizem ali mehanizem tretjih oseb v nekaterih programskih jezikih, ki dejansko zahteva implicitno kodiranje pogodb znotraj program. Cilj uporabe Design by Contract® je, da se program razvije in sčasoma kodira na veliko bolj popoln način, ki odstranjuje več nepomembnih napak, medtem ko uveljavljanje pogodb s podpornim jezikom omogoča, da se vse preostale napake zlahka najdejo in zajamejo. Program, ki uporablja pogodbe za funkcije in razrede, ima lahko bolj modularno zasnovo, v kateri je mogoče posamezne razrede enostavno ponovno uporabiti v drugih programih zaradi jasne opredelitve njihovih pogodb.
Osnova programske filozofije Design by Contract® je ideja poslovnih pogodb v resničnem svetu. V tem modelu vsaka metoda in razred v objektno usmerjenem programu definira pogodbo, ki jo mora upoštevati katera koli druga metoda ali objekt, ki je v interakciji z njim. Vsak razred ima lahko tudi pogodbo, imenovano invarianta razreda, ki ji mora slediti interno, da zagotovi, da zunanje pogodbe ne ogrozijo njegove sposobnosti delovanja.
Dva dela pogodbe, ki sta najpomembnejša med načrtovanjem in kodiranjem, sta predpogoji in naknadni pogoji. Ta dva dela modela Design by Contract® definirata stanje programa pred klicem metode in stanje programa po tem, ko je metoda končana. Drugi deli pogodbe se lahko razlikujejo glede na izvedbo, lahko pa vključujejo navzkrižne sklice na druge module, pogoje sinhronizacije in zahteve glede vrstnega reda izvedbe.
Z razvojem pogodb za vsak razred in metodo je mogoče enostavno preslikati in predvideti interakcijo različnih delov programa. Uveljavljanje pogodb, bodisi z uporabo trditev ali drugih mehanizmov, prav tako zagotavlja, da program ne bo poskušal izvajati, če pride do kršitve pogodb, ker bi bil vsak rezultat, proizveden v tem stanju, tehnično tako ali tako neveljaven. Ko je implementiran kot funkcija maternega jezika, lahko Design by Contract® pomaga zagotoviti, da bo končni izdelek deloval po pričakovanjih z malo možnosti za nepredvidene napake.
Nekateri zapleti, ki jih prinaša uporaba filozofije Design by Contract®, vključujejo daljše čase načrtovanja in bolj natančen razvoj sistema pred začetkom kodiranja, kar je včasih lahko težko pri velikem projektu. Praktično, mehanizem za preverjanje veljavnosti pogodbe, ki se uporablja v programskem jeziku, ki izvorno podpira pogodbe, lahko upočasni izvajanje programa. Slabo razumevanje metodologije Design by Contract® lahko privede do programa, ki uporablja pogodbe za izvajanje osnovnega preverjanja napak, kar lahko vodi do aplikacije, ki je po izdaji nagnjena k nenadnim zrušitvam.