הייזנבאג
בסלנג של תכנות מחשבים, הייזנבאג הוא באג שנדמה כאילו הוא נעלם או משנה את התנהגותו כאשר מנסים לחקור אותו.[1] המונח הוא משחק מילים על שמו של ורנר הייזנברג, הפיזיקאי שטען לראשונה את אפקט הצופה של מכניקת הקוונטים, הקובעת כי פעולת ההתבוננות במערכת משנה בהכרח את מצבה.
דוגמאות
הייזנבאגים מתרחשים מכיוון שלניסיונות נפוצים לנפות שגיאות בתוכנית, כגון הכנסת הצהרות פלט או הרצתה עם מנפה שגיאות, בדרך כלל יש תופעת לוואי של שינוי התנהגות התוכנית בדרכים לא בולטות, כגון שינוי כתובות הזיכרון של משתנים וזמן ההרצה.
דוגמה נפוצה להייזנבאג היא באג המופיע כאשר התכנית עוברת את תהליך ההידור עם מהדר המבצע אופטימיזציה, אך לא מופיע כאשר אותה התכנית עוברת הידור ללא אופטימיזציה (מה שלעיתים מתבצע במהלך הרצתה עם מנפה באגים). באופן דומה, הייזנבאגים עשויים להיגרם על ידי תופעות לוואי בביטויי בדיקה המשמשים בטענות נכונות בשפות כגון C ו-++C, שבהן ביטוי הבדיקה אינו מוערך כאשר טענות נכונות כבויות בקוד הייצור (Production) באמצעות המאקרו NDEBUG
.
סיבות נפוצות אחרות להייזנבאגים הן שימוש בערך של משתנה לא מאותחל (שעשוי לשנות את הכתובת או הערך ההתחלתי שלו במהלך ניפוי באגים), או בעקבות מצביע לא תקין (שעשוי להצביע על מקום שונה בזיכרון במהלך ניפוי באגים). מנפי באגים בדרך כלל מאפשרים שימוש בנקודות עצירה או מספקים ממשקים אחרים שגורמים לקוד נוסף לרוץ, וכתוצאה מכך עלולים לשנות את מצב התוכנית.[2]
זמן הוא גורם נוסף להייזנבאגים, במיוחד ביישומים מרובי תהליכונים. הרצת תוכנית דרך מנפה באגים יכולה לשנות את זמני ההרצה של התוכנית בהשוואה להרצה רגילה. באגים רגישים לזמן, כגון תנאי מרוץ, עשויים שלא להתרחש כאשר התוכנית מואטת על ידי מעבר בין שורה לשורה באופן ידני במנפה הבאגים.
ניתן לראות בהייזנבאגים כמופעים של אפקט הצופה בתחום המחשבים. מתכנתים מתוסכלים עשויים להאשים בהומור את ההייזנבאג על מופע הירח,[3] או (אם זה התרחש פעם אחת בלבד) עשויים להסביר זאת כשגיאה עקב חלקיקי אלפא או קרניים קוסמיות המשפיעות על החומרה.
מונחים קשורים
בוהרבאג, לעומת זאת, הוא "באג טוב ומוצק". כמו מודל האטום של בוהר, הוא אינו משנה את התנהגותו ומתגלה יחסית בקלות.[4][5]
מנדלבאג (על שם הפרקטל של קבוצת מנדלברוט) הוא באג שהדברים שמייצרים אותו הם כל כך מורכבים שהם גורמים להתנהגות שלו להיראות כאוטית ואפילו לא דטרמיניסטית.[6] מונח זה מתייחס גם לבאג שמציג התנהגות פרקטלית על ידי חשיפת באגים נוספים. ככל שהמתכנת נכנס עמוק יותר לתוך הקוד כדי לתקן אותו, כך הוא מוצא יותר באגים.[דרוש מקור]
שרדינבאג (על שם ארווין שרדינגר וניסוי המחשבה שלו) הוא באג שמופיע בתוכנה רק לאחר שהמתכנת שם לב שהקוד לא היה אמור לעבוד מלכתחילה.[7]
הינדנבאג[דרוש מקור] (על שם אסון הינדנבורג) הוא באג בעל השפעה קטסטרופלית.
קישורים חיצוניים
- סיפור על קסם
- OpenOffice לא ידפיס בימי שלישי, תקלה שלקח כמעט תשעה חודשים לפתור.
הערות שוליים
- ^ "The Jargon File: heisenbug".
- ^ "Java toString() override with initialization as a side effect" (אורכב 30.12.2014 בארכיון Wayback Machine)
- ^ CATB.org, "phase of the moon"
- ^ Goshgarian, Gary; Exploring Language, HarperCollins College Publishers, 1995
- ^ "Such transient software failures have been given the whimsical name 'Heisenbug' because they disappear when reexamined. By contrast, 'Bohrbugs' are good solid bugs." (IEEE Computer Group News, Volume 24, Numbers 7–12, 1991)
- ^ "The Jargon File: Mandelbug". Catb.org. נבדק ב-2013-09-05.
- ^ "The Jargon File: Schroedinbug". Catb.org. נבדק ב-2013-09-05.
הייזנבאג39926819Q54270