Нет «дыма» – нет релиза? Или «дымим» ради релиза?

14.08.25

Разработка - Тестирование QA

На одном из заводов внедрили дымовое тестирование, чтобы снизить количество ошибок после релизов. Рассказываем, как готовилась инфраструктура, запускались тесты и интегрировались SonarQube и Allure, а также какие сложности встретились в процессе. В статье есть оценка трудозатрат, разбор подводных камней и планы по развитию проекта на другие конфигурации.

Меня зовут Максим Нифонтов. Я работаю с 1С с 2007 года. Руковожу отделом DevOps в компании Programming Store. У меня пятеро детей, две собаки и команда из 15 человек.

 

Проблема, с которой все началось

 

Есть завод, и у него есть проблема. Завод работает круглосуточно, значит, и база должна быть стабильной и доступной в любое время. Поддержка обеспечивается 24/7.

Но есть хранилище разработки и продуктивное хранилище. А между ними – ручной слив.

Когда вы вручную переносите доработки из одного хранилища в другое, используя сравнение и объединение, легко либо забыть что-то важное, либо добавить лишнее. В результате – ошибки, которых не было на тесте, потому что тестирование проводилось на одном контуре, а на прод попал уже другой.

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

У нас есть минимальное техническое окно – примерно полчаса в 4 утра раз в неделю – когда можно накатить релиз. И если что-то пойдет не так в этот момент, последствия будут серьезными.

Если релиз провален, остается либо ждать следующего тех. окна, либо срочно делать hotfix, вбрасывать его через расширения или искать другие оперативные решения. Это, мягко говоря, грустно.

 

Идеи и первые шаги к решению

 

Что делать? Переход на Git в условиях «зоопарка» систем, разного уровня подготовки разработчиков и масштабного контура – задача непростая. Решили пока оставить хранилища, но автоматизировать процессы.

Автотестирование стало ключевым решением. У нас очень маленькое техническое окно, значит, все обновление должно быть скриптовым. Тут на помощь пришли OneScript и Vanessa-runner.

Тестировать будем дымовыми тестами – стандартный подход в автотестировании.

Используем Vanessa Automation, которая «пробегается» по базе: открывает все формы, нажимает все кнопки, то есть делает то, что ни один аналитик не сделает вручную за разумное время или сделает, но только к следующему тех. окну. А роботы справляются за 2–3 часа.

Хранить результаты тестов – обязательно. Нужно понимать, что пошло не так. Для этого используем Allure – отличный инструмент для визуализации результатов. Если у вас G-Unit – можно это делать и с ним, но в нашем случае это Allure.

Еще один важный элемент – качество кода. Чтобы минимизировать ошибки еще до тестирования, внедряем статический анализ через SonarQube. Многие проблемы можно выявить и исправить до того, как они «всплывут» в дымах.

 

План реализации процесса

 

План у нас получился такой:

  • Релиз-инженер проверяет результаты дымовых тестов: все ли зеленое или есть что-то красное;

  • Если все зеленое – релиз идет на прод;

  • Если есть красное – запрашиваем откат или исправление.

Релиз – раз в неделю, а вот дымовые тесты запускаются каждый день. Это дает возможность заранее увидеть, где что «отвалилось», и оперативно попросить ответственных разработчиков внести правки.

Разработчики параллельно работают с техническим долгом, ориентируясь на SonarQube: уменьшают количество ошибок и тех. долга, повышая качество своих работ, тем самым играя на руку нашему постоянно активному проду, и прод работает.

Такой был план.

 

Техническая реализация системы

 

Как это все это было реализовано?

В качестве оркестратора был выбран Планировщик Windows. Никаких Jenkins, GitLab или сложных систем, только задачи по расписанию: два «батничка», которые по расписанию запускают планировщик.

 

Схема Dev-контура 1С с GitSync, выгрузкой в Git и анализом кода в SonarQube через PostgreSQL

 

Есть контур разработки, где определенное количество хранилищ и баз. Скрипты через планировщик:

  • подтягивают изменения из хранилищ,

  • применяют их к тестовым базам,

  • вызывают Git-Sync, который переносит метаданные в Git,

  • затем – SonarScanner отправляет данные в SonarQube.

SonarQube установлен на небольшой виртуальной Linux-машине. База данных – PostgreSQL, запущенная в Docker-контейнере. Кстати, настоятельно рекомендую: ставьте все в контейнерах – это удобнее, чем через пакетные менеджеры. Написал одну команду – и приложение развернуто.

SonarQube хранит там данные, анализирует код и отображает результаты в веб-интерфейсе. Разработчики видят, где есть проблемы, и могут оперативно их исправлять.

 

Схема DevOps-контура 1С: Dev и PreProd, GitSync, Vanessa Automation, SonarQube и Allure с PostgreSQL

 

Также есть PreProd Контур, куда попадают готовые доработки из разработки. Там – тот же «зоопарк» хранилищ, но уже в стабильной версии. Роботы накатывают обновления на связанные базы.

Vanessa смотрит, какие есть изменения относительно конфигурации поставщика, определяет, какие объекты изменились, и по измененным объектам генерирует дымовые тесты, тут же прогоняет по этим базам, забирает результаты и отдает их в Allure.

Allure – это не просто отчет. Это полноценная веб-панель с историей: видно, какие тесты были красными, какие стали зелеными, как менялась стабильность от релиза к релизу. Очень наглядно и удобно.

Кстати, Allure подключен к тому же PostgreSQL, который крутится в контейнере.

 

Сложности и подводные камни

 

Vanessa Automation требует пользовательского сеанса

 

Поскольку Vanessa Automation работает в режиме «честного клиента» – то есть эмулирует реального пользователя, открывает формы и нажимает кнопки – ей нужен настоящий пользовательский сеанс с открытым окном 1С.

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

Нужен нормальный Winlogon без ограничений – какой-то пользователь, под которым все это запускается и работает. Он должен быть залогинен в систему, иначе все пойдет не так.

 

Конфигурация на замке (нет конфы поставщика)

 

Если конфигурация находится на замке, а у нас нет доступа к конфигурации поставщика, и мы хотим прогонять не всю конфу, а только измененные объекты, то Vanessa в этом месте падает, потому что не понимает, что с чем мы сравниваем. Получается парадокс: «конфигурация на замке», но при этом включена опция «тестировать только измененные объекты».

Пришлось написать небольшую заплатку для работы с нашими расширениями, чтобы было понятно, с чем работать.

 

Программно модифицированные формы были проигнорированы

 

Вы знаете, что в конфигурации есть переопределяемый модуль модификации конфигурации, позволяющий переопределять форму, ее события и добавлять элементы – при этом не помещая саму форму или другие объекты в расширение. То есть даже при залоченной конфигурации можно изменить логику формы и сломать ее, не имея самой формы в расширении.

В нашем случае мы такие ситуации проигнорировали. Потому что считаем: если дорабатываем какой-то объект, то соответствующая форма уже есть в расширении. Если ее там нет, риск крайне мал, и мы просто его не учитываем.

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

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

 

Конфигурации «одного разработчика» пропущены

 

Например, условный 1С:ЗУП, где работает один-единственный разработчик. Он говорит: «Я сам отвечаю за качество своего кода, мне это неинтересно. Гарантирую, что ничего не упадет. Сам сливаю, сам заливаю». Фактически он работает без хранилища, поэтому описанная процедура ему не нужна. Руководство доверяет и оставляет это на его ответственности.

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

 

Настройка исключений требует внимания

 

Для любой конфигурации – типовой или собственной – нужно составлять файл исключений для форм, которые не должны открываться интерактивно пользователями. Вы должны закинуть их в файл с исключениями.

Процесс выглядит так: после первого прогона вы видите много «красноты». Реальный человек, который понимает логику работы системы, должен пройтись по этим ошибкам и определить: это баг или так задумано? Должна ли форма открываться? Если нет – ее нужно добавить в файл исключений, чтобы убрать лишние срабатывания.

Требуется донастройка базы дымов (даты запрета и т.д.)

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

Нам требуется донастроить базу, на которой крутятся дымы, потому что мы считаем, что данные корректны. Мы проверяем не данные, мы проверяем релиз. Мы считаем корректный или некорректный релиз на точно корректных данных. Поэтому либо мы снимаем дату запрета, либо удаляем лишние файлики, документы, которые в нее не влезают, либо докручиваем так, чтобы к данным, которыми оперируют дымы, не было вопросов. Потому что мы проверяем релиз, а не данные.

Здесь снова требуется внимательная настройка человека из бизнеса. То есть DevOps-инженер придет, включит вам дымы, но просмотреть, что попало в исключение, что там должно быть, что не должно, и донастроить базу придется какому-то аналитику, старшему разработчику или кому-то еще – в общем, человеку, который знаком со спецификой.

 

Результаты внедрения

 

Что в итоге получилось?

Дымовые тесты теперь стоят на страже каждого релиза – как и задумывалось.

Релиз-инженер получил надежную опору: он видит, что пошло не так, есть ли краснота, и может принять решение накатывать это на прод или нет.

SonarQube, к сожалению, пока «буксует».

В ходе обсуждения с заказчиком мы спросили: «Как дела после развертывания контура?» Оказалось, что SonarQube не взлетает, потому что разработчики не активно работают с техническим долгом.

Здесь нужно твердое административное решение. Нужно четко сказать: «Если тех. долг растет – будет ата-та. Если падает – будет хорошо всем». На этом этапе подрядчик бессилен – это административное решение.

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

Allure все помнит. Он хранит всю историю и динамику тестов, какие были ошибки, где что «покраснело», что снова «зазеленело».

 

Что можно улучшить и добавить

 

Проект был ограничен по срокам, бюджету и рамкам. Но в перспективе можно туда добавить:

1. Оркестрацию (GitLab CI / Jenkins и т.п.)

Вместо Планировщика Windows можно внедрить Jenkins, GitLab CI или даже Cron – кому-то он нравится больше, чем Планировщик Windows.

2. Сценарные тесты

Помимо дымовых добавить сценарные тесты. Они проверяют конкретные бизнес-кейсы с конкретными данными, проверять. Дымы не ловят падение на «плохих» данных – сценарии могут. Можно было бы добавить сценарии на критичные тесты, но не в рамках этого проекта.

3. Мониторинги

Было бы полезно добавить:

  • счетчик инцидентов,

  • метрики производительности, например, по SonarQube.

Например: выросла ли производительность после рефакторинга? Уменьшились ли пики? В 1С-среде такие метрики ведутся редко – а зря. Инженерам они нужны. Бизнесу – тоже.

4. Автоматизацию на рабочих местах

Можно автоматизировать процессы на рабочих местах. Например, чтобы аналитик мог одной кнопкой обновить свою тестовую базу из хранилища – б ез помощи разработчиков. Это снизит нагрузку на команду и ускорит работу, но в рамках проекта это не реализовывалось.

 

Оценка затрат и выводы

 

Трудозатраты составили около 100 часов одного DevOps-инженера. Эти часы ушли на настройку всего контура:

  • интеграцию «зоопарка» хранилищ,

  • подключение к SonarQube,

  • настройку дымовых тестов,

  • отладку процессов «зайти-выйти»,

  • документирование,

  • доводку до рабочего состояния.

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

И да, я понимаю, о чем вы сейчас подумали: «Если у нас 16 часов в неделю на разработку, и мы начнем в понедельник – будет ли готово к среде?» Нет, не будет. Здесь та же история: 100 часов работы ? 100 часов календарного времени.

Так много это или мало – 100 часов? Представьте небольшую команду из 6 разработчиков, которая работает над полугодовым проектом. 100 часов – это всего 2% от их трудозатрат. На первый взгляд – копейки. Но именно эти 2% могут сэкономить сотни часов ручного тестирования, аналитики, поддержки, исправления ошибок на проде.

 

logo

DevOps-внедрение: релизы без «дыма» и аварий

Настраиваем DevOps-контур в 1С: автотесты, контроль качества кода и управляемый деплой, чтобы релизы проходили предсказуемо и без ночных инцидентов.I

Получить консультацию эксперта

 

*************

Статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART TECH EVENT.

Инфостарт A&PM Event 2026

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Нейросети DevOps и автоматизация разработки Тестирование QA Разработчик 1С 8.3 Бесплатно (free)

Открытый набор правил и скриптов на GitHub для ИИ-агента (агента искусственного интеллекта: Claude Code, Codex и других). Агент сам снимает опись машины, предлагает путь проверки кода: плагин Unica или BSL Language Server со справкой платформы. С вашего «да» ставит недостающее, затем выгружает внешнюю обработку, заводит git и доводит её до зелёного теста YAxUnit. Оба пути проверены с нуля свежим агентом на копии демобазы «Управление торговлей» 11.5, платформа 8.3.27. Новая часть: для задач по данным базы агент выгружает конфигурацию в XML, строит карту объектов и пишет запросы только по именам, найденным в выгрузке. Внутри гайд «Unica на Windows» с известными ошибками и проверенными обходами.

10.11.2026    385    Iliaelagin    0    

1

Тестирование QA Разработчик 1С:Предприятие 8 Бесплатно (free)

Когда полная сборка автотестов занимает полчаса, даже небольшая автоматизация может изменить рабочий процесс. Рассказываю, как Python-утилита Phase Switcher постепенно превратилась в KOT for 1C — open-source расширение для VS Code. KOT 3.0 объединяет в одной рабочей среде библиотеку шагов и сценариев, IntelliSense, поддержку СППР и самостоятельных feature Vanessa Automation, исследователь форм, запись действий и управление выполнением через MCP. В статье — история разработки проекта от небольшой Python-утилиты до расширения для VS Code, практические примеры, неудачные эксперименты и решения, которые помогли инструменту прижиться в нашей команде.

02.11.2026    453    alexiosus    0    

2

Тестирование QA Бесплатно (free)

Резкий рост числа пользователей, консолидация систем или миграция в облако требуют заранее понять, выдержит ли инфраструктура новую нагрузку. Рассказываем, как с помощью LLM команда за 16 недель подготовила и провела нагрузочные тесты для шести баз: автоматизировала анализ технологических журналов и журналов регистрации, формирование реалистичных сценариев и создание обработок для «1С:Тест-центра» и JMeter. Показываем, как оркестратор, AI-агенты и MCP-серверы помогают сократить объем ручной работы, а также объясняем, почему контроль со стороны 1С-эксперта по-прежнему остается обязательным. Разбираем архитектуру решения, уже работающие инструменты и направления дальнейшей автоматизации нагрузочного тестирования.

31.10.2026    524    gabrielyants    0    

5

Инструментарий разработчика Тестирование QA Разработчик Стажер 1С 8.3 Абонемент ($m)

Проверила пять пакетных команд платформы 8.3.27 на контрольном расширении Нано-УТ: они обнаружили 4 из 28 заложенных пунктов. В набор входят ошибки применимости, предупреждения и сведения для ручного разбора. Проверка XML-выгрузки отметила все 28 пунктов и 15 из 15 на похожем слепом наборе. Показываю журналы, ограничения и сценарий обновления основной конфигурации. Прилагаются инструмент с 69 тестами и материалы опыта.

7 стартмани

28.10.2026    387    Ninel_S    2    

2

Инструментарий разработчика Мобильная разработка Тестирование QA Разработчик 1С 8.3 Абонемент ($m)

Скрипт form_diff_mobile.py сравнивает две выгрузки конфигурации 1С и показывает, что в формах удалено и переименовано, где на это ещё ссылаются и какой код попадает в мобильные контексты. На «Нано-УТ 2.0» сделано 13 изменений форм: платформа 8.3.27.2130 отметила 7, в остальных шести промолчала, и в четырёх из них скрипт нашёл обращение к удалённому элементу, строку с прежним именем формы, смену директивы или выход формы из мобильной области. На чистой УТ 11.5 сравнение с копией дало 0 находок, а с копией с пятью правками ровно семь. В архивах скрипт, 74 теста, стенд, чек-лист выпуска, журнал выпуска и скрипты опытов на платформе.

7 стартмани

27.10.2026    342    Ninel_S    0    

1

Тестирование QA Разработчик 1С 8.3 Абонемент ($m)

Прогнала через 1С 8.3.27 и валидатор .NET 21 файл XML по одной схеме: базовый пример и типичные отклонения. Вердикты совпали в 20 случаях (у .NET включены предупреждения), дата без времени дала расхождение. В архиве - схема, тесты, закреплённая версия учебной базы и исправленный сценарий проверки, включая выгрузку и обратное чтение 30 продаж.

1 стартмани

26.10.2026    338    Ninel_S    0    

1

Рефакторинг и качество кода Тестирование QA Системный администратор Разработчик 1С 8.3 Абонемент ($m)

В базе 1С на PostgreSQL копятся индексы, которыми никто не пользуется: их создаёт флажок «Индексировать» у реквизитов или их добавляют вручную. Каждый такой индекс замедляет запись: в опыте на тестовой таблице восемь лишних индексов сделали вставку 300 000 строк в четыре-шесть раз дольше. Скрипт на Python смотрит статистику PostgreSQL и показывает, какие индексы ни разу не использовались и какой реквизит 1С их создал. На нашей конфигурации «Нано-УТ» он нашёл четыре ненужных индекса документа и один дубль, добавленный вручную. После того как я сняла флажки и обновила конфигурацию, индексов стало 227 вместо 234, данные не пострадали. В архиве скрипт, запросы и примеры.

5 стартмани

23.10.2026    501    Ninel_S    4    

1

Рефакторинг и качество кода Тестирование QA Разработчик 1С 8.3 Абонемент ($m)

Скрипт, который должен был проверять код 1С в Docker, на деле проверял только, что файл не пустой: из 11 модулей с ошибками он пропустил все. Я переписала проверку и сравнила её с самой 1С на тех же 11 модулях из нашей конфигурации «Нано-УТ». Новый скрипт нашёл незакрытые «Если», процедуры и скобки в 10 случаях из 11. Вызов несуществующей процедуры находит только сама 1С. В архиве скрипт, файлы для Docker, примеры с ошибками и журналы проверки.

5 стартмани

23.10.2026    488    Ninel_S    4    

0
Для отправки сообщения требуется регистрация/авторизация