TMPA-2013 Itsykson: Java Program Analysis

580 views
448 views

Published on

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

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
580
On SlideShare
0
From Embeds
0
Number of Embeds
187
Actions
Shares
0
Downloads
5
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

TMPA-2013 Itsykson: Java Program Analysis

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

×