סיפור אזהרה של אוי: באג זה שברח
בשבוע שעבר שוחררה גירסה מעודכנת של שלי תוכן עניינים הבורא תוסף וורדפרס. אני גאה מאוד על קידוד שלי, מציאת תקלות ובדיקת היכולות. כל זה התמוטט בלילה אחד בודד.
לחתוך סיפור ארוך קצר, הגרסה החדשה חייבה פונקציה עוזר כדי להציג ערכים הפוסט. תפקיד עוזר נקרא רק פונקציה אחת, לכן אני נבחר לכלול את הפונקציה עוזר כילד של פונקציה. זה מנהג נפוץ בשפות רבות כמו אותו בקפידה כל חבילות פונקציות ועוזריהם בסמיכות. תפקיד ההורה אגב נקרא בכל פעם שהדף מוצג ומפסיקה באופן מיידי אם הדף אינו כולל את מפת האתר תג יוזם.
אישור. הזמן עובר. עכשיו זה 02:00. קוד עכשיו הוא מוכן לבדוק. אני יודע שתפקיד ההורה יוצא מיד אם זה לא מוצא את תג יוזם. זה עבד בעבר, והלכתי אפילו לא קרובים, אז זה צריך להמשיך לעבוד. נכון? אני בודק את דף מפת האתר, לנסות את כל האפשרויות חדשים וישנים, כדי להוכיח כי הקוד עובד כמתוכנן. מהר מאוד לסנכרן את מאגר SVN ו למהר למיטה כדי לישון קצת לפני שהשמש עולה.
למחרת בבוקר אני מחליט לבדוק את אתר גדול אני יודע שמשתמש התוסף שלי. אין תחליף לבדיקה העולם האמיתי. כן, הכל נראה טוב. בשלב זה שמתי לב שלאחר במפת אתר זה נראה מעניין. לחצתי על הקישור בקטגוריה והוצג עם ההודעה הראשונה בקטגוריה ולאחר מכן טעות גדולה מגעיל הודעה PHP. מממ. הסתכלתי באתר אחר גדול. מממ. אולי צירוף מקרים. מאפשר להסתכל על עוד אחד. הו, לא!
אז מה השתבש? זכור כי תפקוד הילד? שמעתי אותו אומר שילדים יכולים להיות רע והתברר שזה נכון במקרה זה. אם דף בלוג, דף קטגוריה, דף תג או אפילו דף בית הוצגה, הודעות מרובות מוצגות בדף אחד. וורדפרס עושה זאת על ידי העמדת פנים כי כל הודעה היא מיני עמודים ומקשר כל מיני דפים יחד כדי ליצור דף אחד גדול. משמעות הדבר היא כי תפקוד ההורים שלי נקרא מספר פעמים. בדרך כלל לא בעיה. אבל עכשיו כפונקציה מכיל פונקציות הילד, פונקציות אלה ילדים נוצרים בכל פעם פונקציה הורה נקרא (גם אם הם לא בשימוש). לכן, כאשר לאחר מכן הודעה 2 מוצג, בדף מתרסק עם הודעה הפונקציה כפול שם שגיאה. התוצאה הנטו היה באג קטן בתפקוד קשור לכאורה שנגרם אתרים גדולים מאוד כמה לרדת.
המורל של הסיפור: אם אתה מנהל אתר, ודא שאתה מפעיל את החבילה המלאה של בדיקות לאחר כל עדכון תוסף, לא משנה כמה גדול או קטן כי התוסף עשוי להיות.



















