摘要:程序設(shè)計類課程的實(shí)踐性很強(qiáng),該類課程的考核評價應(yīng)特別注重考查學(xué)生的實(shí)際編程能力。而傳統(tǒng)的機(jī)試需要人工評判,不僅無法保證成績評定的公平性,而且對于抄襲的判別非常困難。本文提出用在線評測和抄襲檢測相結(jié)合的方法作為程序設(shè)計類課程的考核評價方法,并以“程序設(shè)計基礎(chǔ)”為例,詳細(xì)介紹考核評價的具體實(shí)施過程。實(shí)踐表明,該方法不僅考查了學(xué)生的實(shí)際編程水平,而且對考試抄襲的學(xué)生起到了震懾的作用,從而有效地督促學(xué)生學(xué)習(xí)。
關(guān)鍵詞:程序設(shè)計;考核評價;在線評測;抄襲檢測
1問題的提出
程序設(shè)計類課程與基礎(chǔ)理論類課程不同,其實(shí)踐性很強(qiáng),注重學(xué)生實(shí)際編程能力的培養(yǎng)。因此,將筆試作為該類課程的考核評價方法,顯然是不可取的。目前,許多院校將機(jī)試納入程序設(shè)計類課程的考試當(dāng)中,比如學(xué)生在指定的時間內(nèi)現(xiàn)場提交程序,任課教師事后檢查。這種做法不但十分耗費(fèi)人力,而且由于人為因素較多,也無法保證成績評定的公平性。因而這種人工評判的上機(jī)考試較難推行。
此外,在程序設(shè)計類課程的教學(xué)中還存在一個不能回避的事實(shí),互相抄襲程序代碼的現(xiàn)象也較為普遍。國外很多教育機(jī)構(gòu)針對程序設(shè)計課程的源代碼抄襲現(xiàn)象進(jìn)行的調(diào)查顯示:高達(dá)85.4%的學(xué)生承認(rèn)抄襲過別人的編程作業(yè)[1]。此類抄襲行為在國內(nèi)也十分普遍,近年來這一現(xiàn)象愈演愈烈,嚴(yán)重影響了學(xué)生個人素質(zhì)的提高,破壞了正常的教學(xué)秩序,同時使得眾多老師不得不在常規(guī)教學(xué)和考試中對雷同程序反復(fù)審核,既極大地消耗了任課教師的時間和精力,無形中增加了更為繁重的工作量,也無法確保考核的準(zhǔn)確性與客觀性。
鑒于上述情況,在程序設(shè)計類課程中,采用何種考核評價方法才能較為準(zhǔn)確地考查學(xué)生的真實(shí)學(xué)習(xí)
水平是一個值得研究的問題。
2程序設(shè)計類課程考核評價方法的改革思路
筆者多年來一直從事程序設(shè)計類課程的教學(xué)工作,并與教學(xué)團(tuán)隊成員一起對該類課程進(jìn)行了深入地研究和實(shí)踐[2-5],總結(jié)出一套行之有效的考核評價方法,我們將在線評測與抄襲檢測相結(jié)合,不僅考查了學(xué)生的實(shí)際編程水平,而且對考試抄襲的學(xué)生起到了震懾的作用,從而有效地督促學(xué)生學(xué)習(xí)。下面以“程序設(shè)計基礎(chǔ)”為例,與大家共同探討其考核評價方法。
2.1在線評測
在線評測(Online Judge,簡稱OJ)是個基于WWW的服務(wù)器端軟件系統(tǒng),其主要功能包括:用戶注冊和管理、題庫管理、在線提交和實(shí)時評測、網(wǎng)上考試、討論、郵件服務(wù)等。該服務(wù)器上有一個豐富的題庫,題目包括ACM國際大學(xué)生程序設(shè)計競賽所公布的試題和我院師生自創(chuàng)的與教學(xué)內(nèi)容緊密結(jié)合的問題,每道題目包含文字描述、輸入數(shù)據(jù)文件和作為標(biāo)準(zhǔn)答案的輸出數(shù)據(jù)文件三個部分,只有文字描述部分對做題者是可見的。正確的程序應(yīng)該根據(jù)輸入數(shù)據(jù),在限定時間范圍內(nèi)計算出標(biāo)準(zhǔn)輸出數(shù)據(jù)。做題者
基金項目:內(nèi)蒙古自治區(qū)高等教育教學(xué)成果重點(diǎn)資助項目“以系統(tǒng)平臺為主線構(gòu)建計算機(jī)專業(yè)課程體系的研究”(內(nèi)教高函[2006]27號);內(nèi)蒙古自治區(qū)高等學(xué)校科學(xué)研究項目“程序代碼相似度度量研究”(NJ06109)。
作者簡介:張麗萍(1974-),女,內(nèi)蒙古呼和浩特市人,副教授,碩士,研究方向?yàn)橛嬎銠C(jī)應(yīng)用。
根據(jù)題目文字描述編寫程序,編程語言可以選用C/C++、Java、Pascal等,編寫完成后在網(wǎng)頁中將源程序提交到服務(wù)器,服務(wù)器啟動編譯器編譯該源程序并生成可執(zhí)行程序,然后再以輸入數(shù)據(jù)文件作為輸入啟動該可執(zhí)行程序,并將程序的輸出結(jié)果和標(biāo)準(zhǔn)輸出數(shù)據(jù)文件(就是答案)進(jìn)行對比,完全一致則判為正確,否則判為錯誤。在OJ上做題,能夠立即看到結(jié)果,對錯分明,錯了還可以修改后再次提交。用OJ進(jìn)行現(xiàn)場集中上機(jī)考試,十分方便,能夠比較準(zhǔn)確地反映學(xué)生的水平[6]。
實(shí)際上,在平時的上機(jī)實(shí)驗(yàn)環(huán)節(jié)中,我們就要求學(xué)生完成OJ提供的相關(guān)練習(xí),由于學(xué)生人數(shù)比較多,采用了Online Judge在線評測系統(tǒng)對學(xué)生提交的作業(yè)進(jìn)行評判。一方面可以減輕教師的工作量,另一方面又可以減少因教師的主觀因素使評測尺度不統(tǒng)一。而學(xué)生在做題過程中,看到評測通過非常激動,能讓學(xué)生有成功的喜悅和成就感,但又會刺激他們主動去做更多的題,也給了他們新的挑戰(zhàn)。
2.2抄襲檢測
抄襲通常采用將一個程序進(jìn)行少量常規(guī)修改的手段。常規(guī)的修改主要包括下以幾個方面:逐字逐句的拷貝,更改注釋;增加空行或者改變書寫格式;標(biāo)識符重命名;代碼段重新排序;改變表達(dá)式中的操作數(shù)或者操作符的順序;改變數(shù)據(jù)類型;增加無關(guān)語句或者變量;用等價的結(jié)構(gòu)進(jìn)行替代。
檢測抄襲就是檢測一個程序是否通過對另一個程序的上述修改而來的。程序代碼相似性檢測技術(shù)能對程序集合中的每兩個程序進(jìn)行比對,找出一個程序?qū)α硪粋€程序經(jīng)過上述修改而來的相似代碼部分,得到描述程序相似程度的量化值,即相似度(similarity),并且能夠?qū)蓚€程序的相似代碼部分進(jìn)行標(biāo)注,幫助用戶找出并判定抄襲的作業(yè)對象[7]。
目前已開發(fā)了多種用于抄襲檢測的系統(tǒng),如Jplag、MOSS、YAP系列以及SIM等,檢測結(jié)果的錯誤率比較低,速度比較快,能夠滿足程序抄襲檢測的需要。
判定一個學(xué)生抄襲了他人的作業(yè)是件比較嚴(yán)肅的事情,不能簡單的通過檢測系統(tǒng)得出的相似度大小就判定抄襲與否,還要經(jīng)過一系列的驗(yàn)證以確保判定結(jié)果正確。這個判定過程經(jīng)過下面四個階段 :收集(collection)、分析(analysis)、確認(rèn)(confirmation)、調(diào)查(investigation)。
(1) 收集階段。即收集要進(jìn)行抄襲檢測的作業(yè),一般為同一題目的學(xué)生作業(yè)。可將學(xué)生提交的作業(yè)放在一個文件夾中等待檢測系統(tǒng)的檢測。
(2) 分析階段。用一種代碼相似性檢測系統(tǒng)(以下稱為檢測系統(tǒng))實(shí)現(xiàn)自動檢測,此時教師將收集好的學(xué)生作業(yè)提交給檢測系統(tǒng),經(jīng)過檢測系統(tǒng)的檢測可以得出每對程序的相似度,并對每對程序的相似區(qū)域進(jìn)行標(biāo)注,以幫助教師做進(jìn)一步的判斷。
(3) 確認(rèn)階段。對檢測系統(tǒng)得到的結(jié)果進(jìn)行核查,看是否某對程序中所有的相似代碼都被檢測出來,以及被檢測出相似的代碼段是否屬實(shí)。
(4) 調(diào)查階段。在確定抄襲之前教師還要對初步判定抄襲的學(xué)生作業(yè)對象進(jìn)行調(diào)查。調(diào)查可以分別向被懷疑同學(xué)詢問關(guān)于程序設(shè)計作業(yè)的解題思路及過程,也可以詢問其他同學(xué)或輔導(dǎo)老師關(guān)于被懷疑同學(xué)平時練習(xí)情況,盡量做到判定結(jié)果真實(shí)。
3程序設(shè)計類課程考核評價方法的實(shí)施過程
3.1在線評測
OJ系統(tǒng)是一個在線的判題系統(tǒng),用戶可以在線提交程序多種程序源代碼,系統(tǒng)對源代碼進(jìn)行編譯和執(zhí)行,并通過預(yù)先設(shè)計的測試數(shù)據(jù)來檢驗(yàn)程序源代碼的正確性。一個用戶提交的程序在OJ系統(tǒng)下執(zhí)行時將受到比較嚴(yán)格的限制,包括運(yùn)行時間限制,內(nèi)存使用限制和安全限制等。用戶程序執(zhí)行的結(jié)果將被OJ捕捉并保存,然后再轉(zhuǎn)交給一個裁判程序。該裁判程序比較用戶程序的輸出數(shù)據(jù)和標(biāo)準(zhǔn)輸出樣例的是否存在差別,最后系統(tǒng)返回給用戶一個狀態(tài):通過(Accepted)、答案錯誤(Wrong Answer)、超時(Time Limit Exceed)、超內(nèi)存(Memory Limit Exceed)、運(yùn)行時錯誤(Runtime Error)或是無法編譯(Compile Error),并返回程序使用的內(nèi)存、運(yùn)行時間等信息。
在研究中,我們選取了2007級選修“程序設(shè)計基礎(chǔ)”課的學(xué)生作為樣本,共346人同時使用在線評測系統(tǒng)參加期末考試,要求5小時內(nèi)完成10個編程題。從收集的數(shù)據(jù)來看,這種考試具有極高的區(qū)分度。有的同學(xué)3小時內(nèi)可以完成10個題,有的同學(xué)1道題也不能通過,有的同學(xué)完成某個簡單題只要5分鐘,有的同學(xué)則要5小時。
我們提供的在線評測系統(tǒng)的網(wǎng)址為http://acm.cs. imnu.edu.cn,現(xiàn)有340多道訓(xùn)練、競賽題,所有評測工作全部由系統(tǒng)來完成,現(xiàn)有注冊用戶2276人,供廣大學(xué)生學(xué)習(xí)程序設(shè)計類課程和參加競賽訓(xùn)練使用。在線評測系統(tǒng)所使用的技術(shù)先進(jìn),可靠性好,健壯性強(qiáng)。經(jīng)過3年使用,完全適應(yīng)無紙化考試的要求,從收集的數(shù)據(jù)來看,這種考試具有極高的信度和區(qū)分度,能考查出學(xué)生真實(shí)的編程水平,并在全校的程序設(shè)計語言公共課中推廣使用。
3.2抄襲檢測
相似度是反映兩對程序相似情況的量化值,這個值越大說明越相似。對于程序代碼比較短的情況,得到的相似度普遍要大一些。這是因?yàn)閷τ诒容^簡單的作業(yè),解決問題的方法大多比較集中,所以不考慮互相抄襲的情況,兩個程序也由于解決問題的方法相似造成有較大的相似度結(jié)果值。但對于相似度是100%的程序?qū)Γ卸槌u的可能性還是很大的,因?yàn)榫退闶窃俸唵蔚某绦颍膊豢赡軆蓚€人編寫的完全一致。對于作業(yè)代碼長一些的程序,解決問題的方法相應(yīng)會更多一些,不存在抄襲而達(dá)到較高的相似度的情況可能性會更小一些。所以對于相似度是100%的程序?qū)Γ卸槌u的可能性就更大了。具體實(shí)施過程如下。
3.2.1收集
對于通過在線測試的學(xué)生程序,將它們放在一個
文件夾中,完成程序收集階段的工作,等待檢測系統(tǒng)的檢測,以找出存在抄襲嫌疑的作業(yè)對象。
3.2.2分析
將收集好的學(xué)生作業(yè)提交給檢測系統(tǒng),檢測系統(tǒng)對指定文件夾的程序進(jìn)行自動檢測,得出檢測結(jié)果。檢測結(jié)果一般以網(wǎng)頁的形式反饋給用戶,其中包含相似度在某一閾值以上的每對程序的相似度信息。不同的檢測系統(tǒng)根據(jù)實(shí)際情況設(shè)定了不同的閾值,這是因?yàn)閷τ谙嗨贫刃〉某绦驅(qū)χ挥胁糠执a相似,判定為兩者之間是互相抄襲的可能性比較小,因此系統(tǒng)不提供小于這個閾值的程序?qū)Φ木唧w相似信息,以提高速度與效率。
我們從期末考試題目中選擇了“求圓面積”問題作為抄襲檢測的對象。題目要求如下:
有一個形狀類CShapes,從此類派生出圓形類(包括圓心坐標(biāo)及圓的半徑),在派生類中計算圓的面積,并用基類成員函數(shù)displayarea()輸出圓形面積area。
如圖1為使用德國卡爾斯魯厄(Karlsuhe)大學(xué)的Jplag檢測系統(tǒng)對上述題目考試結(jié)果檢測后得到的檢測結(jié)果的首頁信息。在圖中可以查看相似度為100%的每對程序相似度的情況。使用該檢測系統(tǒng)可以訪問網(wǎng)站http://www.ipd.uni-karlsruhe.de/jplag。
教師可將相似度大的作業(yè)對作為重點(diǎn)抄襲嫌疑對象,對它們進(jìn)行人工核查。經(jīng)過分析階段的工作可以縮小核查范圍,提高檢測效率。
圖1Jplag檢測系統(tǒng)的檢測結(jié)果
3.2.3確認(rèn)
由于被檢測的每個作業(yè)的代碼長度在50行左右,對于學(xué)生作業(yè)來說代碼較短,所以本次人工檢測
的相似度閾值可以設(shè)定為100%。點(diǎn)擊圖1中的相似度值部分就可查看兩個程序的相似代碼區(qū)域,每部分相似的代碼區(qū)域都會用同一種顏色進(jìn)行標(biāo)注,幫助教師進(jìn)一步核查抄襲與否。可參見圖2。
圖2程序的相似代碼區(qū)域
3.2.4調(diào)查
調(diào)查階段對經(jīng)過分析與確認(rèn)初步判定抄襲的作業(yè)對象進(jìn)行調(diào)查。可將被懷疑同學(xué)單獨(dú)叫過來詢問關(guān)于解題過程與思路等具體細(xì)節(jié),以確定被懷疑同學(xué)的作業(yè)是否經(jīng)過抄襲而來。經(jīng)過上面的檢測過程基本上能夠找出存在抄襲行為的學(xué)生,然后采取一定的措施對其進(jìn)行處罰,最終實(shí)現(xiàn)減少抄襲再次發(fā)生的目的。
4結(jié)語
隨著計算機(jī)科學(xué)在人工智能、程序理解等領(lǐng)域的發(fā)展,使用計算機(jī)進(jìn)行考核評價已成為傳統(tǒng)的筆試考核方式的有益補(bǔ)充。在程序設(shè)計類課程的考核中存在
程序代碼自動評測和抄襲檢測的難題,而自動評測與抄襲檢測同時也是計算機(jī)應(yīng)用技術(shù)中的兩個重要的科學(xué)問題。如何將教學(xué)研究與科學(xué)研究相結(jié)合,運(yùn)用技術(shù)手段解決教學(xué)實(shí)際當(dāng)中的問題已刻不容緩。本文提出利用在線評測和抄襲檢測相結(jié)合的方法,對程序設(shè)計類課程進(jìn)行考核評價,這樣做既能考查出學(xué)生真實(shí)的編程水平,又能從一定程度上減少抄襲現(xiàn)象的發(fā)生,從而促進(jìn)學(xué)生學(xué)習(xí),同時大大減輕了教師進(jìn)行人工評測機(jī)試程序和人工判別抄襲學(xué)生的工作負(fù)擔(dān)。事實(shí)上,最好的辦法還是應(yīng)該讓學(xué)生樹立正確的道德觀念,培養(yǎng)學(xué)生對程序設(shè)計類課程的興趣,使他們自覺自愿地學(xué)習(xí),并從中獲得成就感,這樣才能從根本上解決問題。
參考文獻(xiàn):
[1]Georgina C, Mike J. Source2code plagiarism: A UK academic perspective[R]. Research Report RR-422, Department of Computer Science, University of Warwick, 2006.
[2] 張麗萍,劉東升. 程序設(shè)計精品課程建設(shè)的研究與實(shí)踐[J]. 內(nèi)蒙古師范大學(xué)學(xué)報:教育科學(xué)版,2007(1):109-111.
[3] 張麗萍,劉東升. 關(guān)于精品課程“程序設(shè)計”的建設(shè)方案[C]. //大學(xué)計算機(jī)基礎(chǔ)課程報告論壇論文集(2006). 北京:高等教育出版社,2006.
[4] 劉東升,孟繁軍,張麗萍,等. 程序設(shè)計基礎(chǔ)創(chuàng)新型教學(xué)模式的構(gòu)建與實(shí)踐[J]. 計算機(jī)科學(xué),2007(8):400-402.
[5] 劉東升,孟繁軍,張麗萍,等. 程序設(shè)計類課程實(shí)驗(yàn)環(huán)境的研究[C]. //大學(xué)計算機(jī)基礎(chǔ)課程報告論壇論文集(2005). 北京:高等教育出版社,2006.
[6] 郭瑋,李文新. 程序設(shè)計類實(shí)習(xí)課程如何準(zhǔn)確考查學(xué)生學(xué)習(xí)情況[J]. 吉林大學(xué)學(xué)報,2005(8):99-103.
[7] 王春暉,程金宏,孟繁軍,等. 程序代碼相似性檢測技術(shù)在教學(xué)中的應(yīng)用[J]. 計算機(jī)教育,2007(12):137-139.
Reform and Practice of Evaluation Method for Programming Courses
ZHANG Li-ping, LIU Dong-sheng, WANG Chun-hui
(Computer Information Engineering College, Inner Mongolia Normal University, Inner Mongolia Huhhot 010022, China)
Abstract: Programming courses is a practical subject, this course evaluation should be paid special attention to the actual programming examines student ability. But the traditional machine try to judge, not only it can not guarantee fairness grades, but also the discrimination of plagiarism is very difficult. In this paper, using online judge and plagiarism detection method of combining the programming courses as evaluation method, and with \"Programming fundamentals\" as an example, the detailed introduction of evaluation specific implementation process. A practice show that this method is not only examines the student's actual programming, but also played a deterrent effect, thus effectively supervise students learning.
Key words: programming; evaluation; online judge; plagiarism detection
(編輯:彭遠(yuǎn)紅)