Проблема покрытия

У вас 150 требований и 500 тест-кейсов. Как узнать, что каждое требование покрыто хотя бы одним тестом? Как узнать, что нет «осиротевших» тест-кейсов, тестирующих функции, которых больше не существует? Когда требование меняется, какие тест-кейсы нужно обновить?

Без систематического способа связать требования с тестами на эти вопросы практически невозможно ответить. Матрица трассировки требований (RTM) и есть эта систематическая связь.

Что такое матрица трассировки требований?

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

graph LR A[Бизнес-требование] --> B[Функциональное требование] B --> C[Тест-кейс] C --> D[Результат теста] D --> E[Дефект при неуспехе] E --> F[Верификация исправления]

Ключевая идея — двунаправленная трассировка: можно проследить вперёд от требований к тестам (все ли требования покрыты?) и назад от тестов к требованиям (каждый ли тест обоснован требованием?).

Типы трассировки

Прямая трассировка (Forward Traceability)

Связывает требования с тест-кейсами. Отвечает: «Каждое ли требование протестировано?»

ID требованияТребованиеID тест-кейсов
REQ-001Пользователь может войти по email и паролюTC-101, TC-102, TC-103
REQ-002Пользователь может сбросить пароль через emailTC-104, TC-105
REQ-003Сессия истекает после 30 мин неактивностиTC-106
REQ-004Пользователь может включить 2FAНет

Сразу видно, что REQ-004 не имеет тест-кейсов — это пробел в покрытии, который необходимо устранить.

Обратная трассировка (Backward Traceability)

Связывает тест-кейсы с требованиями. Отвечает: «Каждый ли тест обоснован?»

ID тест-кейсаТест-кейсID требования
TC-101Вход с валидными учётными даннымиREQ-001
TC-102Вход с неверным паролемREQ-001
TC-103Вход с пустыми полямиREQ-001
TC-104Запрос на сброс пароляREQ-002
TC-105Сброс пароля по просроченной ссылкеREQ-002
TC-106Таймаут сессии по неактивностиREQ-003
TC-107Вход со спецсимволами в имени пользователяНет

TC-107 не имеет привязанного требования — это может быть валидный тест граничного случая или тестирование чего-то за пределами скоупа. В любом случае, требуется ревью.

Двунаправленная трассировка

Объединяет оба направления в одной матрице. Это наиболее полная и наиболее часто используемая форма.

Структура полной RTM

Полная RTM обычно включает следующие колонки:

КолонкаОписаниеПример
ID требованияУникальный идентификаторREQ-001
Описание требованияЧто должна делать система«Пользователь может войти по email/паролю»
ПриоритетБизнес-приоритетВысокий
ID тест-кейсовСвязанные тест-кейсыTC-101, TC-102, TC-103
Статус тест-кейсаТекущий статус выполненияPass / Fail / Not Run
ID дефектовНайденные дефектыBUG-042
Статус дефектаТекущий статус дефектаOpen / Fixed / Verified
КомментарииДополнительный контекст«Требует ревью безопасности»

Пример: RTM корзины интернет-магазина

Вот реалистичный пример для функции корзины покупок:

ID ReqТребованиеПриоритетТест-кейсыСтатусДефекты
CART-01Добавить товар в корзинуВысокийTC-201, TC-202, TC-203Pass, Pass, Pass
CART-02Обновить количество товараВысокийTC-204, TC-205Pass, FailBUG-089
CART-03Удалить товар из корзиныСреднийTC-206Pass
CART-04Применить код купонаСреднийTC-207, TC-208, TC-209Pass, Pass, Not Run
CART-05Корзина сохраняется между сессиямиНизкийTC-210Not Run
CART-06Показать оценку стоимости доставкиСредний

Анализ:

  • CART-02 имеет проваленный тест-кейс с открытым дефектом — требует внимания
  • CART-04 имеет один ещё не выполненный тест-кейс
  • CART-05 вообще не протестирован
  • CART-06 не имеет тест-кейсов — это пробел в покрытии

Преимущества использования RTM

1. Выявление пробелов покрытия

Как показано выше, сканирование RTM мгновенно выявляет требования без тест-кейсов. Без RTM этот пробел мог бы остаться незамеченным до продакшна.

2. Анализ влияния

Когда требование меняется, RTM точно показывает, какие тест-кейсы затронуты. Без неё пришлось бы вручную просматривать сотни тест-кейсов.

Пример: Если CART-01 меняется с «добавить один товар» на «добавить один или несколько товаров», RTM показывает, что TC-201, TC-202 и TC-203 нуждаются в обновлении. Возможно, потребуется добавить новые тест-кейсы.

3. Отчётность о полноте тестирования

Менеджеры проекта и стейкхолдеры могут видеть с одного взгляда:

  • Какой процент требований имеет тест-кейсы (покрытие)
  • Какой процент тест-кейсов выполнен (прогресс)
  • Сколько требований имеет пройденные тесты (уверенность)

4. Регуляторное соответствие

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

5. Обнаружение расползания скоупа

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

Создание RTM: пошаговое руководство

Шаг 1: Собрать требования

Соберите все требования из спецификаций, user stories, критериев приёмки, регуляторных документов и любых других источников. Присвойте каждому уникальный ID.

Шаг 2: Разработать тест-кейсы

Напишите тест-кейсы, покрывающие каждое требование. Стремитесь к минимум одному позитивному и одному негативному тест-кейсу на требование.

Шаг 3: Связать требования с тест-кейсами

Создайте матрицу, связывающую каждое требование с его тест-кейсами. Здесь устанавливается прямая трассировка.

Шаг 4: Проверить обратную трассировку

Убедитесь, что каждый тест-кейс связан хотя бы с одним требованием. Исследуйте любые «осиротевшие» тест-кейсы.

Шаг 5: Выполнять и обновлять

По мере выполнения тестов обновляйте колонку статуса. Когда обнаруживаются дефекты, привязывайте их и к тест-кейсу, и к требованию.

Шаг 6: Регулярно пересматривать

Пересматривайте RTM на ключевых этапах: после разработки тестов, во время выполнения тестов и перед принятием решений о релизе.

Инструменты для создания RTM

ИнструментСложностьЛучше всего для
Электронные таблицы (Excel, Google Sheets)НизкаяНебольшие проекты, команды новые в RTM
Jira + Xray / ZephyrСредняяAgile-команды, использующие Jira
TestRailСредняяВыделенное управление тестами
Azure DevOps Test PlansСредняяКоманды в экосистеме Microsoft
HP ALM / Micro FocusВысокаяКрупные предприятия, регулируемые отрасли
Doors (IBM)ВысокаяСистемы критической безопасности

Для большинства команд в начале хорошо структурированная электронная таблица вполне подходит. Переходите на специализированный инструмент, когда проект вырастет за пределы 200-300 требований.

RTM в Agile-проектах

В Agile концепция RTM по-прежнему применима, но адаптируется к итеративной природе спринтов:

  • Требования = User Stories + критерии приёмки
  • Трассировка часто ведётся в инструментах вроде Jira (связывание stories с тест-кейсами)
  • Скоуп — на уровне спринта, а не всего проекта
  • Обновления происходят каждый спринт, а не на этапах проекта

Многие Agile-команды поддерживают лёгкое соответствие «story-тест» в рамках своей спринт-доски, достигая той же цели без накладных расходов формального документа RTM.

Распространённые ошибки с RTM

  1. Создать один раз и не обновлять — RTM — это живой документ. Устаревшие RTM создают ложную уверенность.
  2. Слишком детальная трассировка — Трассировка каждого подтребования к каждому подтесту создаёт накладные расходы на поддержку без пропорционального выигрыша.
  3. Нет обратной трассировки — Только прямая трассировка пропускает «осиротевшие» тест-кейсы.
  4. Игнорирование нефункциональных требований — Требования производительности, безопасности и доступности тоже нуждаются в трассировке.
  5. Неучастие разработчиков — Разработчики могут помочь определить требования, которым нужно больше покрытия тестами, исходя из сложности кода.

Упражнение: создайте RTM

Сценарий: Вы создаёте RTM для функции регистрации пользователя. Ниже приведены требования и тест-кейсы. Ваша задача — создать двунаправленную RTM и проанализировать её на наличие пробелов.

Требования:

IDТребование
REG-01Пользователь может зарегистрироваться с email, паролем и именем
REG-02Пароль должен быть не менее 8 символов с одной заглавной буквой и одной цифрой
REG-03Система отправляет email подтверждения после регистрации
REG-04Пользователь не может зарегистрироваться с существующим email
REG-05Пользователь может зарегистрироваться через Google OAuth
REG-06Условия использования должны быть приняты перед регистрацией

Тест-кейсы:

IDТест-кейс
TC-301Регистрация с валидным email, паролем и именем
TC-302Регистрация с паролем короче 8 символов
TC-303Регистрация с паролем без заглавной буквы
TC-304Регистрация с паролем без цифры
TC-305Регистрация с уже существующим email
TC-306Проверка получения email подтверждения
TC-307Регистрация через аккаунт Google
TC-308Регистрация без принятия условий
TC-309Регистрация с пустым полем имени
TC-310Регистрация с SQL-инъекцией в поле email

Задания:

  1. Создайте двунаправленную RTM (свяжите требования с тест-кейсами И тест-кейсы с требованиями)
  2. Выявите пробелы покрытия (требования без тестов)
  3. Выявите «осиротевшие» тест-кейсы (тесты без требований)
  4. Предложите дополнительные тест-кейсы для закрытия пробелов
Подсказка
  • Свяжите каждый тест-кейс с требованием, которое он проверяет. Некоторые тест-кейсы могут быть связаны с несколькими требованиями.
  • Ищите требования, у которых вообще нет тест-кейсов.
  • Ищите тест-кейсы, которые не привязаны ни к одному перечисленному требованию.
  • Подумайте, какие дополнительные сценарии могут потребоваться для каждого требования.
Решение

Двунаправленная RTM

ID ReqТребованиеID тест-кейсовПокрытие
REG-01Регистрация с email, паролем, именемTC-301, TC-309Покрыто
REG-02Требования к паролюTC-302, TC-303, TC-304Покрыто
REG-03Email подтвержденияTC-306Частично покрыто
REG-04Нельзя регистрироваться с существующим emailTC-305Покрыто
REG-05Регистрация через Google OAuthTC-307Частично покрыто
REG-06Принять условия перед регистрациейTC-308Покрыто

Обратная трассировка

ID TCТест-кейсID Req
TC-301Регистрация с валидными даннымиREG-01
TC-302Пароль слишком короткийREG-02
TC-303Пароль без заглавнойREG-02
TC-304Пароль без цифрыREG-02
TC-305Существующий emailREG-04
TC-306Email подтвержденияREG-03
TC-307Google OAuthREG-05
TC-308Условия не принятыREG-06
TC-309Пустое имяREG-01
TC-310SQL-инъекция в emailНет (осиротевший)

Анализ

Пробелы покрытия:

  • REG-03 имеет только один тест-кейс. Отсутствует: email подтверждения не получен, email содержит корректные данные регистрации, ссылка подтверждения работает.
  • REG-05 имеет только один тест-кейс. Отсутствует: ошибка Google OAuth, аккаунт Google без email, отменённый OAuth-флоу.

«Осиротевшие» тест-кейсы:

  • TC-310 (SQL-инъекция) не привязан ни к одному перечисленному требованию. Это на самом деле валидный тест безопасности — его следует привязать к неявному или явному требованию безопасности. Если такого требования нет, рекомендуется добавить (напр., REG-07: «Система должна санитизировать все поля ввода»).

Предложенные дополнительные тест-кейсы:

  • TC-311: Email подтверждения содержит корректное имя пользователя (REG-03)
  • TC-312: Ссылка подтверждения истекает через 24 часа (REG-03)
  • TC-313: Google OAuth отменён пользователем (REG-05)
  • TC-314: Google OAuth с аккаунтом без email (REG-05)
  • TC-315: Регистрация с паролем, удовлетворяющим всем критериям (REG-02, позитивный тест)
  • TC-316: Регистрация со спецсимволами в имени (REG-01)

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

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