Sparround

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 .feature faylı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).

ŞəraitCucumber dəyər verir?Səbəb
Biznes analitik ssenariləri özü yazır və review edirBəliÜnsiyyət qazancı əlavə qatın xərcini ödəyir
Tənzimlənən sahə: tələb ↔ test izlənilməlidirBəliSsenarilər auditə uyğun sənəd rolunu oynayır
Yalnız QA komandası .feature fayllarına baxırXeyrBütün xərc, heç bir ünsiyyət qazancı
Texniki testlər: API müqaviləsi, error kodlarıXeyrGherkin texniki detalı ifadə etmək üçün əlverişsizdir
Kiçik komanda, sürətli iterasiyaAdətən xeyrƏlavə qat sürəti azaldır, oxucu isə yoxdur
Mürəkkəb biznes qaydaları, çoxlu variasiyaBə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