tmpa-2013 itsykson: java program analysis

39
АВТОМАТИЗИРОВАННЫЙ СИНТЕЗ ТЕСТОВ ДЛЯ JAVA-ПРОГРАММ НА ОСНОВЕ АНАЛИЗА ПРОГРАММ И УЧЕТА КОНТРАКТОВ Владимир ИЦЫКСОН, Алефтина АНДРИАНОВА Кафедра компьютерных систем и программных технологий, СПбГПУ Санкт-Петербургский государственный политехнический университет Институт информационных технологий и управления Кафедра компьютерных систем и программных технологий Кострома, 10-12 октября 2013

Upload: iosif-itkin

Post on 05-Dec-2014

578 views

Category:

Documents


3 download

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

TRANSCRIPT

Page 1: TMPA-2013 Itsykson: Java Program Analysis

АВТОМАТИЗИРОВАННЫЙ СИНТЕЗ ТЕСТОВ

ДЛЯ JAVA-ПРОГРАММ НА ОСНОВЕ АНАЛИЗА ПРОГРАММ И УЧЕТА

КОНТРАКТОВ

Владимир ИЦЫКСОН, Алефтина АНДРИАНОВАКафедра компьютерных систем и программных

технологий, СПбГПУ

Санкт-Петербургский государственный политехнический университет

Институт информационных технологий и управления

Кафедра компьютерных систем и программных технологий

Кострома, 10-12 октября 2013

Page 2: TMPA-2013 Itsykson: Java Program Analysis

2

Автоматизированный синтез тестов для Java-программ

Введение

12.10.2013

Page 3: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

3

Тенденции в области разработки ПО

12.10.2013

рост сложности программных систем сокращение времени разработки смещение технологических решений в

программную область проникновение программно-управляемых

систем, в критически важные области человеческой жизни: медицину, армию, авиацию, космос, финансовую сферу

качество ПО становится ниже

важность ПО становится выше

Page 4: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

4

Методы повышения качества ПО

12.10.2013

Статические дедуктивная верификация проверка на модели (model checking) статический анализ

Динамические тестирование динамический анализ профилирование

Page 5: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

5

Методы повышения качества ПО

12.10.2013

Статические методы+ анализ свойств всей программы (всех путей выполнения)

+ гарантирование определенных свойств программы

- низкая производительность

- сложность реализации Динамические методы

+ простота реализации

+ высокая точность (отсутствие ложных обнаружений)

- низкая полнота (отсутствие гарантий)

использование гибридных подходов, сочетающих достоинства статических и

динамических методов

Page 6: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

6

Гибридный подход

12.10.2013

Статические методы анализ программы анализ моделей и спецификаций синтез тестов

Динамические методы запуск тестов анализ результатов

Page 7: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

7

Контрактное программирование (DbC)

12.10.2013

предложено Б. Мейером в 1985 г.

позволяет описать частичную спецификацию (контракт) метода/функции, задающую предусловия – требования к входным

параметрам метода

предусловия – свойства, гарантированно выполняющиеся после завершения метода

инварианты – свойства класса, сохраняющиеся после выполнения методов

Page 8: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

8

Постановка задачи

12.10.2013

Разработка технологии автоматического синтеза модульных тестов, обеспечивающей покрытие всех¹ путей выполнения программы с помощью статического анализа структуры программы спецификаций, заданных в форме

контрактов Разработка прототипа системы

автоматического синтеза модульных тестов для программ на языке Java

Page 9: TMPA-2013 Itsykson: Java Program Analysis

9

Автоматизированный синтез тестов для Java-программ

Предлагаемый подход

12.10.2013

Page 10: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

10

Предлагаемый подход

12.10.2013

Совмещение классических подходов: тестирование

«черного ящика»

тестирование «белого ящика»

Page 11: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

11

Общая структура подхода

12.10.2013

Page 12: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

12

Предлагаемый подход. Этапы

12.10.2013

формирование модели программы (метода) формирование списка путей выполнения метода преобразование путей в цепочки утверждений анализ контрактов и дополнение утверждений

составляющими контрактов: предусловиями метода и инвариантами класса

разрешение системы утверждений относительно аргументов метода

формирование экземпляра теста на основе решения системы утверждений

формирование тестового оракула на основе постусловий метода и инвариантов класса

Page 13: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

13

Построение модели программы

12.10.2013

Построение структурноймодели

Построение поведенческоймодели

Page 14: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

14

Извлечение путей исполнения

12.10.2013

Анализ графа потока управления: Анализ узлов, влияющих на поток

управления: ветвления (if) конструкции мультиветвления (switch) циклы (do, while, do-while)

Коллекционирование условий ветвления

Коллекционирование операторов пути

Результат: список операторов и условий,

которые должны выполниться, чтобы данный путь был пройден

Page 15: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для 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)

Page 16: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

16

Формирование системы утверждений

12.10.2013

преобразование путей в форму однократного статического присваивания (SSA)

преобразование операторов к трехоперандной форме введение временных переменных введение дополнительных узлов в путь

преобразование условий в соответствующие утверждения

Page 17: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

17

Формирование системы утверждений

12.10.2013

Для каждого пути имеем систему логических утверждений

Для форсирования прохождения тестом пути необходимо решить обратную задачу: при каких значениях аргументов

метода система утверждений разрешима?

Если такие значения аргументов найдены, то их использование в тесте форсирует выполнение искомого пути

Page 18: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

18

Решение системы утверждений

12.10.2013

Построенная система утверждений выражена в терминах логики первого порядка и относится к классу Satisfiability Modulo Theories (SMT)В общем случае разрешение SMT-формулы – NP-полная задача Существуют эффективные SMT-решатели (SMT-

солверы): Z3, CVC, MathSAT, OpenSMT, MiniSMT и т.п.

Входные данные для SMT-решателей представляются в формате SMT-LIB

Page 19: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

19

Решение системы утверждений

12.10.2013

Преобразование системы утверждений в формат SMT-LIB (конкретнее – SMT-LIB 2.0)

Запуск SMT-решателя для решения системы утверждений

Интерпретация результатов работы SMT-решателя получение набора значений аргументов

метода Генерация скелета теста

Page 20: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

20

Учет контрактов

12.10.2013

Построенные тесты обеспечивают прохождение программой соответствующих путей исполнения

Значения аргументов расположены в области допустимых значений произвольно (особенность SMT-решателей) Как следствие – сгенерированные значения

могут нарушать контракты методов (предусловия) или инварианты классов

Решение: Расширяем систему утверждений

предусловиями методов и инвариантами классов

Page 21: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

21

Учет контрактов

12.10.2013

Постусловия методов содержат информацию о проверке корректности выполнения методом своих функций

Постусловия и инварианты классов могут быть учтены путем преобразования их в тестовый оракул тривиальная задача, так как контракты

представляются в форме утверждений логики первого порядка

Предусловия

Инварианты

Постусловия

Сокращение ОДЗ

Генерация тестовых оракулов

Page 22: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

22

Резюме

12.10.2013

Для каждого класса эквивалентности сгенерирован тест

Заготовка тестового оракула сформирована на основе постусловий и инвариантов

Обеспечено покрытие всех путей (*) Что делать, если требуется

сгенерировать несколько тестов для одного класса эквивалентности?

Page 23: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

23

Формирование множественных тестов

12.10.2013

ОДЗ аргументов делятся на интервалы в соответствии с какой-либо эвристикой

В систему утверждений добавляются условия нахождения аргументов в рассчитанных интервалах

SMT-решатель запускается повторно с новыми системами утверждений

Могут использоваться различные эвристики Реализовано равномерное заполнение

тестами ОДЗ

Page 24: TMPA-2013 Itsykson: Java Program Analysis

24

Автоматизированный синтез тестов для Java-программ

Реализация

12.10.2013

Page 25: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

25

Выбранные технологии

12.10.2013

Целевой язык программирования – Java

Система задания контрактов – CoFoJa SMT-решатель – Z3 от Microsoft

Research Технология модульного тестирования

– JUnit

Page 26: TMPA-2013 Itsykson: Java Program Analysis

26

Архитектура инструментальной системы

генерации тестов

Автоматизированный синтез тестов для Java-программ

12.10.2013

Page 27: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

27

Особенности реализации

12.10.2013

Язык реализации – Java Построение структурной модели – Java

Compiler Tree API Анализ контрактов в формате CoFoJa с

помощью процессоров аннотаций Синтез системы утверждений в формате SMT-

LIB 2.0 Запуск внешнего SMT-решателя Z3 через

внешний процесс Синтез тестов в формате JUnit

Page 28: TMPA-2013 Itsykson: Java Program Analysis

28

Автоматизированный синтез тестов для Java-программ

Экспериментальные исследования

12.10.2013

Page 29: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

29

Пример №1. Оракулы и множественные тесты

12.10.2013

Page 30: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

30

Пример №2. Нелинейные функции

12.10.2013

Page 31: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

31

Пример №3. Логические операции и несколько аргументов метода

12.10.2013

Page 32: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

32

Пример №4. Циклы

12.10.2013

Page 33: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

33

Ограничения текущей реализации

12.10.2013

Ограничения на мощность контрактов

Ограниченный набор поддерживаемых типов данных: int, boolean, float, double

Неполная поддержка всех конструкций языка Java

Простая обработка циклов Отсутствие поддержки рекурсии …

Page 34: TMPA-2013 Itsykson: Java Program Analysis

34

Автоматизированный синтез тестов для Java-программ

Состояние исследований в мире

12.10.2013

Page 35: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

35

Состояние исследований в мире

12.10.2013

Microsoft Research Pex Целевые языки C и C# Извлечение путей исполнения Использование Z3-решателя для синтеза тестов

AutoTest Framework Целевой язык Eiffel Случайная генерация тестов и генерация на

основе отказов Использование контрактов для

для формирования оракулов Для ограничения ОДЗ

… (Symstra, KUnit, Kiasan, UnitMeister,…)

Page 36: TMPA-2013 Itsykson: Java Program Analysis

36

Автоматизированный синтез тестов для Java-программ

Заключение

12.10.2013

Page 37: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

37

Заключение

12.10.2013

Разработана технология синтеза модульных тестов для программ на языке Java, обеспечивающая покрытие путей

Разработанные методы с помощью применения SMT-солвера генерируют параметры модульных тестов, форсирующие реализацию заданных путей исполнения

Учет контрактов методов позволяет с одной стороны с помощью постусловий частично автоматизировать синтез тестовых оракулов, а с другой – с помощью предусловий и инвариантов ограничивать множество генерируемых значений аргументов тестируемой функции

Реализован программный прототип и проведено его экспериментальное исследование на наборе тестовых примеров

Анализ полученных результатов тестирования показал полную работоспособность предложенных методов с учетом заданных требований и ограничений

Page 38: TMPA-2013 Itsykson: Java Program Analysis

Автоматизированный синтез тестов для Java-программ

38

Направления дальнейших исследований

12.10.2013

Совершенствование анализатора (прототипа) с целью обеспечения анализа более широкого класса Java-программ

Разработка новых алгоритмов генерации множественных тестов, наиболее эффективно распределяющих значения переменных по области определения

Расширение на другие языки программирования

Page 39: TMPA-2013 Itsykson: Java Program Analysis

СПАСИБО ЗА ВНИМАНИЕ!