Новые возможности технологии UniTESK связаны с созданием инструмента Pinery. Он реализует подход, основанный на использовании грамматик, для автоматической генерации данных сложной структуры.
Основным компонентом инструмента является генератор данных сложной структуры. Генератор принимает на вход описания требуемых данных в некотором унифицированном формате (на языке RNG) и генерирует данные в виде XML-документов.
Инструмент Pinery может принимать на вход описания данных в разных распространенных форматах (например, BNF) и выдавать генерируемые данные в том виде, который требуется заказчику. Для этого в Pinery предусмотрена возможность подключения специализированных модулей, которые с одной стороны транслируют описания требуемых данных в унифицированное представление, а с другой стороны транслируют генерируемые данные в требуемый вид (см. рис.).
Для тестирования C-библиотеки по работе с регулярными выражениями POSIX инструмент Pinery был встроен в инструмент CTESK, который реализует технологию UniTESK для случая тестирования ПО, реализованного на языке C. Тестируемая C-библиотека для работы с регулярными выражениями реализует общий интерфейс, описанный в заголовочном файле <regex.h> и содержит следующие основные функции:
- regcomp, которая компилирует данное регулярное выражение, а также дополнительно выдает описанную в стандарте POSIX диагностику относительно валидности данного регулярного выражения;
- regexec, которая проверяет, походит ли данная строка под ранее скомпилированное регулярное выражение.
Тестируемые функции принимают в качестве параметров следующие основные данные:
- регулярное выражение;
- строки, как подходящие, так и не подходящие под это выражение.
Спецификации функциональности тестируемой библиотеки были разработаны с использованием инструмента CTESK. Для генерации тестовых данных использовался инструмент Pinery. Таким образом, тестовая система в целом представляла собой комбинацию CTESK и Pinery (см. рис.).
При генерации тестовых данных для функции regcomp в Pinery использовался подключаемый модуль для обработки описаний данных в формате BNF. Использовалось несколько различных конфигураций генератора, позволяющих получать как валидные, так и некоторые виды не валидных регулярных выражений, которые удовлетворяют как базовому, так и расширенному формату POSIX.
При генерации тестовых данных для функции regexec в Pinery использовался подключаемый модуль для обработки описаний данных в формате регулярных выражений. Каждое регулярное выражение, сгенерированное для функции regcomp, использовалось как входные данные для инструмента Pinery для генерации множества строк, подходящих под это выражение. Результаты тестирования таковы:
- В реализации функции regcomp была обнаружена одна неизвестная ранее ошибка.
- Было найдено одно несоответствие между стандартом и реализацией функции regcomp. Это можно трактовать либо как ошибку в реализации, либо как недоопределенность стандарта.
- Кроме того, была выявлена недоопределенность трех пунктов стандарта, касающихся описания кодов ошибок.
|