Великая путаница

В индустрии ПО термины «QA», «QC» и «тестирование» используются взаимозаменяемо настолько часто, что большинство людей перестали замечать разницу. В вакансиях пишут «QA Engineer», имея в виду «тестировщик». Отделы называются «QA», хотя занимаются только «QC». А «тестирование» используется как обобщающий термин для всего, что связано с качеством.

Эта путаница имеет значение. Понимание этих трёх концепций как отдельных, но взаимосвязанных дисциплин меняет то, как вы думаете о качестве — и в конечном счёте, как вы создаёте лучшее ПО.

Quality Assurance (QA): процесс

QA ориентировано на процессы. Оно фокусируется на предотвращении дефектов путём улучшения процессов, используемых при создании ПО. QA не проверяет продукт напрямую — оно проверяет и улучшает процессы, которые производят продукт.

Думайте о QA как об инспекторе фабрики, который не проверяет отдельные изделия, сходящие с конвейера, а аудитирует сам конвейер. Откалиброваны ли станки? Обучены ли работники? Поставляют ли материалы надёжные поставщики? Если процесс правильный — продукты будут правильными.

Активности QA

  • Определение стандартов разработки и руководств по кодированию
  • Установление процессов ревью (code review, ревью дизайна)
  • Внедрение CI/CD-пайплайнов
  • Создание и поддержка стратегий тестирования
  • Проведение аудитов процессов
  • Обучение членов команды лучшим практикам
  • Выбор и внедрение инструментов
  • Определение метрик и KPI качества
  • Установление рабочих процессов управления дефектами
  • Проведение анализа корневых причин для предотвращения рецидивов

QA проактивно

Фундаментальная характеристика QA — оно проактивно. Действует до того, как дефекты будут созданы. Когда QA вводит правило «все запросы к БД должны использовать параметризованные выражения», это предотвращает написание SQL-инъекций.

Quality Control (QC): продукт

QC ориентировано на продукт. Оно фокусируется на выявлении дефектов в реальном продукте. QC проверяет поставляемый результат — код, приложение, систему — чтобы определить, соответствует ли он стандартам качества.

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

Активности QC

  • Тестирование (все виды: функциональное, нагрузочное, security и т.д.)
  • Инспекции и walkthroughs кода
  • Ревью документации на точность
  • Валидация сборок и развёртываний
  • Мониторинг продакшена на предмет дефектов
  • Проверка соответствия стандартам
  • Ревью результатов тестирования и метрик

QC реактивно

Фундаментальная характеристика QC — оно реактивно. Действует после того, как продукт (или его часть) создан. QC находит уже существующие дефекты, а не предотвращает их внесение.

Тестирование: активность

Тестирование — это активность в рамках QC. Это процесс выполнения ПО для нахождения дефектов путём сравнения фактического поведения с ожидаемым. Тестирование — наиболее видимая и практическая часть экосистемы качества.

Активности тестирования

  • Написание и выполнение тест-кейсов
  • Исследовательское тестирование
  • Регрессионное тестирование
  • Нагрузочное тестирование
  • Тестирование безопасности
  • Юзабилити-тестирование
  • Создание баг-репортов

Тестирование — подмножество QC

Каждая активность тестирования — это активность QC, но не каждая активность QC — тестирование. Walkthrough кода — это QC (проверка продукта), но не тестирование (ПО не выполняется). Ревью документации — это QC, но не тестирование.

Как они связаны

graph TB QA[Quality Assurance
Ориентировано на процессы
Превентивное] --> QC[Quality Control
Ориентировано на продукт
Детективное] QC --> T[Тестирование
Ориентировано на активность
Основано на выполнении] QA -.->|Определяет процессы для| QC QA -.->|Создаёт стандарты для| T QC -.->|Включает| T T -.->|Обратная связь улучшает| QA style QA fill:#3b82f6,color:#fff style QC fill:#8b5cf6,color:#fff style T fill:#ec4899,color:#fff

Связь иерархическая, но циклическая:

  1. QA определяет процессы и стандарты
  2. QC оценивает продукт по этим стандартам
  3. Тестирование — наиболее распространённая техника QC
  4. Результаты тестирования и QC возвращаются в QA для улучшения процессов

Комплексное сравнение

АспектQuality AssuranceQuality ControlТестирование
ФокусПроцессПродуктВыполнение
ХарактерПревентивныйДетективныйДетективный
МасштабВся организацияКонкретные поставкиКонкретное ПО
ВремяДо и во время разработкиВо время и после разработкиВо время и после сборки
ЦельПредотвратить дефектыНайти дефектыНайти дефекты через выполнение
ПодходПроактивныйРеактивныйРеактивный
ОтветственностьВсе (под руководством QA)Команда QA/QCТестировщики
Пример«Все PR требуют 2 ревьюеров»Инспекция кода находит багВыполнение теста находит баг
РезультатСтандарты, процессы, руководстваОтчёты о дефектах, метрикиРезультаты тестов, баг-репорты

Один день в каждой роли

День в QA

Мария — QA Manager. Сегодня она:

  • Анализирует показатель утечки дефектов за прошлый квартал и определяет, что 60% багов в продакшене связаны с интеграцией API
  • Предлагает новый процесс: все изменения API должны включать контрактные тесты перед мёржем
  • Обновляет документ стратегии тестирования, добавляя контрактное тестирование API
  • Проводит ретроспективу по последнему инциденту в продакшене для выявления процессных пробелов
  • Обучает младших инженеров новому подходу к контрактному тестированию

Мария сегодня ничего не тестировала. Она улучшила процессы, которые предотвратят будущие дефекты.

День в QC

Дмитрий — аналитик QC. Сегодня он:

  • Ревьюит код новой платёжной функции, проверяя на соответствие стандартам
  • Инспектирует документацию API, чтобы убедиться, что она соответствует реальной реализации
  • Валидирует, что артефакты сборки правильно подписаны и версионированы
  • Ревьюит отчёт о покрытии тестами для выявления недотестированных областей
  • Проводит security-ревью потока аутентификации

Дмитрий проверил несколько продуктов и артефактов, но не выполнял ни одного теста.

День в тестировании

Наталья — Test Engineer. Сегодня она:

  • Выполняет 15 регрессионных тест-кейсов для потока оформления заказа
  • Проводит исследовательское тестирование новой функции поиска
  • Пишет три новых тест-кейса для потока сброса пароля
  • Запускает автоматизированный набор API-тестов и расследует два провала
  • Создаёт баг-репорты на найденные дефекты

Наталья весь день выполняла ПО и сравнивала фактическое поведение с ожидаемым. Это тестирование.

В реальных организациях

На практике, особенно в небольших компаниях, границы существенно размываются:

Маленькие стартапы (5-20 человек): Один человек часто выполняет все три роли. Определяет процессы тестирования (QA), ревьюит pull request-ы (QC), пишет и выполняет тесты (тестирование). Его должность обычно «QA Engineer».

Средние компании (50-200 человек): QA-команда занимается QC и тестированием. QA Manager или Lead отвечает за QA на уровне процессов. Разработчики участвуют в QA через code review и unit-тестирование.

Крупные корпорации (500+ человек): Выделенные QA-отделы определяют стандарты на уровне организации. Команды QC аудитируют проекты. Команды тестирования выполняют тесты. Специалисты по улучшению процессов фокусируются исключительно на методологии QA.

Упражнение: классифицируйте активности

Классифицируйте каждую активность как QA, QC или тестирование:

  1. Запуск нагрузочного теста с 10,000 виртуальных пользователей
  2. Введение правила, что все коммиты должны пройти линтинг перед мёржем
  3. Ревью документа требований на предмет двусмысленностей
  4. Выполнение тест-кейса, проверяющего цвет кнопки логина
  5. Установление процесса триажа багов с определениями серьёзности
  6. Инспекция развёрнутого билда для проверки правильного номера версии
  7. Настройка CI-пайплайна, запускающего unit-тесты на каждый коммит
  8. Проведение исследовательского тестирования новой мобильной функции
  9. Определение Definition of Done для user stories
  10. Ручное сравнение ответа API со спецификацией Swagger
ПодсказкаСпросите себя: это улучшает процесс (QA)? Проверяет артефакт продукта (QC)? Или выполняет ПО для поиска дефектов (тестирование)?
Решение
  1. Тестирование — Выполнение ПО под нагрузкой для нахождения дефектов производительности
  2. QA — Установление процессного правила для предотвращения дефектов
  3. QC — Проверка артефакта продукта (документа требований) на предмет дефектов
  4. Тестирование — Выполнение ПО и сравнение фактического поведения с ожидаемым
  5. QA — Определение процесса управления дефектами
  6. QC — Инспекция артефакта продукта (развёрнутого билда) без выполнения тестов
  7. QA — Настройка инфраструктуры, обеспечивающей автоматический запуск процессов качества
  8. Тестирование — Выполнение ПО для обнаружения дефектов через исследование
  9. QA — Определение процессного стандарта, направляющего качество разработки
  10. QC — Ревью артефакта продукта (ответа API) по спецификации, хотя может считаться тестированием, если API был активно вызван

Профессиональные советы

Совет 1: Ваша должность может звучать как «QA», но ваша работа может быть «тестированием». Это нормально. В большинстве организаций «QA Engineer» означает человека, который тестирует ПО. Но понимание полного спектра QA-QC-тестирование помогает расти за пределы выполнения тестов к улучшению процессов и стратегическому лидерству в качестве.

Совет 2: Инвестируйте в QA, чтобы снизить нагрузку на QC. Каждый час, потраченный на QA (предотвращение дефектов), экономит несколько часов QC и тестирования (поиск и исправление дефектов). Если ваша команда постоянно находит одну и ту же категорию багов — прекратите тестировать усерднее и начните улучшать процесс, который допускает эти баги.

Совет 3: Тестирование необходимо, но недостаточно. Нельзя «втестировать» качество в продукт. Если процесс разработки сломан, никакое количество тестирования не произведёт качественный продукт. Именно для этого существует QA — чтобы устранять корневую причину, а не только симптомы.

Ключевые выводы

  • QA ориентировано на процессы и превентивно — улучшает то, как создаётся ПО
  • QC ориентировано на продукт и детективно — оценивает то, что было создано
  • Тестирование — активность на основе выполнения в рамках QC — запускает ПО для нахождения дефектов
  • Тестирование — подмножество QC, которое работает под зонтиком QA
  • На практике один человек часто выполняет все три роли, особенно в небольших командах
  • Понимание этих различий помогает расти от исполнителя тестов к лидеру качества