Процесс с упором на тестирование без код-ревью
- title
- Процесс с упором на тестирование без код-ревью
- type
- concept
- summary
- Выпуск больших объёмов кода без ревью со ставкой на рандомизированное тестирование: модель верификации CPU, применённая к разработке ПО
- tags
- testing, agentic-coding, software-quality
- created
- 2026-07-21
- updated
- 2026-07-29
- lang
- ru
- translation_of
- testing-heavy-no-review-workflow
- source_updated
- 2026-07-29
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-medium
Процесс разработки, в котором ручное код-ревью перестаёт быть главным механизмом надёжности, а поиск дефектов перекладывается на масштабное рандомизированное тестирование (фаззинг, property-based тестирование). Dan Luu в danluu-ai-coding-testing, опираясь на десятилетний опыт в Centaur (компании по проектированию CPU), утверждает, что такой подход даёт более высокое качество, чем процессы с опорой на ревью, и что именно под такой workflow органично подходят ИИ-агенты, пишущие код.
Модель Centaur
Что они делали вопреки общепринятым в индустрии разработки представлениям:
- Выделенные инженеры по тестированию как полноценная карьерная траектория наравне с проектировщиками логики - та же тарифная сетка, та же частота повышений. Тестирование - это навык; 20 лет опыта в нём перевешивают 5% чужого рабочего времени.
- Никакого код-ревью по умолчанию. Ревью проводилось по необходимости, для сложных изменений, а не в качестве обязательного шлюза. Доверие к тестам было настолько высоким, что ревью почти не добавляло надёжности.
- Практически никаких написанных вручную тестов и никаких unit-тестов. Ручные тесты ("hand tests") были исключением.
- Постоянное рандомизированное тестирование - то, что в софтверной разработке называют фаззингом / property-based / рандомизированным тестированием: непрерывная генерация и запуск новых тестов (около 800 из ~1000 машин непрерывно генерировали новые тесты, а около 200 прогоняли трёхмесячный регрессионный набор).
- Регрессионный набор тестов растёт бесконечно: любой тест, однажды нашедший баг, остаётся в наборе навсегда.
Результат: меньше одного заметного пользователю бага в год при команде настолько компактной, что компания смогла продержаться в условиях жёсткой борьбы на рынке x86 вплоть до 2021 года. Затраты усилий делились примерно как 55% на тестирование и 45% на разработку. При этом Luu подчёркивает, что решающую роль играет не объём усилий, а методология: у фаззинга низкие фиксированные затраты, и он масштабируется под любой бюджет ресурсов.
Почему это подходит для агентной разработки
Один человек, управляющий агентами, способен сгенерировать больше кода, чем десять человек в состоянии проверить вручную. Это ломает концепцию ревью как обязательного шлюза: потолок пропускной способности ревью (~400 строк кода в час, code-review-throughput-limits) становится узким местом всего процесса. У рандомизированного тестирования такого человеческого ограничения нет: туда просто направляют вычислительные мощности. Поэтому рабочий процесс, показавший эффективность в небольшой команде разработчиков CPU, оказывается именно тем, что позволяет агентным "фабрикам софта" выпускать огромные объёмы без потери качества.
Критически важная оговорка: всё, деградация чего не ограничена рамками, будет деградировать, если выливать сотни PR в день. Рандомизированное тестирование как раз и выступает таким ограничителем. Но LLM плохо умеют проектировать тесты: написанные ими фаззеры дают слабое покрытие и пропускают базовые вариации входных данных. Поэтому системе требуется контур обратной связи, находящий и закрывающий пробелы в покрытии (участие человека или поэтапная раскатка с мониторингом метрик, логов и обращений в поддержку). Конвейер Luu от тикета в техподдержке до PR - один из примеров такого контура: он генерирует исправление и добавляет тестовое покрытие, которое повторно выявляет этот же баг при регрессионном прогоне.
Связь с дискуссией о ревью
Это один из двух противоположных ответов на совет "просто проверяйте код ИИ как PR стажёра":
- reviewing-ai-code (Depierre): ревью не масштабируется, а проверять сгенерированный LLM код труднее (ревьюеры находят меньше дефектов при большей уверенности в себе) - следовательно, пропускная способность агентной разработки принципиально ограничена.
- Данная концепция (Luu): ревью изначально не было правильным инструментом для обеспечения надёжности; для этого нужны тесты, и тесты отлично масштабируются - следовательно, нужно отказаться от ревью, а не от агентов.
Обе стороны согласны, что модель "ревью как за стажёром" не работает. Обе сходятся на том, что предел ревью составляет около 400 строк кода в час. Но расходятся они в выводах: считать ли это потолком генерации кода через LLM (Depierre) или поводом вовсе перестать опираться на ревью (Luu). При этом Luu честно обозначает необходимое условие: схема работает только тогда, когда методология тестирования достаточно надёжна, чтобы ей доверять. В большинстве софтверных компаний этого нет: навык просто не развивался, поскольку тестирование никогда не рассматривалось как первоклассная карьерная траектория.
why-software-factories-fail критикует такую замену со стороны обучения моделей. Аргумент Horthy в том, что RL оценивает трейс исключительно по признаку успешного прохождения тестов и ни по чему более. Соответственно, при обучении модель ничто не штрафует за то, что код станет труднее изменять в следующем месяце - а значит, факт "тесты прошли успешно" оказывается именно тем сигналом, который не способен поймать деградацию, для сдерживания которой Luu предлагает его использовать.
benchmarking-opus-5-slopcodebench даёт конкретные данные о цене и выгоде смещения в сторону тестов: у Opus 5 тесты составляли 51% сгенерированного объёма против 11% у Opus 4.8, и ему потребовалось четыре строгих прохода против одного.
См. также: кластер фаззинга (coverage-guided-fuzzing, structure-aware-fuzzing, grammar-based-fuzzing, differential-fuzzing), llm-output-variance (почему единичные прогоны тестов вводят в заблуждение), agent-failure-mode-skill.
- Working around agent failure modes is the skill
- Benchmarking Opus 5 on SlopCodeBench
- Leverage Code Review for Sustainable AI Coding Development
- Cross-model code review
- Dan Luu on AI Coding, Testing, and Variance
- Dan Luu (danluu.com)
- Error-stack discard anti-pattern
- How Do We Stop Vibe Coding?
- LLM output variance
- On the Self-Verification Limitations of LLMs on Reasoning and Planning Tasks
- The pandemic of incomplete OpenSSL error handling
- Reviewing AI Code
- The Short Leash AI Coding Method
- Why Software Factories Fail