View
571
Download
3
Category
Preview:
DESCRIPTION
Tools & Methods of Program Analysis (TMPA-2013) Andrianova, А., Itsykson, V., St. Petersburg State Polytechnic University Automated Test Synthesis for Java Programs Based on Program Analysis and Contract Inventory
Citation preview
АВТОМАТИЗИРОВАННЫЙ СИНТЕЗ ТЕСТОВ
ДЛЯ JAVA-ПРОГРАММ НА ОСНОВЕ АНАЛИЗА ПРОГРАММ И УЧЕТА
КОНТРАКТОВ
Владимир ИЦЫКСОН, Алефтина АНДРИАНОВАКафедра компьютерных систем и программных
технологий, СПбГПУ
Санкт-Петербургский государственный политехнический университет
Институт информационных технологий и управления
Кафедра компьютерных систем и программных технологий
Кострома, 10-12 октября 2013
2
Автоматизированный синтез тестов для Java-программ
Введение
12.10.2013
Автоматизированный синтез тестов для Java-программ
3
Тенденции в области разработки ПО
12.10.2013
рост сложности программных систем сокращение времени разработки смещение технологических решений в
программную область проникновение программно-управляемых
систем, в критически важные области человеческой жизни: медицину, армию, авиацию, космос, финансовую сферу
качество ПО становится ниже
важность ПО становится выше
Автоматизированный синтез тестов для Java-программ
4
Методы повышения качества ПО
12.10.2013
Статические дедуктивная верификация проверка на модели (model checking) статический анализ
Динамические тестирование динамический анализ профилирование
Автоматизированный синтез тестов для Java-программ
5
Методы повышения качества ПО
12.10.2013
Статические методы+ анализ свойств всей программы (всех путей выполнения)
+ гарантирование определенных свойств программы
- низкая производительность
- сложность реализации Динамические методы
+ простота реализации
+ высокая точность (отсутствие ложных обнаружений)
- низкая полнота (отсутствие гарантий)
использование гибридных подходов, сочетающих достоинства статических и
динамических методов
Автоматизированный синтез тестов для Java-программ
6
Гибридный подход
12.10.2013
Статические методы анализ программы анализ моделей и спецификаций синтез тестов
Динамические методы запуск тестов анализ результатов
Автоматизированный синтез тестов для Java-программ
7
Контрактное программирование (DbC)
12.10.2013
предложено Б. Мейером в 1985 г.
позволяет описать частичную спецификацию (контракт) метода/функции, задающую предусловия – требования к входным
параметрам метода
предусловия – свойства, гарантированно выполняющиеся после завершения метода
инварианты – свойства класса, сохраняющиеся после выполнения методов
Автоматизированный синтез тестов для Java-программ
8
Постановка задачи
12.10.2013
Разработка технологии автоматического синтеза модульных тестов, обеспечивающей покрытие всех¹ путей выполнения программы с помощью статического анализа структуры программы спецификаций, заданных в форме
контрактов Разработка прототипа системы
автоматического синтеза модульных тестов для программ на языке Java
9
Автоматизированный синтез тестов для Java-программ
Предлагаемый подход
12.10.2013
Автоматизированный синтез тестов для Java-программ
10
Предлагаемый подход
12.10.2013
Совмещение классических подходов: тестирование
«черного ящика»
тестирование «белого ящика»
Автоматизированный синтез тестов для Java-программ
11
Общая структура подхода
12.10.2013
Автоматизированный синтез тестов для Java-программ
12
Предлагаемый подход. Этапы
12.10.2013
формирование модели программы (метода) формирование списка путей выполнения метода преобразование путей в цепочки утверждений анализ контрактов и дополнение утверждений
составляющими контрактов: предусловиями метода и инвариантами класса
разрешение системы утверждений относительно аргументов метода
формирование экземпляра теста на основе решения системы утверждений
формирование тестового оракула на основе постусловий метода и инвариантов класса
Автоматизированный синтез тестов для Java-программ
13
Построение модели программы
12.10.2013
Построение структурноймодели
Построение поведенческоймодели
Автоматизированный синтез тестов для Java-программ
14
Извлечение путей исполнения
12.10.2013
Анализ графа потока управления: Анализ узлов, влияющих на поток
управления: ветвления (if) конструкции мультиветвления (switch) циклы (do, while, do-while)
Коллекционирование условий ветвления
Коллекционирование операторов пути
Результат: список операторов и условий,
которые должны выполниться, чтобы данный путь был пройден
Автоматизированный синтез тестов для Java-программ
15
Формирование системы утверждений. SSA
12.10.2013
x = 10;y = 20;if (z > 5) { x = x + y;}
1: x=102: y=203: z>54: x=x+y
1: x1=102: y1=203: z1>54: x2=x1+y1
Решение – преобразование пути в вид однократного статического присваивания (SSA)
Автоматизированный синтез тестов для Java-программ
16
Формирование системы утверждений
12.10.2013
преобразование путей в форму однократного статического присваивания (SSA)
преобразование операторов к трехоперандной форме введение временных переменных введение дополнительных узлов в путь
преобразование условий в соответствующие утверждения
Автоматизированный синтез тестов для Java-программ
17
Формирование системы утверждений
12.10.2013
Для каждого пути имеем систему логических утверждений
Для форсирования прохождения тестом пути необходимо решить обратную задачу: при каких значениях аргументов
метода система утверждений разрешима?
Если такие значения аргументов найдены, то их использование в тесте форсирует выполнение искомого пути
Автоматизированный синтез тестов для Java-программ
18
Решение системы утверждений
12.10.2013
Построенная система утверждений выражена в терминах логики первого порядка и относится к классу Satisfiability Modulo Theories (SMT)В общем случае разрешение SMT-формулы – NP-полная задача Существуют эффективные SMT-решатели (SMT-
солверы): Z3, CVC, MathSAT, OpenSMT, MiniSMT и т.п.
Входные данные для SMT-решателей представляются в формате SMT-LIB
Автоматизированный синтез тестов для Java-программ
19
Решение системы утверждений
12.10.2013
Преобразование системы утверждений в формат SMT-LIB (конкретнее – SMT-LIB 2.0)
Запуск SMT-решателя для решения системы утверждений
Интерпретация результатов работы SMT-решателя получение набора значений аргументов
метода Генерация скелета теста
Автоматизированный синтез тестов для Java-программ
20
Учет контрактов
12.10.2013
Построенные тесты обеспечивают прохождение программой соответствующих путей исполнения
Значения аргументов расположены в области допустимых значений произвольно (особенность SMT-решателей) Как следствие – сгенерированные значения
могут нарушать контракты методов (предусловия) или инварианты классов
Решение: Расширяем систему утверждений
предусловиями методов и инвариантами классов
Автоматизированный синтез тестов для Java-программ
21
Учет контрактов
12.10.2013
Постусловия методов содержат информацию о проверке корректности выполнения методом своих функций
Постусловия и инварианты классов могут быть учтены путем преобразования их в тестовый оракул тривиальная задача, так как контракты
представляются в форме утверждений логики первого порядка
Предусловия
Инварианты
Постусловия
Сокращение ОДЗ
Генерация тестовых оракулов
Автоматизированный синтез тестов для Java-программ
22
Резюме
12.10.2013
Для каждого класса эквивалентности сгенерирован тест
Заготовка тестового оракула сформирована на основе постусловий и инвариантов
Обеспечено покрытие всех путей (*) Что делать, если требуется
сгенерировать несколько тестов для одного класса эквивалентности?
Автоматизированный синтез тестов для Java-программ
23
Формирование множественных тестов
12.10.2013
ОДЗ аргументов делятся на интервалы в соответствии с какой-либо эвристикой
В систему утверждений добавляются условия нахождения аргументов в рассчитанных интервалах
SMT-решатель запускается повторно с новыми системами утверждений
Могут использоваться различные эвристики Реализовано равномерное заполнение
тестами ОДЗ
24
Автоматизированный синтез тестов для Java-программ
Реализация
12.10.2013
Автоматизированный синтез тестов для Java-программ
25
Выбранные технологии
12.10.2013
Целевой язык программирования – Java
Система задания контрактов – CoFoJa SMT-решатель – Z3 от Microsoft
Research Технология модульного тестирования
– JUnit
26
Архитектура инструментальной системы
генерации тестов
Автоматизированный синтез тестов для Java-программ
12.10.2013
Автоматизированный синтез тестов для Java-программ
27
Особенности реализации
12.10.2013
Язык реализации – Java Построение структурной модели – Java
Compiler Tree API Анализ контрактов в формате CoFoJa с
помощью процессоров аннотаций Синтез системы утверждений в формате SMT-
LIB 2.0 Запуск внешнего SMT-решателя Z3 через
внешний процесс Синтез тестов в формате JUnit
28
Автоматизированный синтез тестов для Java-программ
Экспериментальные исследования
12.10.2013
Автоматизированный синтез тестов для Java-программ
29
Пример №1. Оракулы и множественные тесты
12.10.2013
Автоматизированный синтез тестов для Java-программ
30
Пример №2. Нелинейные функции
12.10.2013
Автоматизированный синтез тестов для Java-программ
31
Пример №3. Логические операции и несколько аргументов метода
12.10.2013
Автоматизированный синтез тестов для Java-программ
32
Пример №4. Циклы
12.10.2013
Автоматизированный синтез тестов для Java-программ
33
Ограничения текущей реализации
12.10.2013
Ограничения на мощность контрактов
Ограниченный набор поддерживаемых типов данных: int, boolean, float, double
Неполная поддержка всех конструкций языка Java
Простая обработка циклов Отсутствие поддержки рекурсии …
34
Автоматизированный синтез тестов для Java-программ
Состояние исследований в мире
12.10.2013
Автоматизированный синтез тестов для Java-программ
35
Состояние исследований в мире
12.10.2013
Microsoft Research Pex Целевые языки C и C# Извлечение путей исполнения Использование Z3-решателя для синтеза тестов
AutoTest Framework Целевой язык Eiffel Случайная генерация тестов и генерация на
основе отказов Использование контрактов для
для формирования оракулов Для ограничения ОДЗ
… (Symstra, KUnit, Kiasan, UnitMeister,…)
36
Автоматизированный синтез тестов для Java-программ
Заключение
12.10.2013
Автоматизированный синтез тестов для Java-программ
37
Заключение
12.10.2013
Разработана технология синтеза модульных тестов для программ на языке Java, обеспечивающая покрытие путей
Разработанные методы с помощью применения SMT-солвера генерируют параметры модульных тестов, форсирующие реализацию заданных путей исполнения
Учет контрактов методов позволяет с одной стороны с помощью постусловий частично автоматизировать синтез тестовых оракулов, а с другой – с помощью предусловий и инвариантов ограничивать множество генерируемых значений аргументов тестируемой функции
Реализован программный прототип и проведено его экспериментальное исследование на наборе тестовых примеров
Анализ полученных результатов тестирования показал полную работоспособность предложенных методов с учетом заданных требований и ограничений
Автоматизированный синтез тестов для Java-программ
38
Направления дальнейших исследований
12.10.2013
Совершенствование анализатора (прототипа) с целью обеспечения анализа более широкого класса Java-программ
Разработка новых алгоритмов генерации множественных тестов, наиболее эффективно распределяющих значения переменных по области определения
Расширение на другие языки программирования
СПАСИБО ЗА ВНИМАНИЕ!
Recommended