אימות תוכנה
הנדסת תוכנה |
---|
ערך זה שייך לקטגוריית הנדסת תוכנה |
פעילויות ושלבים |
דרישות • ניתוח • אפיון • ארכיטקטורה • עיצוב • תכנות • ניפוי שגיאות • בדיקה • אימות • בנייה • פריסה • תפעול • תחזוקה |
מתודולוגיות |
זריזות • מפל המים • תכנת ותקן • Crystal Clear • Scrum • Unified Process • Extreme Programming • אינטגרציה רציפה • DevOps |
תחומים תומכים |
ניהול פרויקטים • ניהול תצורה • תיעוד • הבטחת איכות • Profiling |
כלים |
מהדר • מקשר • מפרש • IDE • ניהול גרסאות • אוטומציית בנייה |
אימות תוכנה הוא תחום במדעי המחשב העוסק בהוכחה שתוכנה מסוימת נכונה (כלומר מבצעת בדיוק את מה שהוגדר במפרט שלה) או בעלת תכונות מסוימות.
מרבית העוסקים בפיתוח תוכנה בודקים את התוכנה ולא מאמתים אותה. הבדיקה נעשית באמצעות בחירת מקרים ספציפיים ובדיקה שהתוכנה מתנהגת כנדרש במקרים אלו. שיטה זו כרוכה בעבודה רבה ורמת האמינות של תוכנה הנבדקת כך נמוכה יחסית, משום שאין ביטחון כיצד תתנהג התוכנה במקרים שלא נבדקו. לעומת זאת, כאשר מוכיחים את אמינות התוכנה, ידוע מכך שהיא תתנהג נכון בכל המקרים.
שיטות
עריכהישנן שתי שיטות עיקריות לאימות תוכנה.
הראשונה היא שיטת בדיקות מודל - תהליך האימות מתבצע על מודל מתמטי המתאר את מערכת התוכנה, תוך הוכחת נכונות של תכונות הנדרשות על בסיס המודל הזה, תוך ניתוח המצבים והמעברים ביניהם. על מנת להצליח בשיטה הזאת, המודל חייב להיות סופי (בעל מספר סופי של מצבים). השיטה הזאת מאוד מוגבלת מהבחינה המעשית, בגלל בעיית התפוצצות מצבים שמאפיינת מערכות מעשיות רבות.
השיטה השנייה היא שיטת ההוכחה - בשיטה הזאת מתארים תכונות מסוימות של התכונה בתחשיב פסוקים לוגי (בעזרת לוגיקה טמפורלית, כדוגמת *CTL), ומוכיחים שהתוכנה (יותר נכון המודל שלה) מספקת את התכונות הנדרשות, בעזרת כלים מתמטיים אוטומטיים או אוטומטיים למחצה (Theorem Provers). גם השיטה הזאת מוגבלת בגלל בעיית התפוצצות מצבים, זאת למרות שניתן לבטא בעזרת תחשיב לוגי גם תכונות עבור מודלים אינסופיים.
שיטות של אימות תוכנה משמשות גם לאימות מעגלים לוגיים הכלולים ברכיבי חומרה, שם בעיית התפוצצות המצבים חריפה פחות. כל מעגל לוגי כזה הוא למעשה סוג של תוכנית מחשב שכן הוא מקבל קלט ומוציא פלט בהתאם.
מגבלות
עריכהישנן שתי בעיות עיקריות באימות תוכנה. המעשית שבהן היא שאימות תוכנה דורש מיומנות רבה ורקע מתמטי ברמה גבוהה מהמקובל. הבעיה החמורה יותר היא שלא ניתן להוכיח קיום או שלילה של תכונה כלשהי על כל תוכנית שרירותית. דוגמה לכך היא ההוכחה כי אי אפשר לפתח תוכנית שיכולה לוודא האם תוכנית כלשהי תעצור כאשר תקבל קלט מסוים (בעיה זו ידועה כבעיית העצירה). משפט רייס מוכיח כי לא ניתן לכתוב תוכנית שתוכל להכריע לגבי כל תוכנית שהיא האם היא מקיימת תכונה לא טריוויאלית (תכונה שלא כל תוכנית בהכרח מקיימת) כלשהי.
למרות שמגבלה תאורטית זו נראית חמורה עדיין אימות תוכנה תורם רבות מבחינה מעשית. למשל, לגבי תכונות מסוימות ניתן לבצע בדיקה שאומנם עשויה לעיתים לטעות ולומר על תוכנית תקינה שהיא אינה תקינה, אך לעולם אינה אומרת על תוכנית שאינה תקינה שהיא תקינה. גישה כזאת נקראת "שמרנית", ודוגמה אליה היא מערכות טיפוסים של שפות תכנות, המוכיחות היעדר שגיאות טיפוסים.
אמיר פנואלי ממכון ויצמן למדע היה למומחה ברמה בינלאומית בתחום זה ואף זכה על מחקריו בתחום בפרס טיורינג, הפרס החשוב ביותר במדעי המחשב, על מחקרו ופיתוחיו בתחום הלוגיקה הטמפורלית.