Design by Contract® on meetod, mida kasutatakse tarkvara arendamiseks, mis tugineb programmi kõigi osade jaoks täpselt määratletud liidese parameetrite või lepingute kehtestamisele. Kuigi Design by Contract®-i võib vaadelda kui kontseptuaalset arendusstiili, mida rakendatakse dokumentatsiooni või modelleerimise kaudu, kasutatakse seda laiemalt mõnes programmeerimiskeeles omamaisele või kolmanda osapoole mehhanismile viitamiseks, mis tegelikult nõuab lepingute kaudset kodeerimist. programm. Design by Contract® kasutamise eesmärk on, et programm töötatakse välja ja lõpuks kodeeritakse palju täiuslikumal viisil, mis eemaldab triviaalsemad vead, samas kui lepingute jõustamine tugikeelega muudab kõik jääkvead hõlpsasti leitavaks ja fikseeritud. Programmil, mis kasutab funktsioonide ja klasside jaoks lepinguid, võib olla modulaarsem ülesehitus, kus üksikuid klasse saab hõlpsasti teistes programmides uuesti kasutada, kuna nende lepingud on selgelt määratletud.
Design by Contract® programmeerimisfilosoofia aluseks on reaalsete ärilepingute idee. Selles mudelis määratleb objektorienteeritud programmi iga meetod ja klass lepingu, mille järgi peavad järgima mis tahes muu meetod või objekt, mis sellega suhtleb. Igal klassil võib olla ka leping, mida nimetatakse klassiinvariantiks, mida ta peab sisemiselt järgima tagamaks, et välised lepingud ei kahjusta selle toimimisvõimet.
Lepingu kaks osa, mis on projekteerimisel ja kodeerimisel kõige olulisemad, on eel- ja järeltingimused. Need kaks Design by Contract® mudeli osa määravad programmi oleku enne meetodi väljakutsumist ja programmi oleku pärast meetodi täitmise lõpetamist. Lepingu muud osad võivad olenevalt rakendusest erineda, kuid võivad sisaldada ristviiteid teistele moodulitele, sünkroonimistingimustele ja täitmise järjekorra nõuetele.
Töötades välja lepingud iga klassi ja meetodi jaoks, saab programmi erinevate osade koostoimet hõlpsasti kaardistada ja prognoosida. Lepingute jõustamine kas väidete või muude mehhanismide abil tagab ka selle, et programm ei ürita lepingute rikkumise korral täitmist, sest mis tahes sellises olekus toodetud väljund oleks nagunii tehniliselt kehtetu. Emakeele funktsioonina juurutatud Design by Contract® aitab tagada, et lõpptoode toimib ootuspäraselt ja ettenägematute vigade tõenäosus on väike.
Mõned komplikatsioonid, mis kaasnevad Design by Contract® filosoofia kasutamisega, hõlmavad pikemat projekteerimisaega ja süsteemi detailsemat arendamist enne kodeerimise algust, mis võib mõnikord suure projekti puhul keeruliseks osutuda. Praktilisemalt võib lepingute kinnitamise mehhanism, mida kasutatakse programmeerimiskeeles, mis toetab lepinguid, programmi täitmist aeglustada. Design by Contract® metoodika halb mõistmine võib viia programmini, mis kasutab lepinguid põhiliste vigade kontrollimiseks, mis võib viia rakenduseni, mis võib pärast avaldamist ootamatult kokku jooksma.