מדוע פיתוח Test-Driven הוא משחק שינוי עבור הנדסה

Test-Driven Development (TDD) מהפך את זרימת העבודה המסורתית על ראשו: אתה כותב מבחן נכשל ראשון, ואז לייצר מספיק קוד כדי להפוך אותו לעבור, ולבסוף מספק את זה מהנדסי משמעת זה לחשוב על התנהגות, ממשקים, ומקרים קצה לפני קו אחד של קוד הייצור קיים.

(היישומים של הנדסה - מקושט מוטבע במכשירים רפואיים כדי לשלוט בהגיון באוטומציה תעשייתית - תיעוד דרישה שהוא מדויק וחי כאחד, מסמכים מסורתיים מתרחקים מהמציאות כאשר הקוד משתנה.TDD פותר זאת על ידי יצירת חבילת מבחן שפועלת כמפרט תמידי, מתואם, כל מבחן הוא יחידת תיעוד אטומית המגדירה את מה המערכת:0dosLTFalsLT1, מה שלא אמור להיות מסמך אידיאלי:2F2.

הבנת TDD ב- Engineering Contexts

בתוכנות הנדסה, מורכבות נובעת ממגבלות פיזיות, דרישות בזמן אמת, וניתנות קפדנית.לדוגמה, בקר מכונה CNC CNC חייב לפרש G-קוד, להגיב לתרגילים להגביל, ולנהל זרימה קרירה בתוך מיקרו-שניות. שילוב אחד של פרמטר יכול לגרום התנגשות כלי או חלקי גרדוט.TDD מעודד מהנדסים כדי לגוון מורכבות כזו ליחידות ניתנות בדיקה, עם חוזה חד-פעמי בבירור.

כאשר אתה כותב מבחן לפני היישום, הבדיקה הופכת לצרכן הראשון של ה- API. זה מכריח אותך לענות על שאלות כגון: “ מה צריך את הפונקציה הזאת כאשר החיישן נכשל? ” או “ כיצד המערכת מתנהגת כאשר חבילת רשת היא מופרעת? ” תשובות אלה, שנתפסו כטיעוני מבחן, מהווים את הצורה האמינה ביותר של תיעוד כי הם יכולים לשמש 242 בדיקות אבטחה).

דרישות ל-Outlook

פרויקטים הנדסיים מסורתיים מתחילים לעתים קרובות עם מסמך דרישות כי הוא מאות עמודים ארוכים.במהלך הפיתוח, דרישות אלה משתנות, אבל המסמך לעתים רחוקות מתעדכן. TDD מגשרים פער זה על ידי המרת דרישות למקרים של מבחן.כל סיפור משתמש או התנהגות מערכת ממפה למערך של בדיקות קבלה.המבחנים האלה הופכים למקור האמת.כאשר דרישה שינויים, הבדיקה המקבילה מעודכנת, והקוד הוא מספק התאמה לתיעוד (שלב) נשאר למעשה עם התוכנה).

לדוגמה, צוות בניית מערכת הפעלה בזמן אמת עבור רובוטים עשוי להיות דרישה: “ לוח הזמנים חייב להבטיח שקיפות מקסימלית של 50 מיקרו-שניות עבור משימות פרטיות גבוהה. ” ב TDD, הם כותבים מבחן כי אמצעים זה עקבי.מבחן זה מתעד את הציפייה המדויקת של ביצועים ובאופן אוטומטי הפרות יכול רק לטעון דרישה; במבחן זה מוכיח כל הוכחה.

כיצד TDD משפר את המסמכים

אימוץ TDD עושה יותר מאשר לשפר את איכות הקוד; הוא משנה ביסודו את אופי התיעוד במקום חפצים סטטיים, נפרדים, תיעוד הופך לחלק אינטראקטיבי של צינור הפיתוח.

בדיקות כתיעוד חי

המונח “ תיעוד חי ותיעוד; מתאר תיעוד מתפתח עם הקוד.עם TDD, כל מבחן הוא מפרט מיניאטורי. כאשר מפתח חדש מצטרף לפרויקט הנדסי, הם יכולים להסתכל על חבילת המבחן כדי להבין מה כל מודול צריך לעשות. A היטב-מבחן בשם כמו FLT:0 אומר את ההתנהגות, המצב, ואת הקריטריון לא נדרש.

כדי לבצע בדיקות באמת לקרוא, צוותים מאמצים שמות והודעות טיעון תיאוריות.לדוגמה, ב Python עם פיאט, מבחן עשוי להשתמש ב-FLT:1.

אחריות מדרישות לקוד

בהנדסת, מעקב חיוני לבטיחות ולציות.תקנים כמו DO-178C (avionics) המנדט שכל דרישה חייבת להיות עקבית לקוד ולמבחנים.TDD מספקת מבנה טבעי לעקביות: כל דרישה מייצרת בדיקה אחת או יותר, וכל בדיקה מתייחסת לנדרשת זיהוי ישיר.

שקול בקר בעיתונות הידראולי כי אסור לעלות על 300 בר.הדרישות ID REQ-421 קובע: “ שסתום הקלה בלחץ יופעל כאשר הלחץ עולה על 290 בר. ” צוות TDD כותב מבחן שלא ניתן לייחס עם FLT:2 אשר מאשר את סף ההפעלה.המבחן עצמו הופך הוכחה חיה כי REQ-421 הוא מיושם כראוי במהלך הסמכה, את האפשרות של אודיטור יכול לראות את הבדיקה.

חידוש אוטומטי של הסכם המסמכים

תיעוד מוקרן גרוע יותר מאשר שום תיעוד כי זה לא נכון.TDD מבטל את הסיכון הזה כי בדיקות מבוצעות ברציפות - על כל פעולה, בכל צינור בנייה.אם הקוד משתנה באופן המפר את ההתנהגות המתועדת, הבדיקה נכשלת באופן מיידי.התיעוד (המבחן) מאומת באופן אוטומטי.זה בלתי אפשרי עם דפי wiki סטטיים או מסמכי Word.

עבור יישומים הנדסיים כפופים לביקורת רגולטורית, אוטומציה זו חוסכת זמן ומפחיתה את הסיכון.במקום ביקורות ידניות לבדוק אם תיעוד תואם קוד, צינור CI /CD עושה את זה באופן אוטומטי.צוותים יכולים ליצור דוחות מתוצאות הבדיקה שמשמשות כתיעוד עבור בעלי עניין חיצוניים.

קלרנס באמצעות גרנוריות

אחת הנפילה נפוצה בתיעוד הנדסי היא מעורפלת.ספק עשוי לומר וולדקו; המערכת צריכה להתמודד עם שגיאות בחסד. ” מה זה אומר? עם TDD, “graceful ” מוגדר בבדיקות דיסקרטיות: FLT 3:, FLT:4, FLT:5 כל מבחן מתעד טעות מסוימת ותגובה צפויה להיות שימוש בגופים טכנאים, אשר אינם צריכים להיות בשימוש.

היתרונות של TDD לתיעוד הנדסה

מעבר למנגנונים המתוארים לעיל, TDD מספק כמה יתרונות קונקרטיים לשיפור איכות ושימושי של תיעוד בפרויקטים הנדסיים.

קללות ודעה קדומה

מבחן קובע שפה מדויקת.טענה של מבחן היא הצהרה הגיונית שחייבת להעריך נכון או שקרי. “ המערכת תהיה מהירה ” לא יכולה להיות מבחן.במקום, הצוות כותב “ המערכת תעבד 1000 עסקאות לשנייה עם ⁇ th% עדה מתחת לגיל 50 מ' ” כלומר הצהרה ניתנת לבדיקה, מסמך.

שמירה ומטבע

ככל שהקוד מתפתח, הבדיקות הן הדברים הראשונים לשבור אם שינויים בהתנהגות.מפתחים מעדכנים בדיקות כדי לשקף התנהגות חדשה, כלומר התיעוד (המבחנים) הוא תמיד נוכחי.בניגוד, מסמכים מסורתיים הופכים מיושנים בתוך שבועות של תחילת הפרויקט.הישויות של תיעוד מבוסס TDD הן הגדרה עצמית: אף אחד לא צריך לזכור לעדכן מסמך נפרד; העדכון מתרחש באופן טבעי כחלק מהמחזור הפיתוח.

אחריות ווויכוח

כאשר באגים מתפרסמים ביישום הנדסי, חבילת הבדיקה מספקת מפה מבוססת מוכן לפענוח.כל מבחן שעובר מאשר כי התנהגות מסוימת עדיין נכונה.מבחן הכשל מצביע ישירות על הדרישה השבורה.עקביות זו מקטין את הזמן שהושקע בניתוח שורש-כי עוזר למהנדסים לתעד את מה שהם לומדים.הם יכולים להוסיף בדיקות חדשות למקרים שנמצאו במהלך debugging, ובכך לשפר את התיעוד באופן הדרגתי.

אוטומציה ואינטגרציה רציפה

צינורות בדיקה אוטומטיים (CI /CD) להפעיל בדיקות על כל שינוי.אם מבחן כי מסמכים התנהגות ביקורתית בטיחות נכשל, הצינור יכול לחסום פריסה.אוטומציה זו מבטיחה כי ההתנהגות המתועדת תמיד מאוישת.צוותי הנדסה יכול להגדיר לוחות נתונים המציגים כיסוי בדיקה לאזור דרישה, מתן מדדי בריאות בזמן אמת.לדוגמה, הצוות יכול לראות כי כל הדרישות בלוח המחוונים של וגיל; שקיפות כי הוא משמש תיעוד מדויק, המהווה בדיקות מעקב מדויק.

שיתוף פעולה בין הצדדים

בפרויקטים הנדסיים, תיעוד נצרך על ידי קהל רחב: מהנדסי תוכנה, מהנדסי חומרה, ארכיטקטים במערכת, אבטחת איכות ושירות שדה. TDD מנתחים את הפער בין קבוצות אלה כי הם כתובים בשפה שניתן לשתף אותם.שימוש בכלים כמו FLT:0SpecFlowFlowFLT:1 (עבור .NET) או להיות (בדיקות פייתון), ניתן לכתוב בתוך תחום שבו ניתן לקרוא את המהנדסים לא ספציפיים של תכנות.

יישום TDD לתיעוד טוב יותר

אימוץ TDD בהקשרים הנדסיים דורש שינויים טכניים ותרבותיים כאחד, להלן הם צעדים מעשיים כדי להבטיח כי היתרונות של תיעוד הם מלאים הבינו.

התחל קטן ואינטגרטיבי מוקדם

הכירו את TDD על מודול חדש או תת-מערכת לא ביקורתית קודם לכן, השתמש בחבילת המבחן כתיעוד מיום אחד. לתעד את מבנה הבדיקה ב-Repository ’sreadME וכל חומרים על הסיפון.כפי שהצוות הופך נוח, להרחיב את TDD לרכיבים קריטיים יותר.אינטגרציה מוקדמת מפחיתה התנגדות ונבנה דוגמאות של תיעוד חי יעיל.

בחרו את הכלים הנכונים

(ב) עיין במסגרות תמיכה בשמה ברור, ברישום ודיווח (עבור יישומי C/C++ (הקודמים במערכות משובצות), לשקול את FLT:0Google TestofFLT:1 או FLT:2Catch2FLT 3PLT for Python, pytest with plugins כגון FLT:6 מאפשר תיעוד התנהגותי עבור Java/Kotlin, JUI5 עם רזולוציה של 5FLTs עם בדיקות לא ניתן לבצע בדיקות עצמיות משותפות עם נית.

לכתוב בדיקות כסיפורים

השתמש בשמות מבחן שקוראים כמו משפטים.במקום LT:8, לכתוב (FLT:9 בגוף המבחן, השתמש בהצהרות עם הודעות כשלון משמעותיות.זה הופך את תפוקה המבחן לתיעוד שמספר סיפור.לדוגמה, כאשר מבחן נכשל, ההודעה צריכה לומר בדיוק מה השתבש: “ Expected a אזעקה להיות אמיתי כאשר הטמפרטורה עולה על 150 מעלות צלזיוס, אבל קיבל שקר.

שילוב TDD עם התפתחות התנהגות-Driven (BDD)

BDD מרחיב את TDD באמצעות פורמט שפה טבעית (Given-When-אז) שבעלי עניין יכולים להבין. כלים כמו Cucumber, SpecFlow, או Beab מאפשרים למהנדסים לכתוב תרחישים המשמשים הן את הבדיקות והן את המסמכים של הדרישות: "לנוכח הלחץ חיישן קריאה הוא 300 בר, כאשר הבקר מבצע את בדיקה הנדסית, ואז מסתם ההקלה ייפתח בתוך 2 ms."

שמור על מפת הזיהוי של Test-Documentation

יצירת טבלה או במאית במחסן המקשר כל דרישות זהות למבחן שלה (s) זה יכול להיות קובץ CSV פשוט או YAML תצורה.כלי כמו FLT:0JiraFLT 1 או ;2GitHubFLT 3 יכול להיות מוגדר לקביעת תוצאות בדיקה חוצה-reference עם דרישות קבועות זה כדי להבטיח בדיקה לא חובה (לא נבדק).

לחנך את כל הצוות

תיעוד הוא אחריות צוות.עודד מהנדסי חומרה, מהנדסי מערכת ומנהלי מוצר לסקור תרחישים.הם יכולים לעתים קרובות לזהות מקרים חסרים או מילים מעורפלות. Hostסדיר “ למתוחים זמניים ו-dquo; שבו חבילת הבדיקה משמשת כנקודת ההתייחסות העיקרית למה שהמערכת עושה.לאורך זמן, השינויים התרבותיים מלראות תיעוד כנטל נפרד כדי לראות את המבחנים כתיעוד.

מקרה: תיעוד של TDD בפרויקט חלל

שקול תת-קרקעית אווירו-מרחבית שמתפתחת תוכנה למניעת טיסה לרכב אווירי בלתי מאויש (UAV) הצוות התחיל את TDD לאחר ממצאים חוזרים על תיעוד מיושן.הם מחזרים את דרישות המערכת כ-4500 מקרים של מבחן באמצעות Google Test.חבילת התגמול מכסה כל פונקציה ביקורתית בטיחותית, החל מהוראות צוות ההפעלה ועדות למיזוג.

מסקנה

פיתוח Test-Driven מציע לצוותים הנדסיים דרך שיטתית לייצר תיעוד מדויק, נוכחי, וניתן להפעלה. על ידי כתיבת בדיקות קודם, צוותים להמיר דרישות מעורפלות לתביעות מדויקות, ניתנות לבדיקה. חבילת המבחן המתקבלת משמשת כתיעוד חי אשר מתפתח עם הקוד, מאומת באופן אוטומטי, ועומדים בדרישות תאימות.בתעשיות שבהן כשלי תוכנה יכולים להיות השלכות קטסטרופליות, את היתרונות של TDD אינם רק שיפור פריון - הם מהווים סיכון בטוח יותר, אלא אמצעי ניהול כלי ניהול כלי ניהול יעיל יותר, אלא פיתוח יעיל יותר מאשר פיתוח יעיל יותר.

כדי להתחיל, לבחור מודול הנדסי קטן, להתחייב לכתוב את המבחן לפני הקוד, ולצפות כיצד איכות התיעוד שלך משתנה. המאמץ הושקע ב- TDD משלם בחזרה באופן אקספוננציאלי בכל פעם שמישהו צריך להבין, לתקן או להרחיב את המערכת. בתחום התוכנה להנדסה, שבו דיוק הוא לא ראוי להשגה, TDD מגדיר את תקן למצוינות.