Narzędzia
Portfolio Roadmapa Słownik Blog Portal dla BA
← Wszystkie artykuły
dokumentacja 2026-05-31

Kryteria akceptacji - jak je pisać zrozumiale dla zespołu

11 min czytania

Given-When-Then i inne formaty - praktyczny poradnik pisania AC.

kryteria akceptacji user stories testy wymagania

Na jednym z projektów historyjka brzmiała: „System ma obsługiwać płatności”. Tester zapytał, co znaczy „obsługiwać”. Deweloper zrobił płatność kartą. Klient na demie powiedział, że przecież chodziło o BLIK i przelew. Trzy tygodnie pracy, trzy różne wyobrażenia tego samego zdania. Nikt nie skłamał - po prostu zdanie „system ma obsługiwać płatności” jest puste. Nie da się go przejść testem. Nie da się go potwierdzić. To nie jest wymaganie, to życzenie.

Kryteria akceptacji są lekarstwem na tę chorobę. To zestaw warunków, które historyjka musi spełnić, żeby uznać ją za zrobioną - napisanych tak, że tester, deweloper i product owner czytają je i widzą dokładnie to samo. Dobre kryterium akceptacji jest jak zamknięte pytanie tak/nie: albo funkcja je spełnia, albo nie. Żadnego „raczej tak”, żadnego „zależy jak interpretować”. W tym artykule pokażę Ci, jak je pisać - głównie w formacie Given-When-Then - na spójnym przykładzie systemu rezerwacji wizyt fikcyjnej firmy MediFlow.

Czym są kryteria akceptacji i czym nie są

Kryteria akceptacji (ang. acceptance criteria, AC) opisują, kiedy historyjka jest gotowa - z perspektywy zachowania, nie implementacji. Definiują granice: co wchodzi w zakres, a co nie. Są kontraktem między tym, kto zamawia, a tym, kto buduje i testuje.

Czego AC nie są:

  • Nie są projektem technicznym. Nie piszesz w nich, że ma być endpoint REST czy tabela w bazie. Piszesz, co użytkownik ma zobaczyć i co się ma stać.
  • Nie są listą zadań. „Zrób frontend, zrób backend, napisz testy” to rozbicie pracy, nie kryterium akceptacji.
  • Nie są opisem historyjki. Historyjka mówi „kto, co, po co”. AC mówi „po czym poznamy, że to działa”.
Test, który stosuję od lat: jeśli nie potrafię z kryterium akceptacji napisać przypadku testowego, który da się jednoznacznie zaliczyć lub oblać - to nie jest kryterium akceptacji, tylko zdanie o dobrych intencjach.

Given-When-Then - format, który wymusza precyzję

Najpopularniejszy format AC pochodzi z BDD (Behavior-Driven Development) i ma trzy człony:

  • Given (zakładając) - kontekst, stan początkowy. Co jest prawdą, zanim cokolwiek się stanie.
  • When (kiedy) - akcja, wyzwalacz. Co robi użytkownik lub system.
  • Then (wtedy) - oczekiwany rezultat. Co ma być prawdą po akcji.

Możesz dokładać And do każdego członu, żeby nie upychać wszystkiego w jedno zdanie. Siła tego formatu polega na tym, że zmusza Cię do nazwania kontekstu (Given) - a właśnie pominięty kontekst jest źródłem większości nieporozumień.

Przykład: rezerwacja wizyty w MediFlow

Historyjka: „Jako pacjent chcę zarezerwować wizytę w wolnym terminie, aby nie dzwonić do rejestracji”. Słabe AC vs dobre AC:

ŹLE (życzenie, nie kryterium):

- Pacjent może zarezerwować wizytę.
- System pokazuje wolne terminy.
- Rezerwacja działa poprawnie.

DOBRZE (Given-When-Then):
Scenariusz: rezerwacja wolnego terminu
  Given pacjent jest zalogowany i wybrał lekarza
  And wybrany termin jest co najmniej 24h w przyszłości
  When pacjent kliknie ten termin
  Then termin zostaje zablokowany na 15 minut
  And pacjent widzi formularz finalizacji rezerwacji

Scenariusz: próba rezerwacji terminu zbyt bliskiego
  Given pacjent jest zalogowany
  When pacjent wybierze termin za mniej niż 24h
  Then system pokazuje komunikat "Rezerwacja możliwa min. 24h wcześniej"
  And termin nie zostaje zablokowany

Zauważ, że dobre AC opisują też ścieżkę negatywną - co się dzieje, gdy warunki nie są spełnione. Słaba wersja milczy o tym, a właśnie tam mieszka połowa bugów.

Dlaczego kontekst (Given) jest najważniejszy

Po latach widzę, że to człon „Given” odróżnia amatorskie AC od profesjonalnych. Większość nieporozumień nie bierze się z błędnej akcji czy złego rezultatu, tylko z niewypowiedzianego założenia o stanie początkowym. „Pacjent rezerwuje wizytę” - ale jaki pacjent? Zalogowany? Z aktywnym ubezpieczeniem? Z historią no-show? Każde z tych założeń zmienia zachowanie systemu, a jeśli nie nazwiesz go w „Given”, każdy domyśli się innego.

Ćwiczenie, które polecam: weź dowolne swoje kryterium i zapytaj „co musi być prawdą, żeby ta akcja w ogóle miała sens?”. Odpowiedzi to Twoje „Given”. Im więcej ich nazwiesz, tym mniej zostanie miejsca na domysły. Paradoksalnie dobre AC bywa dłuższe w sekcji kontekstu niż w sekcji rezultatu - i właśnie dlatego działa.

Inne formaty - kiedy Given-When-Then to za dużo

Given-When-Then jest świetny dla zachowań z wyraźnym wyzwalaczem i rezultatem. Ale nie wszystko jest scenariuszem. Dwa inne formaty, które warto mieć w arsenale:

Lista warunków (rule-based)

Gdy historyjka to zbiór reguł, a nie sekwencja, prostsza lista bywa czytelniejsza:

Historyjka: walidacja formularza rejestracji pacjenta
Kryteria akceptacji:

- Pole PESEL przyjmuje tylko 11 cyfr i przechodzi walidację sumy kontrolnej.
- E-mail musi mieć poprawny format, inaczej formularz się nie wysyła.
- Hasło ma min. 10 znaków, w tym cyfrę i znak specjalny.
- Bez akceptacji zgody RODO przycisk "Załóż konto" jest nieaktywny.

Tabela porównawcza formatów

FormatKiedy stosowaćMocna stronaSłaba strona
Given-When-ThenZachowania z akcją i rezultatemWymusza kontekst, łatwo zamienić w testy automatyczneRozwlekły przy prostych regułach
Lista warunkówZbiory reguł walidacji, ograniczeńZwięzły, szybki do czytaniaGubi kontekst i ścieżki negatywne
Tabela decyzyjnaWiele kombinacji warunków → różne wynikiPokazuje wszystkie przypadki narazTrudniejszy w utrzymaniu przy zmianach

Moja zasada: domyślnie Given-When-Then, lista warunków dla walidacji, tabela decyzyjna gdy mam więcej niż trzy warunki mnożące się w kombinacje (np. typ pacjenta × rodzaj wizyty × ubezpieczenie → różne ceny).

Cechy dobrego kryterium akceptacji

Niezależnie od formatu, dobre AC ma kilka cech, które warto sprawdzać jak listę kontrolną przed dodaniem historyjki do sprintu:

  • Testowalne. Da się jednoznacznie powiedzieć „spełnione / niespełnione”. To pierwsze i najważniejsze sito.
  • Jednoznaczne. Dwie różne osoby przeczytają je i zrozumieją tak samo. Słowa typu „szybko”, „intuicyjnie”, „odpowiednio” są zakazane bez liczby.
  • Skupione na „co”, nie „jak”. Opisują zachowanie i rezultat, nie technologię ani implementację.
  • Niezależne od innych historyjek. Kryterium nie odsyła do trzech innych ticketów, żeby je zrozumieć.
  • Kompletne dla danej historyjki. Pokrywają ścieżkę pozytywną, negatywną i istotne wartości brzegowe.
Mam prywatną zasadę „czerwonego ołówka”: czytam AC i podkreślam każde słowo, które da się zinterpretować na dwa sposoby. „System reaguje szybko” - podkreślam „szybko”. „Pacjent dostaje powiadomienie” - podkreślam „powiadomienie” (e-mail? SMS? push?). Każde podkreślenie to pytanie, które zada deweloper albo tester - lepiej, żeby zadał je teraz mnie, niż za tydzień na demie klientowi.

Wartości brzegowe - tam mieszkają bugi

Najwięcej defektów rodzi się na granicach. „Termin musi być co najmniej 24h w przyszłości” - a co dokładnie przy 24h? A przy 23 godzinach i 59 minutach? A przy dokładnie teraz + 24h co do sekundy? Dobre AC nazywa granice wprost:

ŹLE:

- Rezerwacja możliwa z wyprzedzeniem 24h.

DOBRZE (granica nazwana):

- Termin >= teraz + 24h  → rezerwacja dozwolona
- Termin < teraz + 24h   → rezerwacja zablokowana, komunikat
- Termin = dokładnie teraz + 24h → dozwolona (granica włączna)

To wygląda na pedanterię, dopóki nie zobaczysz, jak deweloper i tester kłócą się na demie o to, czy „24h” znaczy „włącznie czy nie”. Trzy linijki precyzji oszczędzają tę kłótnię i buga, który by z niej wynikł.

Częste błędy - i jak je naprawić

  • Kryterium nietestowalne. „System działa szybko” - jak szybko? Napraw: „Lista wolnych terminów ładuje się poniżej 2 sekund przy 500 terminach”.
  • Mieszanie zachowania z implementacją. „Zapisz rezerwację w tabeli reservations” - to nie sprawa AC. Napraw: „Po finalizacji pacjent widzi rezerwację na liście swoich wizyt”.
  • Tylko happy path. Opisujesz, co się dzieje gdy wszystko gra, a milczysz o błędach. Każde AC powinno mieć co najmniej jeden scenariusz negatywny.
  • Za szerokie AC. Jedno kryterium opisuje pół systemu. Jeśli scenariusz ma sześć „And” w „Then”, prawdopodobnie to dwie historyjki.
  • AC pisane po implementacji. Deweloper coś zrobił, a Ty dopisujesz kryteria pod to, co powstało. To odwrócenie ról - AC mają być umową PRZED pracą.
  • Brak wartości brzegowych. „Termin min. 24h” - a dokładnie 24h to za blisko czy w porządku? Zawsze nazwij granicę: „24h lub więcej = OK, mniej niż 24h = blokada”.

Tabela decyzyjna - gdy warunki się mnożą

Są historyjki, w których Given-When-Then puchnie do dziesięciu scenariuszy, bo wynik zależy od kombinacji kilku warunków. Wtedy czytelniejsza jest tabela decyzyjna. Przykład z MediFlow: cena wizyty zależy od typu pacjenta i rodzaju wizyty.

Typ pacjentaRodzaj wizytyUbezpieczenie NFZWynik
PierwszorazowyKonsultacjaTakBezpłatna, wymaga e-skierowania
PierwszorazowyKonsultacjaNiePełna cena prywatna
StałyKontrolnaTakBezpłatna, bez skierowania
StałyKontrolnaNieCena obniżona (rabat lojalnościowy)

Każdy wiersz tabeli to jeden testowalny przypadek. Tester dostaje gotową listę kombinacji do sprawdzenia, a Ty masz pewność, że nie zapomniałeś o żadnej. Tabela decyzyjna w trzech minutach pokazuje to, co w Given-When-Then zajęłoby stronę i tak by się rozjechało. Zasada: gdy masz więcej niż trzy warunki mnożące się w kombinacje, sięgaj po tabelę.

Three amigos - najlepsze AC powstają we trzech

Najgorsze kryteria akceptacji pisze analityk sam, w nocy, pod presją. Najlepsze powstają w rozmowie trzech perspektyw - to praktyka zwana three amigos:

  • Analityk / product owner - wnosi intencję: po co to robimy, jaka jest wartość.
  • Deweloper - wnosi wykonalność: „a co, jeśli baza zwróci pustkę?”, „to się gryzie z modułem płatności”.
  • Tester - wnosi przypadki brzegowe: „a co przy dokładnie 24h?”, „a gdy pacjent kliknie dwa razy?”.

Piętnaście minut takiej rozmowy przy doprecyzowaniu historyjki wyłapuje dziury, których jedna głowa nie zobaczy. Tester zada pytanie, którego analityk nie pomyślał. Deweloper wskaże ograniczenie techniczne, które zmienia kryterium. To nie spowalnia - to przyspiesza, bo te pytania i tak padną, tylko bez three amigos padają tydzień później, gdy poprawka kosztuje dziesięć razy więcej.

Mini-case MediFlow: od rozmowy do gotowych AC

Product owner MediFlow mówi na warsztacie: „Pacjent musi móc odwołać wizytę”. Brzmi prosto. Rozbijmy to na pytania, które analityk zadaje, zanim napisze AC:

  • Do kiedy można odwołać? (Odpowiedź: do 12h przed wizytą.)
  • Co się dzieje z terminem po odwołaniu? (Wraca do puli wolnych.)
  • Czy pacjent dostaje potwierdzenie? (Tak, e-mail.)
  • Co jeśli odwołuje za późno? (Komunikat: skontaktuj się z rejestracją telefonicznie.)

Cztery pytania zamieniają jedno zdanie w kompletny zestaw AC:

Scenariusz: odwołanie w terminie
  Given pacjent ma zarezerwowaną wizytę
  And do wizyty pozostało co najmniej 12h
  When pacjent kliknie "Odwołaj wizytę"
  Then wizyta dostaje status "odwołana"
  And termin wraca do puli wolnych terminów
  And pacjent dostaje e-mail z potwierdzeniem odwołania

Scenariusz: odwołanie za późno
  Given pacjent ma zarezerwowaną wizytę
  And do wizyty pozostało mniej niż 12h
  When pacjent otworzy szczegóły wizyty
  Then przycisk "Odwołaj wizytę" jest nieaktywny
  And widoczny jest komunikat z numerem telefonu do rejestracji

To są kryteria, z których tester napisze przypadki testowe bez jednego dodatkowego pytania, a deweloper wie, gdzie są granice. To cały sens tej roboty - usunąć przestrzeń na domysły.

Kryteria akceptacji a Definition of Done - nie myl ich

To dwa różne narzędzia, które juniorzy często zlewają w jedno. Kryteria akceptacji są specyficzne dla historyjki - opisują, co ta konkretna funkcja ma robić. Definition of Done (DoD) jest wspólne dla całego zespołu - opisuje, co znaczy „skończone” dla każdej historyjki, niezależnie od treści.

AspektKryteria akceptacjiDefinition of Done
ZakresJedna historyjkaKażda historyjka w zespole
TreśćCo ta funkcja ma robićStandardy jakości (testy, review, dokumentacja)
Przykład„Termin blokuje się na 15 minut”„Kod zmergowany, testy przechodzą, dokumentacja zaktualizowana”
Kto definiujeAnalityk / PO przy historyjceCały zespół, raz, dla wszystkich

Historyjka jest naprawdę gotowa, gdy spełnia jedno i drugie: swoje kryteria akceptacji (robi to, co miała) ORAZ Definition of Done (jest zrobiona porządnie). Pominięcie któregokolwiek to dziura - funkcja, która robi, co trzeba, ale bez testów, albo perfekcyjnie przetestowana funkcja, która robi nie to, o co chodziło. Jak zapisać oba progi, żeby zespół faktycznie z nich korzystał, pokazuję na przykładach w tekście o tym, czym są Definition of Done i Definition of Ready.

FAQ

Ile kryteriów akceptacji powinna mieć jedna historyjka?

Zwykle 3-7 scenariuszy. Jeśli masz więcej niż 8-10, to silny sygnał, że historyjka jest za duża i powinna zostać rozbita. Jeśli masz tylko jedno trywialne kryterium, być może to nie jest osobna historyjka, tylko fragment innej.

Kto pisze kryteria akceptacji - analityk czy product owner?

Najlepiej wspólnie. Product owner zna intencję i priorytet, analityk pilnuje precyzji i testowalności, tester podpowiada przypadki brzegowe. Praktyka „three amigos” (PO + dev + tester) na etapie doprecyzowania historyjki daje najlepsze AC, bo trzy głowy widzą trzy różne dziury.

Czy Given-When-Then trzeba pisać po angielsku?

Nie. Słowa najważniejsze pochodzą z angielskiego (bo z narzędzi BDD), ale treść scenariuszy pisz w języku, którym mówi zespół. Polskie „Zakładając / Kiedy / Wtedy” jest równie poprawne. Ważna jest struktura, nie język.

Czy kryteria akceptacji to to samo co przypadki testowe?

Nie, choć są blisko spokrewnione. AC mówią „po czym poznamy, że historyjka jest gotowa” i są umową przed pracą. Przypadki testowe to konkretne kroki testera plus dane wejściowe i oczekiwany wynik - często powstają WPROST z kryteriów akceptacji. Dobre AC sprawiają, że pisanie testów jest mechaniczne.

Podsumowanie i następny krok

Kryteria akceptacji to najtańsze ubezpieczenie projektu, jakie znam. Kilka zdań w formacie Given-When-Then przed startem pracy oszczędza dni nieporozumień i poprawek po demie. Klucz to testowalność: każde kryterium ma dać się jednoznacznie zaliczyć lub oblać, każde ma swoją ścieżkę negatywną, żadne nie wchodzi w implementację.

Kryteria akceptacji nie istnieją w próżni - żyją wewnątrz historyjek użytkownika i lądują w narzędziach zespołu. Jeśli jeszcze nie czujesz pewnie samych historyjek, zacznij od poradnika o pisaniu User Stories, a potem zobacz, jak osadzić kryteria akceptacji w Jirze i jak przekuć je w testy akceptacyjne UAT. A najlepiej po prostu przećwicz - w darmowym teście wiedzy BA sprawdzisz, czy odróżniasz dobre kryterium od życzenia.

Czytaj też

Newsletter Analify

Nowe artykuły, porady i materiały dla analityków - prosto na email.

Dołącz do społeczności analityków biznesowych

Rozwijaj kompetencje, ucz się od praktyków i buduj karierę w analizie biznesowej.

Dołącz do Analify
SK

Sebastian Koczyk

Analityk biznesowy, twórca Analify.pl

Dołącz do społeczności analityków biznesowych - szkolenia wideo, prelekcje na żywo i wsparcie ekspertów

Sprawdź Analify