בדיקת תוכנה מוטמעת (embedded) היא תחום מורכב, מלא בכלים ומתודולוגיות שעוזרים למפתחים להבטיח את האפקטיביות והאמינות של הקוד שלהם. Cantata בולט בין כלים אלה ביכולתו לייעל את תהליכי בדיקות היחידה והאינטגרציה. בפוסט זה נצלול לעומק אל הפונקציונליות של Cantata על ידי חקירת ממשקי ה-GUI ושורת הפקודה (Command Line) שלו, לצד האינטגרציה שלו עם כלי הניתוח הסטטי QA Misra.
תחילת העבודה עם Cantata עבור C ו-C++ מוטמעים: מדריך מקיף
תוכנה מוטמעת — בין אם היא מפעילה בקרים תעשייתיים, מערכות רכב או מכשירים רפואיים — לרוב פועלת בהקשרים קריטיים לבטיחות (safety‑critical) שבהם כשל פשוט אינו אפשרות. ב-Novodes, אנו עוזרים לצוותי פיתוח להטמיע בדיקות איתנות בתהליכי העבודה שלהם, לצמצם פגמים מוקדם, להפחית כאבי ראש באינטגרציה ולעמוד בתקני עמידה (compliance).
בוובינר האחרון שלנו עברנו על Cantata (של QA Systems), כלי מוביל לבדיקות יחידה ב-C/C++, mocking, ניתוח כיסוי (coverage) ואינטגרציה של ניתוח סטטי (באמצעות QA‑MISRA). השתמשנו בפרויקט דוגמה זעיר בשם “temperature_monitor” כדי להדגים:
- יצירת בדיקות וניהול stubs מונחה GUI בכלי מבוסס Eclipse של Cantata
- יצירת בדיקות אוטומטית עם AutoTest
- תהליכי עבודה בשורת הפקודה עבור סביבות CI/CD ללא ממשק (headless)
- בדיקות ניתוח סטטי ועמידה ב-MISRA
למטה תמצאו סיכום עשיר, שלב אחר שלב — כולל צילומי מסך, קטעי קוד והדגשות של שיטות עבודה מומלצות — כך שתוכלו לשחזר טכניקות אלה בפרויקטים שלכם.
מדוע בדיקות יחידה ב-Embedded חשובות
בפיתוח שולחני או web, בוודאי ראיתם את היתרונות של בדיקות יחידה: מחזורי משוב מהירים יותר, ריפקטורינג בטוח יותר ותכונות אמינות יותר. ב-C/C++ מוטמעים, הבדיקות קריטיות אף יותר:
-
בידוד חומרה (Hardware Isolation)
חלק גדול מהלוגיקה המוטמעת חי מאחורי שכבות של דרייברים, HALs וקריאות RTOS. בדיקות יחידה מאפשרות לכם לדמות (“stub out”) שכבות אלה כך שתוכלו לאמת את הלוגיקה שלכם בסביבת build רגילה של מחשב PC. -
זיהוי פגמים מוקדם (Early Defect Detection)
תפסו גלישות חוצץ (buffer overruns), הסתעפויות לוגיות ושגיאות off‑by‑one הרבה לפני שהן מגיעות אי פעם לסיליקון או למעבדות QA. -
מטריקות כיסוי (Coverage Metrics)
מדדו כיסוי הצהרות (statement), החלטות (decision), MC/DC או כיסוי מותאם אישית כדי לזהות נקודות עיוורות בבדיקות שלכם. -
עמידה רגולטורית ובטיחותית
תעשיות כמו רכב (ISO 26262) ורפואה (IEC 62304) דורשות כיסוי קוד הניתן להוכחה ועמידה ב-MISRA‑C.
ללא בדיקות יחידה נאותות, באגים לרוב צצים במהלך אינטגרציה או בדיקות על-גבי-היעד (on‑target) — כאשר הם יקרים וגוזלי זמן בהרבה לפתרון.
הכירו את Cantata ו-QA‑MISRA
Cantata של QA Systems הוא כלי מוכח בתעשייה המביא:
- יצירת בדיקות אוטומטית (“AutoTest”)
- ממשק גרפי (UI) מבוסס סביבת Eclipse
- ממשק שורת פקודה לשימוש batch/CI
- שליטת stub עדינה (ערכי החזרה לכל מופע, בדיקות מספר קריאות)
- ניתוח כיסוי (הצהרות, החלטות, MC/DC, מותאם אישית)
QA‑MISRA משלים את Cantata עם:
- ניתוח סטטי מול כללי MISRA C/C++
- תצוגות לוח מחוונים והעמקה (Drill‑Down) של הממצאים לפי חומרה
- מערכי כללים מותאמים אישית ורמות חומרה (חובה, נדרש, מומלץ)
- בדיקות עמידה מוקדמות לפני בדיקות יחידה
בשילוב, כלים אלה עוזרים לכם להזיז שמאלה (shift‑left), ולהטמיע גם איכות וגם עמידה בתקנים לתוך מחזור חיי הפיתוח שלכם.
אפליקציית הדמו שלנו: temperature_monitor.c
לשם הבהירות השתמשנו בדוגמה מינימלית — רק שני קבצים:
// temperature_monitor.h
#ifndef TEMPERATURE_MONITOR_H
#define TEMPERATURE_MONITOR_H
extern int therm_get_reading(void);
void monitor_temperature(void);
#endif // TEMPERATURE_MONITOR_H
// temperature_monitor.c
#include "temperature_monitor.h"
#define TEMP_IDEAL 50
#define TEMP_CRITICAL_MAX 80
void monitor_temperature(void) {
int temp = therm_get_reading();
if (temp > TEMP_CRITICAL_MAX) {
/* …critical‐high branch… */
}
else if (temp > TEMP_IDEAL) {
/* …ideal‐range branch… */
}
else {
/* …normal‐operation branch… */
}
}
נקודה מרכזית:
therm_get_reading()מוצהר אך אינו ממומש — מושלם להמחשת האופן שבו Cantata יוצר stubs.
שלב 1: שילוב Cantata בתוך Eclipse
בנייה (Building) עם Cantata
- התקינו את הכלי Cantata ואת הרישיון בהתאם לתיעוד של QA Systems.
- ייבאו את פרויקט ה-C הקיים שלכם (לדוגמה
temperature_monitor) לתוך Cantata. - תחת Project → Properties , הגדירו את המהדר, ה-linker, סביבת העבודה והגדרות הכיסוי שלכם.
- בנו את הפרויקט כרגיל — Cantata מתחבר ל-makefile או לפקודת ה-build שלכם.
לאחר שהפרויקט שלכם עובר קומפילציה, עברו ללשונית “Test Explorer”, לחצו לחיצה ימנית על קובץ המקור, ותראו את האפשרות Generate Test Script מופיעה בתפריט הנפתח.
יצירת סקריפט הבדיקה הראשון שלכם
- לחצו על Generate Test Script.
- באשף, בחרו Statement Coverage (או בחרו קריטריונים מרובים).
- בחרו Empty Test Script (נוסיף מקרי בדיקה ידנית).
- לחצו על Finish.
כעת Cantata יוצר קובץ חדש תחת, למשל, tests/temperature_monitor.c — זהו הפיגום (scaffolding) למקרי הבדיקה שלכם.


שלב 2: כתיבה והרצה של בדיקות ידניות
יצירת מקרי בדיקה באמצעות ה-GUI
- בתצוגת ה-Test Explorer, הרחיבו את צומת סקריפט הבדיקה.
- לחצו לחיצה ימנית על הפונקציה monitor_temperature ← Add Test Case.
- Cantata מייצר קוד C עם:
- פונקציית
main()שעוברת על כל מקרי הבדיקה - טבלת stub המפרטת את
therm_get_reading() - מאקרו ממלאי מקום
EXPECT_CALLוקריאה ל-monitor_temperature()
- שמרו, בנו, ואז הריצו את הבדיקה על ידי לחיצה ימנית על סקריפט הבדיקה ובחירת Run.
שליטה ב-Stubs לכיסוי הסתעפויות (Branch Coverage)
- Cantata מפרט כל קריאה חיצונית (stub) תחת Interface Control.
- כברירת מחדל, כל stub מחזיר 0 או ערך ברירת מחדל בטוח.
- כדי להניע את ההסתעפות הקריטית:
- לחצו לחיצה ימנית על מופע ה-stub ← Edit Return Value ← הזינו
90. - שמרו והריצו מחדש את הבדיקות.
- לחצו לחיצה ימנית על מופע ה-stub ← Edit Return Value ← הזינו
- כדי לבדוק את הסתעפות ה-ideal:
- הוסיפו מופע שני של אותו stub.
- הגדירו אותו להחזיר
60. - הקצו את מופע-1 למקרה בדיקה 1 ואת מופע-2 למקרה בדיקה 2.
- הריצו מחדש את שתי הבדיקות בבת אחת.
בחינת דוחות כיסוי
- לאחר ההרצה, בחרו את תצוגת ה-Coverage ב-Eclipse.
- תראו פסים אדומים/ירוקים לכל קובץ, עם אחוזים:
- כיסוי הצהרות (Statement Coverage): 75%
- כיסוי החלטות (Decision Coverage): 50%
- גללו כדי לראות בדיוק אילו שורות/הסתעפויות נפגעו (ירוק) או הוחמצו (אדום).

שלב 3: האצה עם AutoTest
כתיבה ידנית של עשרות מקרי בדיקה היא מייגעת. ה-AutoTest של Cantata מבצע זאת אוטומטית:
- פתחו מחדש את Generate Test Script.
- בחרו במצב AutoTest במקום Manual.
- בחרו את קריטריוני הכיסוי שלכם (לדוגמה, Statement + Decision).
- לחצו על Finish.
תוך שניות, Cantata:
- מייצר מערך קומפקטי של מקרי בדיקה המשיגים את הכיסוי הרצוי
- מסיק (infers) ספירות
EXPECT_CALLוערכי החזרה אוטומטית - ממטב (Optimizes) את מספר הבדיקות כך שהרצות הבדיקה שלכם נשארות מהירות
בחנו את הקוד שנוצר כדי לראות כיצד Cantata פתר כל הסתעפות מבלי שתכתבו שורה אחת.
שלב 4: תהליכי עבודה ב-CLI ללא ממשק (Headless) עבור CI/CD
עבור בסיסי קוד גדולים (1M+ שורות קוד), Eclipse יכול להפוך לאיטי. ה-CLI של Cantata מאפשר לכם לכתוב סקריפט לכל דבר:
1. Build the project
2. Generate tests (AutoTest + coverage)
3. Execute tests
4. Produce HTML reports
לאחר מכן תוכלו לשלב פקודות אלה ב-Jenkins, GitLab CI או Azure Pipelines.
גישה זו מתרחבת למודולים מרובים, הרצות בדיקה מקבילות, ואוכפת שערי כיסוי (coverage gates) לפני מיזוגים (merges).

שלב 5: אכיפת תקני קידוד עם QA‑MISRA
בדיקות יחידה תופסות באגים לוגיים — אך כללי סגנון ועמידה בתקנים דורשים ניתוח סטטי:
- הפעילו את QA‑MISRA והריצו את הניתוח
- עיינו בבעיות שהתגלו:
- ספירת בעיות לכל קובץ
- העמיקו לכל ממצא לקבלת תיאור הכלל ותיקונו
- סננו לפי חומרה: חובה (Mandatory), נדרש (Required), מומלץ (Advisory)
- התאימו אישית את מערך הכללים שלכם דרך פאנל ה-”Rules” (הפעלה/השבתה של כללים, שינוי חומרה).
- שלבו את QA‑MISRA ב-CI שלכם לפני או לצד בדיקות Cantata.
על ידי תפיסת הפרות MISRA מוקדם, אתם נמנעים מעבודה חוזרת בהמשך הצינור (pipeline) — חיוני להסמכה קריטית לבטיחות.

טיפים מתקדמים ושיטות עבודה מומלצות
-
השתמשו ב-Stubs בבקרת מקור (Source‑Controlled)
בצעו commit לסקריפטי ה-testולתצורות ה-stub שלכם לתוך מאגר ה-Git שלכם כך שכל הצוות שלכם חולק את אותו בסיס בדיקות. -
אמצו שערי כיסוי (Coverage Gates)
הכשילו את ה-build שלכם אם הכיסוי יורד מתחת לסף מוסכם (לדוגמה 80% הצהרות, 50% החלטות). -
שלבו Manual ו-AutoTest
תנו ל-Cantata לייצר את עיקר הבדיקות, ולאחר מכן צרו בעבודת יד בדיקות למקרי קצה (edge‑case) במידת הצורך. -
מנפו Stubs פרמטריים (Parameterized)
השתמשו בערכי החזרה לכל מופע ובבדיקות מספר קריאות כדי לדמות רצפי חומרה מורכבים. -
תזמנו רגרסיה תקופתית
הריצו builds לילתיים עם בדיקות AutoTest ו-QA‑MISRA רעננות כדי להגן מפני רגרסיות כיסוי.
סיכום והצעדים הבאים
בדיקות יחידה וניתוח סטטי אינם תוספות אופציונליות — הם שיטות עבודה ליבה לבניית תוכנה מוטמעת אמינה. עם Cantata ו-QA‑MISRA בשרשרת הכלים שלכם, אתם יכולים:
- ליצור stubs לשכבות החומרה וה-RTOS עבור בדיקות מבוססות PC
- לייצר ולמטב בדיקות אוטומטית עם AutoTest
- לשלב בצורה חלקה גם בתהליכי עבודה של GUI וגם בצינורות CI/CD
- לאכוף עמידה ב-MISRA‑C מוקדם בפיתוח
ב-Novodes, אנו מתמחים בעזרה לצוותים לאמץ כלים אלה — בהתאמת תצורות, בכתיבת stubs מותאמים אישית, ובשילובכם בתהליך בדיקה יעיל ואוטומטי.
מוכנים להאיץ את בדיקות ה-embedded שלכם?
👉 צרו קשר עם הצוות שלנו לקבלת הדגמה מותאמת אישית או סדנה מעשית. בואו נהפוך את הגרסה הבאה שלכם לאמינה ביותר עד כה!