כימיקלים ודגום; חומרים הנדסה
האתגרים של בדיקות פונקציות סינכרוניות בהנדסת תוכנה ופתרונות
Table of Contents
הדרישות הייחודיות של בדיקות סינכרוניות בהנדסה
בדיקת פונקציות סינכרוניות בתוכנה הנדסית היא משמעת עם מלכודות עדינות והתנהגויות לא קבועות. בניגוד קוד סינכרוני, שבו סדר ביצוע הוא ליניארי וחיזוי, פעולות סינכרוניות מציגות מטבע, שיחות מונעות אירועים, וצוותי תזמון תלויות בפתרונות ספציפיים לחיקוי ספציפיים.
אתגרים מרכזיים בבדיקת פונקציות סינכרוניות
תזמון-Dependent Flakiness
פונקציות סינכרוניות מסתמכות על גורמים חיצוניים כמו תפוגות זמן, תגובות רשת או חומרה מפריעות.מבחן תלוי בחלון תזמון מסוים עשוי לעבור על רץ CI מהיר, אך נכשל על מכונת מפתח איטי יותר.לדוגמה, בדיקת חומרה:0setTimeoutFLT:1 עם עיכוב של 100 מ"מ עשוי להשלים בתוך סביבה אחת ו 110 מ"מ באחר, מה שגורם לבירור מוקדם מדי לקביעת מנגנונים מוקדמים לתזמון.
מבחן מורכב והגדרה
בדיקה של פונקציה סינכרונית לעתים קרובות דורש תזמורת של פעולות במקביל: החל עובדי רקע, האזנה לפולנים אירועים, לעג שירותים חיצוניים, ניקוי של מטפלים מתמשכים. מהנדסים חייבים לנהל הבטחות, שיחות, או אסימונים / סונאמס תוך הבטחת כי כל המשאבים ישוחררו כראוי לאחר כל בדיקה.
תנאי גזע ואנטי-חיסול
תנאי גזע מתרחשים כאשר התוצאה של מבחן תלויה בחיתוך של חוטים מסונכרנים מרובים.לדוגמה, שני מקרי חיישנים מדומים המגיעים לרצף מהיר עשויים להיות מעובדים בהזמנות שונות בהתאם לתזמון CPU.לא-קבע זה הופך את זה כמעט בלתי אפשרי לשחזר כישלונות.מבחן העובר 99% מהזמן, אך נכשל ב-1% מהאמון בחבילת הבדיקה כולה.
מורכבות סימולציה וסילוקציה
תוכנה הנדסית לעתים קרובות אינטראקציה עם חומרה פיזית, פרוטוקולים קנייניים, או זרם נתונים בזמן אמת.מוקי ממשקים סינכרוניים אלה הוא מאתגר: לעג חייב לדמות עיכובים, תנאי שגיאה, ויציאה של משלוח. לעגים פשטניים יתר עלולים להסתיר באגים בעולם האמיתי, בעוד לעג מורכב מדי הופך לנטלים.
המונחים: obge and Hang Detection
פונקציות סינכרוניות שנפתחות, מתחילות צירים, או עופרת יכולים להשאיר משאבים מתפתלים אם לא לנקות כראוי.מבחנים עשויים להצליח אבל להשאיר את המערכת במצב לא יציב עבור בדיקות מאוחרות יותר, מבחן הנלה בגלל הבטחה לא מלאה עלול לגרום חבילת הבדיקה כולה לזמן החוצה, הדורש התערבות ידנית.
פתרונות ואסטרטגיות
המונחים: Native Async Support
(ב) ,[32] ,364 20] ,217 22,113 21,382 17,485 17,320 17,873 17,873 17,485 17,320 17,320 17,320 17,320 17,320 17,336
יישום Deterministic Mocking and Stupping
להחליף תלות סינכרונית עם לעגים דטרמיניסטים שחוזרים על ערכים מבוקרים בזמנים צפויים.לדוגמה, במקום לחכות לבקשה אמיתית של HTTP, למקם את שכבת הרשת עם לעג אשר פותר באופן מיידי. Libraries כמו FLT:0sinon.jsFLT:1 או FLT:2Jest's Jest's Jest's Jest's Jest's Jest's Jest's Jest's) FLT 3.
השתמש ב-Timeouts ו- לוח זמנים עבור SynSyncization
גם בלעג, כמה בדיקות דורשות מעבר בזמן אמת, להשתמש בפסקאות זמן עסיסיות כדי לאפשר פעולות להשלים. מסגרות בדיקה רבות מספקות כלי רכב כמו FLT:0waitforcioFLT:1 (בספריית Jest או בדיקה) כי לבדוק שוב ושוב מצב עד שהוא הופך להיות אמיתי או זמן יפוג תרחישים מורכבים יותר, לשקול שימוש שעון וירטואלי או זמן מזויף (למשל: תזמון יעיל) עבור בדיקות זמן אמתיות עבור בדיקות תזמון יעיל יותר.
אימוץ פירמידת בדיקה עבור קוד Async
לא כל הבדיקות של Async צריכות להיות בדיקות אינטגרציה מלאות.עקוב אחר פירמידת הניסויים: לכתוב בדיקות יחידות רבות המבודדות פונקציות אסימונים אינדיבידואליות באמצעות לעג; מספר מתון של בדיקות אינטגרציה המאמת אינטראקציות בין כמה מרכיבים אסימונים; וכמה בדיקות קצה עד קצה מקצה לקצה כי לממש את הצינור הסינכרון המלא. גישה זו מצמצם את החיסרון כי בדיקות יחידה הן ⁇ , בעוד בדיקות מקצה לקצה משמשים מעגל או משוחררות או מקצרות.
יישום: גרייסיט ותבניות ניקוי
תמיד להגדיר את זמנם של מבחן ולהשתמש:0לאחר כל אנדרט 1 , קובצי 1:1 כדי לנקות את המשאבים של עידנים.לדוגמה, ב Node.js, קרוב כל חיבורי מסד נתונים פתוחים או להפסיק ללטף שרתים לעג לאחר כל מבחן. השתמש ב- Promise-race לבנות כדי לזהות דביקות: עיסקת פעולה עם זמן שדוחף אם המבצע לוקח זמן רב מדי זה מבטיח דוכנים לא כל בדיקה לא מתאימה.
יישומים אמיתיים ו Case Studies
מערכות בקרה בזמן אמת
במערכות כמו פיקוח לוגי סימולציה (PLCs) או רובוטיקה, פונקציות סינכרוניות להתמודד עם היתוך חיישן והוראות אקטוטור.מבחן נכשל עשוי לאפשר חיישן מתעכב קריאה כדי לחדד ערך חדש יותר, המוביל למדינות מסוכנות.צוותים בחברות כמו FLT:0NI (TStand)FLT:1 להשתמש בחומרה-in-the-the-the-the-loops בשילוב עם תזמון פיזיקלימי ללא תזמון.
רכישת נתונים ופלטפורמות IoT
תוכנה הנדסית שמטילה נתונים מאלפי מכשירים IoT חייבת להתמודד עם חבילות מחוץ להזמנות, קשרים נשרים, ושקיפות משתנה.בדיקה של מערכות כאלה דורשות שרתים לעג מתוחכמת המדמיינים התנהגות של מכשירים בתנאים שונים ברשת.על ידי שימוש בכלים כמו FLT:0WireMockFLT:1 או מותאם אישית FLT:2AsyncAPIFLT 3, לעג, יכול לשכפל הודעות כמו פיזור של קבוצות של תקופה שקטה.
מחשוב מדעי וסימציה
פונקציות סינכרוניות בסימולציות מדעיות לעתים קרובות לנהל חישובים מקבילים, קובץ I / O, ופעולה בין-מעבד. מבחנים פלמקי בסביבות אלה יכולים לשקוע אמון בתוצאות סימולציה.הפרקטיקה הטובה ביותר כוללת בידוד I / O עם buffers in-memory ובאמצעות לוח זמנים רדיניסטי לשלוט על סדר משימות במקביל.
בניית תרבות של Robust Testing
אתגרים מתקדמים של בדיקות אסימונים אינם רק מאמץ טכני.צוותי הנדסה חייבים לטפח תרבות שערכי מבחן אמינות.
- (ב) ,0) ,התמדה ביציבות CI:FIRLT:1 , מבחנים של חץ במכלים מבודדים עם הקצאת משאבים עקבית כדי להפחית את השקע המושרה לסביבה.
- (ב) ,0) בדיקות נזיפות כחרקים: אנדרל 1 (ראה להלן) מיד לחקור ולתקן תקלות לסירוגין ולא להתעלם מהן.
- (FLT:0) שיפור התפתחות המונעת התנהגות (BDD): מבחנים של כתיבה:1 המתמקדים בהתנהגות מערכתית בלתי אובססיבית ולא בפרטים תזמון פנימיים.
- (ב) ⁇ :0) למידה מתמדת: 1FLT 1 (בפרק קבוע) סקירת תבניות בדיקה ועדכונים על לעג ככל שהמערכת מתפתחת.
מסקנה
בדיקה של פונקציות סינכרוניות בתוכנות הנדסה היא מאתגרת יותר מאשר בדיקה לוגיקה סינכרונית, אבל זה רחוק מלהיות בלתי-סביר.על ידי הבנת הסיבות השורשיות של הטאקיות - אינטימיות, תנאי גזע, מורכבות לעג, ודלפות משאבים - גורמים יכולים ליישם אסטרטגיות ממוקדות כגון לעג הנדסי, גיבוי מסגרת של סיועים, שעונים וירטואליים, ובדיקה פירמידת לא ניתן להשיג מספיק כדי לתפוס את כל הכלים הלא-מונים, אבל הם יכולים למנוע את כל אלה על-ידי שימוש ישיר-ידי ביצוע בדיקות תרבות ממוקדת.