3 דברים שאף אחד לא אומר לכם על BDD
ערכת ה-Cucumber שלכם לוקחת ארבעים דקות להרצה. אתם לא יכולים להסביר מה קובץ feature אחד בודק בלי לקרוא שכבות של קוד.
צוותים רבים מאמצים BDD כי בעלי עניין עסקיים (stakeholders) צריכים לקרוא את הבדיקות. לאחר מכן, בעלי העניין הללו מפסיקים לקרוא. אתם מסיימים עם סיוט תחזוקה.
הנה שלוש אמיתות על BDD.
1. Gherkin היא לא שפת תכנות
תפסיקו לכתוב סקריפטים של בדיקות ב-Gherkin. אם ה-scenarios שלכם מפרטים כל קליק וכל שדה, אתם עושים זאת לא נכון.
Gherkin גרוע:
- Given שהמשתמש מזין אימייל "test@example.com"
- And שהמשתמש מזין סיסמה "Password123!"
- And שהמשתמש לוחץ על "Place Order"
Gherkin טוב:
- Given שלמשתמש יש פריטים מוכנים לרכישה
- When המשתמש משלם בכרטיס אשראי תקף
- Then ההזמנה מאושרת
ה-"איך" נמצא ב-step definitions שלכם. ה-"מה" נמצא ב-feature files שלכם. שמרו על ה-feature files פשוטים כדי שגם מנהל מוצר יוכל לקרוא אותם תוך שניות.
2. step definitions הם לא גרף תלויות (dependency graph)
אל תגרמו ל-step definitions לייבא step definitions אחרים. זה יוצר רשת מסועפת. אם שלב אחד נכשל, הוא "מרעיל" את ה-state כולו.
הפתרון פשוט:
- הפרידו את ה-page objects שלכם מה-step definitions.
- השתמשו בשכבת דומיין (domain layer) משותפת.
- step definitions צריכים להיות עטיפות דקות (thin wrappers) שקוראות לאובייקטי דומיין.
זה הופך את השלבים שלכם ל-stateless. אתם יכולים לשנות חלק אחד בקוד מבלי לשבור כל תרחיש אחר.
3. BDD הוא פרויקט תיעוד
BDD עוסק בתקשורת, לא רק בבדיקות. הבדיקות הן תוצר לוואי.
אם אתם מבצעים אופטימיזציה רק עבור כיסוי בדיקות או מהירות הרצה, אתם מאבדים את המטרה העיקרית. ה-feature files שלכם צריכים להיות הדבר הראשון שמהנדס חדש קורא כדי להבין את המערכת שלכם.
אם אדם לא יכול להבין את המערכת שלכם על ידי קריאת ה-feature files, ערכת ה-BDD שלכם נכשלה.
מה לעשות מחר:
- בחרו את ה-feature file הגרוע ביותר שלכם.
- כתבו מחדש את ה-scenarios כך שיהיו באורך של שלושה עד חמישה שורות.
- העבירו נתונים לתוך step definitions או factories.
- החליפו ייבוא של שלב-לשלב (step-to-step imports) באובייקטי דומיין.
האם אתם יכולים להסביר את המערכת שלכם לעובד חדש תוך חמש דקות באמצעות ה-feature files בלבד? אם לא, התחילו לכתוב מחדש.
קהילת למידה אופציונלית: https://t.me/GyaanSetuAi