אימות תוכנה בשיטות פורמאליות גרא וייס המחלקה למדעי המחשב אוניברסיטת בן-גוריון
2 מידע כללי מרצה: גרא וייס משרד: חדר 123 בבניין 37 שעות קבלה: ימי רביעי בין 11:00 ל- 13:00 דואר אלקטרוני: geraw@cs.bgu.ac.il )לאחר השיעור( אתר הקורס: http://www.cs.bgu.ac.il/~fvm111
3 מרכיבי הציון שני בחנים: כל אחד במשקל 33% מהציון הסופי שאר הציון יבוסס על תרגילי הבית: פעם בשבועיים אפשר להגיש בזוגות המשקל היחסי בין התרגילים ייקבע ע"פ דרגת הקושי ציון עובר בקורס מותנה בקבלת ציון עובר בשני הבחנים השתתפות בבחנים היא חובה
4 נושא הקורס יעסוק בגישות פורמאליות להבטחת נכונות מערכות מבוססות מחשב. הגישות הפורמאליות מאפשרות הוכחה או הפרכה של תכונות התנהגות באמצעות סריקה שיטתית של מודל מתמטי המתאר את מבנה המערכת. האטרקטיביות של הגישה הפורמאלית נובעת מכך שהיא מאפשרת לאמת נכונות מערכות באופן אוטומטי שאינו מוכוון תסריטי פעולה נפוצים )בודק גם מקרי קצה שרק מעט משתמשים מגיעים אליהם(. בגלל היתרונות הרבים, בחיסכון ובשיפור איכות המוצר, הופכות השיטות הפורמאליות לכלי מרכזי בתעשיית התוכנה והחומרה, כתוספת משמעותית למערך הבדיקה והאימות המסורתי.
5 נושאי ההרצאות מודלים המבוססים על מערכות מעברים systems( )transition תוכנה סדרתית ומקבילית. ככלי לתיאור התנהגות סוגי התכונות של מערכות דינאמיות: תכונות בטיחות properties(,)safety.)fairness( ותכונות הגינות )liveness( תכונות ח י ות נראה איך גרסאות שונות של אוטומטים סופיים מתאימים לאימות תכונות מערכות. רגולריות של נציג את שפות הלוגיקה הטמפורלית logic( LTL )temporal ו- CTL ונשווה ביניהן. אלגוריתמים לבדיקת מודל מול דרישות בלוגיקות אלה וננתח את הסיבוכיות שלהם. נציג אם ירשה הזמן, נדון גם בטכניקות להתגבר על בעיית ריבוי המצבים explosion( )state באמצעות יחסי סימולציה ובי-סימולציה relations(.)simulation and bi-simulation
6 ספרות Christel Baier and Joost-Pieter Katoen. Principles of Model Checking Edmund M. Clarke, Orna Grumberg, and Doron A. Peled. Model Checking Zohar Manna and Amir Pnueli,Temporal Verification of Reactive Systems ספר בעברית http://www.underwar.co.il/document-details.asp?id=326 Ã
7 )1985-1987( קרינת יתר במכונת Therac-25 מכונת הקרנה לטיפול בחולי סרטן לפחות שישה מקרי מינון יתר )בערך פי 100 מהמותר( שלושה חולי סרטן נפטרו מקור: שגיאה בתוכנת הבקרה condition( )race
8 )1990( נפילת רשת AT&T תקלה בעיר ניו-יורק גורמת להשבתת חלקים הטלפוניה בארצות הברית למשך 9 שעות גדולים מרשת עלות: מאות מיליוני דולרים break גורם: שגיאת תוכנה )פרוש שגוי של פקודת ב- C (
9 )1996( התרסקות הטיל Ariane 5 עלות: יותר מ- 500 מליון יורו מקור: שגיאה בתוכנת הבקרה המרה שגויה מ- point floating ל- integer signed משיקולי יעילות, הוחלט לנטרל קוד טיפול אוטומטי הקיים בשפת ADA
10 שגיאת FDIV במעבד פנטיום )1994( floating point division unit=fdiv פעולות חילוק נקודה צפה מסויימות נתנו תוצאה שגויה אחת מ- 9,000,000 פעולות אקראיות תתן תוצאה לא מדויקת הפסד: 500 מליון דולר )הוחלפו כל המעבדים התקולים( + פגיעת תדמית לחברה מקור: שגיאה במימוש אלגוריתם לחלוקה ביצוג נקודה צפה
11 אימות תוכנה למה? תוכנה נכנסת ליותר אפליקציות: מערכות משובצות מחשב פרוטוקטלי תקשורת! מערכות תחבורה אמינות המערכת תלויה בתוכנה )... שגיאות תוכנה עלולות להיות הרסניות ויקרות: תוכנה במוצרים בייצור המוני ( רכב, אלקטרוניקה, תוכנה במערכות קריטיות ( כור אטומי, מטוס,... )
12 מהו אימות תוכנה? הגדרה: בדיקה שהמערכת מקיימת את הדרישות שהוגדרו לה אימות תיקוף )validation( )verification( אימות: תיקוף: בדיקה שאנחנו בונים דברים נכון בדיקה שאנחנו בונים את הדבר הנכון
13 שיטות אחרות לאימות תוכנה סקר קוד שיטה סטאטית: מעבר ידני על הקוד, בלי הרצת התוכנה מגלה בין 31% ל- 93% מהשגיאות. ממוצע 60% קשה לגלות שגיאות מסובכות )מקביליות, טעות באלגוריתם( בדיקות שיטה דינאמית: מריצים את הקוד ומחפשים התנהגות שגויה דגש על שימוש נפוץ ( קשה לעלות על מקרי קצה מספרים: 30% עד 50% מעלות פרויקט תוכנה מושקעת בבדיקות יותר זמן ומאמץ מושקע באימות מאשר בפיתוח רמת שגיאה מקובלת: שגיאה ל- 1,000 שורות קוד
14 "צייד באגים" - טוב מוקדם ממאוחר שימוש בדיקות ניפוי תכנות תכנון ניתוח 50% 40% 30% עלות שגיאות ב-$ גילוי שגיאות ב-% הכנסת שגיאות ב-% 12.5K$ 10K$ 7.5K$ 20% 5K$ 10% 2.5K$ 0% 0 ציר הזמן )לא ליניארי(
15 שיטות פורמאליות תחום במתמטיקה שימושית ואימות תוכנה וחומרה העוסק בשיטות מתמטיות להגדרת דרישות, תכנון שיטות פורמאליות מאפשרות: שילוב אימות שיטות אימות קיצור בשלב מוקדם של תהליך הפיתוח אפקטיביות זמן ועלויות האימות יותר )תפישת שגיאות שקשה לגלות בשיטות אחרות( )אוטומציה( שימוש בשיטות פורמאליות: מומלץ על ידי גופי התקינה ורשויות הבקרה נמצא בשימוש בחברות רבות. )... בעיקר אלה המפתחות מערכות קריטיות )תעופה, המוני )שבבים, מכשירי אלקטרוניקה,...( תחבורה, חלל, רפואה, צבא, וייצור
16 שיטות אימות פורמאלי לת כ ונ ה P שיטות דדוקטיביות הוכחה מציאת שיטה: P מתמטית ש כלים: נכונה Theorem Prover / Proof Assistant / Proof Checker ישימות: כאשר המערכת בעלת אופי מתמטי בדיקות מודל ) Model Checking ( שיטה: כלים: בדיקה ממוכנת ש- P מתקיימת בכל ריצה אפשרית )Spin, NuSMV, UPPAAL, ( model checkers ישימות: כשהמערכת מתנהגת כמכונת מצבים )סופית( סימולציות ובדיקות מבוססות מודל שיטה: בדיקת P ישימות: ע"י הפעלת כל התנהגויות המודל אם ניתן לבנות מודל פשוט וממצה
17 למה לא בדיקות וסימולציה? חלופה )נפוצה מאוד( לוקחים מודל )לסימולציה( מפעילים עם מספר קלטים בודקים שהמערכת מגיבה לאימות פורמאלי: או מימוש )לבדיקה( )וקטור הבדיקה( "נכון" מגרעות משמעותיות: מספר הקלטים וההתנהגויות האפשריות גדול מאוד )אולי אינסופי( הכשל ההרסני עשוי להיות בהנתהגויות שלא נבדקו בדיקה יכולה לגלות שגיאות, לא להוכיח נכונות
18 אבני דרך באימות פורמאלי הוכחה מתמטית לנכונות תוכנה )1940 )Turing, שיטות מבוססות תחביר לתוכנות סידרתיות )1969 )Hoare, עבור קלט מסויים. האם התוכנית מחשבת את הפלט הנכון? מבוסס על כללי ה סק בתחשיב יחסים logic( )predicate שיטות מבוססות תחביר לתוכנות תגובתיות )1977 )Pnueli, מטפל בתכונות המתייחסות למצבים במהלך החישוב מבוסס על כללי ה סק בלוגיקת זמן logic( )temporal )לוגית( אימות אוטומטי של תוכנות מקביליות מבוסס סריקת מודל במקום כללי ה סק בדיקה האם התוכנה המקבילית מקיימת תכונה
19 דוגמאות לכללי ה סק x < 5 x x + 5 x < 0 הצבה: p S 1 r r S 2 q p S 1 ; S 2 q p B S 1 q p B S 2 q p if B then S 1 else S 2 q הרכבה סדרתית: תנאי: p B S p p while B do S p B לולאה:
20 פרס טיורינג אלן טיורינג )1912-1954( Alan Mathison Turing היה מתמטיקאי בריטי, פרס טיורינג ממניחי היסודות למדעי המחשב. מפתח מודל לתיאור מתמטי של מחשבים. ניתן על ידי ה- ACM, האגודה למכונות מחשוב, בגין הישג יוצא דופן בתחום מדעי המחשב. בתחום זה שקול הפרס, מבחינת יוקרתו, לפרס נובל, שאינו כולל פרסים בתחומי המתמטיקה ומדעי המחשב. חתני פרס טיורינג בולטים: 1968: ריצ'רד המינג 1972: אדסחר דייקסטרה 1974: דונלד קנות' 1976: מיכאל רבין ודנה סקוט 1996: אמיר פנואלי 2002: רונלד ריבסט, לאונרד אדלמן ועדי שמיר, (RSA) 2008: אדמונד קלארק, אלן אמרסון וג'וסף סיפאקיס
21 פרס טיורינג לשנת 1996 אמיר פנואלי For seminal work introducing into computing science and for outstanding contributions to program and system verification על הכנסת )לוגיקה טמפורלית( תרומה רבה לתחום אימות תוכנה ומערכות לתחום מדעי המחשב ועל
22 פרס טיורינג לשנת 2008 אדמונד וג'וסף אמרסון אלן קלארק, סיפאקיס For their roles in developing into a highly effective, widely adopted in the hardware and software industries. על תפקידם בפיתוח שיטת כטכנולוגיית ביותר שאומצה באופן נרחב בתעשיות התוכנה והחומרה יעילה
23 אימות באמצעות בדיקות מודל )Model Checking( מערכת דרישות מידול פירמול תכונות פורמליות בדיקות מודל )Model Checking( מודל של המערכת סימולציה דוגמה נגדית התכונות הוכחה
24? מה זה בדיקות מודל Checking( )Model בדיקות מודל Checking( )Model אוטומטית לאימות. היא טכניקה בהינתן מודל של המערכת ותכונה פורמאלית, בודקים אם התכונה מתקיימת )למצב מסויים( במודל באמצעות תוכנה.
25 מהם המודלים? מערכות מעברים )Labeled Transition Systems( מצבים מתויגים )labeled( יחס מעבר בין המצבים מעברים מתוייגים בפעולות ע"י ערכי אמת לפרדיקטים בסיסים )כדי לאפשר הרכבה( ניתן לתאר: תוכנה מערכות מרובות תהליכים פרוטוקולי תקשורת מעגלי חומרה מה לא?
26 מהן התכונות? דוגמאות: האם המערכת יכולה להגיע לנעילה הדדית?)deadlock( האם תהליכים יכולים להיות יחד בקטע קריטי section(?)critical האם התוכנה מספקת את הפלט הנכון? לוגיקת זמן :)temporal logic( לוגיקה מסדר ראשון logic( )propositional בתוספת אופרטורים מו ד ל י ים כמו המסמן "תמיד" ו- המסמן "ל ב סו ף" אינטרפטציה מעל סדרות מצבים )linear( או מעל עצים אינסופיים של מצבים )branching(
27 חללית Space-1 Deep של NASA שוגרה בשנת 1998 מודולים שונים של החללית נבדקו באמצעות טכניקות בדיקות מודל Checking(.)Model
28 דוגמאת קוד קטנה process Inc = while true do if x < 200 then x := x + 1 od process Dec = while true do if x > 0 then x := x 1 od process Reset = while true do if x = 200 then x := 0 od 0 תמיד בין האם x )כולל(? ל- 200
29 מידול באמצעות Promela int x=0; proctype Inc() { do :: true if :: (x < 200) x=x+1 fi od } proctype Dec() { do :: true if :: (x > 0) x=x-1 fi od } proctype Reset () { do :: true if :: (x == 200) x=0 fi od } init { } atomic{ run Inc(); run Dec(); run Reset() }
30 איך לבדוק? 0 מוסיפים למודל "מוניטור" שבודק ש- x ל- 200 בין proctype Check() { assert (x >= 0 && x<= 200) } init { } atomic{ run Inc(); run Dec(); run Reset() ; run Check()}
31 דוגמא נגדית המחשב מצא שגיאה במודל באופן אוטומטי!
32 תיקון השגיאה int x=0; proctype Inc() { do :: true atomic{ if :: (x < 200) x=x+1 fi } od } proctype Dec() { do :: true atomic{ if :: (x > 0) x=x-1 fi } od } proctype Reset () { do :: true atomic{ if :: (x == 200) x=0 fi } od } init { } atomic{ run Inc(); run Dec(); run Reset() }
33 שלב המידול תהליך בדיקות מודל בונים מודל המתאר את המערכת הנבדקת מבצעים סימולציות למטרת Check" "Sanity כותבים תכונות שרוצים לבדוק שלב ההרצה מריצים את ה- checker model כדי לבדוק נכונות התכונות שלב האנליזה התכונה הוכחה כנכונה? בודקים תכונות נוספות )אם יש( התכונה הוכחה כשגויה? מתקנים את המודל, המערכת או התכונה ומנסים שוב... אין מספיק זמן או זיכרון לבדוק את התכונה? מנסים לפשט את המודל
34 יתרונות שיטת בדיקות מודל ניתנת לשימוש רחב )חומרה, תוכנה, פרוטוקולים,...( מאפשרת אימות חלקי )רק התכונות הרלוונטיות ביותר( פוטנציאל לאוטומציה מלאה )תוכנה המופעלת בלחיצת כפתור( עניין גובר בתעשייה ניתנת דוגמא נגדית כאשר התכונה אינה מתקיימת מבוססת על תיאוריה מתמטית לא מ כ ו נ ת תסריטים נפוצים )להבדיל מבדיקות(
35 חסרונות שיטת בדיקות מודל דגש על זרימת הבקרה במערכות,)reactive( חישובים ומבני נתונים תגובתיות פחות על איכות האימות תלויה באיכות המודל לא ישים אם מספר המצבים של המודל גדול או אינסופי עם זאת: שיטה אפקטיבית למציאת שגיאות תכנון ומימוש
36 סיפורי הצלחה אבטחת מידע: פרוטוקול הצפנה Needham-Schroder נמצאה שגיאה שנשארה חבויה במשך 17 שנים 10 476 מצבים מערכות תחבורה נבדק מודל תנועת רכבות בעל ו- NASA בדיקת קוד C++ C, Java, בשימוש )ופיתוח( חברות כמו Digital,Microsoft תחום הצלחה: בדיקת התאמת device driver תוכנה בתוכניות החלל הנכחית והקודמות NASA s Mars Pathfinder, Deep Space-1, JPL LARS group