Table of Contents

החשיבות הגוברת של אמינות בהנדסת קשר

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

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

מה זה Test-Driven Development?

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

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

מחזור Red-Green-Refactor Cycle in Practice

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

מדוע חשוב להנדסת מכשירים של IoT

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

יעילות מוגברת באמצעות גילוי מוקדם

מכשירים אלקטרוניים מבוססי שדה הם קשה לשמצה לעדכן. Over-the-air (OTA) מנגנוני עדכון להוסיף מורכבות וסיכון, ומכשירים רבים פועלים על קשרים נמוכים או לסירוגין שהופכים כתמים לא אמינים. tDD משמרות פגם זיהוי שנותרו במחזור החיים של פיתוח, לתפוס שגיאות לוגיות, תקלות בתנאי גבול, ומעברים בלתי צפויים לפני שקושחיתים אי פעם על חומרה.

חיבורים יציבים וצפויים

מכשירים IoT תלויים ברשת אמינה - בין אם באמצעות Wi-Fi, Bluetooth Low Energy, LoRaWAN, Zigbee או פרוטוקולים סלולריים. Connectivity כשלים הם בין הנושאים הנפוצים והמסמכים ביותר במערכות IoT.TDD מאפשר למהנדסים לכתוב בדיקות שמאמתות את התנהגות החיבור מחדש לאחר טיפות הרשת, לאמת הודעות queuing ו-Silmantics, ומאשרות כי מכשירים בחסד מטפלים בזמן שרת או תגובות ממותרות אלה הופכים לפרוטוקולים חדשים.

שיפור האבטחה באמצעות ריגאורי אימות

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

שמירה לטווח ארוך וקבוצת סקלאי

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

יישום TDD בפרויקטים של IoT: גישה של צעד אחר-שלב

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

דרישות מוכחות

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

בחרו את מסגרת המבחן הנכונה

פרויקטים C ו- C++ מאוחסנים בנוף ה-IoT, אך מסגרות מודרניות כגון Unity, CMock, ו Ceedling מספקים ריצ'רים בדיקה חזקים ויכולות לעג למטרות מאוישות משאבים.עבור יישומים ברמה גבוהה יותר שפועלים על שערים מבוססי לינוקס או מיקרובקרים עם תמיכה RTOS, מסגרות כמו Google Test, Catch2, או pytest ניתן להשתמש לצד חומרה מופשטת כי הם מאפשרים בדיקות חומרה פיזית ללא בדיקה.

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

3.תכתבו בדיקות כי תרגיל אמיתי-עולם Scenarios

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

4.פיתוח תכונות כדי לעבור את הבדיקות

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

5.הספק ליעילות וקלילות

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

אסטרטגיות לתקני IoT

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

בדיקה אחרונה ב-Isolating Individual Components

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

בדיקה אחרונה ב- 2010. ^ אינטגרציה: Component Interaction

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

בדיקה אחרונה ב-4 ביולי 2012. ^ End-to-End Behavioralation

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

בדיקה: Aligning with Stake

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

Overcoming Hardware Constraints in TDD

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

המונחים: Hardware summary

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

Emulators, סימולטורים ופלטפורמות וירטואליות

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

שילוב מתמשך עבור מערכות Embedded

קביעת צינור CI בונה את הקושחה, מפעילה בדיקות יחידה על המארח, ובאופן אופציונלי מבחנים אינטגרציה על מטרות חיקוי חיוני להגדלת TDD על פני צוות. כלים כגון פלטפורמהIO, CMake עם CTest, ו GitHub Actions או GitLab לספק את התשתית הדרושה לבדיקת שותפים אוטומטית על כל מבצע.

יישומים אמיתיים ומקריות

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

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

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

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

אתגר: כוח עיבוד מוגבל וזיכרון

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

אתגר: חיבורים ברשת בלתי-צפוי

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

אתגר: מורכבות Hardware-Softwareאינטגרציה

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

אתגר: התנגדות תרבותית ל-TDD

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

הטוב ביותר להצלחה ארוכת טווח

כדי לקיים תרגול יעיל של TDD בהנדסה IoT, לאמץ את העקרונות הבאים:

  • (FLT:0) שמור על בדיקות קטנות ומהירות.FLT:1 כל מבחן צריך לכסות התנהגות אחת ולהשלים במלי השניות. בדיקות איטיות להרתיע ביצוע תכוף ולצמצם את היתרון של TDD.
  • (FLT:0Write בדיקות עצמאיות וניתן לחזור עליהן) בדיקות לא צריכות להיות תלויות בסדר ביצוע או במצב חיצוני שנותר מאחור על ידי בדיקות קודמות.
  • (FLT:0) בדרגה הנכונה של מופשטת.IRLT:1 מילואים בדיקות חומרה מפורטות עבור סוויטות אינטגרציה; לשמור בדיקות יחידה ממוקדות בלוגיקה שניתן לאמת ללא המכשיר הפיזי.
  • (ב) [ה]ההסבר:0] כל דבר, [ה][דרוש מקור] [ה], [ה], [ה], [ה], [ה], [ה], [ה], [ה], [ה], [ה], [ה]התחילה] [ה] [ה] [ה] [ה]]], [התחילה] [ה]] [ה]] [ה] [ה]]] [ה] [ה]]] [ה] [ה]] [ה] [ה] [ה] [ה] [ה] [ה] [ה] [ה] [ה] [ה] [ה]]]]]] [ה] [ה] [הה] [ה] [ה] [ה]]]] [ה] [ה] [ה] [ה] [ה] [ה]] [ה], [ה]]] [ה] [ה]]] [ה] [ה], [ה] [ה] [ה] [ה] [ה]] [ה]]]]]]]] [ה] [ה
  • (FLT:0) בדיקות כקוד ראשון.IRLT:1 החל את אותם סטנדרטים coding, בדיקות תהליכים, וקביעת משמעת כדי לבדוק קוד כמו קוד הייצור.
  • (FLT:0) השימוש בנתונים של מבחן ריאלי של בדיקת נתונים (FLT:103) בכל פעם שניתן, השתמש בדגימות נתונים מחיישנים או הקלטות שדה בפועל כדי להבטיח כי בדיקות משקפות תנאים אמיתיים ולא הנחות אידיאליות.
  • (FLT:0) פערי כיסוי מבחן מבחן סיקור (FLT) 1 לא ניתן לבדוק את כל נתיב הקוד מוקדם במחזור הפיתוח. לשמור על רשימה גלויה של פערים ידועים ולקדם את סגירתם כפרויקט בוגר.

מסקנה

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

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

(הצוותים המבקשים לצלול עמוק יותר לתוך ההיבטים הטכניים של TDD במערכות משובצות, משאבים כגון FLT:0)Throw The SwitchFilloFLT:1 הקהילה לספק כלים לבדיקת קוד פתוח ותיעוד מפורט.ה-FLT:2IAR Systems בדיקה מדריך IoT ראשי תיבות של IoTFLT:3 מציע ייעוץ מעשי לשילוב TDD לתוך זרמי עבודה מוטבעים, בעוד ש-FLT:4 , על כל מאמר זה מצורף, כדי לספק את שיטות פיתוח מוגדרות, כולל של TDD.