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

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

Наша молодая и дружная команда в ИСП РАН занимается исследованиями в этой области, а также разработкой интеллектуальных инструментов для помощи разработчикам, аналитикам и тестировщикам. Мы тесно сотрудничаем с компанией Samsung, а также нацелены на поиск новых партнеров (CERN и др.).

Научные руководители: Сорокин Константин Сергеевич и Марков Сергей Игоревич.

Среди актуальных R&D направлений нашей команды можно выделить следующие:

  1. Системы интеллектуального GUI-тестирования. Такие системы используют методы МО для эмуляции реального пользователя и оптимизации тестирования для выявления различных ошибок на разных уровнях (ошибки ОС или ошибки в приложениях). На данный момент активно разрабатывается система для GUI тестирования мобильных приложений на ОС Android. Направление включает в себя широкий спектр задач:
    • оптимизацию тестирования методами глубокого обучения;
    • распознавание элементов графического интерфейса пользователя (GUI);
    • поиск ошибок отображения элементов графического интерфейса с использованием методов компьютерного зрения;
    • поиск аномалий в системных показателях мобильного устройства.
  2. Системы интеллектуального анализа исходного кода программ. В процессе создания ПО есть большое количество полезных данных из различных источников, которые сейчас почти не используются существующими инструментами. Например, история разработки и исправлений в системе контроля версий. Указанные источники данных могут быть использованы для создания прикладных инструментов на базе методов анализа данных и методов МО для:
    • автоматического выведения правил исправления ошибок и неточностей;
    • рекомендации исправлений или способов рефакторинга кода;
    • рекомендации кода или API во время разработки;
    • поиска специализированных ошибок, которые тяжело искать классическими методами, например, поиск архитектурных антипаттернов, несоответствий тела функции ее имени, поиск семантических клонов кода;
    • автоматическая генерация документации и commit-сообщений по изменениям.
  3. Системы интеллектуального анализа системных логов. Тестирование и отладка сложных программных систем, таких как операционные системы или распределенные IoT системы, — это трудоемкий процесс. При анализе сбоев во время тестирования эксперту зачастую приходится проводить ручной анализ системных логов. Такие логи содержат вывод многих программных процессов (в том числе параллельных) и могут достигать сотен тысяч строк. Все это сильно затрудняет задачу поиска причин сбоя. Для помощи эксперту в решении данной задачи можно использовать исторические данные и методы интеллектуального анализа данных, которые позволяют существенно сократить размер лога и выделить информацию, потенциально относящуюся к причинам ошибки. Разработка такой системы включает ряд нетривиальных задач, в том числе:
    • разработку разборщиков для целевых логов;
    • хранение и распределенную обработку больших логов;
    • разработку оптимальных методов для поиска аномалий (строк и под-последовательностей) в логах.