Конвейер не понимает, что код сломан

Автоматический конвейер — это цепочка действий, которая начинается после изменения кода: система собирает приложение, проверяет его и, если настроено, выкладывает новую версию на рабочие серверы. Он выполняет заданные команды, но сам не знает, правильно ли приложение ведёт себя для пользователя. Если проверка пропущена или слишком поверхностна, сборка может пройти успешно, хотя важная функция уже перестала работать.

Что именно должны поймать тесты

Разные тесты проверяют разные уровни. Модульные проверяют небольшие части программы по отдельности; интеграционные — правильно ли эти части взаимодействуют; сквозные проходят по пользовательскому сценарию, например от входа в систему до оформления заказа. Перед выкладкой часто запускают и короткую проверку готовности: приложение стартует, отвечает и может связаться с необходимыми службами.

Ни один набор тестов не гарантирует отсутствия ошибок. Но он превращает повторяющиеся проверки в автоматический барьер: если после изменения сломался известный сценарий, конвейер может остановиться до публикации версии. Без такого барьера ошибка проходит дальше просто потому, что автоматизация не получила сигнала остановиться.

Скорость увеличивает цену пропуска

Автоматическая выкладка сокращает путь от изменения кода до его появления у пользователей — и тем самым ускоряет как полезные улучшения, так и распространение дефектов. Например, незаметное изменение формата данных может не мешать запуску приложения, но сорвать сохранение заказов. Если тесты не проверяют этот сценарий, конвейер способен развернуть версию на всех рабочих серверах раньше, чем проблему заметит человек.

Поэтому тесты в таком процессе — не бюрократическая пауза, а способ дать скорости границы: не выпускать изменение, пока важные для продукта проверки не пройдены. Чем больше действий конвейер выполняет без участия человека, тем важнее заранее определить, какие ошибки обязаны его остановить.