Отправлено 08 октября 2003 - 16:20
Мне кажется, что вопрос поставлен настолько широко, что не имеет особой ценности :) Уточните, пожалуйста, о чём идёт речь: хочется добиться максимального покрытия с помощью автоматически генерируемых тестов? На основе чего генерируются тесты? Интерфейсы, исходный код, формальная спецификация, другая информация о программе? Мне кажется, что для разных классов программ результаты будут сильно разные.
К примеру, в одном из наших первых проектов тестировалась большая библиотека функций, имеющих параметры простых (скажем, целочисленных) типов. Был написан инструмент, который на основе формальных имплицитных спецификаций этих функций позволял добиться очень хорошего покрытия спецификаций или кода. 80% - достаточно типично. А то и все 100.
Более свежий пример - подсистемы компиляторов.
На основе BNF грамматики языка можно сгенерировать тесты, покрывающие 80% кода парсера. Есть у нас такой инструмент собственного изготовления. Некторое количество ошибок вылавливает, несмотря на то, что парсер - очень простая штука.
Занимались разработкой тестов для оптимизаторов. На основе неформального описания оптимизатора строили модель, по которой генерировались тесты. На gcc проверяли - 60% - типичное покрытие кода. Если немного поковыряться в исходниках компилятора и понять, чем его оптимизатор отличается от общего описания - можно ещё процентов на 10-20 поднять.
Но это не то, что вы называете автотестами, я думаю? :) Поскольку работу довольно большую приходится проделывать.
Алексей Демаков, ИСП РАН
UniTesK - технология функционального тестирования с использованием формальных спецификаций.