Как LLM‑модели меняют тестирование ПО.
Сегодня слегка копнем тему того, как большие языковые модели (LLM) могут перевернуть мир тестирования программного обеспечения. На эту тему меня натолкнула не очень свежая статья про проблемы и подход к Just‑in‑Time тестированию (и конечно наш последний подкаст с Алексеем, ждем переезда на отечественный хостинг).
Тема, конечно, не новая, автоматизированное тестирование ПО как идея витает в головах достаточно долго. Но многие фундаментальные вопросы до сих пор не решены. С развитием LLM‑моделей у всей индустрии появляется шанс взглянуть на весь скоуп проблем под новым углом.
В целом можно сфокусироваться на двух типах тестов: Hardening и Catching tests.
Hardening tests (укрепляющие) — тесты, защищающие код от будущих регрессий, ошибок, которые могут появиться при изменениях. Они проходят на текущей версии системы и «ждут» будущих ошибок.
Суть hardening tests в совокупности — проверять, что новая функция не ломает уже существующую логику.
Catching tests (обнаруживающие) — тесты пытаются поймать уже существующие ошибки или проблемы в новой функциональности. Они выявляют баги прямо сейчас, а не гипотетически в будущем.
Суть работы любого в отдельности сatching теста — упасть, как только найдена ошибка в только что написанном коде.
Косвенно авторы публикации задаются вопросом, а что если сделать набор Catching JiTTest, чтобы поймать ошибки до их попадания в общий стрим разработки. Тут JiTTest — это Just‑in‑Time Test, он генерируется «в последний момент» (когда подаётся pull request).
Авторы анализируют различные сценарии использования тестов; важность участия инженера в проверке тестов (human-in-the-loop); необходимость оценки рисков и выгод при внедрении тестов; возможности использования LLM для анализа неисполняемого текста.
И вот тут я еще раз зафиксирую, что одним из важных источников для формирования объемного корпуса тестов является документация и комментарии, что позволяет LLM извлекать информацию об ожидаемом поведении системы. В текущих условиях использования LLM это именно то, что делать стало сильно легче и быстрее.