מה זה Test-Driven Development?

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

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

תפקידה של התוכנה בפרויקטים של הנדסה חשמלית

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

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

מדוע TDD Matters ספציפי להנדסת חשמל

פרויקטים של הנדסה חשמלית מציגים אתגרים ייחודיים שהופכים את TDD לערך במיוחד:

  • (FLT:0) המופנמים בין תלותיות הדדית של LT:1) - באג תוכנה יכול להתבטא כתקלות חומרה, ולהיפך, כוחות TDD לבודד לוגיקה תוכנה מתלויים בחומרה, וחושף הנחות מוקדמות.
  • (FLT:0) ציות קריטיות לציות (FLT:1) - תקנים כמו IEC 61508 (בטיחות תפקודית) ו- ISO 26262 (automotive) דורשים ראיות קפדניות.TDD מייצרת חבילה של בדיקות אוטומטיות שניתן להשתמש בהם כחלק מתיעוד אימות.
  • (FLT:0) מגבלות בזמן אמת FLT:1 - באגים טים הם קשה לשמצה כדי debug. TDD מעודד בדיקות כתיבה המאמתות את התנהגות התזמון, לעתים קרובות באמצעות סימולציה או סביבות חומרה-ב-the-loop.
  • (FLT:0) גישה פיזית ל- חומרה 1 (FLT: 1) כאשר אב טיפוס הם נדירים או יקרים, TDD מאפשר אימות תוכנה משמעותי על המכונה המארחת באמצעות גמגמים ולעגים, צמצום התלות על זמינות חומרה.

היתרונות המפורטים של TDD בפרויקטים של הנדסה חשמלית

גילוי מוקדם של טעויות

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

שיפור איכות הקוד ומודולריות

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

חבילת מבחן אוטומטית כתיעוד

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

אמינות מוגברת של אינטגרציה חומרה-Software

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

יישום TDD בפרויקטים של הנדסה חשמלית

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

שלב 1: דרישות ברורות והתנהגויות צפויות

לפני כתיבת כל בדיקות, הצוות חייב להסכים על ההתנהגות של כל רכיב תוכנה.זה נעשה לעתים קרובות באמצעות מקרים או מכונות מדינה.לדוגמה, בקר מהירות מוטורי צריך להצטבר מ 0 כדי לכוון RPM בתוך חלון זמן נתון, ללא פתרון יתר של יותר מ -10%.מקרי מבחן נגזרים מדרישות אלה.בשלב זה, גם לזהות ממשקי חומרה - ערכי AC, PWM, פלטות GP, רמות טיפול GP - יש צורך ללעג מאחורי דרישות מופשטות.

שלב 2: כתוב בדיקות אוטומטיות שעושות בדיקה התנהגות, כולל אינטראקציות קשות

התחל על ידי כתיבת מבחן להתנהגות הפשוטה ביותר האפשרית.עבור פונקציה הקוראת חיישן טמפרטורה, הבדיקה עלולה לטעון כי כאשר ADC מחזיר 0, הפונקציה מחזירה ערך טמפרטורה מסוים. השתמש מסגרת מלעג כדי לדמות את החומרה היקפי. פרויקטים רבים טבדמים TDD להשתמש CppUTest או Unity (עבור C) בשילוב עם ספריות לעג כגון מסגרת פונקציונלית מזויף (FF).מבחן צריך לגלגל על פיתוח והפעלה על ידי מחשב נייד (טלפון נייד).

עבור אינטראקציות מורכבות יותר חומרה, כגון דור PWM קריטי תזמון, הבדיקה עשויה לפעול על לוח הערכה באמצעות רתמת בדיקה.זה המקום שבו בדיקות חומרה-in-the-the-loop (HIL) הופך רלוונטי.המפתח הוא להתחיל עם בדיקות יחידה מבודדת בהדרגה להרחיב את בדיקות האינטגרציה לרוץ על חומרה.

שלב 3: כתוב את הקוד המינימלי כדי לעבור את המבחן

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

שלב 4: מספק עם הרד-אין-היתר

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

שלב 5: הגשת מבחן מתמשך ואוטומטי

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

אתגרים משותפים ופתרונות מעשיים

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

תעריפים קשיחים ו-Simulation Gap

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

בדיקות תזמון ו-Time Constraints

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

אימון קבוצתי והתנגדות תרבותית

מהנדסים חשמליים מלמדים לעתים קרובות חשיבה חומרה ראשונה, ועשויים להיות לא מוכרים עם שיטות בדיקות תוכנה.TDD דורש שינוי חשיבה: בדיקות כתיבה לפני הקוד מרגיש לא טבעי בהתחלה.ספק הדרכה באמצעות פרויקטים מוטבעים קטנים (למשל, ממצמץ LED עם TDD) בדיקות תכנות אוויריות וסקירות קוד ממוקדות איכות מבחן גם לעזור פרויקט כגון:0Test-Driven-n על ידי דוגמה: CFredited ל-DDRDRicial Retrarc.

לעיתים קרובות אין כלי שרשראות של קרוס-קומבינציה runner.Some RTOSסביבות לא מספקים ספריית C סטנדרטית הדרושה למסגרות מבחן. Solutions כוללים שימוש בשרשרת כלים מותאמת מחשב עם מטרה מדומה (למשל, QEMU עבור ARM Cortex-M) או שימוש במסגרות בדיקה קלות משקל כמו FLTF:0UnityLTFalpherpleir 1 שיכולה לרוץ על פני סביבת מבחן מתאים ליום אחד ולשלם על ידי TDD.

כלים ומסגרות ל- TDD בהנדסה חשמלית

כמה כלים מתוכננים במיוחד או מותאמים עבור TDD בתחום ההנדסה המשובצת והחשמלית:

  • (FLT:0)CppUTestFLT:1 - מסגרת מבחן יחידה עבור C ו- C++ שעובדת היטב על מארח והמטרה.הוא כולל תמיכה לעג ויכול להשתלב בפרויקטים מבוססי Eclipse או Makefile.
  • (FLT:0)UnityofveFLT:1) - מסגרת מבחן קל משקל C שהיא מאוד ניידת, אפילו מיקרובקרים זעירים.
  • (FLT:0)Google TestveFLT:1) - בעיקר לפרויקטים C++, בעוד שהוא כבד יותר מ- CppUTest, הוא חזק ויש לו מאקרו טיעון מצוין מתאים ליישומים הפועלים על מערכת הפעלה או RTOS.
  • (FLT:0)pytestFLT:1) - עבור פרויקטים המשתמשים Python עבור תסריטי אוטומציה, רתימות בדיקה או רכישת נתונים, בדיקת pytest ניתן להשתמש עם TDD כדי לאמת פרוטוקולי תקשורת ואלגוריתמים לעיבוד נתונים.
  • (FLT:0)Hardware-in-the-loopפלטפורמותsssveFLT:1) - מוצרים ממכשירים לאומיים, dSPACE, ו- Vector מודיעים מאפשרים הפעלת בדיקות תוכנה נגד חומרה אמיתית או מדמיינת עם שליטה סגורה.

מקרה מחקר: TDD for a Motor Control Firmware Project

כדי להמחיש את היישום המעשי של TDD, לשקול פרויקט קושחה מוטורי מברשות DC (BLDC) של שימוש ב-TDD, הצוות כתב לראשונה בדיקות עבור לוגיקה ההנעה: בהתחשב בעמדה רוטורית (מבודדת כזווית קלט), הקושחה צריכה ליצור את תבנית PWM הנכונה עבור רצף שישה שלבים מופשטים של הבדיקה כללו מקרים (כישלון, בעת ובעונה אחת) כי ה-H שימוש בשכבה אישית על ידי לעג).

לאחר שהלוגיקה תואמת, הצוות זנח את הקוד למיקרובקר המטרה ורץ את אותם בדיקות באמצעות ג'ט ג'ט דה בוגר. רק שלושה בדיקות נכשלו בשל הנחות תזמון בדור PWM. כישלונות אלה נקבעו על ידי התאמת תצורה התזמון, וחבילת הבדיקה מעודכנת כדי לשקף את התנהגות הפרויקט הנכונה.

מסקנה

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

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