Разработка и качество: тестирование, обработка ошибок, мониторинг
Автоматизация процесса считается успешной не тогда, когда она заработала на демо, а когда она стабильно работает в эксплуатации: выдерживает сбои систем, изменения данных, пиковые нагрузки и остается управляемой для бизнеса.
В предыдущих статьях курса вы:
выбрали процессы-кандидаты и определили, где автоматизация даст максимальный эффект;
описали процесс как есть (AS-IS), правила и исключения;
разобрали подходы (скрипты, low-code, RPA, BPM) и механизмы интеграции (API, вебхуки, очереди, ETL).Теперь добавим слой, без которого внедрение часто “сыпется” через 2–6 недель после запуска: качество.
Качество автоматизации держится на трех опорах:
тестирование (чтобы ловить проблемы до продакшена);
обработка ошибок (чтобы сбои не превращались в хаос);
мониторинг (чтобы вы узнавали о проблемах раньше пользователя и могли быстро восстановиться).Что именно нужно “обеспечить качеством”
У автоматизации есть несколько уровней, и на каждом может появиться дефект:
логика процесса: шаги, маршрутизация, SLA, исключения (часто в BPM/workflow или low-code);
интеграции: API, вебхуки, очереди, ETL;
данные: форматы, справочники, дубли, пропуски, идентификаторы;
пользовательская часть: формы, права, уведомления;
эксплуатация: логи, алерты, запуск по расписанию, доступы.Практическая цель этой статьи: научиться строить контур так, чтобы он был предсказуемым, диагностируемым и восстанавливаемым.
Тестирование автоматизации: что и как проверять
Тестирование в автоматизации — это не только “проверить, что кнопка работает”. Это проверка того, что:
процесс идет по happy path;
исключения обрабатываются корректно;
повторы запросов не создают дублей;
сбои внешних систем приводят к понятному исходу: ретрай, ручная задача, DLQ.Уровни тестирования
| Уровень | Что проверяем | Когда особенно важно | Типовые артефакты |
|---|---|---|---|
| Модульные тесты | отдельные функции, правила, преобразования данных | скрипты, ETL-трансформации, сложная бизнес-логика | набор входов/выходов, таблицы решений |
| Контрактные тесты | соответствие API/вебхуков договоренному формату | когда много интеграций и версий | примеры JSON, правила обязательных полей |
| Интеграционные тесты | взаимодействие компонентов (очередь, сервис, база, внешнее API) | очередь, ретраи, идемпотентность | тестовые окружения, мок-сервисы |
| Сквозные (E2E) тесты | прохождение процесса от старта до результата | BPM/workflow, RPA, low-code сценарии | тест-кейсы по ролям и статусам |
| Нагрузочные тесты | поведение при пиках, очередях, лимитах API | массовые операции, синхронизации, кампании | сценарии нагрузки, целевые метрики |
Термины:
Контракт — договоренность о структуре данных (поля, форматы, обязательность), которая передается между системами.
E2E (end-to-end) — проверка сценария “от входа до выхода” как его видит пользователь и процесс.Откуда брать тестовые сценарии
Лучший источник тест-кейсов уже у вас есть из этапа анализа процесса:
AS-IS модель и будущий TO-BE;
таблица решений (условия → действия);
реестр исключений с частотой и критичностью;
реальные примеры заявок и документов.Если вы описали решения в формате “вопрос → варианты → действие”, вы почти автоматически получаете набор тестов.
Минимальный набор тестов для первого релиза
Если времени мало, не пытайтесь покрыть все. Сфокусируйтесь на том, что чаще всего ломает автоматизации.
Happy path для каждого типа входа.
Топ-5 исключений по частоте.
Топ-5 исключений по ущербу (редко, но критично).
Неполные/грязные данные на входе:
- пустое обязательное поле;
- неверный формат (дата, ИНН, сумма);
- дубликат сущности.
Сбои зависимостей:
- внешнее API недоступно;
- очередь “залипла”;
- вебхук пришел дважды.
Особенности тестирования разных подходов
#### BPM/workflow
В BPM качество — это качество маршрута и статусов.
Проверьте:
корректность маршрутизации по ролям;
SLA-таймеры и эскалации;
возвраты на предыдущие шаги;
права доступа: кто может видеть/менять/закрывать;
аудит: фиксируются ли ключевые действия.#### RPA
В RPA чаще ломается не бизнес-логика, а окружение.
Проверьте:
устойчивость к изменениям интерфейса (селекторы, поля, окна);
обработку “неожиданных” попапов и окон;
повторяемость: что будет при повторном запуске;
лимиты и блокировки учетных записей;
стратегию обновлений: как выкатываются изменения робота.Справочная основа: RPA как подход описана в Robotic process automation.
#### Low-code/no-code
Риск low-code — “быстро собрать, сложно сопровождать”.
Проверьте:
управление версиями и средами (dev/test/prod);
права и роли;
ограничения платформы по API/лимитам;
журналирование и возможность расследовать инцидент.#### Скрипты и ETL
Риск скриптов — “работает у автора”.
Проверьте:
где и как запускается (планировщик, контейнер, сервер);
как хранятся секреты (пароли, токены);
что пишется в лог;
что происходит при частичном успехе (половина записей загрузилась).Обработка ошибок: как проектировать надежность
Ошибки в автоматизации — не исключение, а норма. Вопрос не в том, будут ли сбои, а в том, как система поведет себя при сбое.
Классы ошибок
Удобно делить ошибки на три категории, потому что для каждой нужна своя реакция.
Ошибки данных
- неверный формат, отсутствует обязательное поле, не найден контрагент.
- обычно не лечится повтором.
Ошибки бизнес-правил
- нарушение лимита, запрет на операцию, “не та стадия процесса”.
- повтор не поможет, нужен другой маршрут или решение.
Технические ошибки
- таймаут, недоступность API, обрыв сети, временная ошибка базы.
- часто лечится повтором по правилам.
Основные паттерны надежной обработки
#### Идемпотентность
Идемпотентность означает: повторное выполнение одной и той же операции не приводит к “двойному” эффекту.
Пример: если автоматизация создает счет в ERP, то повторный вызов после таймаута не должен создать второй счет.
Как этого добиваются:
используют ключ идемпотентности (например, request_id или номер заявки);
при создании сущности сначала ищут существующую по ключу;
сохраняют “след операции” (что уже создано и с каким ID).#### Ретраи с правилами
Ретрай — повтор попытки при технической ошибке. Важно, чтобы ретраи были управляемыми:
ограничение числа попыток;
паузы между попытками;
разные правила для разных ошибок (например, 429 Too Many Requests требует паузы).Справка по коду 429: HTTP 429 Too Many Requests.
#### Dead-letter queue (DLQ)
DLQ (dead-letter queue) — отдельная очередь, куда попадают сообщения, которые не удалось обработать после нескольких попыток.
Зачем нужна DLQ:
чтобы основной поток не “зависал” на проблемных кейсах;
чтобы проблемные кейсы были видимыми и управляемыми;
чтобы подключить человека к разбору без потери данных.#### Дедупликация событий
В вебхуках и очередях повторная доставка — нормальная ситуация. Поэтому:
каждое событие должно иметь идентификатор (например, event_id);
обработчик должен уметь понять “мы это уже применили”.#### Компенсации (откат бизнес-действий)
Иногда операция уже частично выполнена, и откат “транзакцией” невозможен (разные системы). Тогда проектируют компенсирующее действие.
Пример:
заказ создан в системе А;
создание отгрузки в системе B не удалось;
компенсация: отменить заказ в системе А или перевести в статус “требует проверки”.Компенсации особенно актуальны в “сквозных” процессах с несколькими системами.
!Типовая архитектура обработки ошибок с очередью и DLQ
“Куда девать ошибку”: правило обязательной конечной точки
Любая ошибка должна приводить к одному из трех исходов:
автоматический повтор (для временных технических сбоев);
перевод в управляемое состояние (например, “ожидает данных”, “требует проверки”);
создание задачи человеку с понятным контекстом.Если ошибка просто “пишется в лог”, она неизбежно превращается в потерянные кейсы.
Дизайн сообщений об ошибках для человека
Когда автоматизация передает кейс человеку, ему нужны не “технические детали”, а возможность быстро принять решение.
Минимальный состав:
что пытались сделать (действие);
с какой сущностью (номер заявки, клиент, документ);
что пошло не так (категория и краткое описание);
что уже было сделано (чтобы не создать дубль);
что можно сделать дальше (варианты действий).Мониторинг и наблюдаемость: как видеть, что происходит
Мониторинг отвечает на вопрос: “система жива?”, а наблюдаемость (observability) — “почему она ведет себя так?”.
Три базовых источника информации:
логи: подробные записи о событиях;
метрики: численные показатели (скорость, ошибки, очереди);
трейсы: цепочки вызовов между компонентами, чтобы видеть путь одного кейса.Современный стандарт для телеметрии: OpenTelemetry.
Минимальные метрики, которые стоит ввести
| Метрика | Что показывает | Зачем нужна бизнесу |
|---|---|---|
| Время цикла (lead time) | сколько длится процесс от старта до результата | подтверждает эффект автоматизации |
| Пропускная способность | сколько кейсов обработано за день/час | показывает масштаб и нагрузку |
| Доля ошибок | отношение неуспешных попыток к общему числу | ранний сигнал деградации |
| Размер очереди | сколько сообщений ожидает обработки | индикатор узкого места |
| Доля ручных исключений | сколько кейсов ушло человеку | контроль качества правил и данных |
| Выполнение SLA | доля кейсов, уложившихся в срок | ключ к доверию пользователей |
Если у вас BPM/workflow, часть метрик можно получать из журнала процесса. Если у вас очередь или интеграционный слой, часть метрик рождается там.
Корреляция: как связать все следы одного кейса
Чтобы расследовать инцидент, нужно связать:
запись в CRM;
событие вебхука;
сообщение в очереди;
вызовы API;
шаги в BPM.Для этого вводят корреляционный идентификатор (correlation_id) — один и тот же ID, который передается через все компоненты и попадает в логи.
Практическое правило: у каждого кейса должен быть “номер”, по которому его можно найти везде.
Алерты: на что реагировать
Плохой алерт — тот, который срабатывает часто и непонятно почему. Хороший — тот, который означает реальную проблему для процесса.
Полезные типы алертов:
“очередь растет быстрее, чем обрабатывается”;
“ошибки API выше порога N% за 10 минут”;
“время цикла вышло за пределы SLA”;
“DLQ не пустая” или “DLQ растет”;
“робот RPA не может войти (ошибка авторизации)”.SLO и error budget (когда автоматизация критична)
Если автоматизация влияет на клиентов или деньги, имеет смысл заранее договориться о целевых показателях надежности.
Термины:
SLO (service level objective) — целевой показатель, например “99.5% успешных обработок в месяц”.
Error budget — допустимая доля “плохих” случаев, которую можно потратить.Это подход из практик надежности (SRE): Site Reliability Engineering (книга Google).
Если SLO нарушается, команда перестает добавлять новые фичи и стабилизирует систему. Это дисциплина, которая защищает автоматизацию от деградации.
!Пример структуры дашборда для контроля автоматизации
Runbook: инструкции “что делать, если”
Runbook — это короткая инструкция для поддержки или дежурной команды: что проверить и как восстановить.
В хорошем runbook есть:
симптомы (как выглядит проблема);
возможные причины;
шаги диагностики (какие логи/метрики посмотреть);
шаги восстановления (перезапуск, очистка зависшей задачи, повтор сообщения);
правила эскалации (кому и когда передавать).Runbook особенно важен, если автоматизация работает 24/7, а разработчики не всегда на связи.
Практическая стратегия внедрения качества
Чтобы не превратить качество в бесконечный проект, полезен итеративный подход.
Перед первым запуском
- определить метрики успеха (время цикла, SLA, ошибки, ручные исключения);
- покрыть тестами happy path и критичные исключения;
- спроектировать идемпотентность ключевых операций;
- завести базовый дашборд и алерты.
В первый месяц эксплуатации
- собирать топ причин ручной обработки;
- улучшать качество входных данных (валидации, формы, справочники);
- добавлять дедупликацию и DLQ там, где “теряются кейсы”.
После стабилизации
- вводить SLO для критичных контуров;
- стандартизировать runbook и процессы изменений;
- расширять покрытие тестами и автоматизировать регрессию.
Чек-лист готовности автоматизации к продакшену
Перед внедрением проверьте, что ответы на эти вопросы существуют не в голове, а в артефактах.
Есть тест-кейсы по happy path и ключевым исключениям.
Ошибки классифицируются: данные, бизнес-правила, техника.
Для технических ошибок определены ретраи и лимиты.
Есть идемпотентность для операций создания/изменения сущностей.
Есть дедупликация для вебхуков/очередей.
Есть DLQ или иной управляемый механизм “проблемных” сообщений.
Есть correlation_id, по которому кейс находится во всех логах.
Есть дашборд: время цикла, ошибки, очередь, SLA, ручные исключения.
Есть алерты на деградацию (очередь, ошибки, DLQ, SLA).
Есть runbook и назначенные владельцы поддержки.Как это связано с предыдущими темами курса
Из статьи про моделирование вы берете AS-IS, правила и исключения и превращаете их в тесты и сценарии обработки ошибок.
Из статьи про инструменты вы понимаете, где нужен контроль процесса (BPM), где достаточно скрипта, а где временно уместен RPA.
Из статьи про интеграции вы переносите в качество ключевые практики: контракты данных, идемпотентность, ретраи, DLQ и корреляцию.Дальше по логике курса вы готовы к зрелому внедрению: запуску TO-BE контура, управлению изменениями и измерению эффекта на метриках, которым доверяют бизнес и ИТ.