Качество предоставляемых решений зависит и от инженерных практик, применяемых в процессе реализации спроектированной архитектуры.
Инженеры ГК Теком при решении каждой задачи придерживаются общепринятых методик и практик:
— **SOLID** — акроним, обозначающий базовый набор принципов проектирования и программирования
— Single Responsibility Principle — принцип единственной ответственности для каждого модуля и компонента ПО с простыми и понятными взаимосвязями ускоряет разработку и поддержку продуктов
— Open-Сlosed Principle — используя принцип открытости для расширения и закрытости для изменений, безопасно расширяем существующий функционал, снижая риски регрессии
— Liskov Substitution Principle — применяем принцип подстановки типов, позволяющий безопасно развивать согласованные контракты между компонентами
— Interface Segregation Principle — разделяем интерфейсы компонент для безопасного и целевого использования
— Dependency Inversion Principle — инверсия зависимостей позволяет гибко управлять взаимосвязями
— Composition over Inheritance — предпочтение композиции над наследованием позволяет избежать сложностей и уменьшить накладные расходы при развитии и расширении функционала
— **KISS** — Keep it Simple, Stupid — предпочтение отдаётся наиболее простому из решений, удовлетворяющих требованиям.
Мы не усложняем требования, а реализуем непосредственно то, что нужно нашим клиентам и партнёрам.
— **YAGNI** — You Ain’t Gonna Need It — мы не делаем что-то только по причине, что это может понадобиться в будущем.
Мы конкретизируем, уточняем требования и реализуем именно то, что нужно.
— **DRY и SSO** — Don’t Repeat Yourself и Single Source of Trust. Мы придерживаемся единого источника истины на основе подходов GitOps/DocOps.
Описание требований, пользовательских сценариев, бизнес-логики, код, конфигурация всегда находятся в одном месте с контролем изменений.
Дублирование источников повышает риск рассинхронизации данных и возникновения проблем.
— Принцип наименьшего удивления (Principle of Least Astonishment) — используем общепринятые отраслевые подходы, названия, спецификации, чтобы инженеры, специалисты по маркетингу и продажам говорили на одном языке, понимали друг друга и своих коллег из компаний клиентов и партнёров.
— **Fail Fast, Recover Quickly** — мы не пытаемся угадывать и делать единую конфигурацию своих решений под всех заказчиков.
Инженеры рассчитывают требуемые характеристики с учётом специфики каждого клиента, а если что-то оказывается упущенным, то система формирует диагностическую информацию в виде понятных логов, трейсов и метрик.
Качество обеспечивается не только практиками и принципами, но и процессами, накладываемыми на них:
1. **Единые Code Conventions для кодирования**. В процессе разработки команды придерживаются единых «Соглашений по написанию кода»
на основе общепринятых правил и норм разработки ПО по каждому стеку (Java/Kotlin, C/C++, JavaScript/TypeScript, C#, Python), включая дополнительные правила и соглашения, выработанные внутри ГК Теком.
Code Conventions регулярно пересматриваются и поддерживаются в актуальном состоянии главными и ведущими инженерами компании.
2. **Обязательные Code Review**. Инспекции кода на всех уровнях согласно единым Code Conventions — неотъемлемая составляющая ежедневной работы как инструмент поиска потенциальных проблем, так и обмена знаниями от опытных коллег к специалистам начального и среднего уровней.
Экспертиза исходного кода подразумевает не только инспекции кода, но и конфигурации, скриптов автоматизации, а также пользовательских сценариев, сценариев тестирования и документации согласно подходам GitOps/DocOps.
3. **Definitions of Done** — используем ясные и конкретные критерии готовности задачи и реализации функциональных и нефункциональных требований:
— аналитика выполнена и сценарии использования описаны
— проектирование проведено и архитектура утверждена
— код разработан, включая функциональные и интеграционные тесты
— ревью пройдено успешно как специалистами, так и автоматизированным инструментарием
— pipelines автоматизированного тестирования и сканирования SAST, Secrets Scan, SCA, DAST — имеют зеленый статус
— документация, инструкции по миграции, release notes обновлены и выложены для команд тестирования и сопровождения
— необходимые метрики, трассировочная информация добавлены и мониторинг под них настроен
— при реализации нефункциональных требований проводится соответствующее дополнительное тестирование: нагрузочное, тестирование производительности, безопасности и другие
Кроме вышесказанного, каждый инженер ГК Теком знает, что задача готова тогда, когда успешно развёрнута и работает в производственной среде, а также по ней получена положительная обратная связь от пользователей.
4. **Автоматизированное тестирование** — придерживаемся требования покрытия не менее 80% функциональных и нефункциональных требований авто-тестами
на всех уровнях: unit → integration → contracts (api) → end—to—end (e2e). Автоматизированное тестирование является обязательной частью Definitions of Done, состоящее из следующих частей:
— API-тесты как обязательный этап проверки соблюдения контрактов и поведения API
— е2е (end—to—end) тесты как обязательный этап проверки корректности реализации пользовательских сценариев через UI веб-приложения в целевом браузере
— smoke-тесты как быстрый контур проверки работоспособности существующих критичных сценариев после реализации новой функциональности или изменений в существующей
— интеграционные тесты как обязательный этап проверки взаимодействия ПО с инфраструктурными компонентами, внешними сервисами и внутренними модулями друг с другом
— хаос-инженерия и нагрузочное тестирование используются для проверки устойчивости ПО не только в теории,
но и контролируемым внесением сбоев и пиковых нагрузок на систему и её отдельные компоненты.
5. **Непрерывная интеграция и развертывание** — автоматизированные конвейеры статического анализа кода (SAST, Secrets Scan), сборки артефактов, прогона авто-тестов,
сканирования собранных артефактов (SCA) для каждого изменения, вносимого в кодовую базу с дальнейшим автоматическим развёртыванием ПО
с изменениями в тестовое окружение для ручного и автоматизированного тестирования
— обеспечивают быстрое обнаружение проблем
— снижают стоимость исправления ошибок на более поздних этапах
— делают процесс разработки более предсказуемым и управляемым
— автоматизируют процесс интеграции и развертывания, в том числе используемый в производственной среде заказчиков
Таким образом, вносимые изменения, проходящие полный автоматизированный конвейер непрерывной интеграции и развертывания, могут быть безопасно и быстро доставлены пользователям.
6. **Документирование на каждом этапе** — используем подход к управлению документацией как инженерным артефактом и частью жизненного цикла продукта (Documentation as Code and DocOps).
— Документация — это не «побочный артефакт» разработки, а управляемый, автоматизированный инженерный актив.
— Применяем к разработке документации все практики и подходы как к коду продукта: версионирование, ревью, автоматизация сборки и тестирование.
— Документация включает не только User/Admin Guides, но и документацию архитектуры, конфигурации, API, Troubleshooting Guide и многое другое.
— Жизненный цикл документации совпадает с жизненным циклом ПО. Изменения в документацию вносятся вместе с изменениями кода продукта.