Es schreibt vor, dass Software-Designer formale, präzise und überprüfbare Schnittstellenspezifikationen für Softwarekomponenten definieren sollten, die die normale Definition abstrakter Datentypen um Vorbedingungen, Nachbedingungen und Invarianten erweitern. Diese Spezifikationen werden als “Verträge” bezeichnet, in Übereinstimmung mit einer konzeptionellen Metapher mit den Bedingungen und Pflichten von Geschäftsverträgen. Design by Contract hat seine Wurzeln in der Arbeit an formaler Verifizierung, formaler Spezifikation und Hoare-Logik. Die ursprünglichen Beiträge umfassen: Die “fail hard”-Eigenschaft von DbC vereinfacht das Debuggen des Vertragsverhaltens, da das beabsichtigte Verhalten jeder Methode klar angegeben ist. Der Begriff des Vertrags erstreckt sich auf die Methode/Verfahrensebene; Der Vertrag für jede Methode enthält in der Regel die folgenden Informationen:[Zitat erforderlich] In vielen Programmiersprachen werden Verträge mit Assert umgesetzt. Asserts werden standardmäßig im Release-Modus in C/C++ kompiliert und in C-[8] und Java ähnlich deaktiviert. Design by Contract ersetzt keine regulären Teststrategien wie Komponententests, Integrationstests und Systemtests. Vielmehr ergänzt es externe Tests durch interne Selbsttests, die sowohl für isolierte Tests als auch im Produktionscode während einer Testphase aktiviert werden können. Bei der Verwendung von Verträgen sollte ein Lieferant nicht versuchen, zu überprüfen, ob die Vertragsbedingungen erfüllt sind – eine Praxis, die als offensive Programmierung bezeichnet wird – die allgemeine Idee ist, dass Code “hart ausfallen” sollte, wobei die Vertragsüberprüfung das Sicherheitsnetz ist. Die Verwendung von Assertionen kann als eine Form des Test-Orakels betrachtet werden, eine Möglichkeit, den Entwurf durch Vertragsimplementierung zu testen.

Design by Contract definiert auch Kriterien für die Korrektheit eines Softwaremoduls: Der Vertrag entspricht semantisch einem Hoare-Triple, das die Verpflichtungen formalisiert. Dies lässt sich anhand der “drei Fragen” zusammenfassen, die der Designer im Vertrag immer wieder beantworten muss: Design by Contract (DbC), auch Vertragsprogrammierung, Programmierung durch Vertrags- und Design-by-Contract-Programmierung genannt, ist ein Ansatz für die Gestaltung von Software. Viele Programmiersprachen haben Möglichkeiten, solche Behauptungen zu machen. DbC hält diese Verträge jedoch für so wichtig für die Softwarekorrektheit, dass sie Teil des Entwurfsprozesses sein sollten. Tatsächlich plädiert DbC dafür, die Behauptungen zuerst zu schreiben. [Zitat erforderlich] Verträge können durch Codekommentare geschrieben werden, die von einer Testsammlung erzwungen werden, oder beides, auch wenn es keine spezielle Sprachunterstützung für Verträge gibt.