|
|
| Уровень |
⚙️ рабочая |
| Время |
1–2 часа |
| Понадобится |
проект с тестами (любой; годится и специально заведённый) и агент с доступом к терминалу |
| Качает |
требовать доказательство: красный тест до починки, чтение диффа тестов отдельно |
Заведите баг — и заставьте агента чинить его в правильном порядке: сначала
падающий тест, потом исправление.
- Возьмите функцию с понятным поведением. Нет своей — напишите: разбор
строки, подсчёт скидки, склонение числительных, форматирование даты.
- Сломайте её руками. Незаметно: сдвиньте границу на единицу, перепутайте
местами два аргумента, потеряйте обработку пустой строки. Симптом должен
быть настоящим, а не «упало с ошибкой».
- Опишите агенту симптом, а не причину: «при вводе X ожидаю Y, получаю
Z». Куда смотреть — не подсказывайте.
- Потребуйте порядок: сначала тест, который падает на этом баге; показать
вам падение; и только потом чинить код.
- Прочитайте дифф тестов отдельно от диффа кода.
Агент починит код и напишет тест на уже починенное. Формально зелено,
доказательства нет: такой тест списан с реализации, а не со смысла. Просите
переделать, а не «ну ладно».
Агент подгонит ожидание под факт. Было 3, получилось 4 — «исправим тест на
4». Это самая частая форма ложной победы, и ловится она ровно одним правилом:
дифф тестов читается отдельно и всегда.
Появится skip. Или закомментированная проверка, или expect(true), или
try/catch, проглатывающий исключение внутри самого кода. Всё это делается не
со зла: задача звучала «сделай, чтобы тесты проходили», и она выполнена
буквально.
Заодно отрефакторят соседнее. Смешанный дифф невозможно ни отревьюить, ни
откатить по частям. Проговаривайте явно: только то, о чём просили.
Захочется подсказать, где баг. Не подсказывайте — вы проверяете не себя, а
то, умеет ли агент найти причину по симптому. Если через три круга не нашёл —
это тоже результат: посмотрите, чего ему не хватило (логов? быстрого теста?
доступа к команде запуска?).
- Зелёный цвет что-то значит только после красного. Иначе это цвет, а не
доказательство.
- Тесты — единственные глаза агента. Без них он не знает, стало лучше или
хуже, и начинает угадывать.
- Ложная победа — не редкость, а режим по умолчанию при неаккуратной
постановке задачи.
- Критерий приёмки — это команда, а не слова. «Готово — когда
npm test
зелёный и добавлен тест, падавший до правки».
- Сломайте две вещи сразу, одну из них — тонко (гонка, граница, кодировка).
Посмотрите, найдёт ли агент вторую после того, как починит первую.
- Сломайте что-нибудь так, чтобы падение было плавающим (раз в пять запусков).
Понаблюдайте, как агент начнёт «стабилизировать» тест таймаутом и ретраями —
это то самое, почему флакающий тест хуже
отсутствующего.
- Дайте ту же задачу без тестов вообще и засеките, сколько кругов уйдёт.