(08/10/2024) עלו היום לאתר 9 סמינריונים 2 תזות 2 מאמרים

לרכישה גלול למטה לסוף הדוגמית

Software visualization and deep transfer learning for effective software defect prediction

Keywords: cross project defect prediction, within project defect prediction, deep transfer learning, self-attention, software visualization.

Software visualization and deep transfer learning for effective software defect prediction

הדמיית מידע ולמידת העברה עמוקה (deep transfer learning) לחיזוי יעיל של כשלי תוכנה

אבסטרקט

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

על מנת לצמצם את הפער בין למידה עמוקה וחיזוי כשלים, אנו מציעים מסגרת עקרון קצה לקצה היכולה להשיג חיזוי תוצאות עבור תכניות ללא שימוש בכלי חילוץ מאפיינים. לשם כך, אנו ראשית מדמים תכניות כדימויים, מיישמים את מנגנון תשומת הלב (self-attention mechanism) על מנת לחלץ מאפייני דימוי, מפעילים למידת העברה כדי להפחית את הבדל חלוקות הדגימה בין הפרויקטים, ולבסוף מזינים את קבצי הדימוי אל מודל הלמידה העמוקה, המאומן מראש לחיזוי כשלים. ניסויים עם 10 פרויקטים קוד פתוח ממערך הנתונים PROMISE מראים כי השיטה שלנו יכולה לשפר חיזוי כשלים בין-פרויקטים (cross-project) ותוך-פרויקטים (within-project). פרטי הקוד שלנו נגישים ב- https://zenodo.org/record/3373409#.XV0Oy5Mza35.

1. הקדמה

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

כדי לחזות האם מודול מסוים פגום או לא, נלקח מספר רב של מאפיינים מתוכננים ידנית, לרבות מאפייני קוד סטטיים ומאפייני תהליך. כדי לשפר אותם, לימודי חיזוי כשלי תוכנה עכשוויים מתמקדים בעיקר על שני כיוונים עיקריים: שיטות חילוץ מאפיינים חדשים ושיטות מיון נלמדות מאוספי נתונים בקנה מידה גדול. אולם טכניקות חיזוי כשלים, המזינות מאפיינים מתוכננים ידנית אל אלגוריתמים של למידת מכונה למטרות מיון, הינן בעלות מספר מגבלות. הנדוס המאפיינים הנחוץ לוקח זמן רב ודורש שימוש בכלים מיוחדים במעלה הזרם (upstream), כמו ניתוח מורכבות קוד, כריית יומני הגשה (submission log mining), וכלי ניתוח מבנה קוד. אי לכך, מאפיינים רבים עשויים להיות קשים ללכידה בפרויקטים מסוימים. לדוגמה, מידע קוד סמנטי, כגון המאפיינים החבויים בעצי סינטקס מופשטים (ASTs), עלולה להיות מיוצגת לא כהלכה על ידי מאפיינים מסורתיים. בנוסף לחוסר הנוחות של הנדסת מאפיינים למאפיינים מסורתיים, כפי שתואר לאחרונה על ידי Wan et al. בסקירה של חיזוי כשלים, מידע סמנטי מסוגל להבחין בין אזור קוד אחד לאחר יותר טוב מאשר מידע סינטקטי. כך, בעוד שמאפיינים המועברים דרך AST עשויים להיות שימושיים עבור חיזוי כשלים, גישות אלו הינן לא-ישירות ודורשות כלים עודפים כדי לבנות ולכרות את ה ASTs. בנוסף, עם גישות כאלו, ברוב המקרים לא נעשה שימוש בקוד המקור מרגע שה- ASTs חולצו.

מספר שיטות למידת מכונה, כמו למשל, support vector machine (SVMs), naïve Bayes (NB), עצי החלטה (DTs) ורשתות עצבים (NNs) יושמו על חיזוי מודולים פגומים. במיוחד, מחקר אחרון הסיק כי רשתות למידה עמוקה אפקטיביות במיווחד במיון דימויים, חילוץ מאפיינים, וייצוג ידע באזורים רבים. בפרט בחיזוי כשלים, על מנת לייצר מאפיינים סמנטיים, שיטה חדשנית מינפה רשתות אמונה עמוקה (deep belief network – DBN) ללמידת מאפיינים מווקטורים מייצגים אשר חולצו מ ASTs של תוכנות. על בסיס זה, Li et al. ו Dam et al.  השתמשו במידע מבני של תכנות, וביחסים הסמנטיים בין מילות מפתח, כדי לשפר חיזוי כשלים אצל רשת עצבית מפותלת (קונבולוצית) ( convolutional neural network—CNN) ורשתות זיכרון-ארוך-קצר-טווח (long-shirt-term-memory networks—LSTMs). במאמרים האלו הנדסת המאפיין הנחוצה הייתה משמעותית ודרשה שימוש בכלים ספציפיים במעלה-הזרם.

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

תמונה 1 מראה דוגמה מעודדת. שני קבצי הג’אווה למעלה, File1.java ו- File2.java דומים אחד לשני, שניהם מכילים הצהרת 1 if, שתי הצהרות for וארבע קריאות פונקציה (function calls). למרות זאת, המאפיינים הסמנטיים והמבניים של הקבצים שונים. תהינו האם הדמיה יכולה לעזור בלומר ששתי התכניות האלו שונות. לעשות זאת, הפכנו סימני הקוד לפיקסלים, כאשר הצבעים ייצגו את ערך ASCII הדצימלי של הסימנים, כדי אז לסדר את הפיקסלים במטריצה, ובכך השגנו דימויי קוד. על ידי השוואת הדימויים, יכולנו לזהות ויזואלית הבדלים משמעותיים בין התכניות התואמות, כפי שניתן לראות בתחתית תמונה 1. הן ההבדלים הסמנטיים והן המבניים ניתנים היו לזיהוי ויזואלי בדימויים אלו. מה שהוביל אותנו אל התזה המניעה את המאמר:

ניתן לזהות דומות סמנטית ומבנית בין שתי תכניות על ידי השוואה וויזואלית של דימויי תוכנה.    

על מנת לבדוק את התזה, התחלנו עם מערך נתונים ידוע היטב ממאגר ה PROMISE, מתוכו נבחרו 10 פרויקטים עם קבצים פגומים. ברגע שהקבצים מומרים לדימויים, אנו מחלצים אוטומטית מאפיינים ובונים מודל מיון בעזרת הפלטפורמה הפופולרית AlexNet. בנוסף, אנו משתמשים בלמידת העברה עמוקה (deep transfer learning) ומנגנון תשומת לב עצמית (self-attention mechanism) (הפרטים נמצאים בתמונה 4 ובחלק 3.2) על מנת לשפר עוד יותר את חיזוי הכשל, במיוחד CPDP. לבסוף, אנו מציעים מסגרת עיקרון קצה לקצה, היינו למידת העברה עמוקה עבור חיזוי כשלים (DTL-DP), כדי לחזות אוטומטית האם קובץ תכנית מכיל פגמים או לא.

מאמר זה תורם את הבאות:

  • אנו מציעים גישה חדשנית לחיזוי כשלים המבוססת על הדמית קבצי תוכנה כדימויים, על מנת ללכוד את המידע הסמנטי והמבני שלהם.
  • אנו מציעים מסגרת למידה עמוקה בעיקרון קצה לקצה, DTL-DP, המורכבת ממודל למידת העברה עמוקה בשילוב עם מנגנון תשומת לב עצמית, המקבל דימויי קובץ תוכנה כקלט ופולט ‘פגום’ או ‘לא פגום.’
  • ניסויינו על 10 פרויקטים OS Java מראים כי הגישה שלנו משפרת הן את WPDP והן את CPDP. היתרונות של DTL-DP  ב CPDP ברורים הרבה יותר מאשר מ WPDP. אנו מראים כי תשומת לב עצמית מייצרת את התרומה הגדולה ביותר ל WPDP, בעוד שלמידת העברה מייצרת את התרומה הגדולה ביותר ל CPDP.

יתר המאמר מאורגן כלהלן. ראשית, אנו סוקרים עבודה רלוונטית בחלק 2. לאחר מכן אנו מתארים את DTL-DP ומציגים את ההגדרה הניסויית שלנו בחלקים 3 ו 4 בהתאמה. לאחר מכן, אנו דנים בביצוע של DTL-DP בחלק 5, ובאיומים על תקפות בחלק 6. לבסוף, אנו מסכמים את העבודה ומספקים כמה כיוונים פוטנציאלים למחקר עתידי בחלק 7.

2. עבודה קשורה

חיזוי כשלים (DP). תשומת לב רבה מופנית אל DP, המהווה את אחד מתחומי העניין העיקריים במחקר הנדסת תוכנה. מספר מחקרים התמקד על עיצוב ידני של מאפיינים או על ייצור קומבינציות חדשות של מאפיינים קיימים מתוך כשלים היסטוריים מתויגים. מאפיינים אלו דרך כלל מוזנים אל תוך ממיין מבוסס-למידת-מכונה על מנת לקבוע האם קובץ מסוים פגום. ניתן לחלק את המאפיינים הנפוצים לסטטיים, למשל גודל קוד ומורכבות קוד (לדוגמה מאפייני Halsted, McCabe, CK), ומאפייני תהליך כמו השוני ההתנהגותי של מפתחים בתהליך פיתוח התוכנה. מחקרים רבים הדגימו כי מאפייני תהליך יכולים לחזות איכות תוכנה. Moser et al. השתמשו במחברים, תיקוני עבר, מספר התיקונים וגיל הקבצים כמאפיינים, על מנת לחזות כשלים. Nagappan et al. ציינו כי כתיבת קוד מחדש (code churn) הייתה אפקטיבית עבור DP. Hassan et al. השתמשו בחישוב האנטרופיה בין השינויים כדי לחזות כשלים. מאפייני תהליך נוספים גם כן יכולים לסייע, כגון מאפייני מפתחים אינדיבידואליים ומשתפי הפעולה שלהם.

בהתבסס על מאפיינים אלו, מודלים שונים ללמידת מכונה לרבות SVM, NB, DT, NN ועוד, נבנו עבור שתי המשימות השונות של DP: תוך-פרויקטים, WDPD, ובין-פרויקטים, CPDP. עבור WDPD, מערך האימונים ומערך הבדיקה מגיעים מאותו הפרויקט, בעוד שעבור CPDP הם באים מפרויקטים שונים. בעוד וWDPD יכול לתת תוצאות טובות יותר, הוא מוגבל בשימושו המעשי מכיוון שלעיתים קרובות קשה להשיג באמצעותו מידע אימונים עבור פרויקט חדש. מקרים מסוימים השתמשו לחלופין בפרויקטים קשורים על מנת לבנות מודלים של חיזוי עם מידע היסטורי מספיק, ואז השתמשו בהם כדי לחזות כשלים בפרויקט היעד.  Panichella et al. הציעו גישה בשם CODEP המשתמשת במודל מיון לשלב את תוצאות 6 אלגוריתמי מיון (לרבות רגרסיה לוגיסטית, רשת פונקציית בסיס רדיאלית – radial basis network function, ופרספטרון רב-שכבתי – multilayered perceptron ), עבור CPDP. Turhan et al. ו- Peters et al. השתמשו באסטרטגיות שונות לבחור ברגעים המתאימים בפרויקט מקור על בסיס פרמטרים. DTL מבוסס אדוורסרי (adverserial) מתייחס לחניכה של טכנולוגיה בהשראתgenerative adversarial nets—GAN למציאת ייצוגים ברי העברה וברי יישום על תחומי המקור והיעד. DTL מבוסס מיפוי מתייחס למקרי מיפוי אזורי-המקור-והיעד למרחב נתונים חדש, בו חלוקות שני האזורים (Domains) דומות. TCA ושיטות מבוססות TCA נמצאות בשימוש רחב ביישומים של למידת העברה מסורתית (MMD). השימוש בהן נעשה כדי למדוד את דגימת החלוקה לאחר עיבוד רשתות עצבים עמוקות וייצוגים של משתני אזור נלמדים (learned domain invariant representations), וזאת, על ידי חניכת שכבת הסתגלות ואובדן בלבול (confused) אזור נוסף. Long et al. שיפרו מחקר קודם על ידי החלפת ה MMD עם משתנה רב גרעיני MMD (MK-MMD), במקור על ידי [69], והציעו שיטה המכונה רשתות הסתגלות עמוקה (deep adaptation networks—DAN). Long et al. הציעו ממוצע אי התאמה מקסימלי משותף כדי לקדם את יכולת למידת ההעברה של רשתות עצביות כדי לסגל אותה לחלוקת הנתונים של אזורים שונים. מרחק ווסרטשטיין (Wasserstein), שהוצע על ידי Arjovsky et al., משמש כמידת מרחק חדשה למציאת מיפוי טוב יותר בין אזורים.

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

3. גישה

בתמונה 2 ניתן לראות את המסגרת הכללית לגישתנו, למידת העברה עמוקה עבור חיזוי כשלים, DTL-DP. המסגרת מורכבת משני שלבים, (1) הדמיית קוד המקור ו (2) עיצוב (modeling) עם DTL. בשלב הראשון אנו משתמשים בשיטת הדמיה להמיר את קבצי התוכנה לדימויים. בשלב השני אנו בונים מודל DTL מבוסס על מבנה הרשת AlexNet עם למידת העברה ומנגנון תשומת לב עצמית כדי להרכיב מסגרת חיזוי כשלים קצה לקצה. אנו משתמשים במסגרת זו לחזות האם מקרה קובץ חדש הינו פגום או לא.

בקצרה, גישתנו לוקחת ישירות כקלט את קבצי התוכנה העירומים של מערכי אימון ובדיקה, ומייצרת דימויים עבורם, שלאחר מכן משמשים לבניית מודל ההערכה עבור חיזוי כשלים. באופן ספציפי, מאחר ונתוני הקלט של מודל הרשת המבוסס על מבנה הCNN אמור להיות בצורת דימויים, אנו בונים מיפוי כדי להמיר את הקבצים לדימויים. אז, אנו משתמשים בחמשת השכבות הראשונות של AlexNet  כרשת מאפיין (feature-net) על מנת לייצר מאפיינים מהדימויים. שכבות הCNN  הרדודות מתאימות לנוכחותם והיעדרותם של פגמים במבנה הכולל של הקוד, ומעמיקות בהדרגה את הגרעיניות מגופי פונקציה/לופ אל שמות פונקציה, מזהים, ועוד. מאפיינים אלו לאחר מכן מוזנים אל תוך שכבת תשומת הלב (attention layer) שם הם משמשים להקצאת משקלים, ולהדגשת מאפיינים, אשר מסייעים יותר למיון. המאפיינים של מערכות האימון והבדיקה אשר נשקלו מחדש משמשים לחישוב MK-MMD, המודד את ההבדל בין החלוקות שלהם כאובדן MMD. לאחר מכן, המאפיינים הנשקלים מחדש של מערכת האימון מוזנים אל תוך השכבות המחוברות-לגמרי כדי לחשב את האנטרופיה בין המאפיינים (cross entropy) כאובדן המיון. הסכום הנשקל של אובדן ה MMD ואובדן המיון מוזן בחזרה כדי לאמן את כל המערכת, לרבות רשת-מאפיין, שכבת תשומת לב, והשכבות המחוברות-לגמרי. לבסוף, בהתבסס על שיטת ההדמיה של קוד המקור ומודל ה DTL, אנו בונים, מאמנים, ומעריכים מודל לחיזוי כשלים. להלן הפרטים.

3.1 הדמיית קוד מקור      

המרת קוד לדימויים שומרת על מידע ומאפשרת שיפור שיטות מבוססות על רשת עצבים עמוקה (deep neural networks –DNN) לחיזוי כשלים. רוב השיטות הקיימות מתעלמות מהקשרים בין מאפיינים מחולצים ומשימת המיון. השיטה שאנו מציעים יוצרת מסגרת קצה לקצה מאוחדת לחילוץ מאפיינים, עיצוב (modeling) וחיזוי.

תמונה 3 מראה כיצד אנו ממירים כל קובץ תוכנה ל 6 דימויים שונים. אנו מכנים את תהליך זה, הדמיית קוד מקור, ולדימויים הנוצרים, דימויי קוד. ראשית, כל קובץ מקור מומר לווקטור של מספרים שלמים לא חתומים (unsigned) בני 8 חלקים המתאימים לערכי ASCII הדצימליים של סימנים בקוד המקור, לדוגמה, ‘a’ מומר ל 97, וכדומה. אז אנו מייצרים דימוי מהווקטור, על ידי ארגון ערכיו בשורות וטורים ומפרשים אותו כדימוי מלבני. דרך ישירה להדמות את הערכים בני 8 החלקים כעוצמות צבע תהיה כרמות שונות של אפור, למשל, 0=שחור, ו 255=לבן. אולם, גודלה הקטן יחסי של מערכת האימון המקורית שלנו משמעה שאם נעשה כך, ניוותר עם מודל עמוק אשר בלתי ניתן לאימון מספיק. למרבה המזל, יתרון נוסף של שימוש בדימויים לאימון הוא שאנו מסוגלים להגדיל את מערך הנתונים המקורי כדי לייצר מערך נתונים גדול יותר בלי לשנות את הסמנטיקה. שיטות נפוצות להגדלת מערכי נתוני דימויים כוללות הפיכה (flipping, אופקית ואנכית) , סיבוב (רוטציה), קיזוז (cropping), תרגום (תנועה על ציר הX  או ציר ה Y), הוספת רעש גאוסי (עיוות של מאפייני תדר גבוה), התמקדות ודירוג (zooming and scaling). מאחר וגודל התוכנה שלנו קטן, בעוד שאנו רוצים לשמור על המאפיינים הסמנטיים והמבניים בדימויים, שיטות הגדלת מערכי הנתונים שצוינו כעת עלולות להוביל לאובדן נתונים.

במקום זאת, עיצבנו שיטת הגדלה חדשנית מבוססת צבע על מנת לייצר 6 דימויי צבע מתוך כל קובץ בקוד המקור. כלומר, כל פיקסל בדימוי צבע יכול להיות מיוצג על ידי שלושה מרכיבי צבע עיקריים, או ערוצים: אדום (R), ירוק (G), ו כחול (B). האותיות R, G, B, כלומר ערוצי הצבע, ניתנות לסידור ב 6 דרכים שונות: RBG, RGB, BGR, BRG, GRB ו GBR. על ידי אימוץ סדר שונה בכל פעם, כפי שניתן לראות בתמונות 2 ו 3, אנו מייצרים שיש דמויים שונים לכל קובץ תוכנה. למשל, ‘for’ מומר ל [102, 111, 114], וערכי ה 3 מוזנים אל תוך ערוצי הR, G ו B בשש דרכים שונות על מנת להשיג שישה פיקסלים צבועים באופן שונה.

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

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

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

 Width * length = vector size/3.  

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

3.2 עיצוב (modeling) באמצעות למידת העברה עמוקה (deep transfer learning)    

כעת נתאר את גישתנו, DTL-DP. היעד הינו ללמוד מאפיינים ברי העברה בין פרויקטים, ולבנות ממיין y = φ (x) של פגימות קובץ, יחד עם פיקוח על קוד המקור, במקום בו x מייצג את הדגימה ו y הוא התווית החזויה. בבעיית חיזוי הכשל, נין לנו פרויקט מקור (משוואה) עם מקרים מסומנים ns, ופרויקט יעד (משוואה) עם מקרים לא-מסומנים nt. ב WPDP, פרויקט המקור הינו פרויקט קשור לפרויקט היעד. חלוקות הדגימה p ו q בפרויקט המקור ופרויקט היעד הן בדרך כלל דומות ב WPDP, אך שונות ב CPDP.

עבור ארכיטקטורת הרשת העמוקה שלנו אנו מאמצים ארכיטקטורה דומה לזו של רשתות הסתגלות עמוקות (DANs—deep adaptation networks) כדי ללכוד את המידע הסמנטי והמבני של קוד המקור. הוספנו שכבת תשומת לב למודל ה DAN  המקורי כדי להגביר עוד את יכולת ההבעה של מאפיינים חשובים. הארכיטקטורה הכללית מאוירת בתמונה 4. במיוחד, מסגרת ה DTL-DP  שלנו מורכבת משכבת קלט, חמש שכבות פיתול (conv1 – conv5, מ AlexNet), שכבת תשומת לב, ולבסוף ארבע שכבות חבויות מחוברות-לגמרי (ƒ c6 – ƒ c9)  העובדות כממיין. הפרמטרים והמבנה של (conv1 – conv5) ו (ƒ c6 – ƒ c9) הם עקביים עם DAN. אבל מאחר וחיזוי כשלים היא בעיית מיון בינארית, נוספת שכבה מחוברת-לגמרי ( ƒ c9) כדי להשיג תוצאה בינארית בסוף.

אנו מאמצים את ברירות המחדל עבור ΑlexNet, כך שהקלט של DTL-DP מוכרח להיות דימוי בגודל 224*224 מקוזז מתוך דימוי שלושה-ערוצים (RGB) בגודל 256*256. דימוי הקוד ממוקם במרכז המשוער של דימוי ה 256*256 (קביעת גודלו של כל דימוי קוד מתואר יותר מאוחר, בחלק 3.3). אנו מציינים כאן כי דימוי הקוד עשוי להיות קטן יותר מ 224*224 פיקסלים עקב השינויים בגודל קבצי הקוד. במידה וזה קורה, הדימוי מרופד באמצעות פיקסלים חלקים (ערך אפס). הריפוד לא אמור להשפיע בצורה שלילית על הביצוע האיכותי של זיהוי מאפיינים בדימויים; למעשה, עבור ארכיטקטורות DL עמוקות כמו שלנו, ריפוד מספק קונטרסט עודף לדימוי המוטמע (או המוצג, embedded) עבור כל אחת מהשכבות, כמו גם חציצה נגד אובדן נתונים אצל כל שכבה.

אימון מודלים עמוקים דורש כמויות משמעותיות של נתונים מתויגים, אשר אינם זמינים עבור פרויקטים חדשים, כך שתחילה אימנו-מראש מודל של AlexNet על ImageNet 2012. שלא כמו DAN, המקפיא conv1 – conv3 ומכוונן (fine-tunes) conv4 – conv5, אנו מכווננים את כל שכבות הפיתול conv1 – conv5 על ידי לקיחת הפרמטרים של המודלים המאומנים מראש כפרמטרים ראשוניים שלאחר מכן אנו מפעילים במהלך שלב האימון. אנו עושים זאת כדי למזער את ההבדלים בין דימויי הקוד שלנו לדימויי האובייקט האמתיים ב ImageNet 2012.

כדי ש DTL-DP יוכל להתמקד על מאפייני המפתח בדימויי כשל שונים, ובכך לשפר עוד יותר את החיזוי, אנו משתמשים במנגנון תשומת לב עצמית במודל שלנו אשר נעשה בהשראת הביצוע הטוב של תשומת לב עצמית ב- GANs. כפי שניתן לראות בשכבת תשומת הלב בתמונה 4, מנגנון תשומת הלב גורם למפת המאפיינים המיוצרת על ידי שכבה conv5  להפוך לקלט מפת-מאפיין-תשומת-הלב-העצמית עבור השכבה הבאה, c6ƒ . באופן ספציפי, המנגנון ראשית ממפה באופן לינארי את מאפייני הקלט x (מדובר בפיתול של 1*1, לדחוס את מספר הערוצים, כלומר, out_chanels = in_chanels/8) ומפיק (x)ƒ, g(x) ו- h(x), בהם (משוואה). ההבדל בין השלושה הוא שגודל  h(x) נותר זהה ל x, בעוד שבשניים האחרים לא. לפיכך, אם רוחבו של x הוא W, גובהו H ומספר הערוצים C, גודלו של x הוא [C,  N], בו N = W * H, גודלו של (x)ƒ ושל g(x) הוא [C/8, N], אבל גודלו של h(x)  הוא [C, N]. ה- (x)ƒ וה-  g(x) המשועתקים עוברים הכפלת-מטריצה להשיג קורלציה עצמית במאפיינים, כלומר, היחסים של כל פיקסל לכל שאר הפיקסלים, בהם (משוואה). לאחר מכן, softmax מיושם עם מאפייני הקורלציה העצמית, S, להשיג מפת תשומת לב, המורכבת ממשקלים עם ערכים בין 0 ל- 1:

משוואה (1)

לאחר מכן, הפלט של שכבת תשומת הלב היא מפת מאפיין תשומת הלב העצמית (משוואה), בה

משוואה (2)

אז, כל שכבה מחוברת-לגמרי לומדת מיפוי לא-לינארי (משוואה), לפיו (גורם) הוא הייצוג החבוי  בשכבה l של מאפיין (גורם); (גורם) ו (גורם) הם המשקלים וההטיות של שכבת ה-l; ו(גורם) הוא פונקציית ההפעלה, המשתמשת ב ReLU  (משוואה) עבור  c6 – ƒ c8 ƒ  וב softmax עבורc9  ƒ. אם נניח ל θ לציין את המערכת של סך כל הפרמטרים של DTL-DP, הסיכון האמפירי של DTL-DP יהיה, אם כן,

משוואה (3)

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

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

משוואה (4)

משוואה (5)

בהן β ≥ 0 הם משקלי הגרעינים.

ה MK-MMD dk (p,q) של חלוקות ההסתברות p ו- q מוגדר כמרחק גרעין רפרודוקציה מרחב הילברט בין הממוצע המוטמע של p ו- q. הנוסחה הריבועית של MK-MMD מוגדרת כ-

משוואה (6)

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

משוואה (7)

בה (גורם) הוא שכבת ה-l במספר של הייצוג החבוי עבור המקור והיעד; (גורם) הוא ה MK-MMD בין המקור והיעד, המוערך על שכבת ייצוג ה-l,  λ הוא פרמטר ענישה, ו (גורם) ו (גורם) הם שכבותc  ƒ  לחשב את ה MK-MMD בין המקור והיעד. ביישום שלנו את DTL-DP,העמדנו λ = 1, l1 = 6 ו- l2 = 9, כפי שהיה בעבודת הDAN המקורית.

3.3  רגישות המודל לבחירות פרמטר 

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

היפר-פרמטר λ. מודל הDTL-DP  הינו בעל היפר-פרמטר λ עבור קנס (penalty) ה MMD המכוון את האובדן הסופי. ערכנו ניסויי רגישות פרמטר λ הן בהגדרת WPDP והן ב CPDP. קיבענו את שאר הפרמטרים וטווח λ ב  {0.01, 0.05, 0.1, 0.2, 0.5, 1, 2, 5}. ניתן לראות את התוצאות בתמונה 5(a). בעוד ויחסית עקבי לאורך הטווח, קיימות עדיין וריאציות קטנות. ב CPDP, מידת ה F ראשית גדלה ואז קטנה לאורך ההיפר-פרמטר λ. ב WPDP, λ משפיע על הביצוע של DTL-DP, רק בכיוון ההפוך. כאן בחרנו ב λ = 1.

סדרי צבע שונים. בחירת תשניות ה R,G,B בדימויי פרויקט היעד עשויה להשפיע פוטנציאלית על התוצאה. ערכנו ניסויים עם כל ששת הסדרים השונים. כאשר בדקנו אותם, קבענו את λ ל- 1 ושינינו את סוג הדימוי של פרויקט היעד לכל אחד ב {RGB, RBG,BRG, BGR, GBR, GRB}. ניתן לראות את התוצאות בתמונה 5(b). דימויי היעד בסדרי צבע שונים הינם בעלי ביצועים שונים. אבל בסך הכול הערכים קרובים לממוצע הביצוע של DTL-DP.

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

עבור דימויי הקוד שלנו, דרושים 3 בית (byte) של קוד מקור כדי ליצור פיקסל 1, כל בית עבור אחד מהערוצים R, G, ו B. גודל קבצי המקור הינם בין 0 ל 100 kb, בהתאמה לדימויים עם ספירת פיקסל של בין 0 ל 33, 133 (100*1024/3). גודל הדימוי הוא (רוחב, אורך), כאשר רוחב הושג מטבלה 1 לפי גודל קובץ הקוד (גודל).

משוואה (8)

 לדוגמה, גודל הדימוי שהומר מ 20kb קובץ קוד הינו (65, 107).

התנסינו עם רוחבי דימוי של 1/8, ¼, ½ , 2, 4 ו 8 פעמים ביחס לרוחבי הדימוי המומלצים בטבלה 1. ככל שגורם המכפלה גדול יותר, כך הדימוי רחב יותר. עבור דימויים ברוחב שונה, חזרנו על הניסוי הקודם והשגנו תוצאות עבור הממוצע מידה F, כפי שניתן לראות בתמונה 5(c). ניתן לראות התוצאה הממוצעת טובה יותר ככל ומתקרבים אל רוחבי הדימוי המומלצים בטבלה 1. בנוסף מצאנו שדימוי רחב יותר עדיף על דימוי צר יותר. ככל והדימוי קרוב יותר לצורה של ריבוע, כך החיזוי טוב יותר. לכן דאגנו לכך שהדימויים יהיו קרובים ככל הניתן לצורה לריבוע.

3.4 אימון וחיזוי

בעת אימון ה DTL-DP, דימויי קוד נוצרים מהמקרים המתויגים בפרויקט המקור ומהמקרים הלא מתויגים בפרויקט היעד, ורק אז, אלו מוזנים בו זמנית אל המודל. הם חולקים את שכבות  הפיתול conv1-conv5 ואת שכבת תשומת הלב כדי לחלץ את המאפיינים שלהם, ומחשבים את ה  MK-MMD בין פרויקט המקור לפרויקט היעד בשכבות המחוברות-לגמרי  c6 – ƒ c9ƒ. יש לציין כי חישבנו אנטרופיה בין פרויקטים רק עבור פרויקט המקור, מכיוון שתוויות פרויקט היעד אינן היו זמינות. אנו משתמשים במיני קבוצת (mini-batch)  ירידת שיפוע סטוכסטית (stochastic gradient descent) לאורך פונקציית האובדן כדי לאמן את הפרמטרים של המודל בכללותו. אנו מאמנים למשך 500 פרקי זמן (epochs) עבור כל זוג של מקור ויעד, ואז בוחרים את פרק הזמן עם מידת ה F הטובה ביותר (כפי שמתואר בחלק 4.3) ממנה אנו קוראים את הפרמטרים של המודל הסופי. לבסוף, הקבצים שיש לחזות מפרויקט היעד מומרים לדימויי קוד ומוזנים אל המודל המאומן בשביל מיון.

תמיד תהיה האפשרות של התאמת יתר (overfitting) עם צינורות כמו אלו. כאן, אנו ממתנים את האפשרות הזו עם הבחירות הבאות: (1) הגדלת מערך הנתונים על ידי שימוש ב6 תשניות ערוץ צבע, כפי שתואר בחלק 3.1, (2) בחירת מבנה מודל פשוט מ AlexNet, ו (3) שימוש במודל ImageNet 2012 מאומן-מראש כדי להפחית תנודות.  

4 הגדרה ניסויית 

ערכנו ניסויים כדי להעריך את ביצוע ה DTL-DP ולהשוות אותו עם גישות קיימות מבוססות למידה עמוקה לחיזוי כשלים, הן לחיזוי כשלים תוך-פרויקטים, WPDP, והן לחיזוי כשלים בין-פרויקטים, CPDP. ערכנו ניסויים על שרת Linux עכשווי עם 3 Titan XP GPUs. כל עוד לא ציינו אחרת, כל ניסוי נערך 10 פעמים והתוצאות שדווחו הן הממוצעים.

4.1 תיאור מערך נתונים  

 על מנת להשוות באופן ישיר בין העבודה שלנו למחקר קודם, השתמשנו בנתונים הזמינים לציבור ממאגר הנתונים PROMISE, בו נעשה שימוש נרחב בעבודה על חיזוי כשלים. בחרנו בכל הפרויקטים קוד פתוח ג’אווה מהמאגר, ואספנו את מספר הגרסה שלהם, שם הכיתה (class), ותווית הבאגי (buggy) עבור כל קובץ. על בסיס מספר הגרסה ושם הכיתה, השגנו את קוד המקור של כל קובץ מ GitHub והזנו אותו למסגרת הקצה לקצה שלנו. בסך הכול, נאסף מידע על 10 פרויקטים ג’אווה. טבלה 2 מראה את הפרטים של הפרויקטים, לרבות תיאור פרויקט, גרסאות, סך כל מספר הקבצים הממוצע ושיעור הכשל. ראוי לציין שמספר הקבצים הממוצע בכל הפרויקטים נמצא בין 150 ו 1046, ושיעור הכשל של הפרויקטים בעל ערך מינימלי של 13.4% וערך מקסימלי של 49.7%. מספר הקבצים בפרויקטים מסוימים אינו מספיק בשביל לאמן מודלים עמוקים, והכיתות אינן מאוזנות, כך שדרושה הגדלה, כפי שתואר למעלה.

4.2 שיטות השוואת בסיס    

כדי להעריך את ביצוע מסגרת הקצה לקצה שלנו לחיזוי כשלים, DTL-DP, אנו משווים אותה עם שיטות הבסיס הבאות בהגדרת WPDP:

  • סמנטית: השיטה האחרונה המפעילה רשתות אמונה עמוקה, DBN, על קוד מקור כדי לחלץ מאפיינים סמנטיים לחיזוי כשלים.
  • PROMISE-DP: שיטה מסורתית הבנוה עת החלטה מתחלף, ADTree, ממיין המבוסס על 20 מאפיינים של מערך הנתונים PROMISE.
  • DP-LSTM: מודל רשת עצבים עמוקה, זיכרון קצר-ארוך טווח, מבוססת LSTM, המשתמשת ב ASTs בשביל לייצג קבצי מקור ולחזות האם הקובץ פגום או לא.
  • DP-CNN: רשת עצבים מתפתלת (convolutional), מודל מבוסס CNN אשר מחולק (seeded) לווקטורים מספריים המושגים על ידי AST כדי ללמוד אוטומטית מאפיינים סמנטיים ומבניים של תוכנות. המאפיינים הנלמדים-CNN משמשים לאמן את הממיין הסופי בשילוב עם מאפיינים מסורתיים.

עבור הגדרות הבין-פרויקטים, CPDP, לא ניתן להשתמש בSemantic וב- PROMISE-DP באופן ישיר. במקום, השתמשנו בבאים:

  • DBN-CP: משתנה של Semantic המאמן DBN על ידי שימוש בפרויקט המקור ומייצר מאפיינים סמנטיים הן עבור המקור והן עבור היעד.
  • TCA+: הטכניקה האחרונה עבור CPDP.

כדי להשיג את נתוני הבדיקה והאימון, התחקינו אחר התהליכים שהוקמו ב [16]. עבור WPDP אנו משתמשים בשתי גרסאות עוקבות של כל פרויקט המצוינות בטבלה 2. הגרסה הישנה יותר משמשת להפקת נתוני האימון, והגרסה היותר עכשווית משמשת כנתוני בדיקה. עבור CPDP, אנו בוחרים גרסאות אקראית עבור כל פרויקט, בשביל 11 פרויקטים. אנו משתמשים באותם 22 צמדי בדיקה כמו ב [16]. כאשר מיישמים את שיטות הבסיס, אנו משתמשים באותה ארכיטקטורת רשת והגדרת פרמטרים כפי שמתואר במאמרים שהציגו אותם.

4.3 מידות ביצוע 

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

באופן ספציפי, חיזוי לפיו קובץ הינו פגום נקרא חיובי אמתי (TP) אם הקובץ הנו למעשה פגום, וחיובי שקרי (FP) אם אחרת. באופן דומה, חיזוי שקובץ אינו פגום הינו שלילי אמתי (TN) אם הקובץ אינו פגום, ושלילי שקרי (FN) אם אחרת. לכן הדיוק (P), זיכרון (recall – R), ומידת F מוגדרים כ:

משוואה (9)

משוואה (10)

משוואה (11)

5 תוצאות

חלק זה דן בתוצאות ההשוואה בין כלי ה DTL-DP והבסיס לחיזוי כשלים.

5.1 RQ1: כיצד DTL-DP עומד ביחס לשיטות למידת-מכונה מבוססות-מאפיין ושיטות למידה-עמוקה מבוססות-AST, ב WPDP?

אנו משווים את DTL-DP ל4 גישות בסיס, המייצגות שני סוגים שונים של שיטות חיזוי כשלים. PROMISE-DP היא מייצג הבסיס לשיטות למידת-מכונה מבוססות-מאפיין מסורתיות. הבסיסים לשיטות מסוג למידה עמוקה הינם Semantic, DP-LSTM ו DP-CNN, המבוססות על חילוץ נתונים מ AST. בהנחיית מחקר קודם, ערכנו 16 מערכות של ניסויי WPDP, כאשר בכל אחד השתמשנו בשתי גרסאות של אותו פרויקט. הגרסה הישנה יותר שימשה לאמן את מודל החיזוי, והגרסה החדשה יותר להעריך את מודל האימון.

טבלה 3 מראה את ערכי מידת ה F עבור ניסויי חיזוי כשלים תוך-פרויקטים, WPDP. ערכי מידת ה F הגבוהים ביותר של 5 השיטות מודגשות בטבלה. מאחר והשיטות המבוססות על למידה עמוקה כוללות אקראיות רמה מסוימת של אקראיות, הרצנו את Semantic, DP-LSTM ו DP-CNN 10 פעמים בכל ניסוי. בממוצע, מידת ה F של הגישה שלנו היא 0.642, וה-         PROMISE-DP, Semantic, DP-LSTM ו DP-CNN השיגו 0.499, 0.641, 0.515 ו 0.570, בהתאמה. התוצאות הדגימו כיצד השיטה שלנו תחרותית, וכיצד היא עשויה לשפר חיזוי כשלים בהשוואה ל  PROMISE-DP, DP-LSTM ו DP-CNN. התוצאות של Semantic ושל הגישה שלנו דומות.

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

5.1.1 מקרה בוחן: הבחנת (discrimination) WPDP ב DTL-DP. t-SNE הוא אלגוריתם הפחתת ממדים לא-לינארי היעיל בהדמיית דומות ובסיוע זיהוי מקבצים במערכי נתונים מורכבים.

. כדי להשיג תובנה אל תוך ביצועי ה DTL-DP הדגמנו העברת מאפיין בכך שהצגנו (embeddings) t-SNE בתמונה 6. הנקודות הכחולות מייצגות קבצים לא פגומים, והאדומות קבצים פגומים. הבחנו בבאים: (1) מקרי היעד לא הובחנו טוב כל כך, כאשר השתמשו או במאפיינים הידניים המסורתיים או במאפיינים הידניים המשופרים TCA+ או במאפיינים הסמנטיים שחולצו מASTs , בעוד שלשיטתנו, הנקודות הובחנו בצורה הרבה יותר טובה. (2) עם שלושת הגישות האחרות, הקטגוריות בין פרויקט המקור לפרויקט היעד לא עומדות בקו אחד, בעוד שלשיטתנו, הקטגוריות בין הפרויקטים עקביות יותר. מסקנות אלו נובעות ממרחקי האינטרה- והאינטר-כיתה של שתי הקטגוריות בתמונות 6 ו 7. ניתן לראות אותן וויזואלית.

בפרויקטים מסוימים, הביצועים של השיטה שלנו לא היו טובים כמושל שיטות אחרות, כמו ant, ככל הנראה כתוצאה משינויים גדולים בגדלי הקבצים. בעוד שגדלי ant 1.5 ו anτ 1.6 קרובים אחד לשני, יש הבדל משמעותי בין ant 1.6 ו and 1.7, כאשר הראשון קטן מהרבה מהשני. בטבלה 3 ניתן לראות, כי הביצוע של שיטתנו ב ant 1.5 ˃ and 1.6 טוב יותר מזה של ant 1.6 ˃ ant 1.7. מנגד, שיטות בסיס אחרות מ DP-LSTM מבצעות טוב יותר עבור המשימה ant1.6- ˃ ant1.7. ראוי לציין ש Semantic דומיננטית, מה שמצביע על כך שהשיטה הסמנטית מבוססת-מאפיין חזקה ועמידה יותר לשינויים בגדלי קובץ. בנוסף, מערך הנתונים של ant בעל שני חסרונות, הראשון הוא שכמות הנתונים קטנה, ולראיה טבלה 2, בה הכמות הממוצעת היא רק 488 קבצים לפרויקט. השני הוא שהכיתות לא מאוזנות, והיחס של קבצים פגומים הוא 13.4%, הנמוך ביותר מתוך כל הפרויקטים שלנו. מה שהופך את אימון המודל העמוק לקשה יותר, ומוביל לביצועים פחות טובים של השיטה שלנו בחלק מהפרויקטים.

5.2 RQ2: כיצד DTL-DP עומד ביחס לשיטות למידת-מכונה מבוססת-מאפיין ולמידה-עמוקה מבוססת-AST, ב CPDP?

כאן אנו משווים ל TCA+  ו DBN-CP, במקום ל PROMISE ו Semantic, כגישות הבסיס, כפי שהוסבר בחלק 4.2. בהנחיית עבודה קודמת, ערכנו 22 מערכות ניסויים של CPDP. בכל אחת בחרנו אקראית שתי גרסאות פרויקטים, אחד כמערך אימון והאחר כמערך בדיקה.

טבלה 4 מציגה את תוצאות מידת ה F של DTL-CP ואת 4 גישות הבסיס. ערכי מידת ה F הגבוהים ביותר מודגשים. בממוצע, מידת ה F של גישתנו ב CPDP היא 0.618, וה- DBN-CP, TCA+, DP-LSTM ו DP-CNN השיגו 0.568, 0.479, 0.495 ו 0.528. כך, DTL-DP מבצע טוב יותר מהשאר ב 8.8%, 29.0%, 24.8% ו 15.5%, בהתאמה. בנוסף, מצאנו שעבור פרויקטים log4j1.1 ו poi3.0 השיטה שלנו מראה ביצועים טובים יותרמהשיטה עם הביצועים הטובים ביותר ב-WPDP  המתאים.

ה-DTL-DP שהצענו מראה שיפורים משמעותיים לשיטות אחרונות של חיזוי כשלים בין-פרויקטים.

5.2.1 מקרה בוחן: הבחנה של CPDP ב DTL-DP. ברור כי השיטה שלנו דומיננטית יורת ב CPDP מאשר ב WPDP. סיבה אפשרית לכך היא שלמידת העברה עמוקה הופכת את חלוקות דגימות האימון והבדיקה לדומות יותר במרחב המאפיין. סיב הנוספת עשויה להיות היכולת העילאית של מודלים עמוקים לייצג מאפיינים, מה שמאפשר למודל להשיג עוד מאפיינים ברי העברה מהדימויים. כדי לקבל תובנה נוספת, בחרנו את המשימה poi3.0 → ant1.6, והראנו את שיכון ה t-SNE  בתמונה 7. עשינו הבחנות דומות כפי שהיה במקרה בוחן RQ1 , היינו (1) מקרי היעד מובחנים בקלות יותר בשיטה שלנו, ו (2) מקרי היעד יכולים להיות מובחנים טוב יותר עם ממיין המקור. מה שמרמז על כך שהגישה שלנו יכולה ללמוד יותר מאפיינים ברי העברה בשביל חיזוי כשלים יעיל יותר.

5.3 כמה תורמים כל אחד משלושת המנגנונים הבאים לביצועי DTL-DP: הגדלת נתונים, העברת למידה, ומנגנון תשומת לב עצמית? 

כדי למצוא את התרומה הספציפית של שלושת החלקים האלו לחיזוי כשלים, ערכנו כמה ניסויים נוספים. בנינו את מודל ה AlexNet  המקורי למיון בינארי והשתמשנו בו כ Base. שלושה בסיסים חדשים, +TL, +Attention  ו +DataAug נבנו על ידי הוספת אחד המנגנונים לבסיס ה AlexNet (העברת למידה, תשומת לב עצמית והגדלת נתונים), בהתאמה. ראוי לציין שבנוסף ל +DataAug השתמשנו בדימויים שיוצרו על ידי רצף אחד של R, G ו B כמערכי אימון ובדיקה בכל ניסוי. לכן התוצאות הניסיוניות של Base, +TL and +Attention בטבלאות 5 ו 6 הינן תוצאות ממוצעות על פני ששת התשניות השונות של RGB, כפי שתואר למעלה.

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

הבחנו גם בעלות הזמן עבור שלושת המנגנונים ב DTL-DP  שהצענו כאן. טבלה 7 מראה את התוצאות. רוב הזמן שהוקדש בהגדלת נתונים היה למרה אל דימויים, כלומר, הדמיית קוד מקור. עבור למידת העברה, רוב הזמן הוקדש לחישוב MK-MMD, ועבור תשומת לב עצמית, לחישוב שכבת תשומת הלב בתמונה 4. לדוגמה, עבור פרויקט ant 1.5 → 1.6 ו ant1.6 → 1.7. בממוצע, לוקח 45.04 שניות, 13.01 שניות ו 4.59 שניות לשלושת החלקים, בהתאמה, הן לנתוני הבדיקה והן לאימון. למידת העברה לוקחת הזמן הארוך ביותר, יותר מסכום שני האחרים. זאת בגלל מספר המטריצות הגדול הדרוש כדי לחשב MMD עם פונקציית הגרעין (kernel). עלות הזמן המועטה ביותר מתרחשת במנגנון תשומת הלב, ותרומתו ל WPDP היא הגדולה מבין השלושה, כלומר, היא היעילה ביותר ביחס לעלות.

שלושת המנגנונים תורמים לעבר דיוק מסגרת הקצה לקצה שלנו, ב WPDP ו CPDP. התרומה הגדולה ביותר לWPDP שייכת לתשומת לב עצמית, והתרומה הגדולה ביותר לCPDP שייכת להעברת למידה.  

6 איומים על תקפות

איומים על תקפות פנימית מגיעים משגיאות ניסיוניות ומשכפול שיטות הבסיס. כדי להשוות ולנתח את טכניקות חיזוי הכשלים המבוססות למידה עמוקה, השווינו בין שיטת ה DTL-DP שלנו ל Semantic, DBN-CP, DP-LSTM ו DP-CNN. בנוסף, השיטה שלנו מושווית גם לשיטה מבוססת העברת למידה TCA+, היינו הטכניקה האחרונה ב CPDP. מאחר והיישומים המקוריים לא היו זמינים, יישמנו מחדש גרסאות משלנו של הבסיסים. למרות שעקבנו בנוקשות אחר ההליכים המתוארים בעבודה שלהם, יתכן והיישומים החדשים שלנו לא יצליחו לשקם את כל פרטי היישום המקוריים שלהם. בנוסף, האקראיות של הגישה המבוססת למידה עמוקה הופכת את התוצאות של ניסויינו המיושמים לשונות מאלו של המקוריים.  מאחר והסרנו את הכניסות במערך הנתונים PROMISE שאינן יכולות לחלץ את קובצי המקור מתאימים, התוצאות של ניסויי היישום-מחדש שלנו עלולות להיות לא-עקביות עם הבסיסים המקוריים.

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

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

7 מסקנות ועבודה עתידית

הוספנו כאן שתי תרומות עיקריות: הדמית קוד עבור חיזוי כשלים ומודל משופר להעברת למידה עמוקה. התוצאות הניסיוניות שלנו ב 10 פרויקטים קוד פתוח מראות כי למידה עמוקה יכולה להיות מיושמת אפקטיבית באופן ישיר למטרת חיזוי כשלים לאחר הפעלת שיטות הדמיה של הקוד. באופן ספציפי, ביצועי הגישה שלנו, DTL-DP, נמצאים  בראש הטווח של גישות WPDP אחרונות. עבור CPDP, DTL-DP  משפר את הטכניקה האחרונה TCA+, הנבנה על מאפיינים מסורתיים, ב 29.0% (במידת ה F). בנוסף, הוא משפר את הגישות המבוססות למידה עמוקה DBN-CP, DP-LSTM ו DP-CNN ב 8.8%, 24.8% ו 15.5%, בהתאמה.

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

Keywords: cross project defect prediction, within project defect prediction, deep transfer learning, self-attention, software visualization.

Software visualization and deep transfer learning for effective software defect prediction

הדמיית מידע ולמידת העברה עמוקה (deep transfer learning) לחיזוי יעיל של כשלי תוכנה

אבסטרקט

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

על מנת לצמצם את הפער בין למידה עמוקה וחיזוי כשלים, אנו מציעים מסגרת עקרון קצה לקצה היכולה להשיג חיזוי תוצאות עבור תכניות ללא שימוש בכלי חילוץ מאפיינים. לשם כך, אנו ראשית מדמים תכניות כדימויים, מיישמים את מנגנון תשומת הלב (self-attention mechanism) על מנת לחלץ מאפייני דימוי, מפעילים למידת העברה כדי להפחית את הבדל חלוקות הדגימה בין הפרויקטים, ולבסוף מזינים את קבצי הדימוי אל מודל הלמידה העמוקה, המאומן מראש לחיזוי כשלים. ניסויים עם 10 פרויקטים קוד פתוח ממערך הנתונים PROMISE מראים כי השיטה שלנו יכולה לשפר חיזוי כשלים בין-פרויקטים (cross-project) ותוך-פרויקטים (within-project). פרטי הקוד שלנו נגישים ב- https://zenodo.org/record/3373409#.XV0Oy5Mza35.

1. הקדמה

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

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

295.00 

מק"ט 599fff3e1dd5 קטגוריה
מק"ט 599fff3e1dd5 קטגוריה

295.00 

סיוע בכתיבת עבודה מקורית ללא סיכונים מיותרים!

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