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

מה פירוש TDD עבור בסיס קוד סימבול

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

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

Red-Green-Refactor Cycle in Practice

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

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

יתרונות מתמשכים מעבר לאיכות התוכנה הסטנדרטית

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

שקיפות ושקיפות Assurance

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

אימות נגד נתונים ניסיוניים

סימולציות מכניות רבות חייבות להתאים את נתוני הבחינה הגופנית.TDD מעודד בדיקות כתיבה המשווה את פלט הסימולציה לאינדקס ידוע (למשל, תותח סטנדרטי NASTRAN ®Ttilever beam de השתקפות) אם התוצאות הניסוייות משתנות עקב תכונות חומרים מעודכנים, חבילת הבדיקה מספקת דרך שקוף להפיץ שינויים אלה בכל המודולים שנפגעו.

מסמך שלעולם לא ימחק

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

דיון מהיר יותר של פיזיקה זוגית

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

יישום TDD: מפת דרכים מעשית עבור צוותים סימבוליים

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

שלב 1: זיהוי הגרנריות הנכונה של יחידות מבחן

קוד סימבולי מתחלק באופן טבעי לשכבות:

  • (ב) ⁇ :0) , ⁇ (החליפה ליניארית: 0) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) ,0) תוכניות לטיפוח זמנים: ⁇ 1 (EverLT:1) מפורשות אוילר, Runge-Kutta, Newmark-beta.
  • (ב) ,0) ,בתנאי טעינה ומודולים:FreaLT:1 , עקירות שנקבעו, שדות לחץ, עומסים תרמיים.

התחל לכתוב בדיקות TDD עבור שכבת הבסיס.פונקציות אלה הן פעולות מתמטיות טהורות עם קלטות ⁇ ופלטים. A מבחן עבור צ'ולסקי, לדוגמה, יכול ליצור ממטריקס חיובי סימטרי חיובי הגנה, לגרום לכך, ולוודא כי FLT:1 שווה את המקורי בתוך המכונה דיוק.

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

מספר שפות תכנות שולטות בסימולציה מכנית: C++, Python, Fortran, ו-Ratera יותר ויותר.כל אחד יש מסגרות בדיקות בוגרות:

  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
  • (ב) ויקרא י"ד:2 ,2 ,2 ,2 ,
  • (ב) ויקרא י"א: "ה' אֱלֹהֶיךָ" (בראשית כ"ד, ט).
  • (ב) ויקרא י"ד: "בְּבְּבְתָּבְתָּבְתָּבְתָּבְתָּבְתָּתוֹ" (בראשית כ"ד, כ"ד).

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

שלב 3: כתוב מבחן עם סובלנות, לא שוויון

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

(ב) 5)

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

שלב 4: מתן קוד המורשת

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

אתגרים וכיצד להתגבר עליהם

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

אתגר 1: אי-הטווח בסולורס

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

אתגר 2: זמן הוצאה להורג ארוך

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

אתגר 3: בדיקה אקראית או סטוצ'סטית

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

אתגר 4: המשך עם מודלים של פיזיקה משתנים במהירות

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

אתגר 5: פלוגות נקודה תלויות באופטימיזציה של Compiler

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

אתר אינטרנט: TDD in a Open-Source Finite-Element Code

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

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

שילוב מתמיד ושילוב רציף עבור מכני סימול TDD

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

  • (ב) ויקרא י"ד): "ה' (ב"ד): "ה' (ב"ה)" (ב"ב)" (ב"ב)"ה') ו"ה' (ב') ו"ה': "ה')" (בראשית כ"ד)"ד) ו"ד': "ה'"ד'"ד"ד: 5"ד) עם ה' (ב)
  • (ב) מבחנים:0 (Parameterized Testing: FLT:1hil) השתמש בתכונה זו כדי להפעיל את אותו מבחן על פני קבוצות קלט רבות - לדוגמה, תכונות חומריות שונות או גודלי מרש.
  • (ב) [17] (ב) ויקרא: ויקרא י"ד): "ב[[המאה ה']], [[המאה ה-20]], [[1924]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]], [[1924]]]]]]]]
  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

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

עבור צוותים המשתמשים ב-HPC, CI יכול להיות מאתגר בשל לוח הזמנים של עבודה. שקול באמצעות לוחצים CI קלים שרק קוד ברמת מבחן, ו- HPC רצים לבדיקות מדרגות לילה.מרכזים רבים HPC מציעים כעת סביבות בדיקות מבוססות ענן; לדוגמה, FLT:0NERSC מספקת אינטגרציה CIFLT:1 עבור תוכנה מדעית.

מסקנה

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

לקריאה נוספת על יישום TDD למחשוב מדעי, ראה:0Working ביעילות עם קוד מורשת צופן LT:1 על ידי מייקל פירס ו-FLT:2pytest DocumentsFLT 3 עבור תבניות בדיקות מספריות.