С2 · Шпаргалка: PRD, вимоги, AC, UAT і тест-кейси

Промпти для PRD із сирого запиту і для кожного кроку завдання С2: проблеми у вимозі, уточнювальні питання, acceptance criteria, UAT-сценарії чи тест-кейси, перевірка покриття — і здача через merge request.

Перед початком

gitlab.com/koldovsky/ai-qa-ba-c2

Шаблон звіту в репозиторії: templates/c2-report.md

1. PRD: типи вимог, ID і трасування

Блок 01 заняття: від сирого запиту до PRD з типами вимог FR, NFR, TC, BC і стабільними ID. У звіті С2 окремого розділу для цього немає; як це виглядає на демо — розділ 1 сторінки «Демо».

Де / що: PRD із сирого запиту · BA · нова розмова · вставте запит від бізнесу (лист, нотатки зустрічі, повідомлення)

Роль: ти — бізнес-аналітик; готуєш PRD (Product Requirements Document) — документ, з якого розробка, QA і дизайн беруть вимоги до функції.

Вхідні дані: запит від бізнесу — нижче, між рядками ===. Працюй лише з ним.

Задача: склади PRD функції за форматом нижче.

Критерії приймання:
- кожна вимога має стабільний ID: FR-<ОБЛАСТЬ>-NN — функціональні, NFR-<ОБЛАСТЬ>-NN — нефункціональні, TC-<ОБЛАСТЬ>-NN — технічні обмеження, BC-<ОБЛАСТЬ>-NN — бізнес-обмеження; область — коротке слово латиницею (ADDR, PAY, UI…), NN — 01, 02…;
- одна вимога — одне твердження, яке можна перевірити; біля кожної — джерело: коротка цитата із запиту або позначка «припущення»;
- чисел, строків і правил, яких у запиті немає, не вигадуй — пиши «[питання до автора: …]»;
- NFR — лише з вимірюваним порогом; якщо порогу в запиті немає — «[поріг — питання до автора]»;
- суперечності в запиті не вирішуй сам: винеси їх у «Відкриті питання» з варіантами рішення.

Формат відповіді (Markdown):
1. Проблема і мета — з метрикою успіху, якщо вона є в запиті.
2. Користувачі.
3. Обсяг: у межах і поза межами.
4. Вимоги — чотири таблиці FR, NFR, TC, BC: «ID | Вимога | Джерело».
5. Припущення.
6. Відкриті питання — що спитати і в кого.

===
<вставте запит>
===

Очікуваний результат: PRD із шести розділів: вимоги з ID і джерелом, суперечності й прогалини — у «Відкритих питаннях». Далі — рев'ю: чи правильні типи і чи немає вигаданих чисел.

Якщо не працює

AI «вирішив» суперечність сам — наприклад, вибрав одну з двох цін? Допишіть: «Суперечність не вирішуй — винеси обидва варіанти у відкриті питання». Метрика успіху опинилася серед NFR? Це типова помилка — її ловить промпт «Рев'ю PRD».

Де / що: Спершу питання, потім PRD · BA · нова розмова · вставте запит

Роль: ти — бізнес-аналітик; готуєш PRD функції і не пишеш його, доки не з'ясуєш головне.

Вхідні дані: запит від бізнесу — нижче, між рядками ===. Працюй лише з ним і з моїми відповідями.

Задача: працюй у два кроки. Крок 1 — постав уточнювальні питання і зупинись: чекай моїх відповідей. Крок 2 — після моїх відповідей склади PRD.

Критерії приймання:
- не більше семи питань, найважливіші — першими;
- одне питання — одне рішення, з варіантами відповіді;
- питай лише про те, що змінить вимоги: суперечності в запиті, хто користувач, межі обсягу, числа, строки й пороги;
- до моїх відповідей PRD не пиши;
- у PRD кожна вимога має стабільний ID TYPE-AREA-NN: FR — функціональні, NFR — нефункціональні (лише з вимірюваним порогом; якщо порогу немає ні в запиті, ні в моїх відповідях — «[поріг — питання до автора]»), TC — технічні обмеження, BC — бізнес-обмеження;
- біля кожної вимоги — джерело: цитата із запиту або «відповідь на питання N»; на що я не відповів — лишається у «Відкритих питаннях»;
- чисел і правил, яких немає ні в запиті, ні в моїх відповідях, не вигадуй.

Формат відповіді: крок 1 — таблиця «№ | Питання | Чому це важливо | Варіанти відповіді»; крок 2 — PRD з розділами «Проблема і мета», «Користувачі», «Обсяг», «Вимоги» (таблиці FR, NFR, TC, BC: «ID | Вимога | Джерело»), «Припущення», «Відкриті питання».

===
<вставте запит>
===

Очікуваний результат: Спершу — до семи питань із варіантами відповіді; після ваших відповідей — PRD, де видно, яка вимога виникла з якої відповіді.

Якщо не працює

AI одразу пише PRD або питань більше семи? Нагадайте: «Лише крок 1: не більше семи питань — і чекай моїх відповідей». Відповідайте одним повідомленням, за номерами питань.

Де / що: Рев'ю PRD · QA і BA · нова розмова · вставте PRD і, якщо є, вихідний запит

Роль: ти — QA-інженер і бізнес-аналітик, які рецензують PRD, перш ніж із нього писатимуть вимоги до розробки й тести.

Вхідні дані: PRD і, якщо є, вихідний запит — нижче, між рядками ===.

Задача: знайди в PRD проблеми, які заважатимуть розробці й тестуванню.

Критерії приймання:
- вимоги, які не можна перевірити: слова без міри, кілька тверджень під одним ID;
- NFR без вимірюваного порогу;
- неправильний тип: метрика успіху чи бізнес-мета записана як NFR; правило поведінки системи записане як TC (TC — це стек, інтеграції, платформа, дані; правило поведінки — це FR);
- суперечності між вимогами, а також між PRD і запитом;
- обмеження, яких бракує: гроші, строки, ролі, межі дії функції;
- проблеми з ID: дублікати, ID без типу чи області, перенумеровані ID;
- прогалини обсягу: що не віднесено ні до «у межах», ні до «поза межами», і вимоги без джерела;
- для кожної проблеми — ID і коротка цитата; рішень не вигадуй — якщо його немає в запиті, це питання до автора.

Формат відповіді: таблиця «ID | Проблема | Тип | Що змінити | Питання».

===
<PRD>
===
<вихідний запит, якщо є>
===

Очікуваний результат: Таблиця проблем із ID вимог. Кожен рядок звірте з PRD і запитом: справжня це проблема чи вигадка AI.

Якщо не працює

AI переписав увесь PRD замість рев'ю? Допишіть: «Нічого не переписуй, лише таблиця проблем». Перевірка себе на демо-PRD (сторінка «Демо», розділ 1): у ньому дві вимоги з хибним типом — NFR-CALL-01 (метрика успіху, а не NFR) і TC-ADDR-01 (правило поведінки, а не технічне обмеження). Подивіться, чи рев'ю їх знайшло.

Де / що: Коди і трасування · QA і BA · вставте документ вимог і, якщо є, AC, тест-кейси чи UAT-сценарії

Роль: ти — аналітик, який відповідає за трасування вимог.

Вхідні дані: документ вимог (PRD, вимога чи сторі з AC) і, якщо є, AC, тест-кейси чи UAT-сценарії — нижче, між рядками ===.

Задача: 1) присвой стабільні ID вимогам документа; 2) прив'яжи AC, тест-кейси і UAT-сценарії до ID і покажи прогалини.

Критерії приймання:
- граматика ID — TYPE-AREA-NN: FR — функціональна, NFR — нефункціональна, TC — технічне обмеження, BC — бізнес-обмеження; AREA — коротке слово латиницею, NN — 01, 02…;
- наявні ID не змінюй і не перенумеровуй; нова вимога отримує наступний вільний номер у своїй області;
- одне твердження — один ID; якщо вимогу треба розділити, покажи, з якої вона виникла;
- ID тест-кейсів (TC-01, TC-02…) не змінюй: у тест-кейса немає області, у технічного обмеження — є (TC-STACK-01);
- кожен AC, тест-кейс і UAT-сценарій — з посиланням на один чи кілька ID; зв'язків, яких не видно з тексту, не вигадуй.

Формат відповіді: 1) таблиця «ID | Тип | Вимога | Було» (у «Було» — старий номер або «новий»); 2) таблиця «ID | AC | Тест-кейси | UAT-сценарії»; 3) три списки: «FR без тесту», «Тести без FR», «NFR без порогу».

===
<документ вимог>
===
<AC, тест-кейси чи UAT-сценарії, якщо є>
===

Очікуваний результат: Кожна вимога має ID, наявні ID — на місці; матриця «ID → AC → тести» і три списки прогалин.

Якщо не працює

AI перенумерував наявні ID підряд (FR-1, FR-2…) або «виправив» TC-07 на TC-TEST-07? Поверніть: «Наявні ID вимог і ID тест-кейсів не змінюй».

Де / що: Довідка · чотири типи вимог і граматика ID

FR  — функціональна: що система робить — дія, правило, реакція.
NFR — нефункціональна: наскільки добре — завжди з вимірюваним порогом.
TC  — технічне обмеження: стек, інтеграції, платформа, дані.
BC  — бізнес-обмеження: гроші, строки, політики, приватність.

ID = TYPE-AREA-NN:  FR-ADDR-03 · NFR-PERF-02 · TC-STACK-01 · BC-PAY-01
ID стабільний: не перенумеровується і не використовується повторно; зміну записують на місці — з датою і рішенням; відкинута вимога лишається зі статусом dropped.

TC-STACK-01 — технічне обмеження (є область).
TC-07 — тест-кейс (без області). Або команда домовляється про інший префікс для тест-кейсів.

Очікуваний результат: Кожна вимога має тип і ID, кожен NFR — поріг; AC, тест-кейси й UAT-сценарії посилаються на ID.

Якщо не працює

NFR це чи метрика успіху? Якщо число вимірює бізнес-результат (дзвінки, продажі), а не якість роботи системи, — це метрика успіху в розділі «Проблема і мета», а не NFR.

Що таке PRD

Product Requirements Document — документ вимог до продукту чи функції: проблема і мета, користувачі, обсяг (у межах і поза межами), вимоги з типами й ID, припущення, відкриті питання. З нього беруть вимоги розробка, QA і дизайн. PRD — ще не вимога для розробки: спершу автор закриває відкриті питання, і лише тоді з'являються сторі з acceptance criteria (у демо — requirement.md версії 1.0).

Приклад кодування з реального проєкту

Документ вимог з іншого проєкту тренера. FR-SEARCH-05 — якщо пошук міста нічого не знайшов, показати «Nothing found» просто на сторінці, без спливного повідомлення про помилку. NFR-PERF-02 — Lighthouse Performance ≥ 90 на продакшн-URL (mobile і desktop). TC-STACK-03 — лише API Open-Meteo (прогноз і геокодування), жодного іншого провайдера погоди. BC-PRIVACY-02 — геолокація лише після явної дії користувача, ніколи під час завантаження сторінки. Область у тій схемі необов'язкова, а в курсі ми її ставимо завжди — саме вона відрізняє технічне обмеження TC-STACK-01 від тест-кейса TC-07. ID ніколи не перенумеровуються; зміни записані на місці з датою і рішенням, а специфікації, тести й PR посилаються саме на ці ID.

Де це далі в курсі

С3 — ID вимог у задачах трекера. С4 — специфікація як контракт з OpenSpec: статус вимоги і контрольовані зміни propose → apply → archive. BA1 — декомпозиція епік → сторі з трасуванням до вихідного запиту. BA3 і QA-заняття — узгодженість пакета вимог.

2. Проблеми у вимозі і питання

Спершу — знайти, що у вимозі не так, і сформулювати питання. Лише потім переписувати AC.

Де / що: QA і BA · нова розмова · вставте повний текст requirement.md свого варіанту

Роль: ти — досвідчений бізнес-аналітик і тест-дизайнер, який рецензує вимогу перед тим, як її візьмуть у розробку.

Вхідні дані: вимога «<назва функції вашого варіанту>» — сторі й acceptance criteria — нижче, між рядками ===.

Задача: знайди проблеми у вимозі і сформулюй уточнювальні питання до автора.

Критерії приймання:
- для кожної проблеми — місце (AC1…AC7, сторі, нотатка), коротка цитата і тип: неоднозначність, неповнота, суперечність, порушення INVEST, неоднозначна межа;
- поясни, чому це заважає розробці чи тестуванню;
- не вигадуй правил, яких немає у вимозі; якщо чогось бракує — це питання, а не відповідь;
- щонайменше п'ять конкретних питань, на кожне можна відповісти одним рішенням.

Формат відповіді: таблиця «№ | Де | Цитата | Тип | Чому проблема», потім нумерований список «Уточнювальні питання».

===
<повний текст requirement.md>
===

Очікуваний результат: Таблиця проблем із посиланнями на AC і список питань. Далі — звірка з вимогою: що справжнє, що AI вигадав.

Якщо не працює

AI «виправляє» вимогу замість того, щоб знаходити проблеми? Допишіть: «Нічого не переписуй, лише знайди проблеми і постав питання».

П'ять типів проблем

Неоднозначність — слова без міри: «швидко», «зручно», «коректно». Неповнота — немає негативного чи межового випадку: а що, якщо…? Суперечність — два місця не можуть бути правдою одночасно. Порушення INVEST — сторі завелика, змішує дві функції або залежить від незробленого. Неоднозначна межа — «до», «понад», «за 24 години» без точки відліку й часового поясу.

Добре питання

Прив'язане до конкретного місця і має варіанти відповіді: «AC5: 24 години — до дати доставки чи до конкретного часу? Якщо до дати, то від 00:00 за Києвом?» Погане — «уточніть AC5».

3. Acceptance criteria

Переписуємо AC так, щоб кожен можна було перевірити: Given/When/Then або однозначне твердження.

Де / що: QA і BA · та сама розмова, після кроку 2

Роль: той самий аналітик.

Задача: перепиши acceptance criteria вимоги так, щоб кожен можна було перевірити.

Критерії приймання:
- формат Given / When / Then;
- без слів без міри («швидко», «зручно», «коректно») — або число, або окреме питання;
- щонайменше один негативний і один межовий критерій;
- де відповідь залежить від відкритого питання, познач «залежить від питання N» і не вигадуй рішення.

Формат відповіді: нумерований список AC1…ACn, під кожним — з якого старого AC чи питання він виник.

Очікуваний результат: AC, які можна перевірити, з позначками, що залежить від відкритих питань.

Якщо не працює

AI вписав числа, яких немає у вимозі (ліміти, строки)? Це вигадка — або поверніть як питання, або прямо позначте як припущення.

Given / When / Then

Given — стан до дії (статус посилки, роль, дані). When — одна дія користувача чи системи. Then — спостережуваний результат: текст на екрані, статус, сума, повідомлення. Один сценарій — один результат.

4. UAT-сценарії (BA) і тест-кейси (QA)

З AC — тестові артефакти. У кожного сценарію чи кейсу — посилання на AC.

Де / що: BA · після кроку 3

Роль: бізнес-аналітик, який готує приймальне тестування разом із власником продукту.

Задача: склади UAT-сценарії за acceptance criteria вище.

Критерії приймання:
- мовою користувача, без технічних кроків;
- кожен сценарій посилається на AC;
- щонайменше чотири сценарії, зокрема негативний і межовий;
- не додавай поведінки, якої немає в AC.

Формат відповіді: таблиця «№ | Сценарій | Передумови | Кроки | Очікуваний результат | AC».

Очікуваний результат: 4+ UAT-сценарії з посиланнями на AC.

Якщо не працює

Сценарії повторюють один одного? Попросіть: «Об'єднай сценарії, що перевіряють одне й те саме, і покажи, який AC ще без сценарію».

Де / що: QA · після кроку 3

Роль: досвідчений тест-дизайнер.

Задача: склади тест-кейси за acceptance criteria вище.

Критерії приймання:
- кожен кейс посилається на AC;
- позитивні, негативні й межові; для меж — значення на межі, під нею і над нею;
- кроки й очікуваний результат — конкретні, з тест-даними;
- щонайменше шість кейсів; не вигадуй поведінки, якої немає в AC — якщо бракує даних, познач «потребує відповіді на питання N».

Формат відповіді: таблиця «ID | Назва | Передумови | Кроки | Тест-дані | Очікуваний результат | Тип | AC».

Очікуваний результат: 6+ тест-кейсів із тест-даними й посиланнями на AC.

Якщо не працює

Очікуваний результат розмитий («система працює коректно»)? Попросіть переписати його як конкретне спостереження: текст, статус, сума.

Де / що: QA і BA · перевірка покриття

Побудуй матрицю покриття: рядки — AC, стовпці — сценарії чи тест-кейси вище. Познач AC без жодного сценарію, дублікати (два кейси перевіряють одне й те саме) і кейси, що не спираються на жоден AC.

Очікуваний результат: Таблиця AC × кейси з позначеними прогалинами й дублікатами — основа розділу 6 звіту.

Якщо не працює

Не вірте матриці на слово: перевірте два-три рядки самі за текстом кейсів.

UAT чи тест-кейс

UAT-сценарій відповідає на питання «чи отримав користувач те, що просив бізнес» і пишеться мовою користувача. Тест-кейс перевіряє конкретну поведінку системи з точними даними, включно з межами й помилками. Обидва мають посилатися на AC.

5. Перевірка згенерованого

Розділ 6 звіту: що ви змінили у відповіді AI і чому.

Де / що: Чек-лист перевірки перед здачею

[ ] кожна проблема — з місцем і цитатою з вимоги мого варіанту
[ ] у відповіді немає правил, чисел і строків, яких немає у вимозі
[ ] кожен AC перевірюваний і має хоча б один сценарій чи кейс
[ ] є негативні й межові сценарії
[ ] немає дублікатів
[ ] у звіті видно, що саме я виправив у відповіді AI

Очікуваний результат: Кожен пункт відмічено — або в розділі 6 пояснено, чому ні.

Якщо не працює

Найчастіша помилка С1 — перевірка переказує відповідь AI. Звіряйте з файлом вимоги, а не з відповіддю.

6. L2 і L3

Баг-репорт і суперечливі джерела — у файлах свого варіанту.

Де / що: BA · L2 · вставте bug-report.md і вимогу

Роль: бізнес-аналітик, який розбирає баг-репорт разом із QA.

Вхідні дані: вимога і баг-репорт — нижче, між рядками ===.

Задача: розбери баг-репорт мовою аналітика.

Критерії приймання:
- це дефект коду чи прогалина вимоги — з посиланням на конкретний AC або на те, що AC бракує;
- чого бракує в самому репорті, щоб його відтворити чи оцінити;
- чи не змішано в одному репорті кілька проблем;
- що змінити у вимозі: новий або уточнений AC.

Формат відповіді: розділи «Класифікація», «Зв'язок з вимогою», «Чого бракує в репорті», «Пропозиція до вимоги».

===
<вимога>
===
<bug-report.md>
===

Очікуваний результат: Класифікація, зв'язок з AC і конкретна пропозиція змінити вимогу.

Якщо не працює

AI одразу пише «це баг, виправте код»? Попросіть спершу звірити фактичну поведінку з текстом AC.

Де / що: QA і BA · L3 · вставте sources.md і вимогу

Роль: аналітик, який узгоджує вимоги з кількох джерел.

Задача: знайди суперечності між джерелами і вимогою та запропонуй узгоджене рішення.

Критерії приймання:
- кожна суперечність — з цитатами з обох джерел;
- рішення з обґрунтуванням: чому саме так і хто має його підтвердити;
- відкриті питання — окремо, з адресатом;
- не вигадуй позицій, яких немає в джерелах.

Формат відповіді: таблиця «Суперечність | Джерело А | Джерело Б | Рішення | Обґрунтування | Хто підтверджує», потім «Відкриті питання».

Очікуваний результат: Узгоджене рішення з обґрунтуванням; далі BA оновлює пакет вимог, QA — тестовий пакет.

Якщо не працює

Рішення «на користь усіх одразу»? Попросіть вибрати одне й пояснити ціну для інших сторін.

7. Здача — новий проєкт

Як у С1, але форк — з koldovsky/ai-qa-ba-c2, файл — submissions/ваш-username/c2.md.

Де / що: Крок 3 · New file → поле назви файлу

submissions/ваш-username/c2.md

Очікуваний результат: Саме submissions, без templates/ на початку, без пробілу в кінці.

Якщо не працює

Перед Commit changes перевірте повний шлях у полі назви.

Де / що: Крок 5 · форма merge request → Title

С2 · ваш-username · варіант NN

Очікуваний результат: Праворуч від стрілки — koldovsky/ai-qa-ba-c2 і main; у Changes — лише ваш файл.

Якщо не працює

У Changes є чужі файли? Форк зроблено з чужої копії — зробіть новий форк зі сторінки koldovsky/ai-qa-ba-c2.

Прізвище та ім'я і пошта

Поле «**Прізвище та ім'я:**» — точно як у шаблоні, з двома зірочками. Пошту в комітах приховайте: Edit profile → Commit email → Use a private email.