Например, Reductio (для Java / Scala) и QuickCheck (для Haskell). Тип фреймворка, о котором я думаю, предоставит «генераторы» для встроенных типов данных и позволит программисту определять новые генераторы. Затем программист определит метод тестирования, который устанавливает какое-либо свойство, принимая в качестве параметров переменные соответствующих типов. Затем среда генерирует набор случайных данных для параметров и запускает сотни тестов этого метода.
Например, если я реализовал класс Vector и у него был метод add (), я мог бы проверить, что мое добавление коммутирует. Поэтому я бы написал что-то вроде (в псевдокоде):
boolean testAddCommutes(Vector v1, Vector v2) {
return v1.add(v2).equals(v2.add(v1));
}
Я мог бы запустить testAddCommutes () для двух конкретных векторов, чтобы увидеть, будет ли это дополнение коммутировать. Но вместо того, чтобы писать несколько вызовов testAddCommutes, я пишу процедуру, которая генерирует произвольные векторы. Учитывая это, платформа может запускать testAddCommutes на сотнях различных входных данных.
Звонит ли это кому-нибудь?