מידע מורחב

  • תאריך
  • שעה 00:12
  • ע"י
  • צפיות 2548
  • תגובות 14
  • דירוג 5 /5

ניתוח קוד סטטי - הסבר ולא מידע שיווקי

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


מהי טכנולוגיית ניתוח סטטי

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

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

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

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


יתרונות וחסרונות של ניתוח סטטי
חוזקות ויתרונות –
  • הטמעה מהירה יחסית בתהליך הפיתוח
  • אפס מאמץ נדרש מהמפתחים למצוא באג
  • מכסה מגוון רחב של באגים / כשלים / בעיות
  • מוצא ומדווח על מיקום מדויק של הבאג
  • מאפשר מחזור תיקון מהיר של באגים
  • נועד לשימוש ע"י מפתחים למציאת באגים בשלבים מוקדמים של הפיתוח
  • הכלים והתהליכים ניתנים לאוטומציה (בקלות) – קבלה מהירה של תוצאות האנליזה
  • סורק את כלל הקוד בפרויקט לקבלת "כיסוי" מלא
  • מאפשר קבלת מידע נוסף/תומך להבנת הבעיה (traceback) , בכך מקטין את זמן ה-"מחקר"
  • מאפשר מציאת באגים בשלבים מוקדמים בתהליך הפיתוח, מקטין עיכובים ומוזיל עלות תיקון


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



יתרונות וחסרונות של ניתוח דינמי
חוזקות ויתרונות –
  • תוצאות אנליזה די מדויקות
  • זיהוי בעיות בסביבת המטרה / הריצה
  • הכלים מספקים גמישות לגבי מה לסרוק/לבדוק – מיקוד בדברים חשובים
  • עשוי לאפשר בדיקות מסוימות עבור חלקים / ספריות / מודולים עבורם אין גישה לקוד
  • אימות של תוצאות אנליזה סטטית
  • עשוי למצוא בעיות שאנליזה סטטית לא יכולה למצוא
  • מאפשר אימות חישובים – נכונות אל מול עמידות (correctness vs. robustness)


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


אשמח לענות על שאלות ולספק מידע מעמיק.

קיימת קבוצת לינקדאין ספציפית לנושא אנליזת קוד סטטית – כולם מוזמנים להצטרף
http://www.linkedin.com/groups/Static-Code-Analysis-in-Israel-3739578
עדיין לא נרשמת לאתר ? לחץ כאן להרשמה מהירה
נא המתן...
דירוג
  1. רק לסדר את המחשבה בראש, מדובר על שימוש בכלי Flow Control?
  2. איך בדיקות סטטיות משתלבות בתהליך הפיתוח?

    האם זה כלי למפתחים או לאנשי בדיקות?
  3. הי מאור, אילו אינם כלים לניהול תהליכים (Flow Control) ואפילו לא הדמיית-תהליכים (Flow-Charting).
    הטכנולוגיה, וכלים אלו סורקים אוטומטית את קוד המקור, באופן דומה לסקר-קוד-מקור ידני, ומוצאים באגים. השימוש בהם נעשה על קוד כתוב כבר במטרה למצוא באגים אחרי קומפילציה ולפני ההרצה.
  4. הטכנולוגיה טובה בעיקר לשפות סטטיות (C, C++, Java) אך אני מכיר כמה כלים גם ל- Ruby, Pearl, and Python
  5. בדיקה סטטית היא כלי למפתחים ולא לאנשי QA מאחר והכלי סורק את הsource code ומתריע על בעיות איכות ובטיחות שנובעות מעצם הקידוד. בדרך כלל כלים כאלו מנתחים את הבילד אבל יש כלים מתקדמים יותר שמספקים גם ניתוח של הבילד וגם ניתוח לוקלי קצר שהמפתח מריץ על הקבצים שלו מתוך שולחן העבודה. כדאי לך לבדוק את Klocwork.
    www.klocwork.com
  6. יש את jsLint שהוא מדהים.
    את FxCop המייקרוסופטי ל.NET וresharper
    עדיין מחפש משהו מועיל לPHP אבל קשה למצוא אחד כזה לשפה דינאמית . אם אתם מכירים משהו שווה - ספרו לי.
  7. Hi Alex,
    If indeed PHP is your language, there are: php-sat, php-ast, PHPLint, PHP_Depend and PHP_CodeSniffer, that I know of. You should also check phpCallGraph, but I am less familiar with it.
    You can also run PHP in lint-mode (php -l FILENAME), from the command line. It will check the file for valid syntax (eg. parse it), but won't execute it.

    HipHop for PHP - is a source code transformer that turns PHP code into C++ code that can then be compiled with g++, can also be used for static code analysis to find some problems in PHP source code.
  8. Thanks Gil
    I've been asking for a particular recomendation, rather then googling those for me,
    thanks anyway though.
  9. הי אלכס,
    אני אישית לא עובד עם PHP ...
    כמו כל כלי - חשוב שהוא יתאים לך ולאפליקציה שאתה מפתח. בחלק מהמקרים כלים שונים יכסו תחומים ובעיות קצת שונות. אם איכות מאוד חשובה בפרוייקט שלך אז תריץ כמה כלים. זה לוקח מעט מאוד זמן יחסית לדיבאג ידני.
  10. אתה יכול להמליץ על כלי ל #C ?
  11. אני מכיר את -Klocwork שהוא כלי High-End ומכוון לחברות בינוניות ומעלה עם כמות קוד גדולה.
    רוב מפתחי ה-C# מסתפקים בכלים כגון אלו המגיעים עם MS-Visual-Studio או חינמיים.
    כלים בתשלום צריכים להצדיק את מחירם, וזה תלוי בעלות באג. לכן כלים מסחריים טובים מתרכזים בשפות תכנות המקובלות בפיתוח תוכנות ומוצרים המכילים תוכנה בתחומי הטלקום, רפואה, צבאי, וכדומה.
  12. בהקשר זה - אני רוצה להמליץ על וובינר חינם בנושא מבוא לאנליזה סטטית שיתקיים ביום רביעי הקרוב 26/10/11 בשעה 18:00 - שם תוכלו ללמוד עוד אודות כלים לניתוח סטטי,מסלולי הבעיות אותם הם מאתרים וחשיבות השימוש בהם לאורך כל שלבי הפיתוח - מעניין ומרחיב דעת!
    הירשמו דרך:http://resources.klocwork.com/outreach-webinar-oct26.html
    ענבל
  13. שלום לכולם

    מפנה אתכם למצגת מעניינת בנושא שימוש באנליזה סטטית בתהליכי הסבת קוד - בלינק במצורף:

    http://www.slideshare.net/TrinitySB/trinity-code-porting-tips-tricks
  14. אלכס - אולי עדיין לא מאוחר בקשר לכלי SCA עבור C# .... הכי טוב שיצא לי לעבוד איתו זה CodeIt.Right של חברת SubMain


עליך להתחבר כדי להגיב. לחץ כאן להתחברות.