תרגול איתור באגים: השערה, קלט ובדיקה

מאת ארז ברזאני · תרגול מקורי של GammaCyber

דוגמה קצרה שמלמדת לבודד תקלה במקום לשנות כמה שורות בבת אחת. הקוד ב־Python 3 והחוזה מפורשים, כך שאפשר להראות בדיוק מה נשבר ומה תיקן אותו.

החוזה והבאג

נדרשת פונקציה שמחזירה את הממוצע לרשימה שאינה ריקה, ומחזירה None לרשימה ריקה. המימוש השגוי הוא sum(xs)//len(xs). לקלט [1,2] הוא מחזיר 1 במקום 1.5, ולקלט ריק הוא מחלק באפס. שתי הדוגמאות מגלות שני פערים שונים: סוג החלוקה והיעדר טיפול בריק.

תיקון ממוקד

מתחילים ב־if not xs: return None, ואז return sum(xs)/len(xs). בודקים שוב [1,2], שמחזיר 1.5, רשימה ריקה שמחזירה None, ו־[0] שמחזירה 0.0. אין לטפל בבעיה באמצעות except רחב שמחזיר 0 לכל שגיאה: כך גם קלט לא תקין עלול להיראות כמו ממוצע תקין.

כיצד להציג את תהליך האבחון

רושמים ציפייה, תוצאה בפועל וקלט מינימלי משחזר. משנים גורם אחד, מריצים את הבדיקה שנכשלה ומוסיפים בדיקת רגרסיה סמוכה. לאחר התיקון שואלים אם החוזה מגדיר סוגי קלט אחרים; אם לא, מתעדים את הגבול במקום להרחיב את הקוד ללא צורך. קוד קריא ובדיקות קטנות מסייעים להסביר למה הפתרון נכון, לא רק למה השגיאה נעלמה.

הצעד הבא בלמידה

בחרו עיקרון אחד שעדיין לא ברור, חזרו לדוגמה ונסו להסביר אותה במילים שלכם.

לשיעור הקשור בקורסלמפת הקורס וחלוקת התוכן

המשאבים בעמוד הזה פתוחים. חלק משיעורי הקורס זמינים בתצוגה מקדימה, וגישה מלאה בתשלום.

להמשך תרגול

מקורות טכניים וגבולות התרגול

המקורות מסבירים טכנולוגיה. הם אינם אסמכתה למבנה מיון צבאי. התוכן כאן עצמאי; הנחיות הזימון האישי הן הקובעות. מצאתם שגיאה? כתבו לנו.