BDD/Cucumber: nə vaxt dəyər verir, nə vaxt yox
BDD (Behaviour-Driven Development) əslində alət deyil, əməkdaşlıq praktikasıdır. Bu, mövzunun ən çox səhv başa düşülən hissəsidir və interview-da fərq yaradan yerdir.
BDD-nin mərkəzində three amigos söhbəti durur: biznes (nə lazımdır?), developer (necə qururuq?), QA (nə səhv gedə bilər?) — üçü birlikdə tələbi kod yazılmazdan əvvəl nümunələrlə müzakirə edir. Bu söhbətin dəyəri anlaşılmazlıqların erkən aşkarlanmasındadır: "kupon istifadə olunub" nə deməkdir — bir dəfə, yoxsa istifadəçi başına bir dəfə? Bu sual sprintin əvvəlində 2 dəqiqə, sonunda isə 2 gün dəyərindədir.
Gherkin (Given/When/Then) həmin söhbətin nəticəsini yazmaq üçün formatdır. Cucumber isə Gherkin-i icra olunan testə çevirən alətdir.
Burada kritik nüans var: BDD-ni Cucumber olmadan tətbiq etmək olar (three amigos söhbətlərini aparıb testləri adi kodda yazmaq — bu, praktikada çox işləyən yanaşmadır), və Cucumber-i BDD olmadan istifadə etmək olar (heç kimlə danışmadan, hazır kodun üstünə Gherkin qatı yazmaq — bu isə ən pis variantdır: bütün xərc, heç bir fayda).
Xərcini dürüst qiymətləndirək. Cucumber layihəyə əlavə bir abstraksiya qatı gətirir və bunun ödənilməli qiyməti var:
- İkiqat saxlanma — hər dəyişiklik həm
.featurefaylında, həm step definition-da - Step definition-ların idarə olunması — vaxt keçdikcə "I click the button" tipli 300 addım yığılır; hansının mövcud olduğunu tapmaq çətinləşir, təkrarlar yaranır
- Debugging çətinləşir — fail Gherkin sətrində görünür, səbəb isə step definition-ın dərinliyində; stack trace bir qat uzanır
- Refactoring çətinləşir — IDE-nin "rename" və "find usages" funksiyaları mətn sətirləri arasında zəif işləyir
- Yeni komanda üzvü iki şey öyrənməlidir: Playwright və Cucumber qatı
Bu xərc yalnız bir halda ödənir: Gherkin ssenarilərini qeyri-texniki iştirakçılar HƏQİQƏTƏN oxuyur, yazır və müzakirə edir. Əgər .feature fayllarına yalnız QA baxırsa, bu qat sadəcə əlavə yükdür — testləri adi TypeScript-də yazmaq daha oxunaqlı və daha sürətlidir.
Playwright-da Cucumber olmadan oxunaqlılıq: test.describe bloku feature-i, aydın test adı ssenarini, test.step() isə addımları verir. Nəticə demək olar ki, eyni dərəcədə oxunaqlıdır, amma bir qat az abstraksiya ilə. Cucumber lazım olduqda isə playwright-bdd paketi Gherkin-i Playwright test runner-inin üstündə işlədir — paralellik, fixture-lər və trace saxlanılır (klassik @cucumber/cucumber ilə bunların bir hissəsi itir).
| Şərait | Cucumber dəyər verir? | Səbəb |
|---|---|---|
| Biznes analitik ssenariləri özü yazır və review edir | Bəli | Ünsiyyət qazancı əlavə qatın xərcini ödəyir |
| Tənzimlənən sahə: tələb ↔ test izlənilməlidir | Bəli | Ssenarilər auditə uyğun sənəd rolunu oynayır |
| Yalnız QA komandası .feature fayllarına baxır | Xeyr | Bütün xərc, heç bir ünsiyyət qazancı |
| Texniki testlər: API müqaviləsi, error kodları | Xeyr | Gherkin texniki detalı ifadə etmək üçün əlverişsizdir |
| Kiçik komanda, sürətli iterasiya | Adətən xeyr | Əlavə qat sürəti azaldır, oxucu isə yoxdur |
| Mürəkkəb biznes qaydaları, çoxlu variasiya | Bəlkə | Scenario Outline cədvəlləri ilə qaydalar aydın görünür |
İnterview-da bu sual tələdir: "BDD haqqında nə düşünürsən?" Həm şövqlü "əladır, mütləq istifadə etmək lazımdır", həm də kəskin "vaxt itkisidir" cavabı zəifdir. Güclü cavab üç hissədən ibarətdir: (1) BDD alət deyil, əməkdaşlıq praktikasıdır — Cucumber onun yalnız bir realizasiyasıdır; (2) əsl dəyər three amigos söhbətindədir, Gherkin sintaksisində yox; (3) şərt: qeyri-texniki tərəf ssenariləri oxumursa, qat özünü doğrultmur. Bu üç cümlə mövzunu real başa düşdüyünü göstərir.
📚 Mənbələr və sənədlər
- Gherkin arayışırəsmicucumber.io
- playwright-bddgithub.com