Saturday, May 8, 2010

כיצד לזהות באופן אוטומטי פלגיאריזם בתוכנה

במאמר שהופיע ב-25th Symposium On Applied Computing, בשם הפרובוקטיבי  A Novel Framework to Detect Source Code Plagiarism: Now, Students Have to Work for Real!, טוענים החוקרים שחתומים על המאמר שהקיץ הקץ על פלגיאריזם בתוכנה אצל סטודנטים בקורסי תכנות. הם מציעים שיטה לזיהוי אוטומטי של קוד ש-"דומה" באופן חשוד לקוד אחר. למעשה, לא מאמר הם הציגו בכנס אלא פוסטר -- מצגת. המאמרון שפורסם הוא רק שני עמודים אשר מציגים בקיצור נמרץ את הרעיון ואת השיטה, ללא ירידה לפרטים טכניים (שאותי באופן אישי מעניינים יותר).

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

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

האם השיטה שלהם עובדת בכלל וכיצד? לא ברור -- לא הייתי ולא חזיתי במה שהציגו. אני מטיל ספק ביכולות כל עוד אין באמת משהו שאפשר להזין אותו ולהבין האם הוא אכן עובד ועד כמה טוב הוא עובד. הרעיון גם בניסוחו כאן אינו מפתיע כלל. הקטע העיקרי הוא לא, לדעתי, האם להשתמש בפונקציות מרחק (כמו Edit Distance)  אלא על מה ובאיזה אופן. דווקא הפרטים המימושיים הללו חסרים במאמר ובמצגת ולדעתי, מלבד רעיון כללי ואולי כמה נסיונות "תפורים" אין לחבר'ה הללו יותר מידי "בשר". אני מקווה שהעבודה שתהם תבשיל ושאכן יציגו שיטות יפות.

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

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