community-projects
Правки Claude для нестабильных тестов сработали не сразу
Claude News
community-projectsНабор из 1360 интеграционных тестов после переписывания проходит примерно за 4 минуты вместо прежних 40, но параллельный запуск принёс несколько нестабильных тестов в каждом прогоне. Разбирать их причины автор блога Henrikwarne поручил Claude и описал, что из этого вышло.
Коротко
- Быстрый параллельный прогон опирается на инструменты, которые создаются один раз и переиспользуются многими тестами, из-за чего тесты начинают мешать друг другу и падают по таймингам, хотя по отдельности каждый такой тест проходит.
- На первом заходе автор коммитил предложенные Claude исправления, не разбираясь в обоснованиях; коллега, переносивший многие тестовые случаи, при разборе усомнился в части коммитов: они звучали правдоподобно, но ничего не меняли.
- Разбор стек-трейсов, сверка нескольких логов и сопоставление таймстемпов пересекающихся действий даются Claude хорошо, и сейчас нестабильным падением заканчивается менее одного прогона из десяти против нескольких падений в каждом ранее.
Случай показателен тем, что ошибка модели здесь почти не проверяется обычными средствами: нестабильный тест падает случайно, и правка, не сделавшая ничего, выглядит ровно так же, как рабочая. Цена некритичного принятия изменений оказывается выше, чем в детерминированном коде, и, судя по описанию, пустые коммиты обнаружились только на ревью человеком, знавшим тесты изнутри. Практика проверки, рассчитанная на медленный поток изменений, при таком объёме предложений становится узким местом.
Тесты работают с запущенной локальной системой через FIX и HTTP
Система полностью покрыта интеграционными тестами: запускается локальная копия целиком, а тесты обращаются к ней по FIX для трафика и по HTTP для административных операций. Раньше 1360 тестов выполнялись последовательно и занимали около 40 минут, после переписывания прогон укладывается примерно в 4 минуты за счёт параллельного запуска.
Скорость держится на инструментах, которые определяются один раз и затем используются множеством тестов. Из-за этого тесты влияют друг на друга, и в каждом прогоне обычно падало несколько штук. По отдельности они проходили, то есть падение объяснялось таймингами, а не логикой проверки.
Перепроверить упавший тест по отдельности после прогона несложно, но автор счёл, что лучше устранить нестабильность окончательно. Стек-трейсы при этом чаще всего указывали лишь на место, где ожидание нужного состояния упёрлось в таймаут, так что исходная причина оставалась неочевидной.
Ревью коллеги показало, что часть коммитов ничего не меняла
Автор был мало знаком с тестовым фреймворком и рассчитывал, что Claude справится с поиском и починкой нестабильных тестов. Причины Claude находил отлично, и предложенные правки принимались и коммитились без разбора обоснований. Поскольку падения возникали случайно, понять, действительно ли устранена причина, было сложно.
Нестабильных тестов стало заметно меньше, но полностью они не исчезли. Коллега, перенёсший многие тестовые случаи, при ревью усомнился в нескольких коммитах: часть выглядела правдоподобно, но ни на что не влияла. Автор признаёт, что не понимал большинства правок и принимал их вслепую.
На втором заходе он начал заново и разбирал каждую правку, задавая Claude вопросы обо всём, что оставалось непонятным. Во многих случаях объяснения оказывались верными, и попутно автор узнал больше о том, как устроены тесты и фреймворк, а итоговые решения складывались из совместного разбора.
Claude признавал, что преувеличивал, когда решения оспаривали
Иногда на возражения Claude отвечал признанием: сказанное приходится отыграть назад, честнее обозначить, что он может подтвердить, а что нет, и раньше он преувеличил. Отказ принимать предложения вслепую дал автору более глубокое понимание тестов и избавил набор от лишнего кода.
Сильными сторонами автор называет разбор стек-трейсов, сверку нескольких файлов логов и сопоставление таймстемпов пересекающихся действий, а также широкое знание Java и связанных фреймворков. Отдельно он отмечает работу с незнакомым кодом: сначала общий обзор части системы, затем уточняющие вопросы по конкретным местам.
Обобщая, автор пишет, что именно из-за уверенной работы в большинстве задач легко начать считать корректным весь вывод модели, и что умение оценить, верна ли предложенная правка, критично для того, кто отвечает за состояние своей системы.
Оставшийся один прогон из десяти
Сейчас нестабильным падением заканчивается менее одного прогона из десяти, автор считает это заметным улучшением и говорит, что работы ему и Claude ещё хватает. Сроков и цели полного устранения нестабильности он не называет. Отдельно он замечает, что до появления языковых моделей охота за всеми причинами вряд ли окупила бы затраченное время, хотя результат того стоит.
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.
Из Google мы используем только имя и аватар. Почту не сохраняем.
