קוד ללא בדיקות הוא קוד שאי אפשר לסמוך עליו. המספק קוד ללא בדיקות — כאילו מכר סחורה ללא אחריות.
אמרו חכמים: מי יודע שהקוד עובד? מי שכתב בדיקות — יודע. מי שלא כתב — מקווה. ויש הבדל גדול בין יודע למקווה, ובפרויקט גדול — ההבדל הזה הוא הבדל לילה.
מסכת בדיקות
6 הלכות
קוד ללא בדיקות הוא קוד שאי אפשר לסמוך עליו. המספק קוד ללא בדיקות — כאילו מכר סחורה ללא אחריות.
אמרו חכמים: מי יודע שהקוד עובד? מי שכתב בדיקות — יודע. מי שלא כתב — מקווה. ויש הבדל גדול בין יודע למקווה, ובפרויקט גדול — ההבדל הזה הוא הבדל לילה.
כל בדיקה בודקת דבר אחד בלבד. בדיקה הבודקת חמישה דברים — כשרה אינה, ובכישלונה לא תדע מה נשבר.
ודרשו חכמים: שם הבדיקה חייב להשלים את המשפט: "כאשר X קורה, אזי Y מתרחש." אם אינך יכול לכתוב משפט כזה — הבדיקה גדולה מדי.
שם הבדיקה חייב לתאר מה היא בודקת — לא איך. "test1", "shouldWork", "checkThis" — פסולים ומביישים.
הנוסח הכשר: "מחזיר שגיאה כאשר המשתמש אינו מחובר", "מעדכן את הסכום לאחר הוספת פריט". שכן בכישלון הבדיקה — שמה הוא הדבר הראשון שתקרא.
אסור לדלג על בדיקה כושלת. it.skip ו-xit — אסורים אלא לשעת הדחק, ואף אז יש לתעד מדוע ולתקן בהקדם.
בדיקה כושלת שדולגה עליה — היא ידע אבוד. היא אומרת: "כאן יש בעיה" — ואתה אומר לה: "לא רוצה לדעת." ויהי יום ותפרוץ הבעיה בייצור, ולא תהיה בדיקה שתזהיר.
coverage גבוה אינו הוכחה לבדיקות טובות. אפשר לכסות 100% ולבדוק כלום. שאל: מה הבדיקה מוכיחה, לא כמה שורות היא גוללת.
ומעשה היה בצוות שגאה ב-100% coverage — ויהי הבאג, וישאלו: "איך? יש לנו coverage מלא!" וידעו כי coverage מודד כמות, לא איכות.
הבדיקות הן תיעוד חי של הקוד. מי שרוצה להבין מה פונקציה עושה — יקרא את הבדיקות שלה.
שכן README מתיישן, הערות נרקבות, אך בדיקה כושלת — זועקת. הוי אומר: כתוב בדיקות שמסבירות כוונה, לא רק כאלה שעוברות.