Аудит тестов, созданных ИИ: половина «зеленого» CI ничего не доказывает

Прошедший тест кажется доказательством. На деле же он обычно значит гораздо меньше, чем вы думаете.

Тест утверждает, что код делает то, что ожидает тест. Если один и тот же автор пишет и код, и ожидаемый результат, то ожидание формируется самим кодом. Тест проходит, потому что он был написан так, чтобы пройти.

Зеленая галочка доказывает лишь то, что ваши тесты согласны с кодом. Она не доказывает, что код корректен.

Эта проблема обостряется, когда ИИ-агенты отправляют целые pull requests. Они пишут и реализацию, и тесты одним махом. От того, что автор сменился, галочка не становится более надежной.

Я создал mirror_audit.py, чтобы обнаружить этот разрыв. Он считывает исходный код теста с помощью AST. Он никогда не запускает сам код. Он ищет три распространенных паттерна:

  • Пересчет (The Recompute): Тест использует ту же формулу, что и код. Это просто f(x) == f(x) в маскировке.
  • «Золотой литерал» (The Golden Literal): Тест использует число, скопированное из предыдущего запуска. Это привязывает тест к любому результату, который выдал код в первый же день, включая баги.
  • Дымовой тест (The Smoke Test): Тест проверяет, что результат не равен None, но при этом в нем отсутствует реальная проверка (assertion).

Я протестировал это на двух наборах тестов.

Первый набор был спроектирован так, чтобы зеркально отражать реализацию. Его коэффициент зеркальности (mirror-ratio) составил 50,0%. CI не прошел. Половина тестов не несла в себе никакого независимого сигнала.

Второй набор был честным. В нем использовались негативные сценарии и независимые ожидания. Его коэффициент составил 0,0%. CI прошел успешно.

Коэффициент зеркальности не измеряет количество багов. Он измеряет отсутствие независимого сигнала. Он показывает, какая часть вашего «зеленого» CI — это просто поддакивание тестов коду.

Если тест вычисляет тот же ошибочный результат, что и реализация, тест остается «зеленым». Если же тест проверяет реальный контракт, он становится «красным» и ловит баг.

Перестаньте смотреть только на покрытие (coverage). Спросите себя: могут ли ваши тесты реально упасть по веской причине?

Source: https://dev.to/alex_spinov/audit-ai-generated-tests-half-of-green-ci-proves-nothing-4bmb

Optional learning community: https://t.me/GyaanSetuAi