מערכת תיקון באגים אוטומטית מתקנת פי 10 טעויות רבות כמו קודמיו

איך לתקן את Windows 10 (יולי 2019).

Anonim

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

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

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

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

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

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

ביצועי תכונה

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

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

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

מועמדים

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

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

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

כאשר Long ו- Rinard הגדירו את המערכת שלהם כדי להסתפק בפתרון הראשון שעובר את הבדיקות המחקות את הבאג, הוא הצליח לתקן נכון 15 מתוך 19 השגיאות; כאשר הם אפשרו לה לרוץ במשך 12 שעות לכל בעיה, זה תיקן 18.

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

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

menu
menu