Table of Contents
פיתוח Test-Driven (TDD) כבר זמן רב היה תרגול הליבה בהנדסה תוכנה גמישה, אבל תפקידו בתחומים קריטיים בטיחות כגון מכני ואווירה הנדסה הוא לעתים קרובות דיון.מבקרים טוענים כי מעליית בדיקות כתיבה לפני קוד מאט את הפיתוח, בעוד proponents נקודה לטכניקה של ניהול פגמים מוקדם ואכיפת עיצוב קפדני.
מעגל ה- TDD: Red-Green-Refactor
בליבה, TDD עוקב אחר מחזור ממושמע, ממריץ שלוש-phase:
- (ב) כתוב מבחן כושל המגדיר התנהגות או קריטריון קבלה הרצוי.המבחן צריך להיות ספציפי, אוטומטי, קטן ככל האפשר.
- [01:0] ירוק: ⁇ 1 [=] כתוב את כמות מינימלית של קוד הייצור הדרוש כדי להפוך את המבחן הזה לחלוף.לא מספק, לא כלליות אנתרופולוגיה - מספיק כדי לספק את המבחן.
- (ב) טיהור:0 (ראה:0) 1 (מנקה את קוד הייצור ואת קוד הבדיקה.שיפור יכולת קריאה, הסר את השכפול, ולהבטיח שהעיצוב נשאר פשוט ונכון, כל עוד הבדיקות ממשיכות לעבור.
מחזור זה חוזר על עשרות או מאות פעמים לתכונה.התוצאה היא חבילה של בדיקות רגרסיה שגדלה עם בסיס הקוד ועיצוב שעולה מהמבחנים ולא להיות מתוכנן מראש. בהקשרים קריטיים בטיחותיים, TDD לעתים קרובות משולב עם ניתוח סטטי, שיטות פורמליות, ובדיקת חומרה-ב-ב-In-the-the-loop במקום בשימוש בבידוד.
מדוע תוכנות אבטחה-קריטיות דורשות תוספת ריגאור
(הופנה מהדף ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
גישות "קוד-זה-מבחן" מסורתיות לעתים קרובות להוביל לבדיקות שהפכו לצוואר בקבוק מאוחר בפרויקט. באגים שנמצאו במהלך אינטגרציה או בדיקות מערכת יקר לתקן - לפעמים דורשות שינוי בדרישות או אדריכלות. TDD מסובב את הדינמיקה הזו על ידי ביצוע בדיקות פעילות רציפה ומעמדית.כשותף של מתודולוגיית TDD המקורית בק לשים אותה, בדיקות הן לא רק רשת בטיחות אלא ספציפיות כי המניעה את העיצוב.
TDD בהנדסה מכנית ואווירית: אתגרים והתאמה
אתגרים מרכזיים
יישום TDD בהנדסה מכנית ואווירה הוא לא תרגום פשוט מתוכנות אינטרנט או ארגוניות.
- (FLT:0) תלויות זהירות: FLT:1 למערכות אוויריות רבות כרוכות בקרים משובצים אינטראקציה עם חיישנים, אקטוטורים, ורכיבים פיזיים אחרים.
- (FLT:0) מגבלות בזמן אמת וקביעתיות: בדיקות של 1FIRLT 1 (המופעלים על עבודת מפתח לא יכולות לשקף את ההתנהגות הרגישה של חומרת היעד.TDD לבד לא יכול לאמת כי לולאה שליטה עונה על מועדי התזמון שלה.
- (ב) עיצוב מבוסס-פל: (FLT:103) בפרויקטים רבים של חלל, מהנדסים משתמשים בכלים כמו FLT:2MATLAB / SimulinkveFLT 3 או FLT:4SCADEFLT:5 כדי מודל התנהגות מערכת וקוד אוטומטי-LGerate.
- (FLT:0) תיעוד אישור: 1FLT 1 תקנים כמו DO-178C דורשים ראיות כי בדיקות לכסות כל קו קוד וכל ענף.TDD מבחן מוטבע היטב מספק באופן טבעי כמה ראיות אלה, אבל תהליך הפיתוח חייב להיות מתועדות וביקורתיתעד.
התאמת מעגל TDD עבור מערכות בטיחות Embedded Safety
כדי להתמודד עם אתגרים אלה, צוותי הנדסה לעתים קרובות לאמץ גישה היברידית:
- (FLT:0) בדיקות חד משמעיות עם שכבות מופשטות חומרה (HALOVA): 1:1 על ידי כתיבת ממשקים מופשטים עבור חומרי חומרה היקפיים (למשל, ADC, PWM, CAN אוטובוס), מפתחים יכולים לבדוק את ההיגיון השולט ללא חומרה פיזית.
- (FLT:0) כפולים עבור מודלים פיזיים:FreaLT:1 במקום להשתמש במנוע אמיתי או מסגרת אוויר, בדיקות TDD יכול להשתמש במודלים צמחיים (מערכות מלוטשות) אשר מחקים את ההתנהגות הגופנית.זה מאפשר אימות מוקדם של אלגוריתמים שליטה וזיהוי תקלות לוגיקה.
- (FLT:0) ניתוח סטטי המשולב לשלב "אדום": שלב "אדום" של TDD יכול לכלול לא רק בדיקות דינמיות אלא גם בדיקות סטטיות עבור תאימות MISRA, שימוש בערימה, ותיקון זרימת נתונים.
- (FLT:0) הפעלת TDD עם שיטות רשמיות: ההרחבה 1 (למשל, הפסקת חירום, הגנה על מעטפה טיסה), צוותים עשויים להשתמש בכלים אימות רשמיים כדי להוכיח את התקינה, השלמת התהליך המונע על ידי הבדיקה.
אישור וסטנדרטים: כיצד TDD תומך במילוי
אחד החסמים הגדולים ביותר לאמץ את TDD בהנדסה ביקורתית הוא התפיסה כי היא סותרת את דרישות ההסמכה.למעשה, TDD יכול להיות בעל ברית חזק בהשגת ציות כאשר הוא עובד כראוי.
אחריות מדרישות לבדיקות
על פי סעיף 178C, כל דרישה ברמה גבוהה חייבת להיות במעקב לדרישות ברמה נמוכה, אשר בתורו יש לעקוב אחר מקרים של מבחן.בזרימת עבודה של TDD, כל מבחן נכתב על בסיס דרישה מסוימת או קריטריון קבלה. על ידי מתן שם בדיקות לאחר דרישות אלה ושמירה על מאטריקס דו-כי-כי-כי-כי-כי-כי-פי (למשל, באמצעות כלי ניהול כמו LTF:0DOF: 3.
ניתוח כיסוי מפרקים
סטנדרטים כגון DO-178C רמה A דורשים LT:0 (מצב מוחד / סיקור (MC/DC) ⁇ FLT:1 - כלומר כל מצב בהחלטה חייב להשפיע באופן עצמאי על התוצאה.מסורת של TDD של כתיבת בדיקות קטנות, ממוקדות עושה את זה קל יותר להשיג ולעד את MC / DC מאשר הגישה המסורתית של כתיבת קומץ של בדיקות גדולות על ידי כתיבת בדיקות הגיוניות לכל גורם שיכול להוכיח כי הוא יכול להוכיח כל ענף יכול להיות קל יותר קל יותר להשיג ולת.
אימות דרישות לעומת Verification של Intent
סיכון אחד ב-TDD הוא שמפתחים עשויים לבחון את היישום שלהם ולא לאמת את הדרישות המקוריות.זה ידוע בשם "הההעברה של כוונה" נפילה.בפרויקטים קריטיים לבטיחות, ביקורות דרישות קפדניות ואימות עצמאי (על ידי צוות נפרד) נשאר הכרחי. TDD צריך להיות מוצג כפרקטיקה עבור צוות הפיתוח, לא תחליף לפעילות V&V פורמלית.
דוגמאות אמיתיות בעולם ו Case Studies
חברת Flight Control Software ב-Sher Aerospace Corporation
כמה חברות תעופה חלל, כולל FLT:0 AirbusveFLT:1 ו-FLT:2BoeingFLT 3: (כמו גם הספקים שלהם), שילבו עקרונות TDD לתוך תהליכי פיתוח התוכנה המוטבעים שלהם.לדוגמה, ה-FLT:4Boeing 787FLT:5 בקרת טיסה מערכת - מפותחת עם שילוב של עיצוב מבוסס מודל וקודד - לאחר מכן, כמו גם סימולציות של ניסויי תאים סימולציה של דגם ה-D.
מחקר שפורסם ב- 2017 IEEE International Symposium ב- Software Reliability Engineering WorkshopsFLT:1 מצא כי צוותים המשתמשים ב- TDD בהקשר של avionics השיגו 40-60% פחות פגמים לאחר השחרור בהשוואה לאלה המשתמשים בגישה המסורתית למפל.
יחידות בקרת מנוע (ECUs) בתעשיית הרכב
בעוד מאמר זה מתמקד בהנדסת מכונות ואווירקל, המגזר הרכב מציע מקבילות יקרות ערך.0BoschphFLT:1 ו-FLT:2 (ContinentalalalalearFLT 3:2 אימצו את TDD עבור ניהול מנוע ומערכות מתפתלות.במקרה אחד המתועד, צוות פיתוח יחידת בקרה מנוע דיזל המשמש TDD כדי ליישם מעל 3,000 בדיקות יחידת דלק המכסה את התזמון הסורק האוטומטי.
בקרת חלל בנאס"א
מעבדת ההנעה של נאס"א (JPL) ניסתה עם TDD עבור חלקים של ה-FLT:0 מ"ר RoverFLT:1 ו-FLT:2Europa Clipperph החלים חלק מהתוכנה: הסביבה המרחבית העמוקה מטילה מגבלות ייחודיות: מעבדים מהונדסים קרינה, זיכרון מוגבל, ואין אפשרות של תוכנה לאחר ההשקה (עבור ה-Roverdowerreative), אשר נמצאה בסופו של קוד פתוח, אך ורק לאחר שמפתחת ה-Dy Software, אך ורק לאחר מכן, אשר היה אפשרי, אך ורק לאחר שמפתחת המהנדסים, אך ורק לאחר מכן, אך ורק לאחר שמפתחים את ה-Tlinked Code-Ded Software, אשר היה זמין, אך ורק לאחר מכן, אך ורק לאחר מכן, אך ורק לאחר מכן, הוא היה מסוגל ל-Dy, אך ורק לאחר מכן, אך ורק לאחר מכן, לאחר מכן, הוא היה מסוגל לבצע ניסויים ב-Dy, אך ורק לאחר מכן, אך ורק לאחר מכן, לאחר מכן, לאחר מכן, לאחר הפעלה של מערכת ההפעלה של ה-Tlinked Software, לאחר שמפתחת ה-Dy, לאחר הפעלה של ה-Dygided Software Defative Software, אך ורק לאחר הפעלה
היתרונות של TDD עבור בטיחות-Critical Software
גילוי מוקדם
היתרון הברורה ביותר הוא לתפוס באגים דקות לאחר שהם מוצגים ולא שבועות מאוחר יותר במהלך שילוב המערכת.בפרויקט ביקורתי בטיחות, פגם ששרד לבדיקות טיסה עשוי לדרוש תיקון יקר או תיקון שובר לוח הזמנים.
ניסיון חיים
חבילת מבחן כתובה היטב משמשת כתיעוד הניתן להפעלה.כאשר מהנדס חדש מצטרף לצוות, הם יכולים לקרוא את הבדיקות כדי להבין מה כל רכיב אמור לעשות.בביקורת הסמכה, חבילת הבדיקה מספקת ראיות אובייקטיביות לכך שהקוד לא הובחן.לא נדרש תוכנית בדיקה נפרדת או מסמך בדיקה פרטני נדרש - למרות שהוא עדיין חכם לשמור על מברקת מעקב.
איכות עיצוב ו Decoupling
TDD מעודד עיצוב מודולרי כי קוד משותף הדוק קשה לבדוק. במערכות קריטיות בטיחות, decoupling הוא לא רק נחמד - זה עוזר לבודד תקלות וסימולציות ניתוח כשל.לדוגמה, מודול מנוסה היטב, מחוספס לזיהוי תקלות יכול להיות בשימוש מחדש על פני פלטפורמות מטוסים מרובות ללא שינוי, צמצום הנטל.
מניעת תוקפנות
תוכנה ביקורתית בטיחותית מתפתחת לאט, אך היא מתפתחת – תיקון באג בחלק אחד של המערכת עשוי להציג אחד חדש במקום אחר אם הבדיקות אינן יסודיות.עם TDD, כל שינוי מאומת מיד כנגד כל חבילת המבחן, למנוע תוקפנות מלהגיע לייצור.זה בעל ערך במיוחד כאשר צוותים מרובים עובדים על קודים משותפים.
מגבלות ועיסוקים
TDD אינו כדור כסף בהנדסת בטיחות, יש להשלים על ידי כמה שיטות אחרות כדי להשיג את רמת האמון הנדרשת:
- בדיקה אחרונה ב-6 ביולי [[1924]]]]]]]] ב[[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]
- (ב) [15] , [17] , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (FLT:0) אימות פורמאל: 1FLT עבור הרכיבים הקריטיים ביותר (למשל, הקוד שמסגור מנוע במהלך מצב מהיר), שיטות רשמיות מספקות הוכחה מתמטית של נכונות שעולה מעבר לבדיקות.
- (ב) ⁇ :0) ביקורות ובדיקות: ⁇ 1 (TDD) לא מבטל את הצורך בסקירות קוד ידני.למעשה, ביקורות על קוד המבחן עצמו הן בעלות ערך רב ערך - הם תופסים מקרים של מבחן מעורפל או חסר.
- ניתוח חקירה:0 (FLT:1) משער כי הדרישות מוגדרות היטב. בפועל, פרויקטים קריטיים בטיחות דורשים ניתוח מעמיק של סיכונים, מצבי כישלונות, ותרחישים תפעוליים.TDD צריך לעקוב, לא לפני כן, ניתוח זה.
מסקנה
Test-Driven Development מציע מערך רב עוצמה של שיטות לשיפור איכות התוכנה בהנדסת מכונות ואווירה - משמעת שבה הכישלון אינו אופציה. על ידי הטמעת בדיקות בשלבים המוקדמים ביותר של פיתוח, TDD מטפח תרבות של נכונות ודיוק.הוא גם יוצר גוף עשיר, בעל עקבות של ראיות התומויות התומכות נגד סטנדרטים כמו DO-178C ו- ISO 262.
עם זאת, TDD חייב להיות מותאם למציאות של מערכות משובצות, בזמן אמת, ותלויות בחומרה.מהנדסים צריכים להשתמש בשכבות מופשטות חומרה, מודלים צמחיים וניתוח סטטי כדי לגשר על הפער בין בדיקות יחידה לבין העולם הפיזי. ו-TDD לעולם לא צריך לשמש כתחליף לאימות פורמליות או V&V עצמאי כאשר בשילוב עם שיטות משלימים אלה, TDD הופך כלי חיוני לבניית מטוסים בטוחים יותר, חלליות ומערכות מכניות.
עבור צוותים שוקלים לאמץ את TDD בהקשר ביקורתי בטיחות, המפתח הוא להתחיל קטן: לבחור תת-מערכת בעלת ביקורת נמוכה, לכתוב בדיקות יחידה נגד סביבה מאומתת, ולשלב את התרגול לתוך זרימת העבודה הקיימת.