
История одного зелёного теста: 97,8% mutation score и баг, который месяцами жил в проде
ai-pomogator 7 минут назад История одного зелёного теста: 97,8% mutation score и баг, который месяцами жил в проде 4 мин 75 Ненормальное программирование * Тестирование IT-систем * Кейс Из песочницы Небольшой инженерный...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Значимый прорыв формирует отрасль ИИ: ai-pomogator 7 минут назад История одного зелёного теста: 97,8% mutation score и баг, который месяцами жил в проде 4 мин 75 Ненормальное программирование * Тестирование IT-систем * Кейс Из песочницы Небольшой инженерный постмортем про то, как метрики качества тестов дружно молчали, пока пользователь не прислал скриншот с очевидной ошибкой. И почему ни строчное покрытие, ни мутационное тестирование этот класс багов поймать не могли в принципе. У меня есть внутренний дашборд, который собирает список рабочих копий проекта (git worktree) и показывает по каждой последнюю активность.
В какой-то момент пришло сообщение: «разные ветки, а последнее сообщение и время везде одинаковые». Я открыл дашборд — и правда: каждая копия отображалась пять раз подряд, с идентичными данными. При этом тесты были зелёные, строчное покрытие — сто процентов, а мутационный прогон по этому куску показывал 97,8%.
Технические детали
То есть все три метрики, которым принято доверять, дружно сказали «всё хорошо». Что на самом деле сломалосьЛогика сбора состояла из трёх функций. Первая обходила каталог с репозиториями и оставляла те, где есть .
Вторая для каждого найденного репозитория вызывала git worktree list и парсила вывод. Третья складывала всё в один список для отображения. Тонкость в том, что у обычного репозитория .
git — это директория, а у привязанного worktree — файл-указатель на общий служебный каталог. Проверка «существует ли . git» отвечала «да» в обоих случаях.
Отраслевые последствия
В результате каждая из пяти копий считалась самостоятельным репозиторием. А git worktree list, запущенный из любой копии, возвращает полный список всех пяти. Пять «репозиториев», у каждого по пять worktree — на выходе двадцать пять строк, где каждая копия честно повторялась пять раз.
Самое неприятное здесь: каждая из трёх функций по отдельности абсолютно корректна. Первая правильно находит репозитории. Вторая правильно парсит вывод git.
Третья правильно склеивает. Ошибки нет ни в одной из них — она в стыке, в неявном предположении «раз есть . git, значит это главная копия», которое нигде не было выражено ни в коде, ни в тестах.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





