Przejdź do głównej zawartości

Przepływy pracy oparte na zachowaniu

Funkcja checkoutu przechodzi każdy test jednostkowy i wciąż dostarcza nie to: kryteria akceptacji żyły w zgłoszeniu Jira, którego nikt nie podał agentowi, więc AI optymalizowało pod “testy są zielone” zamiast pod “użytkownik faktycznie może to kupić”. Behavior-Driven Development zamyka tę lukę, czyniąc wykonywalną specyfikację — scenariusze Gherkin — źródłem prawdy, pod które agent koduje.

Asystenci AI są niezwykle dobrymi partnerami w BDD, bo cała metodologia jest “najpierw język naturalny”. Ty definiujesz zachowanie w Given/When/Then, agent generuje definicje kroków i implementację, a runner BDD jest obiektywną bramką, która mówi wam obojgu, czy zachowanie jest prawdziwe.

  • Powtarzalną pętlę, która zamienia plik .feature w definicje kroków, implementację i przechodzący pakiet.
  • Gotowe prompty do generowania definicji kroków Cucumber.js, implementacji pod kontrakt i doprowadzenia pakietu do zieleni.
  • Ścieżki wykonania w trzech narzędziach (Cursor, Claude Code, Codex) do przekazania agentowi pliku .feature i uruchomienia runnera.
  • Tryby porażki, które po cichu pokonują BDD sterowane AI — agent edytujący specyfikację, by testy przeszły, niestabilne kroki asynchroniczne — i jak je odgrodzić.

Przepływ pracy BDD z asystentem AI podąża za jasnym, współpracującym cyklem, który zapewnia, że finalny produkt odpowiada pożądanemu doświadczeniu użytkownika.

1. Zdefiniuj zachowanie (Given/When/Then)

Zaczynasz od napisania specyfikacji funkcji używając składni Gherkin (Given, When, Then). Opisuje ona scenariusz użytkownika prostym językiem. Możesz nawet współpracować z AI, by udoskonalić te historie użytkowników.

2. Wygeneruj definicje kroków

Przekazujesz plik .feature do AI i prosisz o wygenerowanie odpowiadających mu plików definicji kroków dla twojego frameworka testowego (np. Cucumber, Behat, SpecFlow). Początkowo będą one puste lub zawierać kod zastępczy.

3. Zaimplementuj funkcję

Mając już kontrakt behawioralny, instruujesz AI, by napisało kod aplikacji niezbędny do spełnienia scenariuszy w pliku .feature.

4. Uruchom, zweryfikuj i refaktoryzuj

Na koniec AI uruchamia testy BDD. Analizuje wszelkie niepowodzenia i iteruje nad kodem aplikacji, aż wszystkie scenariusze przejdą pomyślnie. Tworzy to ciasną pętlę sprzężenia zwrotnego napędzaną bezpośrednio przez zachowanie widoczne dla użytkownika.


Przejdźmy przez prawdziwą regułę od początku do końca: “Dodaj do koszyka” ograniczone stanem magazynu dla witryny sklepowej w Next.js, testowane Cucumber.js + Playwright na działającej aplikacji. Ciekawe zachowanie to nie “przycisk działa” — to granica: nie możesz dodać więcej sztuk, niż jest na stanie. Ten edge case to dokładnie to, co ginie, gdy kryteria żyją w zgłoszeniu, a nie w specyfikacji.

Zakoduj regułę, łącznie ze ścieżką porażki, w features/cart.feature:

features/cart.feature
Feature: Stock-limited cart
As a shopper
I want the cart to respect available stock
So that I can't order items the warehouse doesn't have
Background:
Given the product "Super Widget" has 2 units in stock
Scenario: Adding within the stock limit
Given I am on the product page for "Super Widget"
When I add 2 of "Super Widget" to my cart
Then my cart should contain 2 "Super Widget"
Scenario: Blocked from exceeding the stock limit
Given I am on the product page for "Super Widget"
When I add 2 of "Super Widget" to my cart
And I try to add 1 more "Super Widget"
Then I should see "Only 2 in stock"
And my cart should contain 2 "Super Widget"

Drugi scenariusz to cały sens: to zachowanie, które testy jednostkowe zwykle pomijają i którego AI inaczej nigdy by nie wiedziało, że ma zbudować.

Przekaż agentowi plik .feature i poproś o typowane definicje kroków podpięte do Playwright. Sposób odwołania do pliku różni się per narzędzie — @-wzmianki to idiom Cursora, nie Claude Code czy Codeksa.

W trybie agenta wspomnij specyfikację przez @features/cart.feature, by była przypięta w kontekście, potem wklej prompt. Przejrzyj wygenerowane cart.steps.ts w widoku diffa przed akceptacją — inline’owy diff Cursora ułatwia wyłapanie kroku, który po cichu stubuje asercję.

Mając już wykonywalny kontrakt, każ agentowi zbudować implementację — store koszyka, strażnika stanu magazynu i inline’owy błąd — aż scenariusze będą mogły przejść.

Nazwanie stacku (store Zustand, typowany wynik, inline’owy komunikat) powstrzymuje agenta przed wymyślaniem globalnej szyny zdarzeń albo biblioteki toastów, której nie używasz. Bariera “nie modyfikuj specyfikacji ani nie osłabiaj asercji” to pojedyncza najważniejsza linijka w BDD-z-AI — patrz “Kiedy to się psuje” poniżej.

Teraz pozwól agentowi zamknąć pętlę na prawdziwym wyjściu. To tutaj trzy narzędzia naprawdę się rozchodzą: kto uruchamia komendę.

Tryb agenta może uruchomić npm run test:bdd w zintegrowanym terminalu i odczytać wyjście, ale przy długiej pętli red-to-green lepszy jest agent w tle: przekaż mu pakiet i pozwól iterować, gdy ty pracujesz dalej, potem przejrzyj końcowy diff.

BDD-z-AI zawodzi na konkretne, rozpoznawalne sposoby. Wypatruj tych.

  • Test-Driven Development — pętla red/green na poziomie jednostek, która łączy się z tymi scenariuszami na poziomie zachowania.
  • Testy end-to-end — wejdź głębiej w sterowanie Playwright agentem AI, w tym selektory i kontrolę niestabilności.
  • PRD → Plan → Todo — zamień specyfikację produktu w kryteria akceptacji, które kodują twoje pliki .feature.