aka DBC ThePragmaticProgrammer에 등장하는 ComputerProgramming에 관한 교훈중 하나. 계약한 것만 만든다. 즉, 요구사항을 명확히 하고, 그 요구사항만 만들어야 한다. 그렇지 않으면, 너무나도 광범위한 스케일에 당신이 짜야할 코드는 끝없이 늘어만 갈것이다. 보통, 다음의 세가지로 특정기능에 대한 요구사항을 명시한다. * Preconditions * Postcondotions * Class invariants AssertiveProgramming역시 DBC 개념을 따른다. 코드상에 이 개념을 포함시킬 수 있는데, built-in으로 지원하는 ProgrammingLanguage가 [[Eiffel]]이다. [[Cee]]에선 [[Nana]], [[Java]]에선 [[iContract]]가 이 개념을 지원하며, 굳이 지원이 안될경우, comments로도 충분한 효과를 낼 수 있다. [[Python]]에서는 super class의 method에 {{{raise NotImplementedError}}} 를 적음으로써 비슷한 효과를 낸다. 이 경우, 이 class를 상속받는 class는 반드시 그 method가 있어야만 한다. 예제 [[FactoryMethodMaze.py]]의 Maze class. ---- CategoryManual