Автор: Денис Аветисян
Новая система CovAgent использует возможности искусственного интеллекта и динамической инструментации для автоматического тестирования Android-приложений и значительного повышения процента покрытого кода.

CovAgent преодолевает ограничения традиционного тестирования, автоматически запуская ранее недоступные активности и повышая эффективность анализа кода.
Несмотря на значительные успехи в автоматизированном тестировании, обеспечение полного покрытия кода в Android-приложениях остается сложной задачей, зачастую не превышающей 30%. В данной работе, ‘CovAgent: Overcoming the 30% Curse of Mobile Application Coverage with Agentic AI and Dynamic Instrumentation’, предлагается новый подход, использующий возможности агентного ИИ и динамической инструментации для преодоления этих ограничений. CovAgent автоматически запускает ранее недостижимые активности, значительно повышая покрытие кода по сравнению с современными решениями, такими как LLMDroid и APE. Какие перспективы открываются для дальнейшего применения агентного ИИ в автоматизации тестирования и обеспечении качества мобильных приложений?
Эволюция Тестирования Android: От Хаоса к Порядку
Традиционные методы тестирования Android-приложений, такие как генерация случайных событий с помощью инструмента ‘Monkey’, зачастую демонстрируют ограниченный охват и неэффективны при работе со сложными состояниями приложения. Вместо целенаправленного исследования функциональности, ‘Monkey’ полагается на случайные действия пользователя, что приводит к неполному тестированию и затрудняет выявление критических ошибок, особенно в приложениях с разветвленной логикой и сложными пользовательскими интерфейсами. Этот подход может пропустить важные сценарии использования и оставить уязвимости незамеченными, требуя более интеллектуальных стратегий тестирования, способных эффективно исследовать приложение и обеспечить более надежный результат.
Достижение всестороннего покрытия кода при тестировании приложений Android требует применения продуманных стратегий, выходящих за рамки простого перебора вариантов. Вместо слепого генерирования событий, современные подходы фокусируются на анализе структуры кода и определении ключевых путей выполнения. Это позволяет создавать тестовые сценарии, целенаправленно охватывающие критические участки приложения, включая обработку исключений и граничные условия. Использование техник, таких как символьное выполнение и конколическое тестирование, позволяет автоматически генерировать входные данные, максимизирующие покрытие кода и выявляющие скрытые ошибки, которые могли бы остаться незамеченными при традиционном тестировании. Такой интеллектуальный подход не только повышает эффективность тестирования, но и существенно снижает затраты времени и ресурсов, необходимых для обеспечения высокого качества программного обеспечения.
Эффективное тестирование Android-приложений требует методов, которые позволяют целенаправленно исследовать функциональность и выявлять критические ошибки. Современные подходы смещаются от случайной генерации событий к интеллектуальным стратегиям, способным охватить сложные сценарии использования. Вместо простого перебора всех возможных действий, акцент делается на анализе поведения приложения, выявлении ключевых путей и приоритетном тестировании наиболее важных функций. Это позволяет значительно сократить время тестирования, повысить процент обнаружения ошибок и обеспечить более надежную работу приложения на различных устройствах и версиях Android. Разработка и внедрение таких методов является ключевым фактором успеха в конкурентной среде мобильных приложений.

Автоматизированное Исследование: От Анализа Программы к Управляемому Поиску
Инструменты автоматизированного тестирования, такие как Sapienz, APE и Stoat, применяют статический анализ кода приложения и эволюционные алгоритмы для систематического исследования графического пользовательского интерфейса (GUI). Статический анализ позволяет выявлять потенциальные точки взаимодействия и структуры GUI без фактического запуска приложения, что повышает эффективность поиска. Эволюционные алгоритмы, в свою очередь, используют методы, имитирующие естественный отбор, для итеративного улучшения стратегий исследования GUI. Это позволяет инструментам адаптироваться к структуре приложения и находить наиболее эффективные пути тестирования, значительно повышая покрытие кода и снижая время, необходимое для обнаружения ошибок.
Направленные методы поиска, такие как A3E, отличаются от случайного тестирования тем, что концентрируют исследовательскую деятельность в областях приложения, наиболее вероятно содержащих ошибки. Вместо генерации случайных пользовательских действий, A3E использует анализ кода и эвристики для определения потенциально проблемных участков, например, участков кода с высокой сложностью или областей, где ранее были обнаружены дефекты. Это позволяет значительно повысить эффективность тестирования, поскольку большая часть усилий направляется на проверку критически важных функций и сценариев, а не на исследование нерелевантных путей выполнения.
Система “Humanoid” использует машинное обучение для оптимизации процесса исследования графического интерфейса приложения. В отличие от случайного или основанного на статической анализе подхода, “Humanoid” анализирует историю взаимодействий с приложением, выявляя закономерности и прогнозируя наиболее перспективные пути тестирования. Это позволяет системе динамически адаптировать стратегию исследования, сосредотачиваясь на областях, где вероятны ошибки или нештатное поведение, и тем самым повышая эффективность поиска дефектов по сравнению с традиционными методами автоматизированного тестирования.

Возрождение LLM в Тестировании: Рассуждения о Поведении Приложений
В последние годы наблюдается тенденция использования больших языковых моделей (LLM) для автоматизации тестирования мобильных приложений. Подходы, такие как LLMDroid, GPTDroid и DroidAgent, применяют LLM для анализа пользовательского интерфейса приложения и выявления новых или измененных функций. Этот анализ позволяет генерировать более целенаправленные тестовые сценарии, фокусируясь на областях приложения, где произошли изменения или добавлены новые возможности, что повышает эффективность тестирования и снижает затраты времени и ресурсов по сравнению с традиционными методами, основанными на случайном вводе данных.
Современные модели, использующие метод ‘ChainOfThought’ (цепочки рассуждений), способны анализировать логику работы приложений и генерировать более эффективные тестовые примеры. Вместо случайного ввода, модель последовательно рассуждает о возможных сценариях использования приложения, прогнозируя ожидаемые результаты. Это позволяет создавать тестовые данные, нацеленные на конкретные функциональные возможности и выявляющие потенциальные ошибки, которые могли бы остаться незамеченными при традиционном подходе к тестированию. Данный метод повышает вероятность обнаружения ошибок, связанных с логикой работы приложения и обработкой различных входных данных.
Протокол ModelContextProtocol обеспечивает взаимодействие между LLM-агентами и внешними инструментами, позволяя им взаимодействовать с тестируемым приложением и наблюдать за его поведением. Этот протокол определяет стандартизированный интерфейс для обмена данными, включающий запросы агента к приложению, ответы приложения и наблюдения агента о результатах взаимодействия. В частности, он позволяет агенту отправлять команды для выполнения определенных действий в приложении, получать информацию о состоянии пользовательского интерфейса и интерпретировать результаты, что необходимо для автоматизированного тестирования и анализа поведения приложения в различных сценариях.

CovAgent: Холистический Подход к Интеллектуальному Тестированию
CovAgent представляет собой инновационный подход к тестированию Android-приложений, объединяющий динамическую инструментацию, статический анализ и большие языковые модели (LLM). Динамическая инструментация, осуществляемая с помощью фреймворка Frida, позволяет CovAgent отслеживать поведение приложения в реальном времени и извлекать релевантные данные. Статический анализ обеспечивает предварительное изучение структуры приложения и выявление потенциальных проблем. Интеграция с LLM позволяет использовать полученную информацию для более эффективного формирования тестовых сценариев и анализа результатов, что в совокупности обеспечивает значительное повышение качества и покрытия тестов по сравнению с традиционными методами.
В CovAgent для динамического анализа поведения приложений Android используется инструмент Frida. Frida позволяет перехватывать и модифицировать вызовы функций во время выполнения приложения, что дает возможность извлекать информацию о его внутренней работе. Извлеченные данные, включающие параметры вызовов, возвращаемые значения и состояние памяти, предоставляются в качестве входных данных для большой языковой модели (LLM). Это позволяет LLM понимать логику работы приложения и генерировать более эффективные тестовые примеры, а также выявлять потенциальные уязвимости и ошибки.
CovAgent демонстрирует значительно более высокий уровень покрытия активностей при тестировании Android-приложений, достигая до 49.5%. Это существенно превосходит результат, полученный с использованием инструмента APE, который обеспечивает покрытие лишь 17.7%. Данный показатель указывает на более эффективное исследование функциональности приложения и выявление потенциальных проблем в различных сценариях использования, благодаря расширенным возможностям анализа, реализованным в CovAgent.
CovAgent использует ‘ComponentTransitionGraph’ (Граф переходов между компонентами) для предоставления большой языковой модели (LLM) структурированного представления архитектуры тестируемого Android-приложения. Этот граф кодирует взаимосвязи между различными компонентами приложения, такими как Activity, Service и BroadcastReceiver, отображая последовательности переходов между ними. Предоставление LLM структурированной информации о внутренней организации приложения значительно улучшает ее способность рассуждать о поведении приложения, выявлять потенциальные уязвимости и генерировать эффективные тестовые примеры, в отличие от анализа неструктурированных данных или сырого кода.
По результатам тестирования, CovAgent демонстрирует показатель успешного запуска Activity на уровне 54.8%, что существенно превосходит результат Scenedroid, составляющий 15.8%. Данный показатель отражает способность системы успешно инициировать различные экраны и функциональные возможности приложения в процессе автоматизированного тестирования, что свидетельствует о более высокой эффективности и надежности CovAgent в выявлении потенциальных проблем в пользовательском интерфейсе и логике приложения.
В ходе тестирования, CovAgent продемонстрировал значительно более высокую степень покрытия кода Android-приложений по сравнению с инструментом APE. В частности, CovAgent достиг 56.6% покрытия классов, в то время как APE — лишь 42.3%. Покрытие методов составило 45.2% для CovAgent и 32.1% для APE. Аналогично, покрытие строк кода для CovAgent составило 39.8%, что превышает показатель APE в 28.5%. Данные результаты свидетельствуют о повышенной эффективности CovAgent в обнаружении и анализе различных частей кода приложения.

Будущее Тестирования: К Самовосстанавливающимся и Адаптивным Системам
Будущие исследования направлены на создание самовосстанавливающихся тестовых фреймворков, способных автоматически адаптироваться к изменениям в приложениях и исправлять вышедшие из строя тесты. Вместо того, чтобы требовать ручного вмешательства при каждом обновлении интерфейса или функциональности, такие системы будут анализировать изменения в коде и автоматически корректировать тесты, обеспечивая непрерывность и надежность процесса тестирования. Это достигается за счет использования продвинутых алгоритмов анализа кода и машинного обучения, позволяющих фреймворку «понимать» намерения разработчика и адаптировать тесты соответствующим образом. Подобный подход значительно сократит время и ресурсы, затрачиваемые на поддержание тестового покрытия, и позволит командам разработки быстрее и эффективнее выпускать качественное программное обеспечение.
Сочетание больших языковых моделей (LLM) с инструментами запуска активности (‘ActivityLaunch’) и скриптами инструментации (‘InstrumentationScripts’) открывает новые возможности для автоматизированного тестирования. Данный подход позволяет не просто выполнять заранее написанные тесты, но и динамически генерировать их, адаптируясь к изменениям в приложении. ‘ActivityLaunch’ обеспечивает запуск конкретных функциональных возможностей приложения, в то время как ‘InstrumentationScripts’ позволяют LLM анализировать внутреннее состояние приложения и результаты его работы. Благодаря этому симбиозу, LLM способны создавать более сложные и реалистичные тестовые сценарии, охватывающие различные грани поведения приложения и выявляющие потенциальные ошибки, которые могли бы остаться незамеченными при традиционных методах тестирования. Это значительно повышает эффективность и надежность процесса обеспечения качества программного обеспечения.
Крайней целью исследований в области автоматизированного тестирования является создание полностью автономной системы, способной непрерывно отслеживать качество приложений и заблаговременно выявлять и устранять ошибки. Такая система предполагает выход за рамки традиционного подхода, где тесты пишутся и запускаются вручную, и переход к саморегулирующемуся процессу. Предполагается, что она будет самостоятельно анализировать изменения в коде приложения, автоматически адаптировать тестовые сценарии и, в случае обнаружения проблем, не только сигнализировать о них, но и предпринимать шаги по их исправлению. В перспективе, подобная система позволит значительно сократить время и ресурсы, затрачиваемые на обеспечение качества программного обеспечения, и повысить его надежность и стабильность, предоставляя пользователям более качественный и безопасный продукт.
Исследование, представленное в статье, демонстрирует стремление к преодолению ограничений традиционного тестирования Android-приложений. CovAgent, используя возможности агентного ИИ и динамической инструментации, находит способы активации ранее недостижимых компонентов приложения, значительно повышая покрытие кода. Этот подход перекликается с убеждением, что истинная надежность системы достигается не количеством пройденных тестов, а способностью исследовать все возможные пути исполнения. Как однажды заметил Линус Торвальдс: «Плохой код подобен раковому образованию: он распространяется и заражает все вокруг». CovAgent, в свою очередь, представляет собой инструмент, направленный на выявление и устранение подобных «опухолей» в коде на ранних этапах разработки, обеспечивая более качественный и стабильный продукт.
Что Дальше?
Без четкого определения цели тестирования, любое увеличение покрытия кода — лишь статистический шум. Представленная работа демонстрирует способность автоматизированного запуска ранее недостижимых активностей в Android-приложениях, однако фундаментальный вопрос о релевантности этих активностей остается открытым. Доказательство корректности алгоритма требует не просто достижения определенного процента покрытия, а формальной верификации того, что протестированный код действительно выполняет задуманную функцию.
Очевидным направлением дальнейших исследований является интеграция статического анализа с динамической инструментацией. Необходимо разработать механизмы, позволяющие предсказывать потенциальные точки отказа и целенаправленно тестировать критически важные участки кода, а не просто хаотично исследовать пространство состояний приложения. Попытки использования больших языковых моделей в качестве оракула для автоматической оценки результатов тестирования представляются преждевременными, учитывая склонность этих моделей к галлюцинациям и непредсказуемым ошибкам.
Истинная элегантность тестирования заключается не в количестве автоматизированных шагов, а в математической строгости используемых методов. Любое решение, не поддающееся формальному доказательству, является лишь временным компромиссом, ожидающим своего опровержения.
Оригинал статьи: https://arxiv.org/pdf/2601.21253.pdf
Связаться с автором: https://www.linkedin.com/in/avetisyan/
Смотрите также:
- Адаптация моделей к новым данным: квантильная коррекция для нейросетей
- Сердце музыки: открытые модели для создания композиций
- Где «смотрят» большие языковые модели: новый взгляд на визуальное понимание
- Эффективная память для больших языковых моделей: новый подход LOOKAT
- Игры в коалиции: где стабильность распадается на части.
- Эволюция под контролем: эксперименты с обучением с подкреплением в генетическом программировании
- Доказательство устойчивости веб-агента: проактивное свертывание контекста для задач с горизонтом в бесконечность.
- Доказательства просят: Как искусственный интеллект помогает отличать правду от вымысла
- Интеллектуальный поиск научных статей: новый подход к исследованию литературы
- Голос в переводе: как нейросети учатся понимать речь
2026-02-01 05:05