$Id$
SynTESK (Syntax Testing Kit) -- инструмент для тестирования синтаксических анализаторов (парсеров) формальных языков. SynTESK позволяет втоматически генерировать тесты для проверки того, что реализация парсера соответствует спецификации данного формального языка, т.е. что парсер распознает именно данный формальный язык.
В настоящее время существует много надежных систем автоматизарованной генерации парсеров. Однако сложность реальных языков такова, что даже при использовании систем автоматизарованной генерации разработка парсеров требует дополнительно написания ручного кода, в основном для разрешения конфликтов при синтаксическом разборе -- так называемые look-ahead процедуры.
Инструмент SynTESK позволяет находить ошибки в таких вручную написанных процедурах.
SynTESK реализует технологию UniTesK автоматизированного тестирования, основанную на использовании спецификаций и моделей целевой системы.
При использовании инструмента SynTESK тесты строятся полностью автоматически на основе описания грамматики в виде BNF (форма Бэкуса-Наура). Для данного описания грамматики формального языка SynTESK позволяет получить тесты следующих видов:
Это позволяет проверять как то, что тестируемый парсер принимает корректные предложения целевого языка, так и то, что парсер отвергает некорректные предложения.
Инстумент SynTESK позволяет получать эффективные и при этом относительно небольшие множества тестов.
SynTESK легко использовать для тестирования как вновь разрабатываемого программного обеспечения, так и уже существующих систем.
В состав системы SynTESK входят инструменты, необходимые для создания тестов на основе описания грамматики. Возможно использование этих инструментов из командной строки.
Для автоматического построения тестов системе SynTESK требуется формальное описание грамматики в виде BNF (форма Бэкуса-Наура).
Анализатор BNF дает возможность проверить корректность данного описания грамматики.
Для проверки того, что тестируемый парсер принимает корректные предложения целевого языка, требуется построить множество разнообразных предложений, принадлежащих целевому языку, при обработке которых будут задействованы все возможности тестируемого парсера, связанные с распознаванием предложений.
Генератор позитивных тестов дает возможность автоматически получить такое множество предложений.
Для проверки того, что тестируемый парсер отвергает некорректные предложения (не из целевого языка), требуется построить множество разнообразных предложений, не принадлежащих целевому языку, при обработке которых будут задействованы все соответствующие возможности тестируемого парсера, связанные с поиском ошибок.
Генератор негативных тестов дает возможность автоматически получить такое множество предложений.
Распаковать zip-архив syntesk-@MODULE.VERSION@.zip
bin
- исполняемые файлыlibs
- библиотекиexamples
- примерыsrc
- исходные тексты инструментаsyntesk.bat
syntesk.sh
Для запуска генератора тестов нужно:
syntesk.properties
,
находящемся в каталоге, из которого запускается программа.syntesk <файл_с_грамматикой> <имя_плагина_генератора_тестов>
syntesk BNF.bnf pos_test_alt
Генераторы тестов имеются следующие:
Формат допустимого файла с грамматикой представлен в файле
examples/BNF.bnf
Значения свойств задаются так:
syntesk.<имя_плагина_генератора_тестов>.<имя_свойства> = <значение_свойства>
Имена свойств конкретного плагина и их описание можно узнать, запустив команду:
syntesk - <имя_плагина_генератора_тестов>
например,
syntesk - neg_test_token
Для pos_test_alt
:
syntesk.pos_test_alt.start.rule=<имя_стартового_правила>
syntesk.pos_test_alt.lexeme.file=<имя_файла_с_лексемами>
syntesk.pos_test_alt.processor=print_xml
syntesk.print_xml.output.test.dir=<каталог_для_вывода_тестов>
print_xml
-- это плагин, выводящий тесты в файлы. Его свойства можно узнать тем же способом, что и свойства генераторов.
neg_test_point
:
syntesk.neg_test_point.start.rule=<имя_стартового_правила>
syntesk.neg_test_point.lexeme.file=<имя_файла_с_лексемами>
syntesk.neg_test_point.processor=print_xml
syntesk.print_xml.output.test.dir=<каталог_для_вывода_тестов>
Для neg_test_token
:
syntesk.neg_test_token.start.rule=<имя_стартового_правила>
syntesk.neg_test_token.lexeme.file=<имя_файла_с_лексемами>
syntesk.neg_test_token.processor=print_xml
syntesk.print_xml.output.test.dir=<каталог_для_вывода_тестов>
Пример файла с кофигурацией для грамматики BNF представлен в файле
examples/BNF.bnf.properties
Файл с лексемами устроен так: в строчке пишется лексема в угловых скобках, после нее через пробелы в кавычках значение лексемы. Например:
<IntegerLiteral> "123" <FloatingPointLiteral> "45.67" <CharacterLiteral> "'a'" <StringLiteral> "\"my string\"" <ID> "Name"
Пример файла с лексемами для грамматики BNF представлен в файле
examples/BNF.bnf.lxm
О том, какие доступны плагины, можно узнать, запустив команду
syntesk -
Подробно о структуре командной строки запуска генератора можно узнать, запустив команду
syntesk