契約v.s単体テスト

せっかく書いたので、晒しておこう。

私は、不変表明と単体テストは別物であると考えています。
たしかに両方とも、意図しないプログラムの動作を検出することを目的としているため、似た手法であるとは思います。
しかし、

  • 単体テストは関数の挙動を調べるのに対し、不変表明はメンバ変数の整合性を調べれる。要するに不変表明はprivateなメンバにアクセス可能
  • 単体テストはある引数に対し正しい結果を返すことを保証する。契約は、プログラムが動いているかぎり、その条件が満たされていることを保証する

といった違いが存在しています。
なので、私はテストファーストと契約によるプログラミングは、似ているものの別物であると考えています。

んー、理論的な部分ではどうなんだろ。id:syd_sydさんに今度聞いてみよう。