Abstract

Automated test generation has received a lot of attention in recent decades, because it is one possible solution to the problems inherent to software testing: the need to write tests in the first place and providing test coverage for the human factor. De facto the most promising technique to automatically generate a test is dynamic symbolic execution assisted by an automated constraint solver, e.g., an SMT solver. This process is very similar to bounded model checking, which also deals with generating models from source code, asserting logic properties in it, and processing the returned model. This paper describes a prototype unit test generator for C based on a working bounded model checker called Borealis and shows that these two techniques are very similar and can be easily implemented using the same basic components. The prototype test generator has been evaluated on a number of examples and has shown good results in terms of test coverage and test excessiveness.

Highlights

  • В настоящее время автоматическая генерация тестов исследуется всҷ более и более активно, поскольку является решением многих проблем, связанных с тестированием программного обеспечния (ПО), таких как необходимость написания тестов и обеспечения тестового покрытия с учҷтом человеческого фактора

  • Первый проход вызывает процедуры Borealis для получения входных данных для каждого базового блока LLVM IR

  • Для обеспечения покрытия по операторам требуется запросить у Borealis состояние для начала каждого базового блока

Read more

Summary

Метод ограниченной проверки моделей

Метод проверки моделей — широко известный подход к проверке корректности и безопасности программного кода без его исполнения, использующий полное исследование пространства состояний. Хотя метод проверки моделей работает хорошо в системах с конечным числом состояний, его эффективность падает в больших программах из-за неконтролируемого экспоненциального роста пространства состояний. Ограниченная модель может быть преобразована в формулу в логике первого порядка, а затем решена при помощи логического решателя, обычно SMT-решателя, поддерживающего необходимые теории. Используемое как базовое в данной работе, — проект Borealis [1], основанный на инфраструктуре компиляторов LLVM и SMT-решателе Z3. Контракты задаются двумя способами: с помощью языка аннотаций, основанного на комментариях в программах на языке C и схожего с языком ACSL [3], а также с помощью встроенных в программный код вызовов специальных процедур

Использование динамического символьного исполнения для генерации тестов
Использование BMC для генерации тестов
Использование контрактов при генерации тестов
Требования к системе генерации тестов
Извлечение предикатов и тестовые данные
Детали реализации
Извлечение входных данных
Обработка сложных типов данных
Генерация исходного кода тестов
Работа с пользовательскими тестовыми оракулами
Экспериментальные исследования
Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call