Мероприятия по обеспечению качества
Этот материал объясняет мероприятия по обеспечению качества, включая контрольные вопросы и ключевые темы.
In a Nutshell
Комплексное качество складывается из согласованных действий: аудиты, code review, тестирование, статический анализ кода, pair programming, управление ошибками, устойчивый процесс разработки и постоянные CI/CD конвейеры, которые поддаются измерению через цели качества и quality gates.
Компактное описание
Предупредительные и выявляющие меры
- Предупредительные: стандарты, обучение, pair programming, Definition of Done
- Выявляющие: статический анализ кода, тестирование, code review, аудиты
Основу составляет автоматизированный конвейер с Continuous Integration, который при каждом изменении собирает, анализирует, тестирует и возвращает результаты, а также доставляет код через Continuous Delivery или Continuous Deployment. Управление ошибками контролирует жизненный цикл дефектов (статус, серьёзность, связь с коммитами, релизами). Документация (архитектура, ADRs, операции) поддерживается как часть качества и версионируется.
Ключевые моменты для проверки
Аудиты (внутренние и внешние)
- Проверочные каталоги: предварительно определённые чеклисты для безопасности, compliance и качества
- Доказательства: документирование мер, результатов тестов и reviews
- План действий: конкретные шаги по устранению выявленных недостатков с расписанием
- Выборочная проверка: статистическая проверка артефактов и процессов
- Audit Trail: полная документация всех изменений и решений
Процессы code review
- Четырёхглазый принцип: минимум два человека должны проверить и одобрить код
- Чеклист review: стандартизированные критерии архитектуры, безопасности, производительности, тестов
- Автоматизированные предварительные проверки: linting, форматирование, unit тесты перед ручной проверкой
- Типы review: informal review, technical review, inspection с определёнными ролями
- Метрики: охват review, defect detection rate, время review
Методы и стратегии тестирования
- Пирамида тестирования: unit тесты (70%), интеграционные тесты (20%), E2E тесты (10%)
- Типы тестов: функциональные, нефункциональные, приёмочные, регрессионные
- Автоматизация тестирования: интеграция в CI, параллельное выполнение, управление тестовыми данными
- Исследовательское тестирование: тесты на основе опыта без предварительных сценариев
- Mutation testing: мера качества покрытия тестами через мутации кода
Статический анализ кода
- Метрики качества: cyclomatic complexity, code smells, technical debt
- Security scanning: OWASP Top 10, проверка зависимостей, SAST
- Quality gates: определённые пороги для метрик и нарушений правил
- Инструменты: SonarQube, ESLint, Checkstyle, PMD, Fortify
- Непрерывный мониторинг: анализ тренда и развитие качества во времени
Pair и Mob Programming
- Распределение ролей: driver (пишет код), navigator (наблюдает, думает вместе)
- Смена ролей: регулярное чередование (например, каждые 25 минут)
- Передача знаний: прямой обмен опытом и менторство
- Преимущества качества: обнаружение ошибок в реальном времени, лучшие решения архитектуры
- Удалённая работа: screen sharing, live coding инструменты, виртуальные платформы для pairing
Управление ошибками и дефектами
- Жизненный цикл дефекта: New → In Progress → Fixed → Tested → Closed
- Приоритизация: Severity (влияние) vs. Priority (срочность)
- MTTR (Mean Time To Repair): метрика скорости исправления
- Плотность дефектов: число ошибок на строку кода или функциональную точку
- Анализ коренной причины: систематическое исследование причин критических ошибок
Процесс разработки и стандарты
- Definition of Ready (DoR): критерии для включения в спринт или backlog
- Definition of Done (DoD): критерии завершения user stories и задач
- Стратегии ветвления: Git Flow, GitHub Flow, Trunk Based Development
- Управление релизами: версионирование, release notes, стратегии развёртывания
- Требования compliance: GDPR, ISO стандарты, отраслевые требования
Архитектура CI/CD конвейера
- Стадии конвейера: Build → Test → Analyze → Package → Deploy → Monitor
- Quality gates: автоматизированные точки принятия решений с определёнными критериями
- Стратегии rollback: автоматизированный откат при ошибках в развёртывании
- Feature flags: управление активацией функций без новых релизов
- Canary и Blue Green: стратегии развёртывания с минимизацией рисков
Метрики и KPIs качества
- ISO 25010: функциональность, надёжность, удобство использования, эффективность, поддерживаемость, портативность
- DORA метрики: deployment frequency, lead time, MTTR, change failure rate
- Качество кода: test coverage, дублирование кода, technical debt ratio
- Производительность: время ответа, throughput, использование ресурсов
- Безопасность: количество уязвимостей, security score, compliance rate
Документирование и управление знаниями
- Документация архитектуры: C4 Model, ADRs
- Документация API: OpenAPI/Swagger, примеры, версионирование
- Операционная документация: инструкции по развёртыванию, руководства мониторинга
- База знаний: FAQ, best practices, lessons learned
- Версионирование: документы как часть репозитория с changelog
Основные компоненты
- Цели и метрики качества (подхарактеристики ISO 25010)
- Практики review (код, архитектура, безопасность)
- Стратегия тестирования (пирамида тестов, mutation testing, контроль flaky тестов)
- Статический анализ и security scans
- Pair и Mob Programming
- Процесс управления ошибками (triage, приоритизация)
- Процесс разработки (DoR, DoD, release потоки)
- CI конвейер (build, lint, test, анализ, артефакты)
- Continuous Delivery (ручное управление, staging, canary, blue green)
- Continuous Deployment (автоматически при выполнении criteria)
Практический пример (лёгкая цепочка QA для веб-сервиса)
DoD: Unit тесты есть, покрытие растёт, анализ зелёный, review одобрен, ticket привязан, changelog, документация актуальна
Pipeline:
1) Lint + Format
2) Unit Tests + Mutation Testing
3) Статический анализ (Quality Gate)
4) Build + подпись артефакта
5) Интеграционные тесты в контейнере
6) Contract тесты к соседним сервисам
7) Развёртывание в staging (CD)
8) E2E smoke тесты
9) Релиз / автоматическое go live (Deployment)
10) Мониторинг активен
Reviews: PR чеклист (архитектура, безопасность, тесты, документация)
Управление ошибками: Ticket (высокий) → Воспроизведение → Тестовый случай → Fix (commit) → Регрессионный тест → Проверено → Закрыто
Преимущества и недостатки
Преимущества
- Раннее обнаружение ошибок
- Меньше затрат на переделку
- Воспроизводимое качество
- Лучшие доказательства compliance
- Лучшее знание в команде
- Более быстрые и безопасные релизы
Недостатки
- Начальные затраты на внедрение
- Кривая обучения
- Возможное замедление без дисциплины
- Управление по метрикам может исказить поведение
Типичные контрольные вопросы (с кратким ответом)
- Continuous Delivery vs. Continuous Deployment? Delivery: всегда технически готово, ручная публикация. Deployment: автоматически при зелёных criteria.
- Что входит в чеклист review? Соответствие архитектуре, проверка безопасности, обработка ошибок, тесты, наименование, сложность, логирование, документация.
- Как подготовить аудит? Определить область, собрать доказательства, подготовить policies и ADRs, провести выборку, составить план действий.
- Роль статического анализа кода? Автоматизирует выявление стилистических, структурных и security нарушений, устанавливает quality gate.
- Как измерить эффективность тестирования? Mutation score, flaky rate, обнаружение дефектов до релиза, покрытие как тренд.
Основные источники
- https://martinfowler.com/articles/continuousIntegration.html
- https://testing.googleblog.com
- https://owasp.org
Типичные вопросы на экзамене по контролю качества
1. В чём различие между Continuous Delivery и Continuous Deployment?
Ответ: Continuous Delivery означает, что ПО всегда готово технически к использованию в продакшене, но требует ручного разрешения на выпуск. Continuous Deployment идёт дальше и полностью автоматизирует весь процесс до запуска в продакшене при выполнении всех критериев качества. Delivery: “готово к развёртыванию”, Deployment: “автоматически в работе”.
2. Какие компоненты должны входить в чек-лист проверки кода?
Ответ: Полный чек-лист проверки должен содержать: соответствие архитектуре (принятые решения, паттерны), проверку безопасности (валидация входных данных, аутентификация), обработку ошибок (Exception Handling, логирование), покрытие тестами (модульные тесты, интеграционные тесты), соглашения об именовании, сложность кода (Cyclomatic Complexity), производительность и документацию (комментарии, API-документация).
3. Как подготовить аудит обеспечения качества?
Ответ: Подготовка аудита включает: определение области (процессы, системы, временные периоды), сбор доказательств (документация, результаты тестов, логи), предоставление политик и ADR, создание плана выборки, обучение сотрудников, разработка плана корректирующих действий для найденных недостатков и обеспечение аудит-тренила.
4. Какую роль играет статический анализ кода в обеспечении качества?
Ответ: Статический анализ служит для автоматического обнаружения стилистических, структурных и связанных с безопасностью нарушений без выполнения кода. Он устанавливает критерии качества, отслеживает технический долг, проверяет правила соответствия и предоставляет метрики, такие как Cyclomatic Complexity. Инструменты вроде SonarQube интегрируются в CI/CD-конвейеры и предотвращают интеграцию кода низкого качества.
5. Как измерить эффективность тестов?
Ответ: Эффективность тестов измеряется несколькими метриками: Mutation Score (насколько хорошо тесты обнаруживают изменения в коде), Flaky Rate (стабильность тестов), обнаружение дефектов до релиза, покрытие кода как тренд (не как абсолютное число), время выполнения тестов и успешность регрессионных тестов. Высокая эффективность проявляется в раннем обнаружении ошибок и минимальном количестве дефектов в продакшене.
6. Что такое Quality Gates и как их реализовать?
Ответ: Quality Gates это автоматические точки принятия решений в CI/CD-конвейерах, которые разрешают или блокируют развитие на основе определённых критериев качества. Реализация происходит через пороги метрик (Coverage < 80% = блокировка), проверки безопасности, тесты производительности и статус проверки кода. Gates настраиваются в инструментах конвейеров вроде Jenkins, GitLab CI или GitHub Actions.
7. Объясните тестовую пирамиду и её значение.
Ответ: Тестовая пирамида описывает идеальное распределение видов тестов: модульные тесты (70%) быстрые, изолированные, количество большое; интеграционные тесты (20%) среднего размера, проверяют взаимодействие компонентов; сквозные тесты (10%) медленные, проверяют всю систему. Значение: быстрая обратная связь благодаря многим модульным тестам, экономичность через меньшее количество дорогих сквозных тестов, лучшая локализация ошибок и стабильный набор тестов.
8. Что такое мутационное тестирование и когда его применяют?
Ответ: Мутационное тестирование это техника для оценки качества тестов. В коде вносятся небольшие изменения (мутации) и проверяется, обнаруживают ли их тесты. Применяется в критичных системах, для оптимизации тестов и для критериев качества. Высокий Mutation Score (>80%) указывает на хорошее покрытие тестами. Инструменты вроде PIT (Java) или Stryker (JavaScript) автоматизируют этот процесс.
9. Какие преимущества даёт парное программирование для контроля качества?
Ответ: Парное программирование обеспечивает проверку в реальном времени (ошибки обнаруживаются сразу), обмен знаниями (опыт между членами команды), меньше дефектов (двое видят больше), лучшие архитектурные решения (обсуждение в команде) и постоянное обучение. Особенно ценно для сложных задач, введения новых сотрудников и критичных участков кода.
10. Как функционирует эффективный процесс отслеживания ошибок?
Ответ: Эффективный процесс отслеживания ошибок включает: структурированную запись (шаги воспроизведения, окружение, логи), приоритизацию по серьёзности и важности, назначение ответственным разработчикам, отслеживание статуса (Новая → В работе → Исправлена → Протестирована → Закрыта), связь с коммитами и релизами, анализ коренной причины и метрики вроде MTTR и плотности дефектов.
11. Что такое Definition of Ready (DoR) и Definition of Done (DoD)?
Ответ: Definition of Ready (DoR) определяет критерии, которые должна удовлетворять пользовательская история перед включением в спринт (ясные требования, критерии приёмки, технически выполнимо). Definition of Done (DoD) описывает критерии завершения задачи (проверка кода пройдена, тесты зелёные, документация обновлена, готово к развёртыванию). Оба служат механизмами обеспечения качества в агильном процессе.
12. Какие стратегии ветвления подходят для контроля качества?
Ответ: Git Flow (ветки feature, develop, release, master) для структурированных релизов с обширным тестированием. GitHub Flow (feature-ветка → master → развёртывание) для быстрых циклов развёртывания. Trunk-Based Development для экстремальной непрерывной интеграции с минимумом веток. Выбор зависит от частоты релизов, размера команды, требований соответствия и готовности к риску.
13. Как интегрировать безопасность в CI/CD-конвейеры?
Ответ: Интеграция безопасности происходит через: SAST (Static Application Security Testing) на этапе сборки, сканирование зависимостей для известных уязвимостей, DAST (Dynamic Application Security Testing) в staging, сканирование контейнеров, управление секретами, проверки соответствия и критерии безопасности. Инструменты вроде OWASP ZAP, SonarQube Security или Trivy интегрируются на разных этапах конвейера.
14. Что такое Feature Flags и как они помогают контролю качества?
Ответ: Feature Flags это переключатели конфигурации, включающие или отключающие функции во время выполнения. Они помогают контролю качества через постепенное включение (Canary-релизы), A/B-тестирование, быстрое отключение при проблемах, параллельную разработку и развёртывание с минимальным риском. Реализуются через конфиг-серверы, инструменты для работы с feature toggles или простые файлы конфигурации.
15. Объясните стратегии Canary и Blue-Green развёртывания.
Ответ: Canary-развёртывание постепенно выкатывает новую версию небольшим группам пользователей и отслеживает метрики. Blue-Green-развёртывание запускает две идентичные продакшн-среды, трафик полностью переключается на новую среду (Green). Обе стратегии снижают риск развёртывания, позволяют быстро откатиться и дают раннюю обратную связь. Выбор зависит от инфраструктуры и стратегии управления риском.
16. Какие метрики используются согласно DORA (DevOps Research and Assessment)?
Ответ: Метрики DORA включают: Deployment Frequency (как часто происходит развёртывание), Lead Time for Changes (время от коммита к развёртыванию), Mean Time To Recovery (MTTR) (время восстановления после сбоя) и Change Failure Rate (доля неудачных развёртываний). Высокие показатели демонстрируют частые развёртывания, короткое время внедрения, быстрое восстановление и низкий процент сбоев.
17. Что такое технический долг и как его управлять?
Ответ: Технический долг описывает будущие затраты на неоптимальные технические решения. Управление включает идентификацию (анализ кода, обратная связь команды), приоритизацию (влияние против затрат), отслеживание (Technical Debt Ratio, SonarQube), стратегию погашения (регулярные спринты рефакторинга) и профилактику (проверки кода, архитектурные решения). Цель: осознанные решения вместо неконтролируемого ухудшения.
18. Как тестировать нефункциональные требования?
Ответ: Нефункциональное тестирование включает: тесты производительности (нагрузка, стресс, скачки), тесты безопасности (пентесты, поиск уязвимостей), тесты удобства использования (пользовательский опыт, доступность), тесты доступности (высокая доступность, failover), тесты масштабируемости (горизонтальное/вертикальное масштабирование) и тесты соответствия (GDPR, ISO-стандарты). Эти тесты часто проводятся в специализированных окружениях с выделенными инструментами.
19. Что такое Architecture Decision Records (ADR) и почему они важны?
Ответ: ADR документируют важные архитектурные решения с контекстом, решением, обоснованием и последствиями. Они важны для отслеживаемости, передачи знаний, единообразия и адаптации новых членов. ADR версионируются, часто хранятся в Markdown и рассматриваются как часть документации проекта. Они поддерживают управление архитектурой и принятие решений.
20. Как разделяют тестовое и продакшн окружения?
Ответ: Разделение окружений происходит через физическое разделение (разные серверы/кластеры), логическое разделение (схемы БД, конфигурации), сетевое разделение (файрволы, VPN), разделение данных (анонимизированные тестовые данные) и контроль доступа (RBAC). Цель: защита продакшн-данных, стабильные тесты и параллельная разработка. Контейнерные технологии (Docker, Kubernetes) упрощают это разделение.
21. Что такое Contract Testing и когда его использовать?
Ответ: Contract Testing проверяет совместимость между микросервисами через определённые “контракты” (спецификации API). Применяется в архитектурах микросервисов для ускорения интеграционного тестирования, раннего обнаружения breaking changes и параллельной разработки. Инструменты вроде Pact или Spring Cloud Contract автоматизируют этот процесс и интегрируются в CI/CD-конвейеры.
22. Как обеспечить качество документации?
Ответ: Качество документации обеспечивается через версионирование (в репозитории), автоматизацию (генерация документации из кода), процессы проверки (рецензирование техническим редактором), шаблоны (стандартные структуры), связь с кодом (API-документация), регулярные обновления (как часть DoD) и обратную связь пользователей. Инструменты вроде Swagger/OpenAPI, Javadoc или MkDocs поддерживают этот процесс.
23. Что такое Smoke Tests и когда их запускают?
Ответ: Smoke Tests это простые тесты, проверяющие базовую функциональность приложения после развёртывания. Они запускаются после каждого развёртывания для раннего обнаружения критических ошибок. Типичные smoke тесты: функция входа, подключение к БД, API-endpoints, внешние сервисы. Они быстрые (несколько минут) и дают сигнал Go/No-Go для дальнейшего тестирования.
24. Как управлять тестовыми данными в CI/CD?
Ответ: Управление тестовыми данными включает Test-Data-Factorys (программное создание), контейнеризацию (Docker с тестовыми данными), миграции БД (Flyway, Liquibase), мокирование внешних зависимостей, очистку данных между тестами и версионирование тестовых данных. Цель: воспроизводимые тесты, производительность и изоляция тестовых окружений.
25. Подготовка к типичному вопросу на экзамене по КК.
Ответ: Вопрос: “Опишите полный процесс контроля качества для нового веб-проекта.” Структура ответа: 1. Профилактические меры (стандарты кодирования, руководства архитектуры), 2. CI/CD-конвейер (Сборка → Тестирование → Анализ → Развёртывание), 3. Проверки кода (чек-лист, принцип четырёх глаз), 4. Стратегия тестирования (модульные, интеграционные, сквозные тесты), 5. Критерии качества (метрики, безопасность), 6. Мониторинг (продакшн-метрики), 7. Постоянное совершенствование (ретроспективы, метрики). Такая структура демонстрирует систематический подход и знание контроля качества.



