Аннотация:
Данная статья посвящена исследованию возможностей применения современных методов динамического анализа программ на основе символьного исполнения к программному обеспечению, предоставляющему графический пользовательский интерфейс. Отличительными особенностями подобных программ является интерактивная обработка данных и применение параллельных потоков команд. Данные особенности значительно усложняют эффективность применения подходов автоматического обхода путей выполнения на основе символьного исполнения. В рамках статьи предлагается проводить анализ программ, предоставляющих графический интерфейс, с помощью гибридного метода, включающего символьное исполнение и стандартные подходы к извлечению модели графического интерфейса для построения тестовых сценариев. В статье представлен обзор существующих программных средств, предоставляющих возможности анализа и тестирования программ, и выделены средства GUITAR и Coffee Machine, совмещение которых позволяет эффективно анализировать Java-программы с графическим пользовательским интерфейсом. Рассматривается схема внедрения модулей инструментации байт-кода системы Coffee Machine в рабочий цикл инструмента GUITAR. Модель структуры графического интерфейса, извлекаемая инструментом GUITAR, расширяется фрагментами предикатов пути, построенных с помощью символьного исполнения. Представлен алгоритм составления предикатов в сложные трассы, обрабатываемые инструментами проверки выполнимости булевых ограничений, позволяющий автоматически генерировать тестовые сценарии для обхода различных путей выполнения по коду функций обработки событий взаимодействия с элементами графического интерфейса. Представлены практические результаты применения совмещенного метода, позволившего обнаружить необработанные исключения в ряде проектов с открытым исходным кодом, и дана оценка полученных результатов. В заключении статьи даётся оценка эффективности предложенного метода и рассмотрены основные ограничения, избавление от которых представляется актуальным направлением дальнейших исследований.
Ключевые слова:динамический анализ программ, анализ программ, тестирование GUI, тестовое покрытие.