יחידה 5 / 12

איתור באגים ופתרון בעיות

רווחים:

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

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

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

מושגים: עקבות מחסנית: dump המראה אילו פונקציות נקראו באיזה סדר בזמן השגיאה. Minimal repro: הקוד/הקלט הפשוט והקצר ביותר שמפעיל את השגיאה. שורש הסיבה: המקור האמיתי לבעיה, לא הסימפטום. בדיקת רגרסיה: בדיקה שמבטיחה שאותה שגיאה לא תחזור על עצמה.

תיאור באג ל-AI

הסבירות שבינה מלאכותית תמצא את סיבת השורש עומדת ביחס ישר לאיכות המידע שאתה מספק. תיאור שגיאה טוב כולל: מה ניסית לעשות, למה ציפית, מה קרה, טקסט השגיאה המדויק ומעקב מחסנית, הקוד המעורב, הסביבה (שפה/גרסה/מערכת הפעלה), והמדגם הקטן ביותר שיצר את השגיאה.

  1. הבהירו את הסימפטום. בפורמט "X צפוי, Y ממומש".
  2. הדבק את טקסט השגיאה המלא ומעקב מחסנית. אל תקצר אותו, תצנזר אותו, אך אל תשבור את המבנה.
  3. תן את השעתוק הקטן ביותר. מינימום קלט וקוד שמפעילים את השגיאה.
  4. ציין את הסביבה. גרסת שפה, גרסת ספרייה, סביבת זמן ריצה.

הנחיה אפקטיבית של תיאור שגיאה: "אני מנפה באגים בבאג. מידע:- מה אני מנסה לעשות: [X]- התנהגות צפויה: [Y]- התנהגות בפועל: [Z]- הודעת שגיאה מלאה ומעקב מחסנית: [הדבק]- סביבה: [שפה/גרסה, ספריה/גרסה]- מינימום קוד מעורב: [קוד] אל תספר לי מה הסיכויים העיקריים של תיקון 3 ישיר ככל הנראה. סמן כדי לאמת עבור כל אחד."

צמצום הזרימה לפי השערה

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

הנחיה מסייעת לחיפוש בינארי (ביסקציה): "השגיאה הזו לא הייתה שם אתמול, היא שם היום. אני רוצה לברר איזה מ-20 השינויים האחרונים הביאו את השגיאה עם bisect. תן לי תוכנית שלב אחר שלב: לאיזו נקודה עלי לבדוק, לאיזה מחצית עלי ללכת בהתאם לתוצאה. תגיד לי גם בדיוק מה לבדוק בכל שלב".

הודעת אסטרטגיית הכנסת יומן: "אני לא יכול למצוא את השגיאה כי אני לא יכול לראות את ערכי הביניים בפונקציה הזו. אמור לי באילו נקודות אני צריך להוסיף שורות יומן שמדפיסות אילו משתנים. הוסף הסבר 'מה אלמד מהיומן הזה' עבור כל יומן. ציין גם את האזהרות שימנעו ממני לרשום נתונים סודיים."

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

הנחיה חלשה / הנחיה חזקה

WEAK:"הקוד שלי נותן שגיאה, תקן את זה: [200 שורות קוד]"(תוצאה: AI לא יודע איזו שגיאה זו, מה צפוי; הוא נותן הצעות כלליות על סמך ניחושים, רובם חסרי תועלת.)STRONG:"אני מקבל NullPointerException. צפוי: יש להחזיר רשימת משתמשים. בפועל: מתפוצץ בקריאה ל-getUsers:(7) מינימום. חזרה: זה קורה כאשר רשימת המשתמשים ריקה, אך לא כאשר היא מלאה.

ההנחיה החזקה מציבה את השגיאה בהקשר: במקרה זה היא מתרחשת (רשימה ריקה), ובמקרה זה היא לא מתרחשת (רשימה מלאה). הרמז היחיד הזה ("קורה כשהוא ריק") מצביע כמעט ישירות על הסיבה השורשית. מכיוון שמידע זה אינו זמין בהנחיה החלשה, AI עושה ניחוש עיוור.

אימות התיקון

תיקון הוא רק תיקון אמיתי אם הוא עושה שלושה דברים:

שליטה

שאלה

איך לאמת

האם השגיאה נעלמה?

האם אותו ערך עובד עכשיו?

הפעל שוב ריפרו מינימלי

אין שגיאות חדשות?

האם משהו אחר נשבר?

הפעל את כל חבילת הבדיקות

זה לא יחזור על עצמו?

האם אותה שגיאה תחזור שוב?

הוסף מבחן רגרסיה עבור תרחיש זה

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

מיני מארזים

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

מקרה 2 - כוח ריפרו מינימלי. מפתח לא יכול לתקן באג שאומר "הוא קורס מדי פעם". זה מפחית את השגיאה לקלט הקטן ביותר עם ההצעה של AI: הבעיה מתרחשת רק עם שמות קבצים המכילים תווים טורקיים (שגיאת קידוד). כאשר 300 קווים של אי ודאות מצטמצמים ל-5 שורות של תשובה מוחלטת, הפתרון הופך ברור.

מקרה 3 - מבחן נגד רגרסיה. AI מתקן שגיאת חישוב תאריך. המהנדס אינו מרוצה מכך; מוסיף מבחן רגרסיה לתרחיש השגוי (סוף חודש, 31 בינואר + חודש אחד). כאשר שינוי נוסף נוגע באותו אזור 4 חודשים לאחר מכן, הבדיקה הופכת לאדום והבאג נתפס לפני שהוא מגיע לייצור.

טעויות נפוצות

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

לסיכום

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

משימת יישום

שקול טעות אמיתית או מלאכותית. ראשית צמצם את השגיאה לשעתוק הקטן ביותר (באיזה קלט היא מתרחשת, שבה היא לא). באמצעות הנחית מתכון באג יעיל, בקש מה-AI 3 השערות שורש ושלב אימות עבור כל אחת מהן. מצא את סיבת השורש על ידי בדיקת ההשערות אחת אחת, תקן אותה, ולאחר מכן כתוב והרץ מבחן רגרסיה לתרחיש זה כדי להראות שהבאג נעלם והבדיקה מספקת הגנה.

רשימת בדיקה

  • [ ] הבהרתי את הסימפטום כ"צפוי לעומת מימוש".
  • [ ] נתתי את טקסט השגיאה המלא ומעקב מחסנית ל-AI.
  • [ ] הקטנתי את השגיאה לשעתוק הקטן ביותר.
  • [ ] על ידי בדיקת ההשערות אחת לאחת, מצאתי את שורש הסיבה.
  • [ ] במקום לדכא את הסימפטום, תיקנתי את הסיבה השורשית.
  • [ ] הוספתי והרצתי מבחן רגרסיה לאותה שגיאה.