jPET: система автоматической генерации контрольных примеров для Java

Elvira Albert, Israel Cabanas, Antonio Flores-Montoya, Miguel Gomez-Zamalloa, and Sergio Gutierrez. 2011. jPET: An Automatic Test-Case Generator for Java. In Proceedings of the 2011 18th Working Conference on Reverse Engineering (WCRE '11). IEEE Computer Society, Washington, DC, USA, 441-442. DOI=10.1109/WCRE.2011.67 http://dx.doi.org/10.1109/WCRE.2011.67

jPET — это инструмент для автоматической генерации контрольных примеров для Java в среде Eclipse. jPET работает поверх PET, генератора контрольных примеров, который автоматически получает их из байт-кода программы на Java.

Тестирование сегодня признано одной из самых важных дисциплин в области разработки программного обеспечения. По временным и материальным затратам равных ей уже не найти, ведь с ростом сложности систем все труднее покрыть тестами все строки кода и все возможные пути выполнения. В связи с этим набирают популярность системы автоматической генерации контрольных данных. Стандартный подход к решению проблемы — так называемое «символьное выполнение» программы, когда содержимым переменных являются выражения, а не конкретные значения. PET работает как раз в этой парадигме: он получает на вход байт-код программы и множество выбранных критериев покрытия, таких как покрытие по инструкциям, по путям выполнения, с ограничениями по глубине стека вызовов. На выходе имеем множество контрольных примеров с указанием соответствующей ветви выполнения. PET работает из командной строки и из веб-интерфейса, однако ни то, ни другое не удобно для разработки.

jPET, будучи реализован в виде плагина для Eclipse, решает сразу две проблемы: он интегрирован со средой разработки и отображаемая информация представлена в человекочитаемом виде — исходном коде программы на Java. jPET состоит из

  1. просмотрщика контрольных примеров (The test-case viewer),
  2. просмотрщика соответствующей тесту ветви выполнения программы — последовательности инструкций, на которых тест выполнялся (test-case traces)
  3. парсера предусловий методов на языке JML.

jPET предоставляет более удобный, по сравнению с PET, интерфейс для просмотра множества контрольных примеров, куч ввода и вывода. Модуль состоит из трех подсистем:

  1. подсистема экспорта данных PET в XML
  2. Graph Manager, который позволяет просматривать кучу в удобном графическом интерфейсе.
  3. Пользовательские настройки Graph Manager (на основе Swing).

jPET, будучи интегрирован с Eclipse, умеет:

  1. Подсвечивать все строки, которые работали на данном контрольном наборе.
  2. Пошагово выполненять код с использованием отладчика Eclipse.

Известной проблемой методов символьного выполнения является огромное количество возможных наборов данных и путей ветвления. Одним из решений проблемы является использование предусловий методов. Предусловия позволяют разработчику указать ограничения на множество входных параметров, это может в значительной степени упростить итоговое дерево вызовов, отсеять ненужные и уделить внимание интересующим наборам контрольных данных. Для описания предусловий можно использовать JML.

Заключение

Существует множество инструментов для генерации контрольных примеров, однако очень немногие из них поддерживают полноценную интеграцию со средой разработки. В качестве примеров можно привести PEX (интеграция с VS) и KeY (наиболее полный аналог). Ключевыми же особенностями jPET являются интеграция с Eclipse, визуализатор кучи и просмотрщик ветви выполнения — функционал, который играет ключевую роль в тестировании ПО.