Практикумы: веб-кейс и мобильный кейс с полными артефактами
Связь с предыдущими статьями курса
В прошлых статьях вы построили конвейер работы с ИИ:
Анализ требований: извлечение тестопригодных правил R, критериев приемки AC, вопросов и рисков.
Тест-дизайн: преобразование R и AC в тестовые условия и покрытия техниками (EP/BVA/Decision Table/State Transition).
Промпт-инжиниринг: фиксация контекста, источника правды и формата, а также валидация ответа.
Zephyr/Jira: перенос тестов в промышленное хранение и генерация CSV строго по экспортированному шаблону.Эта статья закрепляет весь конвейер на двух практикумах с полными артефактами:
Веб-кейс: фильтр каталога по цене.
Мобильный кейс: push-уведомления о статусе заказа.!Конвейер от требований до импорта в Zephyr
Общие правила выполнения практикумов
Дисциплина источника правды
В каждом практикуме действуют одинаковые правила:
ИИ не имеет права добавлять сущности (экраны, поля, статусы, интеграции), которых нет в исходном тексте.
Все утверждения должны иметь обоснование:
1. На этапе анализа требований это
Evidence (цитата из требований).
2. На этапе тестов это
Trace (ссылки на
R,
AC, при наличии на ключ Jira).
Если данных не хватает, это не заполняется «правдоподобным текстом», а фиксируется как Вопросы.Полезные справочники
Термины тестирования: ISTQB Glossary
Синтаксис Given/When/Then: Gherkin Reference
Документация по Zephyr Scale Cloud: Zephyr Scale Cloud documentationПрактикум: веб-кейс
Контекст
Фича: фильтр по цене в каталоге товаров веб-приложения.
Вход: плохие требования
Это типичный «сырой» текст, который нельзя тестировать без уточнений.
Пользователь может отфильтровать товары по цене.
Фильтр должен работать быстро.
Если пользователь ошибся, надо показать ошибку.
Всё должно обновляться без перезагрузки.Вход: уточнённые требования для практикума
Чтобы практикум был проверяемым, ниже зафиксирован
учебный набор правил.
Цена задаётся в рублях, целое число.
Два поля: min и max.
min и max могут быть пустыми по отдельности, но не могут быть оба пустыми.
Допустимый диапазон значений: от 0 до 1 000 000 включительно.
Если min > max, показываем сообщение "Минимальная цена не может быть больше максимальной", фильтр не применяется.
При применении фильтра список товаров обновляется без полной перезагрузки страницы.Промпт для ИИ: извлечение правил и проблем
Пример ожидаемого результата: правила R* с Evidence
| Rule ID | Правило | Evidence |
|---|---|---|
| R1 | Цена задаётся в рублях, целое число | «Цена задаётся в рублях, целое число.» |
| R2 | В фильтре есть поля
min и
max | «Два поля:
min и
max.» |
| R3 |
min и
max могут быть пустыми по отдельности, но не могут быть оба пустыми | «могут быть пустыми по отдельности, но не могут быть оба пустыми.» |
| R4 | Допустимый диапазон значений 0..1 000 000 включительно | «от 0 до 1 000 000 включительно.» |
| R5 | При
min > max показываем фиксированное сообщение и фильтр не применяется | «Если
min > max, показываем сообщение ... фильтр не применяется.» |
| R6 | При применении фильтра список обновляется без полной перезагрузки страницы | «обновляется без полной перезагрузки страницы.» |
Пример ожидаемого результата: проблемы требований, если использовать плохую версию
| Цитата | Тип проблемы | Вопрос | Влияние на тестирование |
|---|---|---|---|
| «работать быстро» | Неоднозначность | Как измеряем быстро: метрика (мс/сек), перцентиль, условия сети? | Нельзя определить pass/fail по производительности и UX |
| «показать ошибку» | Неполнота | Какой текст ошибки для каждого вида невалидного ввода? Где показываем: под полем или общая? | Невозможно написать проверяемый expected result |
Критерии приемки AC* (Given/When/Then)
Ниже
пример тестопригодного результата по уточнённым правилам.
| AC ID | Given | When | Then | Trace |
|---|---|---|---|---|
| AC1 | Открыт каталог, фильтр по цене доступен | Пользователь вводит min=0, max=1000 и применяет фильтр | Отображаются товары с ценой в диапазоне 0..1000; ошибок нет | R1,R2,R4 |
| AC2 | Открыт каталог, фильтр по цене доступен | Пользователь оставляет min пустым, вводит max=500 и применяет фильтр | Отображаются товары с ценой <=500; ошибок нет | R2,R3,R4 |
| AC3 | Открыт каталог, фильтр по цене доступен | Пользователь вводит min=1000, max=0 и применяет фильтр | Показано сообщение "Минимальная цена не может быть больше максимальной"; выдача не изменилась | R5 |
| AC4 | Открыт каталог, фильтр по цене доступен | Пользователь применяет фильтр с валидными значениями | Обновление выдачи происходит без полной перезагрузки страницы | R6 |
Реестр рисков
| Risk ID | Риск | Причина | Последствие | Направление тестирования |
|---|---|---|---|---|
| RK-WEB-01 | Неверная обработка пустых значений
min/max | R3 | Пользователь не сможет фильтровать по одной границе | EP по пустым/заполненным полям, негативные сценарии |
| RK-WEB-02 | Ошибка
min > max применяется как фильтр вместо блокировки | R5 | Пользователь получает пустую выдачу без объяснения | Негативный сценарий, проверка "не применяется" |
| RK-WEB-03 | Валидация границ диапазона реализована неверно | R4 | Дефекты на 0, 1 000 000, значения за границей | BVA на границах и около границ |
| RK-WEB-04 | Реализована полная перезагрузка страницы | R6 | Потеря состояния, ухудшение UX, проблемы SPA | Технический/UX чек: отсутствие полной навигации |
Тест-дизайн: тестовые условия TCND*
| TCND ID | Тестовое условие | Техника | Trace |
|---|---|---|---|
| TCND-WEB-01 | Применение фильтра при валидном диапазоне внутри границ | EP + BVA | R1,R2,R4,AC1 |
| TCND-WEB-02 | Применение фильтра при пустом
min или пустом
max | EP | R2,R3,AC2 |
| TCND-WEB-03 | Ошибка при
min > max, фильтр не применяется | Негативный сценарий + BVA | R5,AC3 |
| TCND-WEB-04 | Отклонение значений ниже 0 и выше 1 000 000 | BVA | R4 |
| TCND-WEB-05 | Обновление выдачи без полной перезагрузки страницы | Проверка технического эффекта | R6,AC4 |
Чек-лист smoke
| ID | Проверка | Ожидаемый результат | Trace |
|---|---|---|---|
| CL-WEB-01 |
min=0,
max=1000, применить фильтр | Выдача обновилась; ошибки нет | AC1 |
| CL-WEB-02 |
min пусто,
max=500, применить фильтр | Выдача обновилась; ошибки нет | AC2 |
| CL-WEB-03 |
min=1000,
max=0, применить фильтр | Показано сообщение
"Минимальная цена не может быть больше максимальной"; выдача не изменилась | AC3 |
| CL-WEB-04 | Применить валидный фильтр и убедиться, что нет полной перезагрузки | Нет полной перезагрузки страницы | AC4 |
Набор тест-кейсов для регресса
Чтобы expected result был наблюдаемым, фиксируем точки наблюдения:
Сообщение об ошибке.
Изменение выдачи (и проверка "не изменилась" через сравнение элементов до/после).
Отсутствие полной перезагрузки (например, отсутствует полная навигация, не сбрасывается состояние SPA).| ID | Название | Предусловия | Шаги | Ожидаемый результат | Trace | Теги |
|---|---|---|---|---|---|---|
| TC-WEB-01 | Применение диапазона 0..1000 | Открыт каталог | 1. Ввести min=0 2. Ввести max=1000 3. Нажать применить | 1. Отображаются товары с ценой 0..1000 2. Сообщений об ошибке нет | AC1 | regression;bva |
| TC-WEB-02 | Применение фильтра только по max | Открыт каталог | 1. Оставить min пустым 2. Ввести max=500 3. Нажать применить | 1. Отображаются товары с ценой <=500 2. Сообщений об ошибке нет | AC2 | regression |
| TC-WEB-03 | Ошибка при min > max, выдача не меняется | Открыт каталог; запомнить первые 3 товара в выдаче | 1. Ввести min=1000 2. Ввести max=0 3. Нажать применить | 1. Показано сообщение "Минимальная цена не может быть больше максимальной" 2. Первые 3 товара совпадают с запомненными | AC3 | regression;negative |
| TC-WEB-04 | Граница: min=-1 отклоняется | Открыт каталог | 1. Ввести min=-1 2. Ввести max=100 3. Нажать применить | Фильтр не применяется или поле подсвечено как невалидное; отсутствует изменение выдачи, если UI блокирует применение | R4 | regression;bva;negative |
| TC-WEB-05 | Граница: max=1000001 отклоняется | Открыт каталог | 1. Ввести min=0 2. Ввести max=1000001 3. Нажать применить | Фильтр не применяется или поле подсвечено как невалидное; отсутствует изменение выдачи, если UI блокирует применение | R4 | regression;bva;negative |
| TC-WEB-06 | Нет полной перезагрузки при применении валидного фильтра | Открыт каталог | 1. Ввести min=10 2. Ввести max=20 3. Нажать применить | Обновление выдачи прошло без полной перезагрузки страницы | AC4 | smoke;regression |
Пример ошибки ИИ и корректировка промптом
Типовая ошибка: ИИ добавил правило про валюту USD и дробные значения.
Неверный фрагмент ответа ИИ:
Почему это ошибка: в источнике правды указано рубли и целые числа.
Корректирующий промпт:
Подготовка CSV для импорта (учебный шаблон)
В реальной работе заголовки берутся из экспорта вашей Zephyr-инсталляции. Ниже
учебный шаблон в стиле Zephyr Scale.
Практикум: мобильный кейс
Контекст
Фича: push-уведомления о статусе заказа в мобильном приложении.
Вход: плохие требования
Приложение отправляет push о заказе.
Если пользователь разрешил, то приходит уведомление.
Если не разрешил, то как-то иначе.Вход: уточнённые требования для практикума
Ниже зафиксирован учебный набор правил.
Push отправляется при смене статуса заказа на "Передан в доставку" и "Доставлен".
Push отправляется только если одновременно выполнены условия:
1. пользователь авторизован;
2. уведомления включены в настройках приложения;
3. уведомления разрешены в настройках ОС.
Если push не может быть отправлен из-за любого условия из пункта 2, приложение создаёт запись в центре уведомлений приложения (in-app).
In-app запись должна содержать статус заказа текстом и время события.Промпт для ИИ: решение через таблицу решений
Таблица решений
Обозначения условий:
A авторизован.
B уведомления включены в приложении.
C уведомления разрешены в ОС.| Rule | A | B | C | Действие |
|---|---|---|---|---|
| DR-01 | Да | Да | Да | Отправить push |
| DR-02 | Нет | | | Создать in-app запись |
| DR-03 | Да | Нет | * | Создать in-app запись |
| DR-04 | Да | Да | Нет | Создать in-app запись |
Тестовые условия TCND*
| TCND ID | Условие | Техника | Trace |
|---|---|---|---|
| TCND-MOB-01 | Push приходит при статусе
Передан в доставку при выполнении A,B,C | Таблица решений | R1,R2,DR-01 |
| TCND-MOB-02 | Push приходит при статусе
Доставлен при выполнении A,B,C | Таблица решений | R1,R2,DR-01 |
| TCND-MOB-03 | In-app создаётся, если пользователь не авторизован | Таблица решений | R2,R3,DR-02 |
| TCND-MOB-04 | In-app создаётся, если уведомления выключены в приложении | Таблица решений | R2,R3,DR-03 |
| TCND-MOB-05 | In-app создаётся, если уведомления запрещены в ОС | Таблица решений | R2,R3,DR-04 |
| TCND-MOB-06 | In-app запись содержит статус и время | Проверка данных | R4 |
Критерии приемки AC* (Given/When/Then)
| AC ID | Given | When | Then | Trace |
|---|---|---|---|---|
| AC-M1 | Пользователь авторизован, уведомления включены в приложении и разрешены в ОС, есть заказ | Статус заказа меняется на
"Передан в доставку" | Приходит push-уведомление о статусе | R1,R2 |
| AC-M2 | Пользователь авторизован, уведомления включены в приложении и разрешены в ОС, есть заказ | Статус заказа меняется на
"Доставлен" | Приходит push-уведомление о статусе | R1,R2 |
| AC-M3 | Не выполнено хотя бы одно из условий A,B,C | Статус заказа меняется на
"Доставлен" или
"Передан в доставку" | Push не приходит, но появляется запись in-app | R1,R2,R3 |
| AC-M4 | Создана запись in-app | Пользователь открывает центр уведомлений приложения | Запись содержит текст статуса и время события | R4 |
Реестр рисков
| Risk ID | Риск | Причина | Последствие | Направление тестирования |
|---|---|---|---|---|
| RK-MOB-01 | Push приходит, когда условия A,B,C не выполнены | R2 | Нежелательные уведомления, жалобы пользователей | Таблица решений, негативные сценарии |
| RK-MOB-02 | In-app не создаётся при невозможности push | R3 | Потеря уведомлений о статусах, рост обращений | Таблица решений, проверка fallback |
| RK-MOB-03 | In-app запись не содержит время или статус | R4 | Пользователь не понимает актуальность события | Проверка данных отображения |
Чек-лист smoke
| ID | Проверка | Ожидаемый результат | Trace |
|---|---|---|---|
| CL-MOB-01 | A,B,C выполнены, статус
"Доставлен" | Push пришёл | AC-M2 |
| CL-MOB-02 | C запрещено в ОС, статус
"Доставлен" | Push не пришёл; in-app запись появилась | AC-M3 |
| CL-MOB-03 | Открыть центр уведомлений приложения | В записи есть статус и время | AC-M4 |
Набор тест-кейсов для регресса
| ID | Название | Предусловия | Шаги | Ожидаемый результат | Trace | Теги |
|---|---|---|---|---|---|---|
| TC-MOB-01 | Push при статусе
Передан в доставку при выполнении A,B,C | Пользователь авторизован; уведомления включены в приложении; уведомления разрешены в ОС; есть заказ | 1. Инициировать смену статуса на
"Передан в доставку" 2. Дождаться события | Push получен; текст уведомления соответствует статусу | AC-M1 | smoke;regression |
| TC-MOB-02 | Push при статусе
Доставлен при выполнении A,B,C | Пользователь авторизован; уведомления включены в приложении; уведомления разрешены в ОС; есть заказ | 1. Инициировать смену статуса на
"Доставлен" 2. Дождаться события | Push получен; текст уведомления соответствует статусу | AC-M2 | regression |
| TC-MOB-03 | In-app вместо push при запрещённых уведомлениях ОС | Пользователь авторизован; уведомления включены в приложении; уведомления запрещены в ОС; есть заказ | 1. Инициировать смену статуса на
"Доставлен" 2. Открыть центр уведомлений приложения | Push не получен; есть in-app запись со статусом
"Доставлен" | AC-M3 | regression;negative |
| TC-MOB-04 | In-app вместо push при выключенных уведомлениях в приложении | Пользователь авторизован; уведомления выключены в приложении; уведомления разрешены в ОС; есть заказ | 1. Инициировать смену статуса на
"Передан в доставку" 2. Открыть центр уведомлений приложения | Push не получен; есть in-app запись со статусом
"Передан в доставку" | AC-M3 | regression;negative |
| TC-MOB-05 | Формат in-app записи содержит статус и время | Есть созданная in-app запись | 1. Открыть центр уведомлений приложения 2. Открыть детали записи (если доступны) | Отображается текст статуса; отображается время события | AC-M4 | regression |
Пример ошибки ИИ и корректировка
Типовая ошибка: ИИ добавляет новый статус
"Отменён" и требует отправлять по нему push.
Корректирующий промпт:
Подготовка CSV для импорта (учебный шаблон)
Мини-проверка качества артефактов перед импортом в Zephyr
Перед генерацией CSV и импортом убедитесь, что выполняются критерии:
Трассируемость:
1. каждый тест связан с
R и/или
AC.
Проверяемость:
1. expected result не содержит формулировок
успешно/корректно без наблюдаемого признака.
Полнота по техникам:
1. веб-кейс включает BVA по диапазону.
2. мобильный кейс покрывает правила таблицы решений.
Формат импорта:
1. заголовки CSV соответствуют вашему экспортированному шаблону.
2. переносы строк внутри ячеек оформлены как
\n.
Итог
После выполнения двух практикумов у вас есть полный набор артефактов, который можно повторить на любой фиче:
Требования превращаются в R* и проблемы с Evidence.
R превращаются в AC (Given/When/Then) и риски.
AC превращаются в TCND с выбранными техниками.
TCND* превращаются в чек-лист и тест-кейсы с наблюдаемыми expected results.
Валидированные тест-кейсы перепаковываются в CSV для импорта в Zephyr по строгому шаблону.