淡江大學資訊管理學系
Download
1 / 21

利用程式碼相似度輔助學生程式作業分群之實作 - PowerPoint PPT Presentation


  • 118 Views
  • Uploaded on

淡江大學資訊管理學系. 利用程式碼相似度輔助學生程式作業分群之實作. 前言. 程式碼比對可以分為語彙層及語法層兩種 比對技術 。 語彙層比對 : 以符號為單位,依兩程式之間的相同符號之多寡 , 決定兩者相似度 語法層比對 : 必須將程式碼轉換成結構圖或流程圖,再將圖形依節點互相比對,找出最相似的兩個節點 , 決定 程式 相似度 程式碼比對的應用方向包括 協助 查詢相似範例程式 , 加速開發速度 偵測重複程式,有利程式精簡及合併 偵測抄襲,利於版權維護

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 利用程式碼相似度輔助學生程式作業分群之實作' - christmas


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

淡江大學資訊管理學系

利用程式碼相似度輔助學生程式作業分群之實作

淡江大學資訊管理學系


前言

  • 程式碼比對可以分為語彙層及語法層兩種比對技術。

    • 語彙層比對:以符號為單位,依兩程式之間的相同符號之多寡,決定兩者相似度

    • 語法層比對:必須將程式碼轉換成結構圖或流程圖,再將圖形依節點互相比對,找出最相似的兩個節點,決定程式相似度

  • 程式碼比對的應用方向包括

    • 協助查詢相似範例程式,加速開發速度

    • 偵測重複程式,有利程式精簡及合併

    • 偵測抄襲,利於版權維護

  • 本文將程式碼比對應用於協助程式教學。在班級眾多學生程式中,如何偵測相似寫法給予一致分數,一直是批改程式作業之困擾。本文將利用程式相似度,對學生程式作業進行分群,以輔助作業批改之給分一致性。

  • 本文將實作此程式分群系統,並評估其分群正確性。

淡江大學資訊管理學系


文獻探討

  • 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
結構比對-YAP(Yet Another Plague)

  • 前處理階段

    • 移除註解和固定字串

    • 轉換大寫字母為小寫字母

    • 將同義字對應到通用格式

    • 依照呼叫順序重新排列function次序。並把第一次呼叫到的function展開,之後的呼叫則以FUN替代

    • 移除非程式語言字彙的字詞

淡江大學資訊管理學系


Yap yet another plague1
結構比對-YAP(Yet Another Plague)

  • 比對階段

    • 片段(tile)需為兩程式共有之子字串

    • 當一個符號成為片段一部份,將作標記(marked),不再重複使用

    • 定義MaxM為最大匹配相似片段,表示兩程式目前找到的最大相似片段

    • 定義MinML為最小匹配長度,凡是比MinML小的片段皆忽略之

  • GST演算法找出兩程式間最大相似片段

    • 先找出兩程式中相同而不重疊,且大於MinML的子字串

    • 再將片段能覆蓋到的符號擴大到最大數量

淡江大學資訊管理學系


Jplag
結構比對- 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相似度作為程式分群指標的普遍可行性。也可嘗試單次無階層分群方法之外的其他分群法做測試

淡江大學資訊管理學系


ad