====== 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 состоит из - просмотрщика контрольных примеров (The test-case viewer), - просмотрщика соответствующей тесту ветви выполнения программы — последовательности инструкций, на которых тест выполнялся (test-case traces) - парсера предусловий методов на языке JML. ===== Обзор основных возможностей ===== ==== The test-case viewer ==== jPET предоставляет более удобный, по сравнению с PET, интерфейс для просмотра множества контрольных примеров, куч ввода и вывода. Модуль состоит из трех подсистем: - подсистема экспорта данных PET в XML - Graph Manager, который позволяет просматривать кучу в удобном графическом интерфейсе. - Пользовательские настройки Graph Manager (на основе Swing). ==== Отображение ветвей выполнения ==== jPET, будучи интегрирован с Eclipse, умеет: - Подсвечивать все строки, которые работали на данном контрольном наборе. - Пошагово выполненять код с использованием отладчика Eclipse. ==== Описание предусловий методов ==== Известной проблемой методов символьного выполнения является огромное количество возможных наборов данных и путей ветвления. Одним из решений проблемы является использование предусловий методов. Предусловия позволяют разработчику указать ограничения на множество входных параметров, это может в значительной степени упростить итоговое дерево вызовов, отсеять ненужные и уделить внимание интересующим наборам контрольных данных. Для описания предусловий можно использовать JML. ====== Заключение ====== Существует множество инструментов для генерации контрольных примеров, однако очень немногие из них поддерживают полноценную интеграцию со средой разработки. В качестве примеров можно привести PEX (интеграция с VS) и KeY (наиболее полный аналог). Ключевыми же особенностями jPET являются интеграция с Eclipse, визуализатор кучи и просмотрщик ветви выполнения — функционал, который играет ключевую роль в тестировании ПО.