אז למה במהלך ה training שלי למתנכתים חדשים בשפת C ושפת C++ אמרתי שכל if זה ארבעה באגים אפשריים (או יותר )?
if (condition_var)
{
do_something();
}
בדוגמא הזאת למשל ה condition_var יכול להיות לא נכון, שימוש בו כערך בוליאני יכול לזרוק חריגה, ה do_something יכול לזרוק חריגה או הוא עצמו יכול להיות שגויי.עכשיו זו היא דוגמא פשוטה, מה קורה למשל עם הביטויי הבא ?
if (condition_func(value))
{
do_something(other_value);
}
פה למשל ה condition_func עצמו יכול לזרוק חריגה, אבל גם המרת ה value לטיפוס המתאים לפונקציה יכול לייצר חריגות או שגיאות, וגם ערך החזרה שלו יכול לזרוק חריגה, אותו דבר עם ה other_value.הוספתם תנאי אחרת ? ברכותי ייצרתם עכשי וגם קושי בקריאות וגם עוד שני באגים, תנאי אחרת אם ? זה עוד שלושה או ארבע באגים נוספים אפשריים.
האם זה אומר שכל תנאי זה בעייה ? לא ! האם כל תנאי זה בעייה אפשרית ?כן! לכן צריך תמיד לבדוק ולעשות review לקוד שלכם.
אז מה עושים ? כאשר אפשר נמנעים מתנאים מכוננים, בהתאם לסביבה משתמשים בלוגיקת החזרה ערכי שגיאה ולא בחריגות (ומשתמשים בחריגות כאשר באמת יש חריגה ולא להצגת שגיאות). בדיקת תנאי חזרה של כל פונקציה , שימוש וניהול בחריגות בהתאם לדרישות הסביבה, יש כאלה שדורשים תפיסה בכל פונקציה ואז להמיר זאת לערך חזרה , ויש כאלה שמבקשים שתפיסת חריגות תהיה יחסית גבוהה על מנת לסייע במערכות ניהול ה stack trace, אין פתרון מושלם להכל , פשוט צריך לעבוד במסגרות שקיימות לכם בהתאם ל policy הקיים בקבוצה שלכם. אני אישית ממליץ להשתמש בבודקים הסטטים שיש לכם גישה אליהם, אני משתמש ב VS ובבודקים הסטטים שלו שמקונפגים לצרכים שלי, זה מוצא די הרבה דברים טוב, אבל גם זה אינו מושלם.
בהקשר של חריגות ב C אני מדבר על SEH.
האם זה אומר שכל תנאי זה בעייה ? לא ! האם כל תנאי זה בעייה אפשרית ?כן! לכן צריך תמיד לבדוק ולעשות review לקוד שלכם.
אז מה עושים ? כאשר אפשר נמנעים מתנאים מכוננים, בהתאם לסביבה משתמשים בלוגיקת החזרה ערכי שגיאה ולא בחריגות (ומשתמשים בחריגות כאשר באמת יש חריגה ולא להצגת שגיאות). בדיקת תנאי חזרה של כל פונקציה , שימוש וניהול בחריגות בהתאם לדרישות הסביבה, יש כאלה שדורשים תפיסה בכל פונקציה ואז להמיר זאת לערך חזרה , ויש כאלה שמבקשים שתפיסת חריגות תהיה יחסית גבוהה על מנת לסייע במערכות ניהול ה stack trace, אין פתרון מושלם להכל , פשוט צריך לעבוד במסגרות שקיימות לכם בהתאם ל policy הקיים בקבוצה שלכם. אני אישית ממליץ להשתמש בבודקים הסטטים שיש לכם גישה אליהם, אני משתמש ב VS ובבודקים הסטטים שלו שמקונפגים לצרכים שלי, זה מוצא די הרבה דברים טוב, אבל גם זה אינו מושלם.
בהקשר של חריגות ב C אני מדבר על SEH.
אין תגובות:
הוסף רשומת תגובה