- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
利用程式碼相似度輔助學生程式作業分群之實作
利用程式碼相似度輔助學生程式作業分群之實作
魏世杰 林世唐
淡江大學資訊管理學系
淡江大學資訊管理學系 seke@mail.im.tku.edu.tw 摘要
比起文章語法來說,程式的語法更有規則性可循,因此程式的相似性判斷不如文章的相似性判斷那麼複雜。程式相似性判斷有很多應用方向,就實際教學應用發現,來自學生的程式作業,在同一個題目下,很容易互相參考彼此寫法。進行作業批改時若未先做分群,往往會因為程式數量太多,容易發生好像看過相似寫法,卻又不知道先前哪裏出現,導致評分不一致的現象。如果在評分前,能夠先對相似程式作分群,則遇到類似寫法時可以一齊比較,評分上將較具一致性。所以本文提出以相似度比對方法運用於程式分群,作為評分輔助之作法,並以實驗評估分群之正確性。
關鍵字:程式碼比對、結構比對、程式分群
Use of Code Similarity in Clustering of Program Assignments
Shih-Chieh Wei Shih-Tang Lin
Department of Information ManagementTamkang University Department of Information Management Tamkang University seke@mail.im.tku.edu.tw Abstract
Similarity detection on program codes is simpler than on text documents. Compared to text documents, the rules used in programming languages are easier to identify. Code similarity can be used in many applications. In a programming class, students often discuss with each other in doing program assignments. When marking a lot of assignments, one would often detect similar codes previously seen somewhere and find it hard to keep consistent in marking. If we can do clustering on similar codes, it will be beneficial for consistent marking. Therefore we propose code-similarity-based clustering for aid in marking program assignments. The correctness of the clustering is evaluated using real program assignments.
Keywords: Code Comparison, Structure Comparison, Program Clustering
壹、前言
程式碼比對的研究文獻很多(Clough, 2000),原因是程式碼比對相較於文章比對來得容易。程式語言有固定語法,而文章的語法則複雜多了,比對上較難。與文章比對類似,程式碼比對可以分為語彙層及語法層兩種。語彙層比對是以符號為單位,依兩程式之間的相同符號之多寡決定兩者相似度。由於單純以語彙層比對,易受更改註解或變數名稱之欺騙,因此許多比對工具要求依必要符號做比對,最常見為使用程式特有的保留字和運算元等。對註解或變數名稱則在前處理時,將其捨棄或做一致性的改寫,再將處理後的符號序列送到序列比較器作比對。如此可以偵測一些簡單等級的程式改寫(Liaqat et al., 2011)。
語法層比對必須將程式碼轉換成結構圖或流程圖,再將圖形依節點互相比對,找出最相似的兩個節點。利用流程圖,比單純語彙層來得精確,即使程式的控制流程或是迴圈有改寫,也能判斷其相似性。節點比對依據節點所做工作,比對兩個節點內容是否相同,可輔助判斷程式之功能相似性。但是結構層比對的困難度高,因此須更多複雜的技術處理。
利用語彙及語法層的程式碼比對技術有如下幾類常見應用。軟體元件庫查詢方面,能幫助程式開發者查詢相似範例程式,加速開發速度;偵測程式重複方面,有利於程式精簡及新舊程式碼合併。抄襲偵測方面,則利於版權維護之訴求。
在程式教學上,面對眾多學生程式作業之批改,如何偵測相似寫法之程式給予一致分數一直是個困擾問題。本文將針對此
文档评论(0)