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

מה הם כלי כיסוי קוד?

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

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

(ה) כלי כיסוי תומכים בשפות מרובות ובפלטפורמות שונות.עבור תוכנה הנדסית שנכתבה ב- C/C++, כלים כמו FLT:0gcovFLT:1 ו-FLT:2BullseyeCoverageFLT 3 הם נפוצים.עבור מערכות מבוססות Java, FLT:4JCoFLT:5 הוא למעשה תקן של LT.

סוגי כיסוי וחשיבותם

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

קו Coverage

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

כיסוי

(הופנה מהדף ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

המונחים:

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

המונחים: MC / DC

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

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

למה לזהות דרכים לא נבדקות?

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

  • (FLT:0) Therac25 (1980s): מכונה טיפול בקרינה נכשלה עקב מצב גזע בתוכנה שלה, שמעולם לא נבדקה תחת רצף מבצעי מסוים.
  • (FLT:0)Mars Climate Orbiter (1999): נתיב קוד ניווט שיחידות מטריות ואימפריאליות מעורבבות מעולם לא הופעלו בבדיקות קרקעיות.
  • (FLT:0)Toyota לא הוצאה ב-2009: ראשי תיבות של קוד ביקורתיים ב-ECU לא נבדקו בתנאים של עולם אמת, מה שמוביל לזיכרון של מיליוני כלי רכב.

זיהוי מסלולים לא נבדקים לפני השחרור הוא אסטרטגיה להפחתה בסיכון פעיל.זה גם עוזר לספק אודיטורים רגולטוריים: סטנדרטים כמו ISO 26262, DO-178C, ו- IEC 62304 דורשים ניתוח כיסוי מבני כחלק מתהליך אימות.על ידי שימוש בכלים כיסוי למציאת נתיבים לא נבדקים, הצוותים יכולים לתעד תאימות ולבנות ביטחון בתוכנה שלהם.

שימוש בכלים כיסוי כדי למצוא נתיבים בלתי נראים

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

חקירה ובדיקת ביצוע

ראשית, להריץ או להפעיל את הקוד שלך עם כלי כיסוי שניתן ל- gcov, להתבסס על כך (FLT: 5) עבור JaCoCo, השתמש בסוכן באמצעות דגל ה-FLT:6. Run your full test.

יצירת וסקירה דוחות

השתמש בהוראות הדיווח של הכלי (למשל, FLT:9, FLT:10) כדי לייצר דוחות HTML או XML. דוחות אלה דוחות קוד צבע (ירוק = פגע, אדום = לא להיט) וזרועות גלויות. להתמקד תחילה על פונקציות או מודולים עם אחוזי כיסוי נמוכים.עבור כל קו חשוף או ענף, שאל: האם קוד זה ניתן להגיע תחת כל מצב?

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

לא כל הדרכים הבלתי נראות חשובות באותה מידה.

  • (ב) ,0) ,Error Treatment CodeFLT:1 (למשל, מטפלים חריגים, שגרות נפילה) - לעתים קרובות נותרו ללא עדות אך קריטיים עבור פעולה בטוחה.
  • (ב) [15] מקרים ותנאי גבול 1 (ב) - לולאות שמעולם לא היו מתעבות, מעידות על גבולות, מקרים של חדלות-היתר בהצהרות מתג.
  • (FLT:0) פונקציות הקשורות לאבטחה 1 - קוד המנטר חיישנים, קידוד תפוקה, או בדיקות invariants.

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

כלי כיסוי פופולריים להנדסת תוכנה

בחירת הכלי הנכון תלויה בשפה, בפלטפורמה ובדרישות הכיסוי.

gcov (C/C++)

(ג) הוא כלי הכיסוי של גנו עם GCC.הוא מספק קו וכיסוי סניף והוא חופשי ופתוח מקור.זה משלב היטב עם מערכות בנייה כמו CMake ויכול לשמש ב- cross-compilation עבור מטרות מוטבעות.

JaCo (Java)

JaCo הוא ספריית הכיסוי הסטנדרטית בתעשייה עבור Java.It מציעה קו, סניף וכיסוי שיטות.סוכן שלה יכול לצרף JVMs ללא שינויים קודים.עבור מערכות הנדסיות שנבנו על Java (למשל, SCADA או סימולציות), JaCo הוא יעיל מאוד.FLT:0 JaCo SiteFve 1 יש מדריכים מפורטים.

BullseyeCoverage (C/C++)

בולסופיאז' הוא כלי מסחרי המספק תפקוד, סניף וכיסוי מצב (כולל MC/DC) הוא מיועד לפיתוח ביקורתי ומוטבע בטיחותי.דיווחיו מראים בדיוק אילו תנאים בתוך ביטויים אינם מעידים על קבוצות רבות במרחב וברכב הנשען על בולספיפינג עבור DO-178C ו- ISO 26262 ציות.

כלים נוספים

  • (FLT:0) OpenCppCoverage (Windows, C/C++)FLT:1 - כלי קוד פתוח חופשי, פתוח המשלב עם Visual Studio ומציע כיסוי סניף.
  • (FLT:0Coverage.py (Python)cioFLT:1) עבור תסריטי הנדסה המונעת נתונים שנכתבו ב- Python, כלי זה מספק קו וכיסוי סניף.
  • (ב) ,0) ,ב-[[1924]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]

קבוצות רבות משתמשות בשירותי אגרציה מבוססי ענן כמו FLT:0 CodecovvFIRLT 1 או FLT:2narQubeofLT 3 כדי לדמיין מגמות כיסוי ובקשות למשיכת שער.

כיסוי כיסוי לתוך פיתוח עבודה

זיהוי נתיבים לא נבדק צריך להיות פעילות רציפה, לא ניתוח חד פעמי של כיסוי Embed לתוך צינורות CI /CD שלך:

  • (ב) סיקור על כל מבצע:0) 1 (הכיסוי חלקי נותן משוב מהיר.
  • (FLT:0) ,Set מינימום כיסוי סף סיקור 1FLT - נכשלים אם כיסוי טיפות מתחת לרמה תצורה (למשל, 80% כיסוי סניף עבור מודולים קריטיים).
  • (ב) סיקור:0 (הופנה מהדף "ה-Falve" 1) - הופך אותם לנגישים לכל היזמים.
  • (FLT:0) כיסוי כיסוי מכסה diffsFLT:1) כלים כמו Codecov להראות אשר קווים של בקשה חדשה למשוך מגעים כי הם לא נבדקים, מה מכריח את היזמים להוסיף בדיקות לשינויים חשופים.
  • (FLT:0)Gate מתמזג על נתיבים בלתי נראים של LT:1) - עבור תוכנה עתיר-התעצמות גבוהה, דורש 100% כיסוי MC / DC עבור פונקציות קריטיות בטיחות לפני מיזוג.

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

שיטות יעילות ביותר לשימוש יעיל

כדי להפיק את המרב מכלי כיסוי קוד למציאת נתיבים לא נבדקים, בצע את התרגילים האלה:

  • (FLT:0)Combine מספר סוגי כיסוי לכיסוי מספר 1 (FLT:1), סיקור קו לבדו יכול להיות מטעה. השתמש בכיסוי סניף וכיסוי מצב כדי לחשוף דרכים עמוקות יותר.
  • (FLT:0)Focus on high-סיכון CodeFirLT:1) - מטרות מורכבות, מטפלים בשגיאות, שגרות רגישות לביטחונה.לא כל הקוד זקוק לכיסוי של 100%; להתמקד במה שחשוב.
  • ניתוח סטטי של FLT:0 (Use סטטי ניתוח לצד כיסוי 1) - ניתוח סטטי יכול למצוא קוד בלתי ניתן לכיסוי כלים עשויים להחמיץ (למשל, קוד מת לא מבוצע בגלל שגיאות לוגיות).
  • (FLT:0) סיקור חישוב בתנאים ריאליים של FLT:1hil - השתמש בבדיקות ברמת מערכת ושילוב, לא רק בדיקות יחידה.
  • (FLT:0) סיקור סיקור עבור סיקור של סיקור 1 (בקיצור: 0) מבחנים שעולים באופן מלאכותי כיסוי ללא אימות התנהגות (למשל, בדיקות מבזבזני / משחתים) מבזבזים מאמץ.
  • (FLT:0) סקירת מגמות כיסוי לאורך זמןFLT:1 - מגמה של כיסוי מופחתת מעידה כי קוד חדש מותווסף ללא בדיקות מתאימות, יצירת נתיבים חדשים ללא עדות.
  • (FLT:0) לחנך את צוות ה-FLT:1 - עוזר למפתחים להבין כי דוחות הכיסוי אינם שיפוט אלא כלי למציאת פערים.

אתגרים ומגבלות

בעוד כלים חזקים, לכיסוי קוד יש מגבלות כי הצוותים חייבים להכיר:

  • (FLT:0)Overheadofph:1) - כלי שיט יכול להאט את ביצוע הבדיקה ולהגביר את גודל בינארי.עבור מערכות משובצות עם זיכרון חזק, ייתכן כי זה בעייתי.כלי זמני Compile לעתים קרובות יש זמן מוגבל יותר מאשר מראש אבל דורש התקנה זהירה.
  • (FLT:0) אמון אמון FLT:1 - כיסוי גבוה אינו מתכוון בדיקות מושלמות.מבחנים עשויים לממש קוד, אך לא לבדוק את התוצאות כראוי.שלב כיסוי עם בדיקות צפיפות ומוטציות.
  • (FLT:0) פיצוץPath פיצוץFLT:1 - עבור קוד מורכב מאוד עם תנאים רבים, כיסוי נתיב הוא חסר יכולת חישובית. השתמש MC / DC או כיסוי סניף כתחליף מעשי.
  • (FLT:0) אי-ההההבנה בייצור של LT:1 - רוב כלי הכיסוי נועדו לבדיקת פיתוח.הקוד המותקן לייצור הוא מסוכן עקב בעיות ביצועים ואבטחה.
  • (ב) [ה]:0] ,Language and Environment Limits FLT:1] - חלק מהמטרות המוטבעות חסרות כלי כיסוי חזק, במיוחד עבור הרכבה או חומרה אישית.

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

מסקנה

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