Как обеспечить качество кода в 1С: стратегии тестирования и автоматизации

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

Вопрос уверенности в работоспособности кода — один из самых острых в разработке на платформе 1С:Предприятие, особенно когда речь идет о сложных внедрениях уровня 1С:ERP. Проблема усугубляется огромными объемами баз данных (500 Гб и выше), сложностью обновления конфигураций и тесной связью логики с данными. В этой статье мы подробно разберем проверенные временем методики и современные инструменты, которые позволяют минимизировать количество ошибок и повысить доверие заказчика к выпускаемым релизам.

Проблема тестирования на реальных данных: как работать с базами в 500 Гб

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

  1. Регулярное создание эталонных копий: Необходимо организовать процесс, при котором раз в неделю (или чаще) создается копия рабочей базы. Чтобы уменьшить ее объем, можно использовать скрипты для удаления старых периодов или очистки версий объектов. Это позволяет получить базу объемом 100-150 Гб вместо 500 Гб, что уже приемлемо для современных серверов разработки.
  2. Центральная тестовая база (ЦТБ): Вместо того чтобы давать копию каждому программисту, создадим одну мощную серверную базу, куда настроена автоматическая миграция данных или регулярное восстановление из бекапа. Разработчики могут подключаться к ней для финальной проверки своего функционала.
  3. Синтетическая генерация данных: Для модульного тестирования алгоритмов часто не нужна вся база. Достаточно написать обработку, которая программно создает «минимально необходимую инфраструктуру»: одну организацию, пару контрагентов, склад и типовую номенклатуру.

Организация серверной инфраструктуры по стандартам 1С

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

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

Модульное тестирование и архитектура кода

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


// Плохой подход: логика внутри процедуры проведения
Процедура ОбработкаПроведения(Отказ, Режим)
    // ... 500 строк кода с запросами и расчетами
КонецПроцедуры

// Хороший подход: вынос логики в экспортную функцию
Функция РассчитатьСуммуСкидки(ПараметрыРасчета) Экспорт
    // Чистая математика и логика
    Возврат Результат;
КонецФункции

Используя модульный подход, мы можем применять юнит-тесты. Для этого в экосистеме 1С существует инструмент xUnitFor1C. Мы можем создать отдельную обработку-тест, которая будет вызывать нашу функцию с разными входными параметрами и проверять результат.

Автоматизация с помощью Vanessa Automation и BDD

Современный стандарт тестирования в 1С — это подход BDD (Behavior Driven Development). Рассмотрим, как это работает на примере инструмента Vanessa Automation. Мы пишем сценарий на языке, понятном человеку (Gherkin), и система сама выполняет действия в пользовательском интерфейсе 1С.

Пример сценария:

Дано: Я открываю документ "Заказ клиента"
Когда: Я заполняю поле "Количество" значением "10"
И: Я нажимаю кнопку "Рассчитать"
Тогда: Поле "Сумма" должно быть равно "1000"

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

Внедрение практики Code Review (Ревью кода)

Даже если тесты пройдены, код может быть «грязным» или неоптимальным. Разберем по шагам, как организовать ревью в команде:

  1. Использование чек-листа: Проверяем отсутствие запросов в циклах, правильность именования переменных, использование Попытка...Исключение, отсутствие «жестких» ссылок на конкретные элементы справочников в коде.
  2. Перекрестная проверка: Мидл-разработчики могут проверять друг друга, а тимлид — наиболее сложные участки. Это повышает общую компетенцию команды.
  3. Инструменты статического анализа: Проанализируем возможности BSL Language Server или SonarQube. Эти инструменты автоматически находят «запах кода» и потенциальные ошибки без запуска программы.

Пример того, что должен ловить ревьюер:


// Ошибка, которую найдет ревьюер или статический анализатор
Для Каждого СтрокаТЧ Из Товары Цикл
    // Запрос в цикле — убийца производительности на больших данных
    СкладскойОстаток = ПолучитьОстатокНаСкладе(СтрокаТЧ.Номенклатура); 
КонецЦикла;

CI/CD: Непрерывная интеграция в 1С

Для крупных проектов с 20 и более разработчиками жизненно необходим CI/CD (Continuous Integration / Continuous Deployment). Посмотрим на этот процесс в разрезе автоматизации:

Когда разработчик помещает код в хранилище или делает commit в Git, автоматически запускается скрипт (например, в GitLab CI). Он создает временную базу, загружает туда новую конфигурацию, прогоняет тысячи тестов Vanessa Automation и, в случае успеха, формирует файл поставки или обновляет тестовый контур. Это позволяет обнаруживать ошибки в течение минут, а не через неделю после релиза на продуктив.

Практические советы по написанию надежного кода

Чтобы минимизировать количество ошибок «на данных заказчика», придерживаемся следующих правил:

Подведем итог: стопроцентная уверенность в коде — это недостижимый идеал, но комбинация из правильной архитектуры серверов, автоматизированных тестов и Code Review позволяет сократить количество инцидентов на порядок. Начните с малого: внедрите обязательное модульное тестирование для самых критичных участков (например, расчет зарплаты или налогов) и постепенно переходите к полной автоматизации.

← На главную