Из года в год программных систем становится все больше, их сложность растет, а вместе с ними растет число уязвимостей и ошибок. Существуют классические подходы и инструменты для обеспечения качества ПО, такие как методы юнит/функционального тестирования, инструменты статического и динамического анализа, IDE и др.. Однако указанных подходов все еще недостаточно для эффективного поиска и продуктивного анализа проблем, есть потребность в создании комплементарных инструментов нового поколения.
Для этого в последнее время активно стали развиваться подходы с применением методов интеллектуального анализа данных и машинного обучения в задачах программной инженерии, в том числе в задачах тестирования и анализа ПО.
Наша молодая и дружная команда в ИСП РАН занимается исследованиями в этой области, а также разработкой интеллектуальных инструментов для помощи разработчикам, аналитикам и тестировщикам. Мы тесно сотрудничаем с компанией Samsung, а также нацелены на поиск новых партнеров (CERN и др.).
Научные руководители: Сорокин Константин Сергеевич и Марков Сергей Игоревич.
Среди актуальных R&D направлений нашей команды можно выделить следующие:
- Системы интеллектуального GUI-тестирования. Такие системы используют методы МО для эмуляции реального пользователя и оптимизации тестирования для выявления различных ошибок на разных уровнях (ошибки ОС или ошибки в приложениях). На данный момент активно разрабатывается система для GUI тестирования мобильных приложений на ОС Android. Направление включает в себя широкий спектр задач:
- оптимизацию тестирования методами глубокого обучения;
- распознавание элементов графического интерфейса пользователя (GUI);
- поиск ошибок отображения элементов графического интерфейса с использованием методов компьютерного зрения;
- поиск аномалий в системных показателях мобильного устройства.
- Системы интеллектуального анализа исходного кода программ. В процессе создания ПО есть большое количество полезных данных из различных источников, которые сейчас почти не используются существующими инструментами. Например, история разработки и исправлений в системе контроля версий. Указанные источники данных могут быть использованы для создания прикладных инструментов на базе методов анализа данных и методов МО для:
- автоматического выведения правил исправления ошибок и неточностей;
- рекомендации исправлений или способов рефакторинга кода;
- рекомендации кода или API во время разработки;
- поиска специализированных ошибок, которые тяжело искать классическими методами, например, поиск архитектурных антипаттернов, несоответствий тела функции ее имени, поиск семантических клонов кода;
- автоматическая генерация документации и commit-сообщений по изменениям.
- Системы интеллектуального анализа системных логов. Тестирование и отладка сложных программных систем, таких как операционные системы или распределенные IoT системы, — это трудоемкий процесс. При анализе сбоев во время тестирования эксперту зачастую приходится проводить ручной анализ системных логов. Такие логи содержат вывод многих программных процессов (в том числе параллельных) и могут достигать сотен тысяч строк. Все это сильно затрудняет задачу поиска причин сбоя. Для помощи эксперту в решении данной задачи можно использовать исторические данные и методы интеллектуального анализа данных, которые позволяют существенно сократить размер лога и выделить информацию, потенциально относящуюся к причинам ошибки. Разработка такой системы включает ряд нетривиальных задач, в том числе:
- разработку разборщиков для целевых логов;
- хранение и распределенную обработку больших логов;
- разработку оптимальных методов для поиска аномалий (строк и под-последовательностей) в логах.