פיתוח מונחה-בדיקות (Test-driven development ובקיצור TDD) היא מתודולוגיית פיתוח תוכנה שבה נכתבת בדיקת יחידה בטרם נכתב הקוד אותו היא בודקת.
הנדסת תוכנה |
---|
ערך זה שייך לקטגוריית הנדסת תוכנה |
פעילויות ושלבים |
דרישות • ניתוח • אפיון • ארכיטקטורה • עיצוב • תכנות • דיבוג • בדיקה • אימות • בנייה • פריסה • תפעול • תחזוקה |
מתודולוגיות |
זריזות • מפל המים • תכנת ותקן • Crystal Clear • Scrum • Unified Process • Extreme Programming • אינטגרציה רציפה • DevOps |
תחומים תומכים |
ניהול פרויקטים • ניהול תצורה • תיעוד • הבטחת איכות • Profiling |
כלים |
מהדר • מקשר • מפרש • IDE • ניהול גרסאות • אוטומציית בנייה |
בפיתוח בשיטה זו בדיקת היחידה נכתבת תמיד באמצעות חבילת תוכנה המיועדת להרצה אוטומטית של בדיקות היחידה (כגון JUnit). בדיקות יחידה לא הוגדרו לראשונה בשיטת פיתוח מונחה-בדיקות, אך בשיטה זו הן נתונות לקבוצת הנחיות מוגדרות היטב.
השיטה זכתה לתפוצה בעיקר כחלק ממתודולוגית Extreme Programming בתחילת שנות ה-2000, אך היא נמצאת בשימוש גם מחוץ להקשר זה. יש הרואים בה כשיטה לעיצוב תוכנה בהנדסת תוכנה.
דרישה מרכזית בפיתוח מונחה-בדיקות היא שימוש בחבילת תוכנה תשתיתית ליישום בדיקות יחידה. חבילה זו מורכבת מספריות המצטרפות לקוד הבדיקה ובדרך כלל גם מתוכניות המאפשרות את הרצת הבדיקות שנכתבו באופן אוטומטי. ספריות התוכנה של החבילה יכילו פרוצדורות לבדיקת טענות נכוֹנוּת בקוד הבדיקה (Assertions). כל עוד הפרוצדורות הללו מחזירות אמת, הבדיקה מסיימת בהצלחה וכאשר פרוצדורה כלשהי נכשלת, הבדיקה מסיימת בכישלון.
להלן השלבים במחזור הפיתוח של בדיקת יחידה בודדת כפי שהוצעו בספר "פיתוח מונחה-בדיקות על פי דוגמה" של קנט בק. המחזורים מיושמים עבור כל תכונה נדרשת ביישום, פעם אחר פעם עד לסיום מימוש התכונות. יש לשים לב שמספר השינויים הנוספים לקוד במעבר מאיטרציה אחת לשנייה צריך להיות קטן (עד עשרה צעדי עריכה).
בפיתוח מונחה בדיקות כל הוספת מאפיין חדש לתוכנית מתחילה בכתיבת מקרה בדיקה חדש. לצורך כתיבת מקרה הבדיקה החדש, על המפתח להבין היטב את המפרטים והדרישות הקשורים להוספת המאפיין. בניגוד לשיטה הסטנדרטית, באמצעות שלב ראשוני זה, המפתח ממקד את תשומת לבו להבנה עמוקה יותר של דרישות המאפיין ובכך מונע או מפחית כתיבת קוד שלא תואם לדרישות המבוקשות.
המפתח מריץ את כלל בדיקות היחידה שלו ומוודא שהבדיקה החדשה נכשלת מהסיבה הצפויה שהקוד המתאים עדיין לא מומש. שלב זה נועד כדי לוודא שהבדיקה החדשה אינה מצליחה בטעות.
בשלב זה המפתח כותב את הקוד הפונקציונלי שיגרום לבדיקה לעבור בהצלחה. ההנחיה למפתח היא לכתוב את הקוד הפשוט ביותר שיעבור את הבדיקה, ללא התחשבות בכתיבה יעילה או במצבים עתידיים נוספים שעשויים להתרחש.
המפתח מריץ את כל בדיקות היחידה שלו ומוודא שהבדיקה החדשה עוברת בהצלחה. כמו כן, עליו לוודא שהקוד החדש לא פגע בקוד קודם שנבדק על ידי בדיקות יחידה קודמות. באמצעות המבנה האחיד של הבדיקות והיכולת להריץ אותן באופן אוטומטי מתקבלת יכולת משמעותית של בדיקה לאחור בדומה לבדיקות נסיגה.
לאחר שהבדיקה עברה בהצלחה, מבצע המפתח ארגון מחדש של הקוד הנבדק (Refactoring) כדי לשפר את ארגונו ויעילותו, במיוחד בהיבט של ביטול כפילויות. לרשות המפתח עומדת בשלב זה היכולת לוודא בביטחון גבוה באמצעות בדיקות היחידה האוטומטיות שארגון הקוד אינו פוגע בפונקציונליות.
הרצת כלל בדיקות היחידה של המפתח או של היישום כולו מחייבת ברוב המקרים שימוש ברכיבי דמי (Mock objects). תפקיד רכיבים אלה הוא להחליף רכיבים אמיתיים שהקוד הנבדק תלוי בהם. ההחלפה מתאפשרת לרוב באמצעות שימוש בממשק משותף שהרכיב האמיתי ורכיב הדמי מממשים. לצורך מימוש רכיבי דמי נעזרים חבילות תוכנה ייעודיות.
באמצעות רכיבי דמי ניתן להשיג את המטרות הבאות בפיתוח מונחה-בדיקות:
פיתוח מונחה בדיקות התקבל בקרב קהילת המפתחים ברגשות מעורבים. שינוי התפיסה בכתיבת הקוד הנמצאת במהותה של השיטה גרמה לא אחת לחלק מקבוצות הפיתוח לזנוח אותה שכן הדבר הוביל לעיכובים וחסמים בפיתוח הדינמי של הקוד.
בשנים 2009–2010 בוצע מחקר מקיף על יעילות השיטה בקרב צוותי פיתוח בחברות IBM ו-Microsoft שהשתמשו בטכניקת ה-TDD. על פי תוצאות המחקר צוותים שעבדו בשיטת פיתוח זו דיווחו כי כמות התקלות בקוד ירדה בין 40 ל-90 אחוזים לעומת צוותים מקבילים שלא השתמשו בשיטה, אולם חשוב לציין כי זמן הפיתוח הראשוני לאחר אימוץ השיטה עלה בין 15 ל-35 אחוזים.
This article uses material from the Wikipedia עברית article פיתוח מונחה-בדיקות, which is released under the Creative Commons Attribution-ShareAlike 3.0 license ("CC BY-SA 3.0"); additional terms may apply (view authors). התוכן זמין לפי תנאי CC BY-SA 4.0 אלא אם כן נאמר אחרת. Images, videos and audio are available under their respective licenses.
®Wikipedia is a registered trademark of the Wiki Foundation, Inc. Wiki עברית (DUHOCTRUNGQUOC.VN) is an independent company and has no affiliation with Wiki Foundation.