本文針對C程序設(shè)計(jì)課程實(shí)驗(yàn)教學(xué)的特點(diǎn),利用在線評測系統(tǒng)對選課的目標(biāo)群體開展實(shí)驗(yàn)教學(xué)研究。探索在實(shí)驗(yàn)教學(xué)中應(yīng)用在線評測的教學(xué)方法和手段,同時(shí)對傳統(tǒng)的紙質(zhì)考試方式進(jìn)行變革,在課程考試中引入在線評測,并對實(shí)施的結(jié)果做詳細(xì)的數(shù)據(jù)分析和評價(jià)。在線評測程序設(shè)計(jì)實(shí)踐教學(xué)1引言對普通規(guī)模的理工科高校而言,每年選程序設(shè)計(jì)課程的本科生數(shù)量大約在2000至2500人次左右,輻射面廣,受眾面大。無論是C,C++還是Java,程序語言設(shè)計(jì)課程作為理工類本科生的必修課程,都有一個(gè)共同的特點(diǎn):即“上機(jī)第一、實(shí)踐第一”。僅通過課堂的理論教學(xué)是無法理解程序設(shè)計(jì)的精髓的,也無法培養(yǎng)和鍛煉學(xué)生的實(shí)踐能力和創(chuàng)新能力。因此,課程的實(shí)踐教學(xué)環(huán)節(jié)的重要性凸顯,勝過其他任何一門課程。目前程序設(shè)計(jì)課程在實(shí)踐教學(xué)環(huán)節(jié)大多仍停留在學(xué)生撰寫紙質(zhì)實(shí)驗(yàn)報(bào)告,編寫程序代碼,課后由教師進(jìn)行批改這種傳統(tǒng)的教學(xué)模式上。這種傳統(tǒng)的實(shí)踐教學(xué)模式不僅存在浪費(fèi)資源,耗時(shí)耗力的問題,而且加重了教師和學(xué)生的負(fù)擔(dān)。根據(jù)一項(xiàng)生物心理學(xué)研究顯示,人腦類似一個(gè)反饋激勵(lì)系統(tǒng),在有效的信號刺激下,刺激的頻率越快,信息駐留在大腦中的時(shí)間就越長,有效及時(shí)的信息反饋能夠激發(fā)人腦的學(xué)習(xí)潛能和興趣。而傳統(tǒng)模式由于反饋時(shí)間周期長,恰恰缺乏了及時(shí)的特點(diǎn),大腦在得不到有效反饋的情況下,對信息的記憶度將大為減弱。因此傳統(tǒng)的實(shí)踐教學(xué)模式不利于學(xué)生的進(jìn)一步學(xué)習(xí)。在線評測的英文名為Online Judge,簡稱OJ,是一個(gè)基于HTTP協(xié)議的服務(wù)器端判題系統(tǒng),用來檢測程序源代碼的正確性。用戶可以在線提交多種程序(如C、C++)源代碼,系統(tǒng)對源代碼進(jìn)行編譯和執(zhí)行,并通過預(yù)先設(shè)計(jì)的測試數(shù)據(jù)來檢驗(yàn)程序源代碼的正確性。OJ系統(tǒng)最初使用于ACM-ICPC國際大學(xué)生程序設(shè)計(jì)競賽和信息學(xué)奧林匹克競賽中的自動(dòng)判題和排名,現(xiàn)廣泛應(yīng)用于世界各地高校學(xué)生程序設(shè)計(jì)的訓(xùn)練、參賽隊(duì)員的訓(xùn)練和選拔、各種程序設(shè)計(jì)競賽以及數(shù)據(jù)結(jié)構(gòu)和算法的學(xué)習(xí)和作業(yè)的自動(dòng)提交判斷,著名的有RQNOJ、URAL、北京大學(xué)OJ等。目前,在線評測模式正在被越來越多的程序設(shè)計(jì)學(xué)習(xí)和愛好者所接受。2實(shí)驗(yàn)教學(xué)的實(shí)施利用OJ實(shí)施教學(xué)首先需要在服務(wù)器上建立試題庫,題庫包括ACM程序設(shè)計(jì)競賽試題及與C程序設(shè)計(jì)課程實(shí)驗(yàn)教學(xué)內(nèi)容緊密結(jié)合的實(shí)際問題。每道題目包含Description(題目描述)、Input data(輸入數(shù)據(jù)格式)和Output data(輸出數(shù)據(jù)格式)三個(gè)部分,學(xué)生編寫完成后在網(wǎng)頁中將源程序提交到服務(wù)器,服務(wù)器啟動(dòng)編譯器編譯該源程序并生成可執(zhí)行程序,以輸入數(shù)據(jù)文件作為輸入啟動(dòng)該可執(zhí)行程序,并將程序的輸出結(jié)果和標(biāo)準(zhǔn)輸出數(shù)據(jù)文件進(jìn)行對比,最后系統(tǒng)返回給用戶一個(gè)狀態(tài):完全一致則判為Accept(接受),否則判為Wrong Answer(錯(cuò)誤),超時(shí)(Time Limit Exceed),超內(nèi)存(Memory Limit Exceed),運(yùn)行時(shí)錯(cuò)誤(Runtime Error)或是無法編譯(Compile Error),并返回程序使用的內(nèi)存、運(yùn)行時(shí)間等信息。學(xué)生能夠立即看到服務(wù)器反饋的結(jié)果,同一段代碼可以修改后多次提交。在OJ上開展實(shí)驗(yàn)教學(xué)十分方便,除預(yù)先部署題庫外,利用OJ的Authors Ranklist(用戶排名等級)功能,即按Solved Problems(做對題數(shù))和Submit(提交次數(shù))的比例對用戶進(jìn)行排序,如圖1所示。
Authors Ranklist在一定程序上能較準(zhǔn)確地反映學(xué)生的實(shí)際水平,便于教師掌握學(xué)生的實(shí)驗(yàn)進(jìn)度,并有針對性的對個(gè)別排名靠后的學(xué)生進(jìn)行實(shí)驗(yàn)輔導(dǎo)。對學(xué)生而言,提交通過的題數(shù)越多,自己的排名越靠前,能讓學(xué)生獲取成功的喜悅感和成就感,進(jìn)一步刺激他們主動(dòng)去做更多的題,爭取更高的排名,形成了正反饋激勵(lì)效應(yīng)。另一方面由于程序課程覆蓋面廣,基本上涵蓋了理工類的所有本科生,選課的人數(shù)眾多,采用了OJ系統(tǒng)對學(xué)生提交的作業(yè)進(jìn)行評判,一方面可以大大減輕教師的工作量,另一方面又可以減少因教師的主觀因素使評測尺度不統(tǒng)一,做到高效客觀的判題。3擴(kuò)充平臺的功能3.1增加相關(guān)考試功能在現(xiàn)有OJ功能的基礎(chǔ)上,進(jìn)一步豐富了平臺的功能,改進(jìn)后的OJ支持多種語言的判定,有C、C++、Pascal和 Java。擴(kuò)充了考試模塊,包括多種題型的設(shè)定,有選擇、判斷、填空和程序設(shè)計(jì)。增加了防作弊開關(guān)功能,如圖2中所示,左側(cè)控制菜單中有Switch按鈕,用來開啟和關(guān)閉查看代碼和收發(fā)郵件功能。考試時(shí)禁止考生互發(fā)郵件和查看試題源代碼。
3.2 相似代碼檢測功能在平時(shí)的編程練習(xí)或考試過程中,兩個(gè)人可能提交相似的源程序以欺騙系統(tǒng)進(jìn)行判斷。人工批閱過程中,類似的欺騙很容易被發(fā)現(xiàn),但對于機(jī)器評測這是一個(gè)盲區(qū),OJ系統(tǒng)對于代碼防抄襲(cheat checker)方面沒有做預(yù)防措施。
為了解決這個(gè)問題,可利用基于最長公共子序列LCS(longest common substring)的方法進(jìn)行檢測。將兩次提交代碼取出回車,空格與制表符,得到兩個(gè)長字符串,然后每次都找出兩串的最長公共子序列,將他們刪除,然后再找,直到找到的最長公共子序列小于某個(gè)閾值,計(jì)算被刪除的字符數(shù)目占原始數(shù)目的比例,比例高的就有較高的抄襲可能性。如圖3所示:
這種基于LCS的判定方法可以用來檢查多種方式的抄襲,比如移動(dòng)代碼塊,修改變量名,修改函數(shù)名等。檢測程序的算法復(fù)雜度是O(N*M),N和M是要兩個(gè)被檢驗(yàn)程序的字節(jié)長度。不足之處是當(dāng)用戶提交的程序較長時(shí),效率會(huì)變低,耗時(shí)增加,所以適合有針對性的使用。4考試方式的轉(zhuǎn)變在研究中,選取2011級選“C程序設(shè)計(jì)”課程的部分學(xué)生作為樣本,共 885人次使用在線評測系統(tǒng)參加期末考試,要求在3小時(shí)內(nèi)完成選擇,判斷,填空共30題和程序設(shè)計(jì)題5題。從考試結(jié)果看,由于成績在50分以下的屬于極個(gè)別,因此我們重點(diǎn)考查成績在50分至100分之間的情況,將成績區(qū)間劃分為10個(gè)區(qū)間,統(tǒng)計(jì)每個(gè)區(qū)間對應(yīng)的人數(shù)分布密度,如表1所示:
根據(jù)概率和數(shù)理統(tǒng)計(jì)規(guī)律,大多數(shù)隨機(jī)變量均服從或近似服從正態(tài)分布。如測量的誤差,學(xué)生的考試成績,人的身高與體重等。正態(tài)分布的隨機(jī)變量應(yīng)用范圍之廣,使其在數(shù)理統(tǒng)計(jì)學(xué)中占有極其重要的地位??疾榭忌煽兎植记闆r的直方圖,如果基本呈正態(tài)曲線狀,屬于好;如果略呈正(負(fù))態(tài)狀,屬于中等;如果呈嚴(yán)重偏態(tài)或無規(guī)律,就是差的。 定義成績的樣本空間為S:{50, 51, 52…100},將考生的成績Xi作為隨機(jī)變量,其中(50≤Xi≤100,1≤i≤n)。設(shè)定數(shù)學(xué)期望值μ=75,計(jì)算均方差σ為=94.48,標(biāo)準(zhǔn)差為σ=9.72。在Excel中對樣本空間構(gòu)建正態(tài)分布函數(shù)f(x)=NORMDIST(Si,μ,σ,0),得到正態(tài)分布曲線,如圖5中紅色虛線所示,可看出成績分布直方圖近似地接近于正態(tài)分布曲線,說明在考試中引入在線評測模式具有較為客觀的區(qū)分度。
5評價(jià)及結(jié)論收集OJ模式下的實(shí)踐教學(xué)活動(dòng)中的數(shù)據(jù),由參與者對教學(xué)活動(dòng)的內(nèi)容、組織等進(jìn)行評價(jià)。包括做題數(shù)量,興趣度,使用習(xí)慣等。本次調(diào)查對象885人次,其中女生224人,占25.4%,男生661人,占74.6%。調(diào)查專業(yè)為非計(jì)算機(jī)的理工類專業(yè),主要集中在機(jī)械、材料、生物、土木等專業(yè)。通過調(diào)查,我們得出以下一些結(jié)論:(1)認(rèn)為OJ題目難度偏難的有362人,占總?cè)藬?shù)的41%,其中女比男高出3%,顯示出男生更擅長于程序設(shè)計(jì)。(2)認(rèn)為OJ進(jìn)行實(shí)驗(yàn)比傳統(tǒng)撰寫實(shí)驗(yàn)報(bào)告方式更具有優(yōu)勢的占總?cè)藬?shù)的70%,其中女比男高出10%,這意味著OJ本身更受到女生的歡迎。 (3)值得注意的是,在這次調(diào)查中不習(xí)慣使用OJ的人數(shù)有61人,占總?cè)藬?shù)的7%。在這些學(xué)生中,認(rèn)為題目偏難的有44人,比例高達(dá)71.6%,遠(yuǎn)高于平均比例41%,只有2人認(rèn)為題目難度適中但不習(xí)慣使用OJ。因此,我們得出結(jié)論:造成這些學(xué)生對OJ有抵觸心理的主要原因是題目難度高于他們的平均水平,使得他們無法在較短的時(shí)間內(nèi)提交正確,從而打擊了繼續(xù)使用OJ的積極性。假設(shè)能降低部分題目的難度,讓這些學(xué)生先做簡單的題目,便可讓他們逐步適應(yīng)并認(rèn)可OJ。 (4)在60分鐘的課時(shí)內(nèi),接近85%的人能夠做對三題或三題以下,15%的人能完成五到七題以上, 憑此可大致估算程序設(shè)計(jì)題量和所需時(shí)間的關(guān)系。(5)34.5%的人在使用OJ時(shí)遇到問題傾向于獨(dú)立思考,其中男生比女生高10%;反之,遇到問題后想請教他人的,男生占52%,女生占63%,女生高于男生11%。這意味著雖然OJ可以自動(dòng)判題并給出學(xué)生反饋,有利于學(xué)生在編程時(shí)獨(dú)立思考解決問題,但顯然女生仍應(yīng)更多的受到關(guān)注和幫助。(6)73%的人通過OJ的訓(xùn)練,對程序設(shè)計(jì)課程產(chǎn)生了興趣,男女比例基本持平。28.4%的人有參加ACM競賽的愿意,試試自己的編程水平。(7)從調(diào)查結(jié)果看,認(rèn)同OJ的原因主要有:簡單易行、反饋及時(shí)、有利于主動(dòng)學(xué)習(xí)。但即使OJ被廣泛認(rèn)可,教師仍不能過度依賴于機(jī)器判題的自動(dòng)化,尤其對程序設(shè)計(jì)的初學(xué)者而言,在學(xué)習(xí)的初級階段,程序的書寫格式以及良好的編程習(xí)慣的培養(yǎng),都需要教師對學(xué)生的耐心指導(dǎo),而遠(yuǎn)非依靠OJ所能達(dá)到。6結(jié)語隨著計(jì)算機(jī)人工智能的發(fā)展,程序代碼自動(dòng)評測系統(tǒng)已成為程序設(shè)計(jì)課程實(shí)驗(yàn)教學(xué)過程中的有效輔助工具。改變傳統(tǒng)的筆試考核方式,使用在線評測系統(tǒng)開展課程考試逐步成為趨勢。同時(shí)需要不斷完善在線評測系統(tǒng)的功能,最大程度上減少和避免抄襲現(xiàn)象的發(fā)生,這樣做既能促進(jìn)學(xué)生主動(dòng)學(xué)習(xí),又能考查出學(xué)生真實(shí)的編程水平,同時(shí)極大減輕了教師的工作量,讓他們有更多的時(shí)間和精力投入到教學(xué)活動(dòng)中去。經(jīng)過多年的教學(xué)實(shí)踐,目前已形成包括實(shí)驗(yàn)教學(xué)體系,教學(xué)方法,考核評價(jià),創(chuàng)新能力培養(yǎng)等在內(nèi)的一整套方案,建立了適合初學(xué)者練習(xí)的在線評測試題庫,積累了大量地學(xué)生平時(shí)練習(xí)和考試的原始數(shù)據(jù)。藉此,希望對高校程序設(shè)計(jì)課程的實(shí)驗(yàn)教學(xué)起到一定的借簽和指導(dǎo)作用。
參考文獻(xiàn):
[1]丁邦旭,鐘志水.基于ACM 的計(jì)算機(jī)程序設(shè)計(jì)類課程實(shí)驗(yàn)教學(xué)體系設(shè)計(jì)[J].安慶師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2012,18(3):117-120.
[2]張麗萍,劉東升,王春暉.“程序設(shè)計(jì)基礎(chǔ)”精品課程建設(shè)[J].計(jì)算機(jī)教育,2010(20):115-117.
[3]韓君澤,鐘美,劉東升. 程序設(shè)計(jì)在線評測輔助教學(xué)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].內(nèi)蒙古師范大學(xué)學(xué)報(bào),2010,39(5):473-476.[4]梁嵩,王建新,盛 羽.在線程序語言評測系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與自動(dòng)化,2010,29(6):128-131.
[5]Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest.Introduction to Algorithms[M].The MIT Press,2009,9.
[6]茆詩松,程依明,濮曉龍.概率論與數(shù)理統(tǒng)計(jì)教程[M].北京:高等教育出版社,2011,2.