契約による設計
オブジェクトを設計する際に、オブジェクトの不変条件/メソッドの事前条件/メソッドの事後条件の3つの条件を表明などにより形式的に定義することで、意図せぬバグの発生低下の削減やメソッドの使用方法の明確化などが期待できます
オブジェクトの不変条件 - あるオブジェクトが生成されてから破棄されるまでの間、常に満たし続けなければならない条件
メソッドの事前条件/事後条件 - これらはあるオブジェクトの各メソッドごとに定義される条件で、そのメソッドの事前条件を満たした状態でメソッドが呼ばれると、対象のオブジェクトはメソッドの事後条件を必ず満たす必要があります
プログラミング言語の機能として契約による設計をサポートしている言語は少ないこともあり、現状ではユニットテストなどによって事後条件などを検証するのが主流なのではないかと思います