210 likes | 505 Views
淡江大學資訊管理學系. 利用程式碼相似度輔助學生程式作業分群之實作. 前言. 程式碼比對可以分為語彙層及語法層兩 種 比對技術 。 語彙 層 比對 : 以 符號為單位,依兩程式之間的相同符號之 多寡 , 決定 兩者相似 度 語法 層 比對 : 必須 將程式碼轉換成結構圖或流程圖,再將圖形依節點互相比對,找出最相似的兩個 節點 , 決定 程式 相似度 程式碼比對的應用方向包括 協助 查詢 相似範例 程式 , 加速 開發 速度 偵測重複程式,有利程式精簡及合併 偵測 抄襲,利於版權 維護
E N D
淡江大學資訊管理學系 利用程式碼相似度輔助學生程式作業分群之實作 淡江大學資訊管理學系
前言 • 程式碼比對可以分為語彙層及語法層兩種比對技術。 • 語彙層比對:以符號為單位,依兩程式之間的相同符號之多寡,決定兩者相似度 • 語法層比對:必須將程式碼轉換成結構圖或流程圖,再將圖形依節點互相比對,找出最相似的兩個節點,決定程式相似度 • 程式碼比對的應用方向包括 • 協助查詢相似範例程式,加速開發速度 • 偵測重複程式,有利程式精簡及合併 • 偵測抄襲,利於版權維護 • 本文將程式碼比對應用於協助程式教學。在班級眾多學生程式中,如何偵測相似寫法給予一致分數,一直是批改程式作業之困擾。本文將利用程式相似度,對學生程式作業進行分群,以輔助作業批改之給分一致性。 • 本文將實作此程式分群系統,並評估其分群正確性。 淡江大學資訊管理學系
文獻探討 • Whale (1990) 綜合各種語彙及語法層的程式碼比對技術,將其大致區分為兩類: • 屬性比對 • 結構比對 淡江大學資訊管理學系
文獻探討-屬性比對 • 六個數值維度比對程式相似度 (Sallis et al., 1996) • 容積(Volume) (Halstead, 1997) • 結構(Structure) • 資料相依(Data Dependency) • 迴圈深度(Nesting Depth) • 控制結構(Control Structure) • 控制流程(Control Flow) 淡江大學資訊管理學系
文獻探討-結構比對 • 結構比對: 以如下幾個實際系統為例 • MOSS(Measure Of Software Similarity) • YAP(Yet Another Plague) • JPlag • SID(Software Integrity Diagnosis system) • SIM(software SIMilarity tester) 淡江大學資訊管理學系
文獻探討-結構比對 • MOSS(Measure Of Software Similarity)(Schleimer et al., 2003) • 將程式的符號字串(token string),每相鄰k個符號合併成一個長度k片段(k-gram),計算其雜湊值。 • 程式有n個符號,將可計算出n-1個片段的雜湊值 • 這些雜湊值集合選擇其部分子集合可形成程式的指紋(fingerprint) • 依照雜湊原理,不相同子串得到相同雜湊值的碰撞機率很小,因此若兩程式有一個或更多個雜湊值相同,則表示其有相同的長度k片段 淡江大學資訊管理學系
文獻探討-結構比對 • YAP (Yet Another Plague) (Wise, 1992) • 可以偵測程式中相似片段 • 使用Running-Karp-Rabin Greedy-String-Tiling (RKR-GST)演算法 • 分為兩個階段 • 前處理階段 • 比對階段 淡江大學資訊管理學系
結構比對-YAP(Yet Another Plague) • 前處理階段 • 移除註解和固定字串 • 轉換大寫字母為小寫字母 • 將同義字對應到通用格式 • 依照呼叫順序重新排列function次序。並把第一次呼叫到的function展開,之後的呼叫則以FUN替代 • 移除非程式語言字彙的字詞 淡江大學資訊管理學系
結構比對-YAP(Yet Another Plague) • 比對階段 • 片段(tile)需為兩程式共有之子字串 • 當一個符號成為片段一部份,將作標記(marked),不再重複使用 • 定義MaxM為最大匹配相似片段,表示兩程式目前找到的最大相似片段 • 定義MinML為最小匹配長度,凡是比MinML小的片段皆忽略之 • GST演算法找出兩程式間最大相似片段 • 先找出兩程式中相同而不重疊,且大於MinML的子字串 • 再將片段能覆蓋到的符號擴大到最大數量 淡江大學資訊管理學系
結構比對- JPlag • JPlag(Prechelt et al.,2002) • 採用GST演算法 • 排除空白,註解,和變數命名,並將語義概念放入符號,例如用BEGIN_METHOD符號表示方法開頭大括號 • 為一線上使用系統,程式要上傳到JPlag主機比對,再透過網頁顯示比對結果 淡江大學資訊管理學系
結構比對- SID • SID(Software Integrity Diagnosis System) (Chen et al., 2002) • 一種利用壓縮找尋程式相似片段的作法 • 分為兩階段 • 第一階段將程式轉換成符號字串 • 第二階段則改用壓縮器(compressor)找出兩程式的相似片段 • 可避免受大量插入無意義敘述,例如: int x=1;之干擾 淡江大學資訊管理學系
結構比對- SIM • SIM(software SIMilarity tester) (Gitchell, 1999) • 利用DNA序列排比方式來計算程式間的相似性 • 定義每種序列排比的得分,再由動態規畫找出其中分數最高者,而得最佳排比方式。 • 利用此最佳排比得分,可以比較兩程式相似度 淡江大學資訊管理學系
結構比對-各系統比較 結構比對常用系統方法之比較 結構比對常用系統能力之比較 淡江大學資訊管理學系
有效相似門檻值區間 非相似集合 相似集合 相似集合平均值減一標準差 非相似集合平均值加一標準差 相似門檻值 分群方法 • 相似比對工具 • YAP • 最小比對長度和相似門檻值 • 最小比對長度(Minimal Match Length, MML) • 相似門檻值(THreshold of Similarity, THS) 淡江大學資訊管理學系
分群方法 • 相似度計算 • sFile,tFile分別是來源程式和目標程式的符號序列 • 每一片段t之符號長度為lengtht • 分數大小介於0跟1之間,愈接近1表示兩程式相似性愈高 淡江大學資訊管理學系
分群方法 c1 c2 c3 • 單次無階層分群法 • 隨機挑某程式作第1群 • 找出和程式i群相似度大於THS群集合 • i加入群集合中最近一群 • 若群集合為空,則i另成一群 i1 i2 淡江大學資訊管理學系
實驗結果 • 實驗方法: • 資料集:淡江大學資管系大學部JAVA程式課四題程式作業,每題約100份作業。其中,三題供參數訓練,一題作結果測試。為評估正確性,四題皆先以人工分群得到相似程式集合作為標準答案。 • 參數訓練:用三題資料,以不同的最小比對長度和相似門檻值,找出最適合的最小比對長度和相似門檻值 • 結果測試:以訓練所得的最小比對長度和相似門檻值,套用到第四題,計算分群正確率 淡江大學資訊管理學系
實驗結果 • 分群正確率將以所有程式配對(pairs)為母體,如下: • 任何兩兩程式之間,只存在同群或不同群兩種關係。 • m=1 or 0表示由人工(manual)判斷之同群否結果, • a=1 or 0表示由機器(automatic)判斷之同群否結果 淡江大學資訊管理學系
實驗結果 • 內部訓練 • 用三題資料,以不同的最小比對長度和相似門檻值,找出最適合的最小比對長度和相似門檻值 不同最小比對長度和相似門檻值下,分群的正確率 淡江大學資訊管理學系
實驗結果 • 外部訓練 • 以訓練所得的最小比對長度和相似門檻值,套用到第四題,計算分群正確率 在最小比對長度15,相似門檻值0.665下基於YAP相似度做為分群的正確率 淡江大學資訊管理學系
結語 • 針對程式教學的評分一致性需求,本文利用程式的相似度來為學生作業分群,以方便老師或是助教可以就相近程式進行一致性的評分 • 本文實作分群系統,以實際程式作業作測試,結果顯示採用本文作法,其分群正確性與人工分群結果非常接近 • 未來將利用更多資料做測試,進一步驗證YAP相似度作為程式分群指標的普遍可行性。也可嘗試單次無階層分群方法之外的其他分群法做測試 淡江大學資訊管理學系