陸柳敏,王 庭,楊李婷,張衛(wèi)豐,4
(1.南京市供電公司,江蘇南京 210008;2.南京郵電大學(xué)計(jì)算機(jī)學(xué)院;3.南京郵電大學(xué)工程實(shí)踐中心,江蘇南京 210003;4.廣西可信軟件重點(diǎn)實(shí)驗(yàn)室,廣西桂林 541004)
目前,版本管理已經(jīng)成功應(yīng)用于大多數(shù)企業(yè)項(xiàng)目代碼管理中,版本管理所帶來的歷史回溯、分支保護(hù)、持續(xù)集成等功能逐漸成為項(xiàng)目生產(chǎn)必備要素。高校計(jì)算機(jī)課程強(qiáng)調(diào)使用項(xiàng)目代碼完成實(shí)踐課程,但是項(xiàng)目化代碼作業(yè)導(dǎo)致學(xué)生作業(yè)管理難、無法追蹤進(jìn)度、代碼評定困難等問題。
本文設(shè)計(jì)并實(shí)現(xiàn)了一個基于版本管理的教學(xué)平臺系統(tǒng),在課程作業(yè)管理中引入版本管理的優(yōu)秀特性與功能。系統(tǒng)使用分布式版本管理工具Git,與課程作業(yè)管理邏輯相結(jié)合,使用Git 操作代替學(xué)生提交作業(yè)、教師創(chuàng)建作業(yè)、教師同步作業(yè)等行為。
筆者根據(jù)使用代碼倉庫管理課程作業(yè)遇到的問題,提出“作業(yè)批量分發(fā)”“作業(yè)自動批改”“作業(yè)在線批注”“作業(yè)相似性檢測”4 點(diǎn)需求,據(jù)此4 點(diǎn)需求使用代碼倉庫、持續(xù)集成等技術(shù)進(jìn)行縝密設(shè)計(jì),在南京郵電大學(xué)的計(jì)算機(jī)課程中進(jìn)行試用,反饋良好。
版本控制軟件提供完備的版本管理功能,用于存儲、追蹤目錄(文件夾)和文件的修改歷史,是軟件開發(fā)者必備工具,Git 已經(jīng)成為軟件行業(yè)開發(fā)人員的首選。
代碼克隆表示在文本、詞匯、結(jié)構(gòu)或含義方面類似或等同的源代碼片段。Kamiya 等[1]將代碼克隆定義為程序干擾和較差的軟件可維護(hù)性。代碼克隆具有兩面性:一方面代碼克隆可以提高軟件開發(fā)效率[2-3];另外一方面,軟件克隆可能導(dǎo)致長期的軟件維護(hù)風(fēng)險,例如代碼中可能存在重復(fù)缺陷以及克隆代碼片段之間的可行性缺失現(xiàn)象[4];Chatterji 等[5]給出了克隆代碼的開放式查詢,而Stephan等[7]回顧了該領(lǐng)域相關(guān)成果。Mondal 等[6]研究表明,盡管代碼克隆對軟件可維護(hù)性會產(chǎn)生負(fù)面影響,但克隆代碼可能比非克隆代碼擁有更高的準(zhǔn)確性;但是在學(xué)生作業(yè)中直接克隆其它人的作業(yè)或代碼并不是一種好行為,學(xué)生缺失了鍛煉的機(jī)會,教師無法正確評估學(xué)生學(xué)習(xí)的掌握情況。
此外,文獻(xiàn)[8]主要利用微信進(jìn)行編程教育,增強(qiáng)互動性;文獻(xiàn)[9]利用黑盒測試技術(shù)對學(xué)生作業(yè)進(jìn)行自動測試,解決教師批改作業(yè)工作量大、學(xué)生實(shí)踐能力差等問題,通過程序設(shè)計(jì)輔助教學(xué)平臺可以提高教師教學(xué)質(zhì)量和學(xué)生的學(xué)習(xí)效率;雷大正等[10]提出以能力為本位,以編程實(shí)踐為主線的思想,培養(yǎng)學(xué)生實(shí)際開發(fā)能力。
這些工作在一定程度上解決了編程教育信息化問題,但是沒有解決學(xué)生編程過程的管理和作弊問題。本文提出利用Git 代碼倉庫的版本管理機(jī)制實(shí)現(xiàn)學(xué)生作業(yè)過程管理和防作弊,有效提高了編程實(shí)訓(xùn)效果。
系統(tǒng)需求有3 個方面:①在代碼管理方面,提供類似于GitHub 的代碼管理功能,管理員可以管理教師及學(xué)生賬號;②教師可以創(chuàng)建學(xué)生賬號并分組,創(chuàng)建代碼倉庫,并且可以把代碼倉庫分發(fā)給某個小組。此外,教師可對學(xué)生提交的代碼進(jìn)行批改注解,對學(xué)生的作業(yè)進(jìn)行相似性檢測;在作業(yè)批改與自動檢測方面,需要為教師提供課程項(xiàng)目代碼評判結(jié)果展示界面,以便管理者審查學(xué)生未合格的代碼;③教師在批改代碼文件時,系統(tǒng)需要為其提供非侵入式批注功能,并通過郵件等方式將批注消息與內(nèi)容發(fā)送給相應(yīng)的代碼倉庫作者。
系統(tǒng)根據(jù)需求分為管理員、教師與學(xué)生3 種角色:①管理員負(fù)責(zé)整個平臺的管理,負(fù)責(zé)教師與學(xué)生賬號的管理;②教師主要職責(zé)有:管理學(xué)生賬戶,包括導(dǎo)入導(dǎo)出與分組功能;創(chuàng)建模板倉庫;創(chuàng)建學(xué)生倉庫;批改學(xué)生倉庫;相似性檢測等;③學(xué)生權(quán)限包括登錄系統(tǒng),下載及同步代碼倉庫。
系統(tǒng)總體架構(gòu)如圖1 所示。系統(tǒng)架構(gòu)基礎(chǔ)服務(wù)組件包含Git 服務(wù)組件與數(shù)據(jù)服務(wù)組件。Git 組件主要負(fù)責(zé)Git的相關(guān)數(shù)據(jù)查詢與操作自動化,數(shù)據(jù)服務(wù)組件提供數(shù)據(jù)庫相關(guān)的操作接口。核心功能組件包括注解機(jī)制服務(wù)組件、持續(xù)集成服務(wù)組件、對比算法組件以及權(quán)限配置組件。這4 種組件與基礎(chǔ)服務(wù)組件相結(jié)合使用,組成系統(tǒng)各部分主要功能模塊。
圖1 系統(tǒng)總體架構(gòu)
(1)注解機(jī)制服務(wù)組件。該部分主要關(guān)注教師與學(xué)生的非侵入式批注功能與郵件通知服務(wù),該組件與基礎(chǔ)服務(wù)組件結(jié)合使用作為作業(yè)在線批注模塊的核心功能。
(2)持續(xù)集成服務(wù)組件。此組件負(fù)責(zé)系統(tǒng)與持續(xù)集成工具進(jìn)行數(shù)據(jù)交互的功能,它是作業(yè)自動批改功能模塊的核心部件,可與數(shù)據(jù)服務(wù)組件結(jié)合使用將數(shù)據(jù)存儲到系統(tǒng)數(shù)據(jù)庫。
(3)對比算法組件。這是一個包含代碼相似度核心對比算法的組件,主要功能是對比出兩個代碼倉庫的相似度。
(4)權(quán)限配置組件。這一部分體現(xiàn)系統(tǒng)中各賬戶的權(quán)限控制與權(quán)限分配規(guī)則功能,它與基礎(chǔ)組件中的數(shù)據(jù)服務(wù)、Git 服務(wù)相結(jié)合作為賬戶管理、作業(yè)項(xiàng)目存儲管理兩個模塊的核心功能。
綜上所述,本系統(tǒng)在設(shè)計(jì)結(jié)構(gòu)上具有較強(qiáng)的可擴(kuò)展性,主要體現(xiàn)在以下3 點(diǎn):①各功能模塊之間相互隔離,僅通過數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行驅(qū)動,各模塊之間耦合性低;②基礎(chǔ)服務(wù)組件提供數(shù)據(jù)庫數(shù)據(jù)、Git 代碼倉庫數(shù)據(jù)的管理接口,新加入模塊可直接使用標(biāo)準(zhǔn)接口開發(fā),省去了大量重復(fù)代碼;③系統(tǒng)頁面的控制層均由Wicket 實(shí)現(xiàn),易于插入新功能頁面。
代碼相似度檢測功能是項(xiàng)目的核心功能。在計(jì)算機(jī)課程管理中,為降低作業(yè)評判工作量,大多數(shù)課程會使用統(tǒng)一題目發(fā)給學(xué)生,造成學(xué)生大量抄襲作業(yè)現(xiàn)象。一些課程開始使用線上編程系統(tǒng),但依舊無法解決抄襲問題,并且這種在線編程系統(tǒng)無法支持工程化作業(yè)。
鑒于此,本文提出在代碼倉庫模式下的代碼管理中進(jìn)行代碼相似性檢測方案,設(shè)計(jì)并實(shí)現(xiàn)一種新型的代碼相似度檢測算法,其主要實(shí)現(xiàn)原理是:利用獲取Git 代碼倉庫中的代碼版本歷史提交信息之間的差異,判斷兩份代碼的更迭軌跡是否相似,從而獲得學(xué)生作業(yè)的相似性結(jié)果。該方法與傳統(tǒng)代碼相似性判斷方法不同,其將判斷目標(biāo)由代碼主體轉(zhuǎn)移到代碼的更迭記錄,這種轉(zhuǎn)變使其更適合采用工程項(xiàng)目中代碼的相似性檢測方法,但需要基于Git 代碼倉庫實(shí)現(xiàn)。
項(xiàng)目對比算法有兩個核心思想:①需要根據(jù)倉庫兩兩版本之間的相似度確定最終的相似度;②對于兩個版本之間的相似性需要考慮文本內(nèi)容的相似性以及每個版本與之前版本差異的相似性。
設(shè)倉庫R1與倉庫R2是兩個代碼倉庫,則倉庫間的相似性可通過公式(1)計(jì)算。
其中,m和n分別為倉庫R1和R2的提交次數(shù),Max(m,n)表示取m和n的最大值,C(R1,R2)表示R1和R2中檢測出的相似版本個數(shù)。
基于代碼倉庫的教學(xué)平臺目前已經(jīng)成功應(yīng)用到南京郵電大學(xué)計(jì)算機(jī)學(xué)院兩門課程中,項(xiàng)目申請者是編程教育一線教師,對編程教育中的痛點(diǎn)認(rèn)識深刻。在2018 年的實(shí)踐中,利用該平臺的過程管理功能判定13 位學(xué)生不及格(在以前沒法判定不及格),在2019 年4 月份的“軟件設(shè)計(jì)實(shí)踐”中,成功實(shí)現(xiàn)多人協(xié)作模式下的軟件開發(fā),通過問卷調(diào)查取得較好的應(yīng)用效果。學(xué)生反饋情況如圖2 所示。
圖2 學(xué)生學(xué)習(xí)收獲反饋
本平臺在編程語言類教學(xué)課程中可作為學(xué)生的統(tǒng)一作業(yè)提交平臺,教師可方便查看學(xué)生作業(yè)進(jìn)度并進(jìn)行批改、相似度檢測等操作,學(xué)生在這種強(qiáng)有力的監(jiān)管之下會積極進(jìn)行編程作業(yè)的原創(chuàng)工作。本平臺在南京郵電大學(xué)C語言教學(xué)課程中試用,評價良好。
后續(xù)工作是基于此平臺對學(xué)生的單人或協(xié)作作業(yè)進(jìn)行分類規(guī)劃,對于協(xié)作的作業(yè)進(jìn)行個人作業(yè)量統(tǒng)計(jì)與相似度檢測,逐步杜絕抄襲,為學(xué)生創(chuàng)造良好的學(xué)習(xí)氛圍。