王林玉,黃 儉
(1. 云南能源職業(yè)技術學院 計算機系,云南 曲靖 655000;2. 曲靖師范學院 信息與工程學院,云南 曲靖 655000)
高校程序設計類課程的教師幾乎都遇到過學生編程作業(yè)中的抄襲現(xiàn)象。特別是近年來,隨著網(wǎng)絡信息化和移動互聯(lián)網(wǎng)的深入普及,學生可以有更多的方式從互聯(lián)網(wǎng)或同學處復制代碼,幾乎無需時間成本和腦力成本,致使抄襲率有增高的趨勢。國外最近的一項調查中發(fā)現(xiàn)大約有 33%學生承認曾經(jīng)抄襲[1];另一項研究中, 教學人員對學生從2003—2013 年的4 門編程作業(yè)進行分析,發(fā)現(xiàn)有 1%~10%比例的抄襲, 而且呈逐年增長趨勢[2]。另外,程序設計課程作為專業(yè)基礎課,多為合班開課,班級規(guī)模大,而且有些學生在復制代碼時還做了一些類似代碼混淆的操作(標識符重命名、注釋刪除、格式及布局調整等),這種情況下,人工判別抄襲或簡單的自動檢測已不具可操作性。因此,高效準確地檢測學生編程作業(yè)中的抄襲現(xiàn)象,保證教學效果,是授課教師迫切需要面對的問題。
在程序設計類課程中,學生作業(yè)多為在線提交源代碼,因此,抄襲檢測是在源碼存在的場景下進行的。由于大學生群體的特殊性,作業(yè)抄襲主要采用人工修改的方式,手段限定在詞法、語法、語義3方面的變換,而且大部分學生作業(yè)的抄襲集中在前兩種[3]。
依據(jù)抽象方式的不同,源碼抄襲檢測技術分為基于屬性統(tǒng)計和基于結構分析兩大類[4]。
基于屬性統(tǒng)計的抄襲檢測技術,其基本思想是通過對源代碼中的各項度量指標如操作符個數(shù)、操作數(shù)個數(shù)、操作符總數(shù)、操作數(shù)總數(shù)、變量總數(shù)等進行統(tǒng)計,將軟件轉換成一個n維向量,每個維度指定軟件的一項度量指標,從而將其映射成n維笛卡爾空間中的一個點,最后基于該空間中不同點(軟件)間的距離實現(xiàn)抄襲的判定[5-6]。該方法是對整個軟件的度量,在抽象的過程中丟棄了過多的軟件結構信息,根據(jù)此方法設計的檢測系統(tǒng)經(jīng)常會存在漏報或誤報的情況,簡單的代碼混淆就可以躲避檢測。近年來,雖然有研究者通過聚類分析、BP神經(jīng)網(wǎng)絡和人工智能的方法改進此類方法,但是僅限于研究階段,代表性的技術和工具有Ottenstein’s system等,普遍性和實用性并不是很強。
基于結構分析的抄襲檢測技術,有基于token、樹和圖3種。目前主流的檢測系統(tǒng)中大多采用token技術,如MOSS、JPlag、Sherlock、YAP3、Sim、SID等,解析速度快,實用性強。
MOSS系統(tǒng)的主機運行在類UNIX系統(tǒng)上,授課教師只需在官網(wǎng)注冊MOSS賬號,然后利用官網(wǎng)提供的提交腳本,將學生的作業(yè)集傳給MOSS,就可以等待檢測結果。
通常授課教師會很快收到MOSS的輸出,其中包含一個網(wǎng)址,打開后可以看到程序相似度的檢測結果,如圖1所示,該網(wǎng)頁將會保留兩個星期。
點開某一對程序(如File 1和File 2)相似度比較的鏈接,可以顯示代碼相似的那一部分,如圖2所示。
得到檢測結果后,可以將其存儲為csv文件,以備下一步數(shù)據(jù)可視化分析之用。
教師布置編程作業(yè),然后學生之間進行交流、解答,這一過程可以抽象成一種社會網(wǎng)絡活動。有了MOSS提供的軟件相似度分析數(shù)據(jù)之后,可以采用社會網(wǎng)絡分析工具對學生的作業(yè)情況進行分析。
社會網(wǎng)絡分析是采用圖論等數(shù)學方法,通過研究大量個體(個人、組織等社會活動參與方)間的關系以尋找社會系統(tǒng)表面下的內在規(guī)律[7-8]。社會網(wǎng)絡分析方法已經(jīng)被廣泛應用于推薦系統(tǒng)、電子商務系統(tǒng)、輿情監(jiān)控系統(tǒng)等多種具體的應用中,并且在現(xiàn)代社會學、人類學、社會語言學、地理、社會心理學、資訊科學、經(jīng)濟學、生物學等領域的研究中發(fā)揮了重要作用[9]。目前,社會網(wǎng)絡分析領域的代表性軟件有4款:nodeXL、Pajeck、Gephi和NetworkX。其中,nodeXL、Pajeck和Gephi是獨立軟件,NetworkX只提供功能函數(shù)接口,需要編程調用后進行分析。
鑒于本文所針對的抄襲檢測研究對象,采用免費的跨平臺軟件Gephi進行分析。Gephi是一個開源的社會網(wǎng)絡分析及可視化軟件包,采用Java語言,最初在NetBeans平臺上實現(xiàn),系統(tǒng)開放性好,文檔豐富,適合初涉社會網(wǎng)絡分析的研究者。
使用Gephi對MOSS檢測結果進行分析后,得到圖3所示的可視化結果。圖中數(shù)字部分為學生的學號,連線部分為學生作業(yè)之間的相似度,以線條粗細進行表征。該圖其實也從一定程度上反映了學生之間的社會關系,如單獨一對相似度高的學號對應的學生很有可能是情侶,4~6個相似度高的組合極有可能是同一宿舍的學生。
圖1 MOSS檢測系統(tǒng)的檢測結果
圖2 程序的相似代碼區(qū)域
圖3 檢測結果的可視化呈現(xiàn)
判定學生的作業(yè)抄襲應該是一件非常嚴肅的事情,不能僅憑機器的相似度檢測來判定。抄襲判定通常是按如下流程進行。
首先,授課教師從檢測結果確定懷疑對象,然后成對地通知學生,讓他們知曉作業(yè)相似度的情況并當面說明。如果一個學生是有意讓另一個學生抄襲,那么都判定為作業(yè)不及格。如果學生是無意被抄襲(作業(yè)打印稿、磁盤丟失,文件被竊取等情況),那么只判定抄襲者為不及格,被抄襲者正常給分。有時,在面談階段,學生會堅稱沒有抄襲,但此時研究他們代碼重復部分,發(fā)現(xiàn)包含有程序非必要的括號、常量定義以及一些相同的冗余語句,則可判定為抄襲,此時,雙方都將判定為不及格。
其次,有時作業(yè)的相似性是因為學生都按教科書上的例子進行解答,導致MOSS檢測到高的相似度,此時要注意甄別。
最后,有時會出現(xiàn)相似度非常高的兩份作業(yè),但這兩個學生又確實沒有互相抄襲。這種情況通常是他們同時抄襲于不在同一群體的“第三者”。這個“第三者”有可能是高年級學生,也有可能是互聯(lián)網(wǎng)上的習題解答。
當然,抄襲檢測只是手段,并不是目的。為了更加客觀地評價學生在編程上的學習水平,教師可以在評價機制上也作出調整,如降低作業(yè)得分在總成績中的比重,提高課堂即時測驗得分在總成績中的比重。
在2015—2016學年度,我們已開始采用MOSS結合Gephi進行抄襲檢測判定,并在面向對象程序設計課程開課前就明確告知學生,該學年75個學生中有20人因抄襲被判定為課程成績不合格。在接下來的2016—2017學年度,90名學生中,6人因抄襲判定沒有拿到課程學分,抄襲率下降約20%。研究的結果表明,在獲取程序相似度之后,再進行社會網(wǎng)絡分析,對學生的抄襲行為具有較好的警戒作用,學生作業(yè)抄襲率顯著下降,為減少學生程序設計作業(yè)抄襲現(xiàn)象提供了一種新的思路。
[1]Chuda D, Navrat P, Kovacova B, et al. The issue of (software) plagiarism: A student view[J]. IEEE Transactions on Education, 2012,55(1): 22-28.
[2]Rosales F, Garcia A, Rodriguez S, et al. Detection of plagiarism in programming assignments[J]. IEEE Transactions on Education,2008, 51(2): 174-183.
[3]田振洲, 劉烴. 軟件抄襲檢測研究綜述[J]. 信息安全學報, 2016, 1(3): 52-76.
[4]Chow T W S, Rahman M K M. Multilayer SOM with tree-structured data for efficient document retrieval and plagiarism detection[J]. IEEE Transactions on Neural Networks, 2009(20): 1385-1402.
[5]Shen Y, Li S C, Tian C G, et al. Research on anti-plagiarism system and the law of plagiarism[C]//First International Workshop on Education Technology and Computer Science. Washiongton D C: IEEE, 2009: 296-300.
[6]Yang S, Wang X. A visual domain recognition method based on function mode for source code plagiarism[C]//Third International Symposium on Intelligent Information Technology and Security Informatics. Washington D C: IEEE, 2010: 580-584.
[7]張莉, 周祖林. 代碼相似性檢測在程序設計教學中的應用[J].計算機教育, 2009(13): 117-228.
[8]王春暉, 程金宏. 程序代碼相似性檢測技術在教學中的應用[J].計算機教育, 2007(12): 137-139.
[9]Hu C G, Zhu L J. Complex network software analysis and evaluation[J]. Digital Library Forum, 2010(5): 33-39.