AI в code review и тестировании
AI направлен на проверку, а не на производство: review изменений, генерация тест-кейсов, поиск краевых случаев и разбор кода, который никто в команде не писал.
Почему это важно. Именно здесь экономика лучше всего. Ресурс на review всегда в дефиците, тесты первыми вылетают под дедлайн, и в обеих задачах быстрый и неутомимый второй читатель полезен, даже когда иногда ошибается: ложное срабатывание стоит минуты, а пропущенный баг — релиза.
Что понимать
- Что машинный ревьюер видит там, где человек пропускает, и наоборот
- Проверяет ли сгенерированный тест поведение или просто пересказывает реализацию
- Чего стоит ответ «ничего не нашёл»
- Где это дополняет человека, а где не должно его заменять
- Что именно вы отправляете третьей стороне, когда этим пользуетесь
Основные темы
Review с ассистентом
- Первый проход до человека: очевидные проблемы, пропуски, несогласованности
- Просмотр собственного изменения до того, как его увидит кто-то ещё
- Объяснение незнакомого кода — и проверка самого объяснения
- Проходы по безопасности и краевым случаям — отдельными, узко заданными вопросами
- Шум и почему нефильтрованного ревьюера начинают игнорировать, как плохой линтер
Генерация тестов
- Перечисление случаев по описанию — то, что человек делает неполно
- Границы, пустой ввод, пути с ошибками — ровно то, что обычно пропускают
- Ловушка: тесты, написанные по реализации, — они проходят по построению
- Сначала описать поведение, потом генерировать тесты по описанию
- Читать сгенерированные тесты так же внимательно, как сгенерированный код
Разбор проблем
- Чтение отчёта о падении и выдвижение гипотез
- Объяснение поведения незнакомой зависимости
- Восстановление замысла по истории изменений
- Подсказка, куда добавить логирование
Границы
- Решение об одобрении изменения остаётся за человеком
- Не единственный ревьюер изменений, критичных для безопасности
- Покрытие, которое выглядит полным, но ничего не проверяет
- Что можно выпускать за пределы своей машины, а что нельзя
Уровни
| Уровень | Как это выглядит |
|---|---|
| Junior | Просит объяснить код и генерирует простые тест-кейсы. |
| Middle | Использует ассистента как структурированный первый проход review и как способ перечислить краевые случаи, после чего проверяет результат. |
| Senior | Встраивает его в процесс там, где польза доказуема, оставляет решение об одобрении за человеком и измеряет, находит ли он настоящие проблемы. |
Практика
Для начала
-
Сначала self-review Прогоните следующее своё изменение через ассистента до того, как отправите его человеку, и запишите, что он поймал.
-
Перечислите случаи Опишите поведение функции и попросите список случаев для тестов. Сравните со своим списком.
-
Объясните незнакомый код Попросите объяснить файл, который никто не понимает, а потом проверьте объяснение чтением.
Дальше
-
Тесты от поведения Сначала напишите описание, сгенерируйте тесты по нему и убедитесь, что ни один из них не повторяет код.
-
Проход по безопасности Спросите про конкретное — проблемы с авторизацией и обработкой входных данных в изменении — и проверьте каждую находку.
-
Измерьте За месяц посчитайте, сколько настоящих проблем ассистент нашёл и сколько выдал шума. Решите, остаётся ли он.
Проверьте себя
- Что review с ассистентом реально поймал на вашем проекте?
- Какая доля его находок — шум, и на каком пороге вы перестанете их читать?
- Ваши сгенерированные тесты проверяют поведение или реализацию?
- В каких изменениях вы никогда не оставите его единственным ревьюером?
- Какой код вы отправляете третьей стороне и разрешено ли это?
- Review в вашей команде стал лучше — или только быстрее?
Материалы
- Google's Code Review Developer Guide — эталон, с которым стоит сверять review с ассистентом, и напоминание о том, зачем нужно review помимо поиска дефектов.
- Test Desiderata — критерии, по которым стоит судить сгенерированные тесты. Большинство таких тестов проваливается на «поведение, а не структура».
- Property-based testing — дополнительный способ добраться до случаев, о которых забывают, и часто он подходит лучше, чем ещё десяток тестов на примерах.
- OWASP Code Review Guide — что должен покрывать проход по безопасности, чтобы можно было спросить о конкретном, а не «проверь, нет ли проблем».
- Exploring Generative AI — конкретные рассказы о применении ассистента в тестировании и review: что сработало, а что нет.