たとえば、Reductio (Java/Scala 用) やQuickCheck (Haskell 用) などです。私が考えている種類のフレームワークは、組み込みデータ型の「ジェネレーター」を提供し、プログラマーが新しいジェネレーターを定義できるようにするものです。次に、プログラマーは、適切な型の変数をパラメーターとして取り、何らかのプロパティをアサートするテスト メソッドを定義します。次に、フレームワークはパラメーターのランダム データの束を生成し、そのメソッドの何百ものテストを実行します。
たとえば、Vector クラスを実装し、そこに add() メソッドが含まれていた場合、追加が正常に動作することを確認したいと思うかもしれません。したがって、(疑似コードで)次のように記述します。
boolean testAddCommutes(Vector v1, Vector v2) {
return v1.add(v2).equals(v2.add(v1));
}
2 つの特定のベクトルに対して testAddCommutes() を実行して、追加が交換されるかどうかを確認できます。しかし、testAddCommutes の呼び出しをいくつか記述する代わりに、任意のベクトルを生成する手順を記述します。これにより、フレームワークは何百もの異なる入力に対して testAddCommutes を実行できます。
これは誰にとっても鐘を鳴らしますか?