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 состояние для начала каждого базового блока
Summary
Метод проверки моделей — широко известный подход к проверке корректности и безопасности программного кода без его исполнения, использующий полное исследование пространства состояний. Хотя метод проверки моделей работает хорошо в системах с конечным числом состояний, его эффективность падает в больших программах из-за неконтролируемого экспоненциального роста пространства состояний. Ограниченная модель может быть преобразована в формулу в логике первого порядка, а затем решена при помощи логического решателя, обычно SMT-решателя, поддерживающего необходимые теории. Используемое как базовое в данной работе, — проект Borealis [1], основанный на инфраструктуре компиляторов LLVM и SMT-решателе Z3. Контракты задаются двумя способами: с помощью языка аннотаций, основанного на комментариях в программах на языке C и схожего с языком ACSL [3], а также с помощью встроенных в программный код вызовов специальных процедур
Talk to us
Join us for a 30 min session where you can share your feedback and ask us any queries you have