Created by AIImproved by people

Riqli · living documents · updated continuously

Where AI knowledge meets human practice.

Share with friends
Code Style Guide and Technical Standards. Software Developer (Fullstack, Backend, Java, Go, .Net, 1C). Document. (Code style guide. Coding standards. Code review checklist. Code review checklist. Clean code. SOLID. Design patterns. Naming. Modules. Code documentation.)
sections

1. Общие положения

contents

1.1. Назначение и область применения документа

Настоящий документ «Руководство по стилю кода и техническим стандартам» (далее – Руководство) устанавливает единые требования к разработке, оформлению, документированию и ревью кода для всех сотрудников, выполняющих функции по разработке программного обеспечения (Fullstack, Backend, Java, Go, .Net, 1С) в компании «Генеральная» (далее – Компания). Руководство является обязательным к применению при создании новых продуктов, поддержке существующих систем, а также при проведении всех видов контроля качества кода. Цель документа — обеспечить высокое качество, читаемость, предсказуемость и безопасность разрабатываемого кода, сократить время ввода новых разработчиков в проекты и минимизировать количество ошибок на этапах тестирования и эксплуатации.

contents

1.2. Нормативные и методические основания

Руководство разработано на основе стандартов Oracle/Google Java Style Guide, Effective Go, Microsoft .NET Coding Conventions, а также внутренних стандартов Компании в области управления качеством и информационной безопасности. Документ базируется на принципах «Чистый код» (Clean Code), SOLID, ключевых постулатах «Патерны проектирования» (Design Patterns) и требованиях к документированию API. В случае противоречия между данным Руководством и отраслевыми стандартами, применяются положения Руководства как более детализированные для специфики Компании. Интерпретация и актуализация Руководства возлагается на Технический комитет (Архитектурный совет).

contents

1.3. Термины и определения

  • Код-ревью (Code Review) — процесс проверки программного кода одним или несколькими разработчиками с целью выявления ошибок, улучшения качества, соответствия стандартам и обмена знаниями. Проводится с использованием инструментов совместной работы (Pull Request / Merge Request).
  • Чек-лист код-ревью — формализованный перечень пунктов, обязательных для проверки в рамках процедуры ревью, содержащий как общие (форматирование, именование), так и специфические (безопасность, производительность) критерии.
  • Стандарты кодирования — совокупность правил синтаксического оформления, соглашений по именованию, организации импортов, структуры файлов и форматирования отступов, принятая для каждого языка программирования.
  • Технический долг — метрика, отражающая затраты на доработку или переработку кода, вызванные выбором упрощенных решений в ущерб качеству в прошлом.

sections

2. Цель и задачи должности (Разработчик ПО)

contents

2.1. Миссия роли

Разработчик ПО в Компании обеспечивает бесперебойную и эффективную работу информационных систем через создание качественного, расширяемого и поддерживаемого программного кода на стеке технологий (Java, Go, .Net, 1С). Миссия заключается не только в поставке функциональности в срок, но и в обеспечении долгосрочной стабильности архитектуры, минимизации технического долга и повышении инженерной культуры в команде. Разработчик выступает одновременно исполнителем, консультантом и экспертом по техническим решениям.

contents

2.2. Ключевые ожидаемые результаты

  • Поставка готовых к релизу модулей и сервисов, соответствующих техническому заданию и функциональным требованиям.
  • Наличие актуальной, полной и понятной технической документации к каждому разработанному модулю (внутренняя документация, README, комментарии в коде).
  • Снижение плотности дефектов на 1000 строк кода в процессе опытной эксплуатации.
  • Соответствие кода утвержденным в Компании стандартам кодирования и прохождение всех этапов чек-листа код-ревью без критических замечаний.

sections

3. Подчиненность и взаимодействие

contents

3.1. Административное подчинение

Разработчик ПО находится в прямом административном подчинении у Руководителя отдела разработки (Team Lead) либо Руководителя проектного офиса (PM). Вопросы дисциплины, отпусков, больничных листов и выполнения внутреннего трудового распорядка решаются с непосредственным руководителем.

contents

3.2. Функциональное взаимодействие

В рамках функциональной деятельности разработчик взаимодействует с Архитектором (при решении принципиальных технических вопросов), Аналитиками (для уточнения требований и бизнес-логики), Инженерами по тестированию (QA) в рамках процесса исправления дефектов, а также с Администраторами баз данных и DevOps-инженерами по вопросам развертывания и настройки окружений. В матричной структуре проектов разработчик подчиняется Техническому лидеру проекта (Tech Lead) по вопросам реализации конкретных спринтов.

sections

4. Должностные обязанности

contents

4.1. Разработка и реализация программного кода

Разработчик обязан выполнять работы по созданию, модификации и рефакторингу программных компонентов на закрепленных языках программирования. При этом строго соблюдаются принципы SOLID и рекомендуемые паттерны проектирования (фабрика, стратегия, наблюдатель, внедрение зависимостей и др.) для обеспечения гибкости и переиспользуемости. Код должен быть написан в едином стиле: отступы — 4 пробела (табуляция запрещена), максимальная длина строки — 120 символов, фигурные скобки размещаются на той же строке (K&R стиль для Java/C#, для Go — стандартный gofmt). Все публичные методы, классы и сложные алгоритмы снабжаются комментариями формата Javadoc/XML Doc. Разработчик обязан проверять свой код статическими анализаторами (SonarQube, Checkstyle, SpotBugs) до отправки на ревью.

contents

4.2. Работа с системой контроля версий и управление конфигурацией

Все изменения в коде производятся исключительно через систему контроля версий (Git) с использованием модели ветвления Git Flow. Commit Message должны быть осмысленными и начинаться с типа изменения (feat, fix, docs, style, refactor, test, chore). Разработчик обязан поддерживать актуальность своей ветки относительно целевой (master/main) и разрешать конфликты слияния. Слияние в основные ветки производится только через Pull Request с обязательным прохождением пайплайна CI/CD (сборка, тесты, статический анализ).

contents

4.3. Проведение код-ревью (в роли рецензента)

Разработчик принимает участие в проверке кода своих коллег в объеме не менее 4 часов в неделю. В ходе ревью необходимо руководствоваться чек-листом код-ревью, который включает проверку: архитектурной целостности, читаемости, наличия тестов, обработки ошибок, безопасности (SQL-инъекции, XSS), производительности (алгоритмическая сложность, использование кэшей), а также соблюдение корпоративных стандартов кодирования. Комментарии должны быть аргументированными, конструктивными и направленными на улучшение кода. Ревью считается завершенным только после утверждения (approve) всех изменений.

contents

4.4. Документирование и описание API

Разработчик обязан сопровождать разработанный функционал технической документацией. Для бэкенд-сервисов (Java, Go, .Net) документация ведется в формате OpenAPI (Swagger) для REST-эндпоинтов, либо gRPC-документация (proto-файлы). Для внутренних модулей и библиотек — README-файлы с описанием назначения, зависимостей, способов сборки и примеров вызова (code snippets). Документация должна обновляться синхронно с изменениями в коде при каждом релизе.

contents

4.5. Оптимизация производительности и рефакторинг

Разработчик систематически анализирует существующий код на предмет узких мест и «запахов» кода. Предлагает и внедряет рефакторинг для улучшения структуры (устранение дублирования, упрощение сложных методов, разделение ответственности). При работе с базами данных — оптимизирует запросы, использует индексы и пулы соединений. При работе с памятью в Go/Java/C# — следит за утечками, корректным освобождением ресурсов (Close, Dispose, defer). По итогам рефакторинга обязательно обновляется документация и запускается полный цикл регрессионного тестирования.

contents

4.6. Обеспечение качества и тестирование

Разработчик несет первичную ответственность за качество кода. Обязательно покрытие юнит-тестами (JUnit, NUnit, Go test) всех критических и бизнес-логических функций с целевым уровнем покрытия не менее 80%. Пишутся интеграционные тесты для проверки взаимодействия модулей и внешних систем. В процессе отладки и локальной проверки разработчик использует отладчики (IDE) и инструменты профилирования (JProfiler, dotMemory, pprof). Выявленные баги фиксируются в трекере задач (Jira/YouTrack) с приоритезацией, после исправления — дефекты перепроверяются через CI и демонстрируются QA.

sections

5. Права разработчика

contents

5.1. Право принятия технических решений

Разработчик имеет право предлагать и обосновывать изменение технических решений (выбор библиотек, фреймворков, архитектурных паттернов) в рамках своего уровня компетенции. Окончательное решение утверждается Техническим лидом (Tech Lead) после обсуждения на архитектурных комитетах.

contents

5.2. Доступ к информации и ресурсам

Разработчику предоставляется доступ к корпоративным репозиториям, документации, базам знаний, инструментам CI/CD (Jenkins/GitLab CI), тестовым и продуктивным средам в объеме, необходимом для выполнения должностных обязанностей. Уровень доступа определяется матрицей прав и политиками безопасности Компании.

contents

5.3. Запрос на повышение квалификации

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

contents

5.4. Приостановка слияния изменений

При обнаружении критических нарушений стандартов кодирования, падения тестов или угроз безопасности, разработчик-ревьювер имеет право наложить вето (veto) на слияние Pull Request'а до полного устранения замечаний. О подобных случаях уведомляется Tech Lead.

sections

6. Ответственность

contents

6.1. За качество кода и нарушение стандартов

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

contents

6.2. За сохранность информации и безопасность

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

contents

6.3. За соблюдение сроков и выполнение обязательств

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

sections

7. Квалификационные требования

contents

7.1. Базовые компетенции

  • Высшее или среднее профессиональное образование в области IT, математики, физики или смежной области (допускается опыт замены образования).
  • Опыт коммерческой разработки на одном из языков: Java (Spring/Spring Boot), Go (Gin/Echo), .NET (ASP.NET Core), 1С (платформа 8.x) от 3 лет для Senior, от 1 года для Middle.
  • Знание алгоритмов и структур данных, основ ОС Linux/Windows, сетей (TCP/IP, HTTP, gRPC).

contents

7.2. Инструментальные навыки (Hard Skills)

  • Глубокое знание синтаксиса и стандартных библиотек основного стека.
  • Опыт работы с Git (команды rebase, cherry-pick, разрешение конфликтов).
  • Понимание принципов SOLID и умение применять основные порождающие, структурные и поведенческие паттерны проектирования.
  • Владение инструментами профилирования и отладки, JDBC/JPA, Entity Framework, GORM.
  • Базовые навыки администрирования СУБД (PostgreSQL, MS SQL, ClickHouse).

contents

7.3. Сертификация и дополнительные требования

Приветствуется наличие сертификаций: Oracle Certified Professional (OCP), Microsoft Certified: Azure Developer Associate, Golang Certified Developer. Обязательно владение английским языком на уровне чтения технической документации (Intermediate). Для работы с 1С — знание встроенного языка, объектов метаданных, умение оптимизировать запросы и отладку форм.

sections

8. Условия труда

contents

8.1. Режим рабочего времени

Работа осуществляется в соответствии с правилами внутреннего трудового распорядка Компании, в гибридном формате (удаленная работа / офис). Рабочая неделя — пятидневная, с двумя выходными. Допускается гибкий график в интервалах времени, определенных техническим заданием проекта (встречи, daily scrum).

contents

8.2. Техническое обеспечение

Разработчику предоставляется рабочая станция (ноутбук или ПК) с необходимым программным обеспечением (IDE, Docker, системные утилиты). Дополнительно — доступ к корпоративным VPN-сетям, внутренним вики-страницам и чатам (Slack/Teams).

contents

8.3. Охрана труда и санитарные нормы

Рабочее место должно соответствовать нормам СанПиН по освещению, микроклимату и эргономике. Разработчик обязан соблюдать режим труда и отдыха (предусмотрены регламентированные перерывы 5-10 минут каждый час работы), а также правила пожарной безопасности.

sections

9. Ключевые показатели эффективности (KPI)

contents

9.1. Качество кода и плотность дефектов

Целевой уровень покрытия тестами — от 80%. Количество критических замечаний в ходе код-ревью на 100 строк кода — не более 1. Индекс технического долга (по данным SonarQube) — не выше 5% от объема изменений. Плотность дефектов в Production — менее 0.5 ошибок на 1000 строк кода в месяц.

contents

9.2. Производительность и скорость поставки

Средний срок выполнения задачи (Lead Time) — в пределах плана спринта. Процент завершенных Story Points спринта — не менее 95%. Скорость отклика на инциденты (MTTR) — по SLA проекта. Доля переделок из-за неверного понимания требований — менее 10%.

contents

9.3. Вклад в командную культуру и знания

Активность в проведении ревью (количество проверенных MR в месяц — не менее 10). Участие в технических митапах (выступление с докладом минимум 1 раз в полугодие). Наличие / поддержание актуальной документации по своим модулям.

sections

10. Бизнес-процессы, чек-листы и сценарии рабочего процесса

contents

10.1. Жизненный цикл задачи (от бэклога до релиза)

  • Шаг 1. Получение задачи из бэклога (Jira/YouTrack), анализ требований в паре с аналитиком.
  • Шаг 2. Проектирование решения: выбор архитектурного подхода, согласование с Tech Lead'ом.
  • Шаг 3. Создание ветки (feature/XXX) от актуального develop/main, локальная разработка с коммитами.
  • Шаг 4. Локальный запуск автотестов и линтеров (Checkstyle, go vet, dotnet format).
  • Шаг 5. Создание Pull Request с заполнением шаблона (что сделано, тестировал ли, скриншоты/логи).
  • Шаг 6. Прохождение CI Pipeline (сборка, тесты, статический анализ).
  • Шаг 7. Ревью двумя независимыми разработчиками согласно чек-листу код-ревью.
  • Шаг 8. Исправление замечаний, повторное ревью, получение approve.
  • Шаг 9. Слияние в целевую ветку (develop) и автоматический деплой на тестовый стенд.
  • Шаг 10. Подтверждение функциональности QA-инженером, демонстрация Product Owner'у (при необходимости).
  • Шаг 11. Релиз в Production в соответствии с регламентом релизного цикла.

contents

10.2. Чек-лист код-ревью (обязательный минимум)

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

  • Читаемость и форматирование: Соответствует ли код корпоративному стилю (отступы, пробелы, длина строки). Нет ли магических чисел (использовать константы).
  • Именование: Соответствуют ли названия переменных, методов, классов семантике (Правило «Именование»). Префиксы/суффиксы для интерфейсов (I - в C#, без префикса в Java/Go).
  • Архитектура и SOLID: Нет ли «божественных» классов/методов (> 100 строк). Соблюдена ли инверсия зависимостей (DIP). Не нарушает ли код принцип единственной ответственности (SRP).
  • Безопасность: Обработка ввода/вывода (санитизация данных). Использование параметризованных запросов к БД. Отсутствие секретов/ключей в коде.
  • Производительность: Отсутствие блокирующих вызовов в циклах (запросы к БД / API). Использование кэширования. Оптимальная работа с памятью (избегать утечек).
  • Обработка ошибок: Корректное логирование (уровни ERROR/WARN/INFO). Перехват и проброс исключений. Наличие пользовательских сообщений об ошибках.
  • Тесты: Написаны ли юнит-тесты для новой логики. Проходят ли они локально. Добавлены ли интеграционные тесты для новых эндпоинтов.

contents

10.3. Сценарий рефакторинга и модернизации модуля

Инициация рефакторинга происходит по результатам анализа технического долга или по запросу Архитектурного совета. Процесс включает: аудит текущего кода (утилиты-анализаторы), написание недостающих тестов (Test Harness) до рефакторинга для сохранения поведения (Golden Master), пошаговое изменение кода с применением паттернов (например, выделение интерфейсов для замены зависимостей, внедрение фабрик), регрессионный прогон автотестов, повторное ревью и финальную выкатку в стейджинг.

contents

10.4. Работа с «легаси» кодом (устаревшие системы)

При работе с устаревшими системами, написанными без соблюдения современных стандартов, разработчик должен руководствоваться правилом «Не навреди» (Boy Scout Rule): «Оставляй код чище, чем он был до тебя». Изменения вносятся только с обязательным покрытием тестами изменяемого участка. При внесении критических изменений (миграция версий фреймворка) обязательно составляется план отката (Rollback Plan) и создается резервная копия кода/БД.

contents

10.5. Порядок действий при обнаружении критической уязвимости

Если в процессе разработки или ревью обнаружена уязвимость, разработчик обязан немедленно уведомить об этом Tech Lead'а и группу Security Response, создать задачу с критическим приоритетом (Critical). До устранения уязвимости запрещается выполнять релизы и сливать код в основные ветки. Исправление должно быть протестировано на уязвимость (например, SAST-сканером) и выпущено внеочередным патчем.