ניתוח סטטי לעומת ניתוח דינמי בבדיקת תוכנה



מהי ניתוח סטטי?

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

ניתוח סטטי נעשה לאחר קידוד ולפני ביצוע בדיקות יחידה.

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


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

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


כאשר מפתחים מבצעים ניתוח קוד, הם בדרך כלל מחפשים

  • שורות קוד
  • תדירות תגובה
  • קינון נכון
  • מספר שיחות פונקציה
  • מורכבות סיקלומטית
  • יכול לבדוק גם בדיקות יחידה

תכונות איכות שיכולות להיות במוקד הניתוח הסטטי:

  • מהימנות
  • יכולת תחזוקה
  • יכולת בדיקה
  • שימוש חוזר
  • הִטַלטְלוּת
  • יְעִילוּת


מהם היתרונות של ניתוח סטטי?

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

יתרונות ניתוח קוד סטטי:


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

    • קוד שלא ניתן להגיע אליו

    • שימוש משתנה (לא מוכרז, לא בשימוש)

    • פונקציות שלא נקראו

    • הפרות ערך גבוליות

מגבלות על ניתוח קוד סטטי:

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


מהי ניתוח דינמי?

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

מתוך ויקיפדיה הגדרה של ניתוח תכניות דינמיות :

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


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

יתרונות ניתוח קוד דינמי:

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

מגבלות ניתוח קוד דינמי:

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