Created by AIImproved by people
Riqli · living documents · updated continuously
Where AI knowledge meets human practice.
Share with friends
1. Общие положения
1.1. Назначение и сфера действия настоящего регламента
Настоящий регламент код-ревью и контроля качества (далее — Регламент) устанавливает единые обязательные требования к процессу проверки исходного кода, статическому анализу, стандартам тестирования и обеспечению качества при разработке программного обеспечения в организации. Регламент является внутренним нормативным документом прямого действия, обязательным для исполнения всеми участниками процесса разработки, включая Fullstack-разработчиков, тимлидов, инженеров по качеству и менеджеров проектов.
Регламент направлен на обеспечение высокого уровня качества кода, снижение количества дефектов на всех стадиях жизненного цикла разработки, повышение читаемости и поддерживаемости кодовой базы, а также минимизацию технического долга. Документ регулирует все аспекты проверки кода, начиная от момента создания пулл-реквеста и заканчивая интеграцией изменений в основную ветку разработки.
1.2. Правовая и нормативная основа
Настоящий Регламент разработан в соответствии с Трудовым кодексом РФ, внутренними политиками организации в области информационной безопасности, корпоративным кодексом этики, а также на основе лучших мировых практик и отраслевых стандартов в области разработки программного обеспечения. Ключевыми нормативными источниками являются стандарты ISO/IEC 25010 (качество программных продуктов), стандарты безопасности OWASP Top 10, а также внутренние стандарты качества и документации организации.
Все положения Регламента применяются в рамках исполнения трудовых функций сотрудников, закрепленных в их должностных инструкциях. В случае возникновения противоречий между настоящим Регламентом и другими локальными нормативными актами, преимущественную силу имеют положения настоящего Регламента в части, касающейся процессов контроля качества и код-ревью.
1.3. Термины и определения
В настоящем Регламенте применяются следующие термины и их определения:
- Код-ревью — формальная процедура проверки исходного кода, выполняемая одним или несколькими разработчиками (ревьюерами) с целью выявления ошибок, улучшения качества кода и распространения знаний внутри команды.
- Пулл-реквест (Pull Request, PR) — механизм запроса на внесение изменений в репозиторий, инициирующий процесс код-ревью и автоматических проверок качества.
- Статический анализ — метод анализа исходного кода без его фактического выполнения, направленный на обнаружение потенциальных ошибок, уязвимостей, нарушений стиля кодирования и архитектурных анти-паттернов.
- Модульное тестирование (Unit Test) — тестирование минимально возможных компонентов программы (отдельных функций, методов, классов) в изоляции от внешних зависимостей.
- Интеграционное тестирование (Integration Test) — тестирование взаимодействия между различными модулями, компонентами или внешними системами для проверки корректности их совместной работы.
- Сквозное тестирование (E2E Test) — тестирование полного сценария работы пользователя в системе, проверяющее корректность работы всех компонентов приложения в связке.
- Технический долг — метафора, обозначающая стоимость дополнительной доработки программного обеспечения, вызванную выбором простого или ограниченного решения вместо более качественного.
2. Цель и задачи должности в контексте контроля качества
2.1. Миссия Fullstack-разработчика в процессе обеспечения качества
Основной целью деятельности Fullstack-разработчика в рамках настоящего Регламента является производство высококачественного, надежного и безопасного кода как на стороне клиента (фронтенд), так и на стороне сервера (бэкенд), соответствующего установленным стандартам и требованиям бизнеса. Разработчик несет персональную ответственность за качество поставляемого кода и активное участие в процессах код-ревью и контроля качества.
Разработчик выступает как в роли автора кода, инициирующего процесс проверки, так и в роли ревьюера, обеспечивающего объективную и конструктивную оценку кода коллег. Ключевой целью является не просто выявление ошибок, а совместное повышение общего уровня экспертизы команды и создание устойчивой культуры качества.
2.2. Ожидаемые результаты и ключевые зоны ответственности
К ожидаемым результатам работы Fullstack-разработчика в области контроля качества относятся: отсутствие критических дефектов в релизных версиях продукта, стабильная работа и высокая производительность всех компонентов системы, соответствие кода стандартам безопасности, а также прозрачность и поддерживаемость кодовой базы для всей команды.
Зона ответственности разработчика включает полноценное покрытие кода авто-тестами, своевременное реагирование на замечания статических анализаторов, проведение качественного код-ревью пулл-реквестов коллег и активное участие в улучшении процессов разработки. Разработчик обязан обеспечивать полную проходимость CI/CD пайплайна перед слиянием кода в основную ветку.
3. Порядок подчинения и взаимодействия
3.1. Административное подчинение
Fullstack-разработчик находится в прямом административном подчинении у технического руководителя (тимлида) или руководителя отдела разработки. Тимлид осуществляет общее руководство деятельностью разработчика, ставит задачи, контролирует их выполнение, организует процессы код-ревью и обеспечивает соблюдение настоящего Регламента в команде.
По вопросам организации и проведения код-ревью разработчик взаимодействует с тимлидом, а также с назначенными ревьюерами, роль которых может исполнять любой разработчик команды, обладающий необходимыми компетенциями и временем для проверки кода. При возникновении спорных ситуаций или разногласий в процессе ревью, окончательное решение принимает тимлид.
3.2. Матричное взаимодействие и функциональное подчинение
Функционально (по вопросам качества кода, архитектуры и тестирования) разработчик взаимодействует с архитектором программного обеспечения, ведущим разработчиком и инженером по качеству (QA-инженером). Вопросы, касающиеся стратегических архитектурных решений, выбора технологического стека и установления общих стандартов качества, выносятся на уровень архитектурного комитета или технического совета организации.
Разработчик также взаимодействует с менеджером продукта (Product Manager) для уточнения функциональных требований и приоритетов, а также с системным администратором и администратором баз данных по вопросам, касающимся среды разработки, инфраструктуры и производительности системы. Все взаимодействия строятся на основе корпоративных коммуникационных каналов (корпоративная почта, мессенджеры, системы трекинга задач).
4. Должностные обязанности в рамках код-ревью и контроля качества
4.1. Организация и проведение код-ревью
Fullstack-разработчик обязан инициировать процесс код-ревью для каждого создаваемого им пулл-реквеста. При создании PR разработчик должен предоставить чёткое и понятное описание изменений, приложить ссылки на задачу (тикет) в системе трекинга, а также указать предполагаемую область влияния изменений на систему. Назначение ревьюеров производится автоматически или вручную, с учётом их компетенций в соответствующей части кода.
В рамках ревью кода разработчик, выступающий в роли автора, обязан оперативно отвечать на комментарии ревьюеров, вносить исправления или аргументированно отстаивать свою позицию, если предложения ревьюера не улучшают качество кода или не соответствуют архитектурным решениям. Слияние пулл-реквеста допускается только после получения необходимого количества одобрений (аппрувов) от ревьюеров и успешного прохождения всех автоматизированных проверок.
4.2. Проведение статического анализа кода
Разработчик обязан применять инструменты статического анализа как локально, на этапе разработки, так и в рамках CI/CD пайплайна. К обязательным инструментам статического анализа относятся: ESLint (для фронтенд-кода на JavaScript/TypeScript), Prettier (для автоматического форматирования), SonarQube (для всестороннего анализа безопасности, надежности и поддерживаемости кода), а также статические анализаторы для серверных языков (например, Pylint, Checkstyle, SpotBugs или аналоги в зависимости от используемого стека).
Все нарушения, выявленные статическими анализаторами, должны быть исправлены до слияния кода. Допускается наличие «ложных срабатываний», которые должны быть подавлены с помощью специальных комментариев (например, // NOSONAR) с обязательным пояснением причины. Код, содержащий критическое нарушение уровня «Блокер» или «Критичный», не подлежит слиянию до полного устранения всех таких нарушений.
4.3. Стандарты модульного тестирования
Fullstack-разработчик обязан обеспечивать покрытие кода модульными тестами (Unit Test) в соответствии с установленным порогом (не менее 80% для критически важных модулей). Модульные тесты должны проверять отдельные функции и методы в изоляции. Все зависимости должны быть замоканы с использованием соответствующих библиотек (например, jest.mock, Mockito, pytest-mock). Для каждого теста должна быть определена четкая цель и ожидаемый результат.
Разработчик должен придерживаться принципа «Red-Green-Refactor»: сначала пишется тест, который должен упасть, затем пишется минимальный код для прохождения теста, и только затем код рефакторится для улучшения его структуры без изменения поведения. Все модульные тесты должны быть автоматически запускаться в CI/CD пайплайне и быть воспроизводимыми на любой машине разработчика.
4.4. Стандарты интеграционного тестирования
Разработчик участвует в создании и поддержке интеграционных тестов (Integration Test), которые проверяют взаимодействие между различными компонентами системы. Интеграционные тесты выполняются в среде, максимально приближенной к продуктивной, с использованием тестовых баз данных, очередей сообщений и внешних сервисов-заглушек. Каждый микросервис и каждый модуль Fullstack-приложения должны проходить интеграционное тестирование при каждом изменении кода.
При написании интеграционных тестов необходимо тестировать как положительные сценарии (счастливый путь), так и негативные (обработка ошибок, таймаутов, некорректных данных). Интеграционные тесты должны быть независимыми друг от друга и не оставлять после себя мусора в тестовых средах (чистить данные в транзакциях). Разработчик обязан следить за актуальностью интеграционных тестов и обновлять их при изменении логики взаимодействия компонентов.
4.5. Стандарты сквозного (E2E) тестирования
Сквозное тестирование (E2E Test) является обязательным для всех критически важных пользовательских сценариев (ключевой пользовательский путь). Fullstack-разработчик должен разрабатывать и поддерживать E2E-тесты с использованием фреймворков, таких как Cypress, Playwright или Selenium. E2E-тесты должны имитировать реальное поведение пользователя в браузере и проверять корректность работы всей системы от фронтенда до бэкенда и базы данных.
Набор E2E-тестов должен запускаться в CI/CD пайплайне в отдельной стадии и выполняться в изолированной тестовой среде. Разработчик обязан анализировать упавшие E2E-тесты и оперативно устранять причины их падения. В случае, если E2E-тест часто падает из-за нестабильности среды (флаппи-тест), он должен быть либо переработан, либо, в крайнем случае, помечен как @flaky с отсрочкой починки, но с обязательным созданием задачи в бэклоге.
4.6. Работа с чек-листами код-ревью
В процессе код-ревью Fullstack-разработчик обязан использовать установленный корпоративный чек-лист код-ревью, который включает проверку следующих аспектов: соответствие кода стилю оформления (Code Style), наличие и качество документации (JSDoc/TSDoc, комментарии к сложным участкам), архитектурная корректность (отсутствие анти-паттернов, соблюдение SOLID и DRY принципов), отсутствие уязвимостей (OWASP Top 10), наличие тестов и их качество, а также соответствие требованиям бизнес-логики.
Чек-лист является обязательным как для автора (для самопроверки), так и для ревьюера. Каждый пункт чек-листа должен быть явно проверен. В случае обнаружения несоответствия чек-листу, это должно быть отражено в комментариях к пулл-реквесту. Тимлид или ведущий разработчик периодически пересматривает и актуализирует чек-лист, добавляя новые пункты на основе анализа инцидентов и ретроспектив.
5. Права и полномочия сотрудника
5.1. Право на принятие решений в рамках код-ревью
Fullstack-разработчик имеет право принимать решения о качестве кода в рамках своей зоны ответственности. В роли ревьюера разработчик обладает правом ставить статус «Изменения требуются» (Changes Requested) на пулл-реквесте, если код не соответствует требованиям настоящего Регламента или стандартам качества. Разработчик также может одобрить код (Approve), если он считает, что все замечания учтены и код готов к слиянию.
Разработчик имеет право инициировать обсуждение архитектурных решений или предлагать улучшения в процессах контроля качества на технических митингах. В случае несогласия с решением тимлида по вопросам код-ревью, разработчик может обратиться к вышестоящему руководству или архитектору, однако, пока решение не пересмотрено, оно подлежит исполнению.
5.2. Право на получение ресурсов и информации
Разработчик имеет право на своевременный и полный доступ к необходимой для выполнения должностных обязанностей информации, включая техническую документацию, спецификации требований, архитектурные диаграммы, данные о производительности системы и информацию об инцидентах. Организация обязана предоставить разработчику современные инструменты разработки (IDE, CI/CD системы, системы трекинга) и библиотеки, необходимые для написания качественного кода и тестов.
Разработчик имеет право запрашивать у тимлида, архитектора или инженера по качеству разъяснения по вопросам, связанным с процессами код-ревью, статического анализа и тестирования. Тимлид обязан организовать процесс обучения и повышения квалификации разработчиков в области обеспечения качества программного обеспечения.
6. Ответственность и подотчетность
6.1. Ответственность за качество кода
Fullstack-разработчик несет персональную ответственность за качество написанного им кода и за последствия его интеграции в общую кодовую базу. В случае обнаружения дефектов в коде, вышедшем в продуктивную среду, ответственность за их исправление и анализ причин возникновения ложится на автора кода, а также на ревьюеров, одобривших данный код. Критериями качества являются: отсутствие критических и блокирующих дефектов, поддержание требуемого уровня покрытия тестами, соответствие стандартам безопасности и производительности.
Разработчик также несет ответственность за соблюдение сроков выполнения задач, но не в ущерб качеству. В случае форс-мажорных обстоятельств (сжатые сроки) разработчик обязан проинформировать тимлида, и решение о слиянии кода с пониженными требованиями к качеству может быть принято только на уровне техлида или архитектора с обязательным заведением задачи на устранение технического долга.
6.2. Ответственность за соблюдение Регламента
За нарушение положений настоящего Регламента, включая пропуск обязательных этапов код-ревью, игнорирование замечаний статического анализа, отсутствие необходимых тестов или пренебрежение стандартами безопасности, разработчик несет дисциплинарную ответственность в соответствии с Трудовым кодексом РФ и локальными нормативными актами организации. Мера ответственности определяется тяжестью нарушения и может варьироваться от устного замечания до занесения выговора в личное дело.
За систематические или грубые нарушения Регламента, повлекшие за собой серьезные инциденты (аварии, потеря данных, нарушение безопасности), разработчик может быть привлечен к материальной ответственности в порядке, установленном законодательством. Тимлид обязан фиксировать все факты нарушений в отчетах о работе команды и в системах управления инцидентами.
7. Квалификационные требования и компетенции
7.1. Образование и профессиональный опыт
На должность Fullstack-разработчика назначается лицо, имеющее высшее профессиональное образование по специальности «Информатика и вычислительная техника», «Программная инженерия» или смежным направлениям. Требования к опыту работы: не менее 2 лет коммерческой разработки на позиции Fullstack-разработчика или фронтенд/бэкенд-разработчика с уверенным знанием смежной стороны. Опыт участия в проектах с высокими требованиями к качеству и безопасности кода является преимуществом.
Разработчик обязан постоянно повышать свою квалификацию, проходить курсы повышения квалификации, участвовать в профессиональных конференциях и митапах. Для подтверждения уровня компетенций рекомендуется наличие сертификаций, например, AWS Certified Developer, Oracle Certified Professional, или сертификаций по технологиям, используемым в стеке организации.
7.2. Технические и профессиональные компетенции
Разработчик должен обладать глубокими знаниями используемого технологического стека. Для фронтенд-части это: JavaScript (ES6+), TypeScript, фреймворк React/Vue.js/Angular, библиотеки управления состоянием (Redux, Zustand, Vuex), системы сборки (Webpack, Vite), CSS-фреймворки и методологии (BEM, CSS Modules). Для бэкенд-части: Node.js/Python/Java/C#, фреймворки (Express, NestJS, Spring Boot, Django, ASP.NET), работа с базами данных (SQL, ORM, оптимизация запросов), принципы построения RESTful API и GraphQL.
Обязательным является владение инструментами тестирования (Jest, Mocha, Pytest, JUnit), инструментами статического анализа (ESLint, SonarQube), системами контроля версий (Git) и CI/CD пайплайнами (GitLab CI, GitHub Actions, Jenkins). Разработчик должен понимать принципы работы сетей, протоколы HTTP/HTTPS, WebSockets, уметь работать с контейнеризацией (Docker) и оркестрацией (Kubernetes).
8. Условия труда
8.1. Режим работы и место выполнения трудовых функций
Режим работы Fullstack-разработчика определяется Правилами внутреннего трудового распорядка организации и коллективным договором. Работа может выполняться как в офисе организации, так и в гибридном или полностью удаленном формате в зависимости от политики организации. При дистанционной работе разработчик обязан обеспечить наличие стабильного интернет-соединения и рабочего места, соответствующего требованиям информационной безопасности.
График работы предполагает стандартную 40-часовую рабочую неделю с двумя выходными днями. В случае необходимости (выпуск релиза, устранение критического инцидента) допускается привлечение разработчика к сверхурочной работе с его письменного согласия и в соответствии с трудовым законодательством. Время начала и окончания рабочего дня может быть гибким с обязательным наличием пересечения с остальной командой в определенные часы (Core Hours).
9. Ключевые показатели эффективности (KPI) в области качества
9.1. Измеримые показатели качества кода
Эффективность работы Fullstack-разработчика в области контроля качества оценивается по следующим KPI:
- Покрытие кода тестами — не менее 80% для модульных тестов. Оценивается с помощью инструментов (JaCoCo, Istanbul, Coverage.py). Отклонение в меньшую сторону требует обоснования.
- Количество дефектов — количество критических и высокоприоритетных дефектов, обнаруженных после релиза на 1000 строк кода. Целевой показатель — менее 1 дефекта на 1000 строк.
- Время нахождения пулл-реквеста в статусе ревью — среднее время от открытия PR до получения необходимого количества одобрений. Целевой показатель — не более 24 рабочих часов.
- Уровень технического долга — оценивается по показателям SonarQube. Должен поддерживаться на уровне «А» или «B» (не более 5% от общего объема кода).
Данные KPI пересматриваются ежеквартально и могут корректироваться в зависимости от специфики проекта и этапа его жизненного цикла.
10. Бизнес-процессы, чек-листы и сценарии рабочих процедур
10.1. Типовой процесс создания и ревью пулл-реквеста
Сценарий процесса код-ревью включает строгую последовательность шагов, обязательных для исполнения:
- Шаг 1 (Создание PR): Разработчик создает пулл-реквест из своей фича-ветки в основную ветку (develop/main). В описание PR добавляется ссылка на задачу в Jira или аналогичной системе, а также краткое описание сути изменений.
- Шаг 2 (Автоматические проверки): CI/CD пайплайн автоматически запускает статический анализ (SonarQube), сборку проекта и все уровни тестов (Unit, Integration, E2E). Если какие-либо проверки падают, PR переходит в статус «Неудачно» и требует доработки.
- Шаг 3 (Назначение ревьюеров): Система автоматически назначает двух ревьюеров на основе файлов, измененных в PR (code owners).
- Шаг 4 (Проведение ревью): Ревьюеры изучают код, оставляют комментарии, используя корпоративный чек-лист. Ревью может завершиться «Approved» или «Changes Requested».
- Шаг 5 (Слияние): После получения одобрений и успешного прохождения всех проверок разработчик выполняет слияние (merge) PR в целевую ветку.
10.2. Чек-лист автора перед созданием пулл-реквеста
Перед созданием пулл-реквеста разработчик обязан провести самопроверку по следующим пунктам:
- Код стайл: Код отформатирован с помощью автоматического форматтера (Prettier/Black) и не содержит ошибок линтера (ESLint/Pylint).
- Тесты: Для всех новых функций и исправлений созданы модульные тесты; интеграционные и E2E тесты обновлены, если изменения затронули их области.
- Документация: Для публичных API (функций, классов, модулей) добавлена документация в формате JSDoc/TSDoc или аналогичном; README проекта обновлено при необходимости.
- Безопасность: Код проанализирован на предмет уязвимостей (проверка инъекций, XSS, CSRF); все пользовательские входные данные валидированы и санитизированы.
- Производительность: Проверена производительность новых запросов к базе данных, отсутствуют N+1 проблемы и утечки памяти (для фронтенда и бэкенда).
Все пункты чек-листа должны быть отмечены как выполненные в комментарии к PR.
10.3. Чек-лист ревьюера при проведении код-ревью
При проведении код-ревью ревьюер обязан последовательно проверить:
- Соответствие требованиям: Код решает именно ту задачу, которая поставлена в тикете. Не решает лишних проблем и не вносит скрытых изменений.
- Архитектура: Соблюдены ли принципы SOLID, DRY, KISS. Нет ли дублирования кода. Логично ли распределены обязанности между классами и модулями.
- Читаемость: Код легко читается, имена переменных, функций и классов являются осмысленными и отражают их суть. Длинные функции разбиты на более мелкие.
- Тесты: Тесты достаточно покрывают функциональность, проверяют как позитивные, так и негативные сценарии. Тесты не содержат логики, дублирующей тестируемый код.
- Производительность и безопасность: Проверка на наличие потенциально медленных запросов, использование неэффективных алгоритмов, а также на возможные уязвимости.
Все замечания должны быть конструктивными и содержать предложения по улучшению, а не просто констатацию факта ошибки.
10.4. Процесс эскалации и разрешения спорных ситуаций
В случае возникновения разногласий между автором PR и ревьюером, которые не удается разрешить в ходе обсуждения комментариев, применяется следующий процесс эскалации:
- Уровень 1 (Дискуссия): Автор и ревьюер продолжают обсуждение в комментариях к PR, аргументируя свою позицию ссылками на документацию, лучшие практики или устоявшиеся паттерны.
- Уровень 2 (Привлечение тимлида): Если консенсус не достигнут в течение 24 часов, в дискуссию вовлекается тимлид команды, который выступает арбитром и принимает окончательное решение по спорному вопросу.
- Уровень 3 (Технический совет): Если спор имеет стратегическое архитектурное значение, тимлид выносит вопрос на рассмотрение технического совета или архитектурного комитета организации. Решение технического совета является обязательным для исполнения всеми сторонами.
Все спорные ситуации и пути их решения документируются в системе управления знаниями организации для предотвращения подобных споров в будущем.
10.5. Интеграция с CI/CD пайплайном
CI/CD пайплайн является неотъемлемой частью процесса контроля качества. Для Fullstack-разработчика обязательна настройка пайплайна, включающего следующие стадии:
- Стадия «Сборка» (Build): Компиляция и сборка фронтенд- и бэкенд-частей приложения с кэшированием зависимостей.
- Стадия «Линтинг» (Lint): Запуск ESLint, Prettier, а также проверка типов TypeScript.
- Стадия «Статический анализ» (SAST): Запуск SonarQube или другого SAST-инструмента с публикацией результатов.
- Стадия «Тестирование» (Test): Последовательный запуск модульных, интеграционных и E2E тестов в изолированной среде.
- Стадия «Деплой» (Deploy): Автоматический деплой успешно собранного и протестированного кода на тестовый или стейджинг-стенд.
Разработчик обязан мониторить статус пайплайна и немедленно исправлять проблемы, возникшие на любой из стадий. Любой красный пайплайн является критическим событием, требующим немедленного внимания.
10.6. Управление техническим долгом
Технический долг является неизбежной частью разработки. Для управления им вводится следующая процедура:
- Идентификация: В процессе код-ревью или статического анализа выявляются участки кода, которые требуют улучшения (рефакторинга), но не являются критически важными для текущего релиза.
- Регистрация: На каждый такой участок заводится задача (бэклог-элемент) с меткой «Технический долг» и указанием приоритета (низкий, средний, высокий).
- Планирование: Часть времени каждого спринта (обычно 10-15%) выделяется на погашение технического долга в соответствии с приоритетами, определенными тимлидом.
- Контроль: Каждый релиз должен сопровождаться отчетом о состоянии технического долга (количество задач, оценочная трудоемкость). Ключевой метрикой является динамика изменения технического долга (увеличение/уменьшение).
10.7. Ретроспектива и улучшение процессов качества
По окончании каждого этапа разработки (спринта/релиза) проводится ретроспектива, в которой Fullstack-разработчик принимает обязательное участие. Цель ретроспективы — анализ эффективности текущих процессов код-ревью и контроля качества, а также выявление зон для улучшения.
Разработчик должен предоставить обратную связь по следующим вопросам: достаточность времени на код-ревью, эффективность чек-листов, качество автоматизированных проверок, а также предложить идеи по улучшению процессов. Результатом ретроспективы должен стать план действий, направленный на повышение качества кода и эффективности команды, который утверждается тимлидом и внедряется в следующих спринтах.