Лаборатория прикладного анализа программ занимается разработкой новых и адаптацией существующих методов анализа для решения проблем, с которыми разработчики сталкиваются в своей повседневной деятельности.
Одни исследовательские проекты связаны с собственными нуждами JetBrains, другие посвящены более широким темам. Кроме того, мы занимаемся и другими вещами: например, проектируем и реализуем новые возможности языка программирования Kotlin.
В ходе этого проекта мы изучаем приложения для фаззинг-тестирования компилятора Kotlin. В ходе предыдущего исследования мы нашли в компиляторе немало багов. Сейчас мы ищем возможность включить в фаззинг-тестирование еще больше компонентов компилятора и встроить эти тесты в QA-пайплайн.
Kex — платформа для анализа байт-кода Java. Она поддерживает загрузку байт-кода, построение промежуточной модели и ее анализ с помощью SMT-решателей. В настоящее время основная задача Kex — генерация тестов, но в будущем мы планируем использовать эту платформу и для других целей: воспроизведение условий сбоя, анализ программ, устранение ошибок.
В ходе проекта мы стремимся понять, является ли внутренняя согласованность кода, сгенерированного LLM, надежным показателем его качества. Результат работы LLM является внутренне согласованным, если по одному и тому же запросу LLM генерирует решения, отвечающие заданному определению согласованности. В рамках проекта мы используем дифференциальное тестирование для измерения согласованности: все сгенерированные решения должны вести себя одинаково на заданном или сгенерированном наборе тестов. Для генерации тестов мы применяем Kex в режиме генерации тестов.
Считается, что LLM успешно преобразуют код на одном языке в код на другом. Мы хотим понять, так ли это в случае преобразования конфигураций сборки Gradle из .gradle
в .gradle.kts
. Это особенно актуально для преобразования из старого API Groovy для использования в новом API Kotlin. Чтобы выяснить это, мы сравниваем абстрактные конфигурации, извлеченные из Gradle с помощью инструментов IntelliJ Platform, до и после преобразования.