← Назад к вопросам

Какие стандарты разработки использует твоя команда?

1.0 Junior🔥 101 комментариев
#Стандарты разработки#Опыт и софт-скиллы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Стандарты разработки: процессы и практики

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

Стандарт 1: Стиль кода и именования

Единые соглашения об именовании:

// Переменные, параметры: camelCase
НоваяДата = ТекущаяДата();
КоличествоТоваров = 5;

// Функции и процедуры: PascalCase
Процедура ПолучитьДанныеПоТовару()
КонецПроцедуры

Функция РассчитатьИтоговуюСумму()
КонецФункции

// Константы: UPPER_SNAKE_CASE
КОНСТАНТА_МАКСИМАЛЬНОЕ_КОЛИЧЕСТВО = 1000;

// Переменные для сумм: заканчиваются на Сумма
ТоварнаяСумма = 0;
ДополнительнаяСумма = 0;

// Boolean переменные: начинаются с Есть, Нужно, Требуется
ЕстьОшибка = Ложь;
НужноПроверить = Истина;
ТребуетсяОбновление = Истина;

Преимущества:

  • Легче читать чужой код
  • IDE подсказывает согласованные имена
  • Меньше ошибок опечатки

Стандарт 2: Архитектура и слои

Мы используем трёхслойную архитектуру:

Презентация (Формы)
    ↓ вызывает
Бизнес-логика (Обработки, Отчеты)
    ↓ вызывает
Данные (Справочники, Документы, Регистры)

Правило: Не обращайся к данным из презентации напрямую

// ❌ Плохо — прямое обращение из формы
Процедура КнопкаНажата()
    СправочникТовары.СоздатьЭлемент();
КонецПроцедуры

// ✅ Хорошо — через бизнес-слой
Процедура КнопкаНажата()
    Обработка.СоздатьНовыйТовар();
КонецПроцедуры

Дополнительные принципы:

  • Каждый объект имеет чёткую зону ответственности
  • Общий код выносим в модули
  • Кроссплатформенность где возможно

Стандарт 3: Работа с ошибками

Единый подход к обработке исключений:

// Всегда используем ПОПЫТКА-ИСКЛЮЧЕНИЕ
Процедура ВыполнитьОперацию()
    Попытка
        // Основной код
        ВыполнитьКритичнуюОперацию();
    Исключение
        // Логируем ошибку
        ОшибкаОписание = ОписаниеОшибки();
        ЛогироватьОшибку(ОшибкаОписание);
        
        // Показываем пользователю понятное сообщение
        СообщитьОшибку("Операция не выполнена. Обратитесь в поддержку.");
    КонецПопытки;
КонецПроцедуры

Правила:

  • Не глушим ошибки молча
  • Логируем ВСЕ ошибки
  • Показываем пользователю понятный текст
  • Сохраняем контекст ошибки для отладки

Стандарт 4: Логирование

Минимальный стек для логирования:

Процедура ЛогироватьВажное(СобытиеТекст, Данные)
    ЛогЗапись = Новая ЗаписьЖурнала();
    ЛогЗапись.Событие = СобытиеТекст;
    ЛогЗапись.Пользователь = ТекущийПользователь();
    ЛогЗапись.Данные = Данные;
    ЛогЗапись.ВремяСобытия = ТекущаяДата();
    ЛогЗапись.Записать();
КонецПроцедуры

// Используем:
// ✅ Создание документа
ЛогироватьВажное("СоздаНакладная", "ID: " + НаклдаяID);

// ✅ Синхронизация с внешней системой
ЛогироватьВажное("ПолученныеДанные", РезультатПолученный);

// ✅ Критичные ошибки
ЛогироватьВажное("Ошибка", ОписаниеОшибки());

Чего НЕ логируем:

  • ❌ Все движения мыши
  • ❌ Каждое открытие формы
  • ❌ Тривиальные операции

Логируем критичное, чтобы не захламить журнал.

Стандарт 5: Документирование кода

Каждая сложная процедура должна иметь документацию:

// Описание: Рассчитывает итоговую стоимость товара с учетом скидок и налогов
// Параметры:
//   ТоварСсылка - ссылка на справочник Товары
//   Количество - число, количество единиц
//   СкидкаПроцент - число (0-100), процент скидки
// Возвращает: Десятичное число, итоговая стоимость
// Пример использования:
//   Стоимость = РассчитатьИтоговуюСтоимость(Товар, 5, 10);
Функция РассчитатьИтоговуюСтоимость(ТоварСсылка, Количество, СкидкаПроцент = 0)
    
    ОсновнаяЦена = ТоварСсылка.ЦенаПродажи;
    БазоваяСумма = ОсновнаяЦена * Количество;
    Скидка = БазоваяСумма * СкидкаПроцент / 100;
    СуммаСоСкидкой = БазоваяСумма - Скидка;
    
    НалогПроцент = 18; // НДС
    СумманаНалога = СуммаСоСкидкой * НалогПроцент / 100;
    ИтоговаяСумма = СуммаСоСкидкой + СумманаНалога;
    
    Возврат ИтоговаяСумма;
    
КонецФункции

Стандарт 6: Code Review

Обязательный процесс перед merge:

1. Разработчик выполняет работу
2. Создает Pull Request или заявку в хранилище
3. Другой разработчик (опытнее) делает Code Review
4. Проверяет:
   - Соответствие стандартам
   - Логика работы
   - Производительность
   - Отсутствие дублирования
5. Если проблемы → обсуждение и правки
6. Если ОК → merge в main

Чек-лист code review:

  • Код соответствует стилю (имена, форматирование)
  • Нет дублирования
  • Логика понятна (или задокументирована)
  • Обработаны ошибки
  • Нет утечек памяти
  • Производительность приемлема
  • Тесты написаны (если критичный код)

Стандарт 7: Тестирование

Для критичной бизнес-логики пишем тесты:

Процедура Тест_РассчитатьИтоговуюСтоимость_ПроверяетСкидку()
    // Arrange (подготовка)
    ТоварСсылка = СоздатьТестовыйТовар();
    ТоварСсылка.ЦенаПродажи = 1000;
    ТоварСсылка.Записать();
    
    // Act (выполнение)
    Итог = РассчитатьИтоговуюСтоимость(ТоварСсылка, 2, 10);
    
    // Assert (проверка)
    // Ожидаем: 1000 * 2 - 10% скидка + 18% налог = 2180
    ОжидаемоеЗначение = 2180;
    Если Итог <> ОжидаемоеЗначение Тогда
        ВызватьИсключение "Тест не пройден";
    КонецЕсли;
КонецПроцедуры

Стандарт 8: Версионирование и миграции

Каждое обновление конфигурации имеет версию:

// В метаданных указываем версию
// Версия = 1.2.3
// Где 1 = major (большие изменения)
//     2 = minor (новые функции)
//     3 = patch (исправления)

// Для каждого обновления создаем миграцию:
// Файл: _Миграции/001_добавить_поле_дата.sql

Стандарт 9: Performance

Правила оптимизации:

// ❌ Плохо — N+1 запросов
Для Каждого Товар Из Товары Цикл
    Остаток = ПолучитьОстаток(Товар); // Запрос для каждого товара!
КонецЦикла;

// ✅ Хорошо — один запрос
Остатки = ПолучитьВсеОстатки(Товары); // Один запрос!
Для Каждого Товар Из Товары Цикл
    Остаток = Остатки[Товар];
КонецЦикла;

Чек-лист производительности:

  • Нет SELECT внутри цикла
  • Фильтрация в SQL, не в коде
  • Используются индексы
  • Нет загрузки ненужных полей

Стандарт 10: Безопасность

Основные правила:

// ❌ Плохо — SQL-injection
ВходящиеДанные = ПолучитьПараметр("поиск");
Запрос.Текст = "ВЫБРАТЬ * ОТ Товары ГДЕ Наименование = '" + ВходящиеДанные + "'";

// ✅ Хорошо — параметризованный запрос
Запрос.Текст = "ВЫБРАТЬ * ОТ Товары ГДЕ Наименование = &Поиск";
Запрос.УстановитьПараметр("Поиск", ВходящиеДанные);

Правила:

  • Всегда параметризуй внешние данные
  • Не доверяй пользовательскому вводу
  • Логируй чувствительные операции
  • Используй права доступа конфигурации

Инструменты команды

Для управления стандартами используем:

  • Хранилище 1С для контроля версий
  • Git для интеграции с CI/CD
  • SonarQube для анализа качества
  • Jira для управления задачами
  • Confluence для документации
  • Slack для оперативной коммуникации

Результаты применения стандартов

За 3 года внедрения:

  • Количество багов снизилось на 60%
  • Время code review сократилось на 40%
  • Новые разработчики адаптируются за 2 недели вместо месяца
  • Переиспользование кода выросло на 45%
  • Скорость разработки новых функций выросла на 35%

Как внедрить стандарты в команде

  1. Создать гайд — документировать все правила
  2. Обучить команду — провести сессии
  3. Начать с малого — внедрять постепенно
  4. Автоматизировать — использовать инструменты
  5. Регулярно пересматривать — совершенствовать процесс
  6. Быть гибким — не все ситуации одинаковые

В итоге, стандарты разработки — это инвестиция в качество и командную эффективность. Они требуют времени на внедрение, но быстро окупаются через снижение ошибок и ускорение разработки.