בפיתוח תוכנה וגם בשפה יום יומית, אקספציה (באנגלית: Exception) פירושו "חריג" או "סייג" או "יציאה מן הכלל" ; לא בהכרח רע אבל גם לא בהכרח טוב ← אלא בכל מצב חריג "טכנית" או "חוקית".
בפיתוח תוכנה, אקספציה היא בדרך כלל מונח כללי לתיאור אזהרה (warning) או ארור (error) בשל באג תוכנה.
ההופעה של אקספציה נקראת זריקה (throwing) ומכאן הביטוי to throw an exception.
אקספציה מסוג ארור
ארור (באנגלית: Error) אני מגדיר כהודעה על באג תוכנה.
ארור לעתים מסומן במספר ("קוד" או "קוד מצב") המייצג את ערכו המילולי בתור עיקרון; עיקרון זה הופך שימושי כאשר ערכו המילולי של הארור הוא ארוך מאד ונדרש ייצוג מקוצר שלו.
במקרים רבים ניתן להעתיק את תוכן הארור (ערכו המילולי) לקליפבורד ולהדביקו במנוע חיפוש מסוים דוגמת גוגל סרצ' ובכך למצוא פתרונות לבעיה שבגללה מופיעה הארור.
לפעמים ארורים מסוימים אינם ברורים ו\או אין לגביהם דוקומנטציה, הן במנועי חיפוש סטנדרטיים והן בחוברת הדרכה של תוכנה, אז במקרה כזה נדרש לפנות לקהילת מפתחים, להציג בפניהם את הארור, אם זה רלוונטי אז לתאר מה אולי נוסה בכדי לפתורו ולשאול איך לפתורו.
הטיפול בארורים נקרא ארור הנדלינג (error handling) והאמצעים העיקריים לו הם מספור\קודים, סטנדרטיזציה של הערות ארורים, טיפים לפיתרון, פנייה לדוקומנטציה כולל לחוברת הדרכה של תוכנה, התייעצות, פיתוח נקודתי וייתכנו גם פתרונות אוטומטיים \ אינטליגנציה מלאכותית שהם נדירים בעת כתיבת מאמר זה.
בשפות מחשב שיש בהן מנגנון טיפול באקספציות לעתים אפשר לגרום לארור המובנה במנגנון זה להופיע מעט שונה וברורה במוקם ארור כללי טבעי.
זה נעשה לפי בדיקת תוכנה והתנייה כמו "אם הבדיקה לא הצליחה, אז תמיר ארור X לאקספציה Y
ובשפת PHP ניתן לעשות זאת עם הפונקציה הפנימית set_error_handler().
בשפות תכנות עילי מסוימות אקספציה תהיה ארור-פטאלי (fatal error) אם לא נתפסה (caught) כלומר אם לא זוהתה מצד מנגנון טיפול באקספציות.
קוד מצב של אקספציה
קוד מצב אני מגדיר כמונח סידורי (כגון מספר סידורי) לתיאור אזהרה או ארור בצורה "סדורה" כמו כאשר ארור ספציפי מסומן במספר.
בתוכנות עם מערכת טיפול שגיאות יעילה, במקרים רבים יש המון אזהרות וארורים אשר הניסוח המילולי שלהם דומה ולכן בכדי לוודא הבחנה ביניהם, בעיקר מצד משתמש קצה שאיננו בהכרח בקיא בתיעוד אזהרות וארורים או מכיר פרקטיקות מקובלות בנושא או שקשה להעתיק את הפלט (אם הפלט הוא תמונה למשל).
לעתים מוטב לדווח על האזהרה או על הארור לצוות הפיתוח של התוכנה (או לחפש עליו מידע) דווקא לפי קוד מצב ולא לפי תוכן טקסטואלי קונקרטי כי לפעמים הטקסט של תוכן הארור המילולי לא העותק נכונה או לא העותק במדויק.
מה זה באג תוכנה
באג תוכנה (באנגלית: Software bug) אני מגדיר ככל בעיה בתוכנה שלפחות בפעם הראשונה בה התרחשה הייתה בלתי צפויה.
במקרים רבים באג יגרום להפסקת תהליך מסוים באמצעו (ואף לקריסת תוכנה); ללא ארור או עם ארור.
גורמים אפשריים לבאגים
באג בדרך כלל נובע מטעות בקוד מקור או בקוד המכונה של תוכנה.
- בשל שגיאה לוגית
- בשל שגיאה תחבירית (למשל, תו שגוי בקוד מקור)
מצבים אלה ייתכנו גם בשל פרצות אבטחה הגורמות לזריקת קוד זדונית; כמו כן, ניתן לתפוש כבאג גם אי האפשרות להתחיל תהליך תוכנה בשל התנגשות בין גרסת מערכת הפעלה לבין התוכנה שמריצים
מניעת באגים
מניעת באגים נקראת די-באגינג (באנגלית: Debugging) וניתן לבצעה דרך תכנון נכון, בידוד בעיה, מנגנון טוב לדיווח על שגיאות, בדיקת תוכנה טובה (בדיקת כמה שיותר מצבי פלט כלליים) ועוד.
ניתן לצמצם הסיכוי לבאגים בעבודה עם ניהול גרסאות וכן שמירת מצבים של תוכנה מהם ניתן להמשיך אחרת מבלי להיתקל בבאג.