肖紅玉,賀 輝,陳紅順
(北京師范大學(xué)珠海分校 信息技術(shù)學(xué)院,廣東 珠海 519087)
在線評(píng)測(cè)教學(xué)輔助系統(tǒng)設(shè)計(jì)
肖紅玉,賀 輝,陳紅順
(北京師范大學(xué)珠海分校 信息技術(shù)學(xué)院,廣東 珠海 519087)
為滿足程序設(shè)計(jì)類課程實(shí)驗(yàn)教學(xué)及程序設(shè)計(jì)競(jìng)賽的需要,對(duì)國(guó)內(nèi)外現(xiàn)有的在線評(píng)測(cè)系統(tǒng)進(jìn)行研究。以ACM/ICPC競(jìng)賽模式為藍(lán)本,采用Python、Mysql、Django 1.8、HTML5、jQuery 1.11、Bootstrap 3.5、Nginx 1.8等技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了基于RabbitMQ高級(jí)消息隊(duì)列和多級(jí)安全沙盒的在線評(píng)測(cè)輔助教學(xué)系統(tǒng)?;贑elery并行分布式框架,解決了系統(tǒng)大規(guī)模評(píng)測(cè)的并發(fā)性需求,可根據(jù)評(píng)測(cè)負(fù)載動(dòng)態(tài)調(diào)整評(píng)測(cè)節(jié)點(diǎn)個(gè)數(shù)。系統(tǒng)具有高容錯(cuò)性,個(gè)別評(píng)測(cè)節(jié)點(diǎn)的意外故障不影響系統(tǒng)整體運(yùn)行。通過Linux用戶權(quán)限機(jī)制、全虛擬化技術(shù)、Linux Container (LTX)和setUID實(shí)現(xiàn)的多級(jí)安全沙盒,保證了評(píng)測(cè)環(huán)境的公平性和安全性。系統(tǒng)主要為日常實(shí)驗(yàn)教學(xué)代碼評(píng)測(cè)而設(shè)計(jì),共有4個(gè)角色,與面向競(jìng)賽的評(píng)測(cè)系統(tǒng)相比,增加了教學(xué)管理模塊、作業(yè)管理模塊、統(tǒng)計(jì)分析管理模塊。系統(tǒng)已經(jīng)成功應(yīng)用在C/C++/Java/數(shù)據(jù)結(jié)構(gòu)等課程的日常實(shí)驗(yàn)教學(xué)中。運(yùn)行結(jié)果表明,該輔助教學(xué)系統(tǒng)對(duì)促進(jìn)教學(xué)質(zhì)量、提升學(xué)生學(xué)習(xí)興趣非常有幫助。
在線評(píng)測(cè);實(shí)驗(yàn)教學(xué);教學(xué)輔助系統(tǒng);沙盒
C/C++/Java/數(shù)據(jù)結(jié)構(gòu)等程序設(shè)計(jì)課程是高校理工類專業(yè)的核心課程。課程的培養(yǎng)目標(biāo)是培養(yǎng)學(xué)生掌握程序設(shè)計(jì)的思想和方法,掌握基本的程序設(shè)計(jì)過程和技巧,初步具備分析問題和利用計(jì)算機(jī)求解問題的能力[1]。這類課程對(duì)實(shí)踐開發(fā)能力、邏輯性思維要求比較高[2]。提高學(xué)生實(shí)踐開發(fā)能力最有效的方法就是重視實(shí)驗(yàn)教學(xué),督促學(xué)生在課堂內(nèi)外編寫大量代碼。在線判題系統(tǒng)可以實(shí)時(shí)評(píng)判學(xué)生提交的源代碼,不僅大大減輕了教師的負(fù)擔(dān),對(duì)提高學(xué)生學(xué)習(xí)熱情也很有幫助[3]。ACM國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽(ACM/ICPC)是目前全球公認(rèn)水平最高影響最大的編程賽事,許多高校開發(fā)了基于ACM/ICPC的程序設(shè)計(jì)在線評(píng)測(cè)系統(tǒng)[4-9]。例如,孟學(xué)多等[3]基于多核平臺(tái)實(shí)現(xiàn)了在線判題系統(tǒng);蔣輝等[10]從滿足學(xué)生實(shí)踐的角度設(shè)計(jì)了在線評(píng)測(cè)系統(tǒng);莊奇東等[11]從頁面和數(shù)據(jù)庫(kù)緩存、服務(wù)器架構(gòu)等方面討論了在線判題系統(tǒng)的優(yōu)化;黃洪波等[12]討論了大規(guī)模程序評(píng)判系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。但這些系統(tǒng)主要為ACM比賽服務(wù),不適合直接用于課程實(shí)驗(yàn)教學(xué)。也有些高校以ACM/ICPC Online Judge (OJ)系統(tǒng)為藍(lán)本設(shè)計(jì)了在線評(píng)測(cè)教學(xué)輔助系統(tǒng)[13]。
文中對(duì)現(xiàn)有的在線判題系統(tǒng)進(jìn)行了研究分析,綜合各系統(tǒng)的優(yōu)缺點(diǎn),結(jié)合我校程序設(shè)計(jì)類課程實(shí)際教學(xué)需要,設(shè)計(jì)了一個(gè)面向?qū)嶒?yàn)教學(xué)兼顧競(jìng)賽的在線評(píng)測(cè)教學(xué)輔助系統(tǒng)。與面向比賽的OJ系統(tǒng)相比,教學(xué)輔助系統(tǒng)增加了課程管理、作業(yè)管理子系統(tǒng)和教學(xué)中心。此外,設(shè)計(jì)了4級(jí)沙箱安全機(jī)制保證系統(tǒng)的安全,基于RabbitMQ和Celery設(shè)計(jì)了生產(chǎn)者-消費(fèi)者模型的高效并發(fā)機(jī)制。
基于Linux/Windows、Python、MySQL、Django 1.8、Nginx 1.8、HTML5+jQuery 1.11+Bootstrap 3.5技術(shù),以ACM/ICPC競(jìng)賽模式為藍(lán)本,設(shè)計(jì)并實(shí)現(xiàn)了在線評(píng)測(cè)教學(xué)輔助系統(tǒng)。系統(tǒng)可對(duì)用戶提交的C/C++/Java源代碼進(jìn)行編譯、運(yùn)行、實(shí)時(shí)評(píng)測(cè)打分并給出明確的評(píng)判結(jié)果,為老師提供了課程管理、排課管理、題庫(kù)管理、作業(yè)管理、助教管理、教學(xué)資源管理等功能,是日常教學(xué)、考試、競(jìng)賽的一體化平臺(tái)。學(xué)生借助該平臺(tái)可以完成日常課程作業(yè)、查看用戶排名、站內(nèi)檢索、下載教學(xué)資源等。
系統(tǒng)采用多層分層架構(gòu),分為表現(xiàn)層、業(yè)務(wù)邏輯層、評(píng)測(cè)模塊、數(shù)據(jù)訪問層。層間關(guān)系如圖1所示。
圖1 系統(tǒng)體系結(jié)構(gòu)
表現(xiàn)層:接收用戶提交的數(shù)據(jù),并以圖表的形式向用戶展示請(qǐng)求的數(shù)據(jù),主要用于實(shí)現(xiàn)與用戶的交互。
業(yè)務(wù)邏輯層:包含應(yīng)用于業(yè)務(wù)對(duì)象的規(guī)則,系統(tǒng)的業(yè)務(wù)規(guī)則在這部分編寫,主要完成以下功能:完成系統(tǒng)業(yè)務(wù)規(guī)則和邏輯的實(shí)現(xiàn),從表現(xiàn)層接受用戶請(qǐng)求,根據(jù)業(yè)務(wù)規(guī)則處理請(qǐng)求,通過數(shù)據(jù)訪問層完成與數(shù)據(jù)庫(kù)的交互任務(wù),將處理結(jié)果返回給表現(xiàn)層。
數(shù)據(jù)訪問層:主要完成與數(shù)據(jù)庫(kù)的交互即CRUD(Create、Retrieve、Update、Delete)操作。數(shù)據(jù)訪問層為業(yè)務(wù)邏輯層提供服務(wù),根據(jù)業(yè)務(wù)邏輯層的要求從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)或者修改數(shù)據(jù)。
評(píng)測(cè)模塊:對(duì)學(xué)生提交的程序代碼進(jìn)行編譯、運(yùn)行。如果源代碼在編譯過程出現(xiàn)錯(cuò)誤,直接返回CE(Compile Error),結(jié)束判題。編譯成功,則讀取預(yù)定的輸入數(shù)據(jù)并運(yùn)行程序,獲取程序運(yùn)行時(shí)間、內(nèi)存和CPU使用情況,如果發(fā)現(xiàn)這些數(shù)據(jù)超出題目的設(shè)定值,則結(jié)束判題,并給出對(duì)應(yīng)的提示。如果程序順利執(zhí)行,則把輸出重定向到臨時(shí)的輸出文件中,并和預(yù)先給定的標(biāo)準(zhǔn)輸出進(jìn)行對(duì)比。兩個(gè)文件的內(nèi)容一模一樣則判定學(xué)生提交的代碼是正確的,并返回Accept;否則返回WA(Wrong Answer)。評(píng)測(cè)過程如圖2所示。
圖2 代碼評(píng)測(cè)流程
系統(tǒng)共有管理員、老師、學(xué)生、助教4種角色,不同角色擁有不同的操作權(quán)限,系統(tǒng)功能結(jié)構(gòu)框圖如圖3所示。
圖3 系統(tǒng)功能框圖
管理員:系統(tǒng)管理和權(quán)限管理子模塊是管理員獨(dú)享的子模塊,系統(tǒng)管理子模塊的功能包括:設(shè)置系統(tǒng)判題機(jī)是否啟用、網(wǎng)站名稱等初始參數(shù)設(shè)置;用戶管理;網(wǎng)站公告管理。權(quán)限管理子模塊對(duì)各用戶的使用權(quán)限進(jìn)行設(shè)置和管理。
教師:教師是使用系統(tǒng)的主體,是系統(tǒng)使用的引導(dǎo)者和督促者,擁有除系統(tǒng)管理子模塊之外的其他所有功能子模塊。
(1)題目管理子模塊:該子模塊的功能主要有:題目分類管理,目前系統(tǒng)設(shè)置了4級(jí)分類;題目的CRUD管理,增加題目時(shí)需要輸入題目標(biāo)題、題目描述、輸入輸出描述、樣例輸入輸出、時(shí)間和內(nèi)存限制、題目提示和參考程序,其中時(shí)間限制、內(nèi)存限制可以采用默認(rèn)值;可以設(shè)置是否隱藏題目,被隱藏的題目只對(duì)老師可見;本人發(fā)布的題目只有自己可以修改、刪除,其他老師只能查看、布置作業(yè)時(shí)選用;每道題都可以查看評(píng)測(cè)歷史。
(2)測(cè)試數(shù)據(jù)管理子模塊:該模塊主要完成測(cè)試輸入輸出數(shù)據(jù)的CRUD操作。為了提高系統(tǒng)的易用性,還設(shè)計(jì)了自動(dòng)生成測(cè)試輸出數(shù)據(jù)的功能。每組測(cè)試數(shù)據(jù)可以靈活地設(shè)置分值以及是否啟用。
(3)教學(xué)管理子模塊:教學(xué)中心包括課程管理(創(chuàng)建、編輯、刪除課程)、課程通知(發(fā)布、修改、刪除課程通知)、教學(xué)資料(上傳、刪除教學(xué)資料)、排課管理(設(shè)定上課的起止教學(xué)周、上課的具體時(shí)間、生成選課碼)、學(xué)生管理(批量導(dǎo)入上課學(xué)生名單、添加單個(gè)或多個(gè)、批量設(shè)定學(xué)生上課時(shí)間、學(xué)生調(diào)課管理)、助教管理(添加、修改、刪除助教)。
(4)作業(yè)管理子模塊:發(fā)布作業(yè)、修改作業(yè)、批改作業(yè)、刪除作業(yè)。發(fā)布作業(yè)時(shí)首先輸入作業(yè)基本信息(作業(yè)名稱、最高成績(jī)、備注、設(shè)置評(píng)測(cè)語言),接下來從題庫(kù)中選擇題目添加到作業(yè)中,設(shè)置每道題的分值以及是否必做,設(shè)置作業(yè)的訪問權(quán)限,人工批改作業(yè)(可批量修改),作業(yè)代碼打包下載。
(5)統(tǒng)計(jì)分析子模塊:作業(yè)統(tǒng)計(jì)分析、個(gè)人刷題情況統(tǒng)計(jì)分析、全站排行榜等。
學(xué)生:學(xué)生是使用系統(tǒng)的另一大主體,學(xué)生的主要功能是提交代碼以及各種查看功能,包括查看評(píng)測(cè)結(jié)果、題目詳情、課程公告、網(wǎng)站公告、教學(xué)資料、作業(yè)、排行榜、統(tǒng)計(jì)分析結(jié)果等。
采用MySQL數(shù)據(jù)庫(kù),系統(tǒng)運(yùn)行過程中產(chǎn)生的所有數(shù)據(jù)都需要持久化保存到數(shù)據(jù)庫(kù)中。根據(jù)系統(tǒng)功能需要,共設(shè)計(jì)了39張表。考慮到文章篇幅,只列出了作業(yè)管理和教學(xué)管理2個(gè)子模塊的相關(guān)表,各表含義如表1所示。
表1 數(shù)據(jù)庫(kù)設(shè)計(jì)
提交的程序是用戶編寫的,可能有危害系統(tǒng)安全的行為,常見的惡意行為有[12]:
(1)使用非法指令停止系統(tǒng),如在提交的代碼中嵌入shutdown等指令;
(2)試圖刪除系統(tǒng)關(guān)鍵文件;
(3)大量占用硬盤資源,在代碼中反復(fù)執(zhí)行寫文件操作,試圖消耗掉服務(wù)器的硬盤空間;
(4)可能耗盡服務(wù)器CPU資源的死循環(huán);
(5)申請(qǐng)大量?jī)?nèi)存或線程;
(6)故意出錯(cuò),嘗試暴露檢測(cè)代碼。
以上惡意行為不一定是故意的人為攻擊,可能是用戶不成熟的編程水平造成的。作為輔助教學(xué)系統(tǒng),用戶大部分是大一剛接觸編程的學(xué)生,死循環(huán)是很常見的錯(cuò)誤之一,對(duì)此在判題機(jī)內(nèi)部對(duì)運(yùn)行時(shí)間和內(nèi)存占用會(huì)進(jìn)行判斷,如果超過了題目的預(yù)設(shè)值,則啟動(dòng)進(jìn)程將此評(píng)測(cè)任務(wù)kill并釋放其占用的資源。
對(duì)于資源濫用之外的不安全行為,提出一種多級(jí)安全Sandbox(沙盒)的權(quán)限控制機(jī)制。Sandbox在計(jì)算機(jī)領(lǐng)域主要指一個(gè)嚴(yán)格受控的環(huán)境,程序在該環(huán)境運(yùn)行時(shí)的狀態(tài)、所使用或訪問的資源都受到嚴(yán)格的記錄和控制。Sandbox根據(jù)指令對(duì)全系統(tǒng)進(jìn)行模擬,對(duì)程序的訪問資源、執(zhí)行環(huán)境按照規(guī)則賦予一定的訪問權(quán)限。程序只能在Sandbox里面進(jìn)行相關(guān)操作,限制了惡意程序的危害,每個(gè)程序在自己受保護(hù)的Sandbox之中運(yùn)行,不會(huì)影響到其他程序。同樣,這些程序的運(yùn)行也不會(huì)影響操作系統(tǒng)的正常運(yùn)行[12,14]。
文中提出的多級(jí)安全Sandbox機(jī)制共分4層,分別是setUID Sandbox、Linux Container容器(LTX)、全虛擬化虛擬機(jī)和操作系統(tǒng)。為了保證服務(wù)器的安全,評(píng)測(cè)機(jī)不是直接運(yùn)行在操作系統(tǒng)之上,而是運(yùn)行架設(shè)在操作系統(tǒng)之上的全虛擬化層。一方面用戶提交的shutdown、刪除文件等非法操作不會(huì)影響底層真實(shí)系統(tǒng)的正常運(yùn)行;另一方面,全虛擬化與物理硬件和服務(wù)器操作系統(tǒng)隔離,為評(píng)測(cè)機(jī)提供了完整的運(yùn)行環(huán)境,也便于虛擬機(jī)的無縫遷移和部署。全虛擬化帶來安全保障的同時(shí)帶來了對(duì)服務(wù)器硬件結(jié)構(gòu)和運(yùn)行性能的高要求,鑒于評(píng)測(cè)機(jī)需要的系統(tǒng)資源不多,在生產(chǎn)環(huán)境中將服務(wù)器的計(jì)算資源劃分給多個(gè)評(píng)測(cè)機(jī)實(shí)例。出于防止相互干擾、易于部署等因素的考慮,各評(píng)測(cè)機(jī)之間需要互相隔離,在考察了相關(guān)文獻(xiàn)后,使用LXC技術(shù)實(shí)現(xiàn)各評(píng)測(cè)機(jī)之間的隔離。LXC是操作系統(tǒng)級(jí)別的輕量級(jí)虛擬化手段[15],提供了在單一可控主機(jī)節(jié)點(diǎn)上支持多個(gè)相互隔離的服務(wù)器容器同時(shí)執(zhí)行機(jī)制。LXC提供了一個(gè)擁有自己進(jìn)程的和網(wǎng)絡(luò)空間的虛擬環(huán)境,與傳統(tǒng)的硬件抽象層次的虛擬化技術(shù)相比,具有更小的虛擬化開銷、快速部署、不用單獨(dú)為內(nèi)核打補(bǔ)丁等優(yōu)勢(shì)。評(píng)測(cè)機(jī)運(yùn)行在各自的LXC環(huán)境中,相互獨(dú)立、互不干擾。
用戶提交的源代碼可能對(duì)服務(wù)器造成攻擊,所以編譯代碼不能跟評(píng)測(cè)機(jī)放在同一個(gè)運(yùn)行環(huán)境,以免源代碼的缺陷影響評(píng)測(cè)機(jī)的工作。為了保證評(píng)判結(jié)果的公正和客觀,所有源代碼要保證運(yùn)行環(huán)境和策略完全一致,所以在每個(gè)源代碼被評(píng)測(cè)前,評(píng)測(cè)機(jī)需要為它準(zhǔn)備Sandbox運(yùn)行環(huán)境,并且該環(huán)境是可重入的。全虛擬化和操作系統(tǒng)級(jí)虛擬化的初始成本較高,考慮到能耗比和實(shí)際運(yùn)行的需求,設(shè)計(jì)了基于Linux的setUID Sandbox。在Linux中每個(gè)進(jìn)程都會(huì)有uid,不同uid的進(jìn)程之間相互隔離,各自都有自己獨(dú)立的權(quán)限,互不干擾。對(duì)于不可信的程序,在啟動(dòng)該程序時(shí)可以為其分配一個(gè)隨機(jī)uid。基于上述原理,文中將被源代碼降權(quán)為隨機(jī)用戶,從而實(shí)現(xiàn)了源代碼與其他進(jìn)程的相互隔離。
評(píng)測(cè)機(jī)編譯和運(yùn)行用戶提交的源代碼需要?jiǎng)?chuàng)建和銷毀子進(jìn)程,這個(gè)過程需要花費(fèi)一定的時(shí)間。為了評(píng)判結(jié)果的公平,1個(gè)評(píng)測(cè)機(jī)1次只執(zhí)行1個(gè)評(píng)測(cè)任務(wù),并使用單個(gè)邏輯處理器,為了加速系統(tǒng)的響應(yīng)時(shí)間、提高系統(tǒng)的并發(fā)性,采用RabbitMQ-Celery設(shè)計(jì)了基于生產(chǎn)者-消費(fèi)者模型的并發(fā)機(jī)制,以滿足大規(guī)模教學(xué)評(píng)測(cè)的吞吐量需求。
RabbitMQ是基于AMQP(Advanced Message Queuing Protocol,高級(jí)消息隊(duì)列協(xié)議)的開源消息隊(duì)列系統(tǒng)。RabbitMQ可以根據(jù)消費(fèi)者對(duì)消息的處理情況靈活調(diào)整消費(fèi)者權(quán)重,將消息優(yōu)先分配給處理時(shí)間短的消費(fèi)者,從而實(shí)現(xiàn)系統(tǒng)的負(fù)載均衡。Celery是基于Python開發(fā)的分布式任務(wù)隊(duì)列,支持使用任務(wù)隊(duì)列的方式在分布的機(jī)器/進(jìn)程/線程上執(zhí)行任務(wù)調(diào)度,總體架構(gòu)包括4部分:任務(wù)生產(chǎn)者、任務(wù)代理、任務(wù)消費(fèi)者(評(píng)測(cè)機(jī))和任務(wù)執(zhí)行結(jié)果存儲(chǔ)。在文中,生產(chǎn)者是與用戶交互的網(wǎng)頁前端,消費(fèi)者是評(píng)測(cè)機(jī),任務(wù)代理由RabbitMQ負(fù)責(zé)。用戶提交的源程序封裝成RabbitMQ消息,在封裝時(shí)附上相關(guān)的消息頭,如使用的編程語言、評(píng)測(cè)任務(wù)類型等。RabbitMQ在分配消息時(shí)根據(jù)已聲明的任務(wù)調(diào)度器投遞給對(duì)應(yīng)的評(píng)測(cè)機(jī),所以,不同的評(píng)測(cè)機(jī)可支持不同的編程語言或者評(píng)測(cè)任務(wù)。從而,在實(shí)際評(píng)測(cè)時(shí)可根據(jù)系統(tǒng)具體的負(fù)載情況,動(dòng)態(tài)地增減對(duì)應(yīng)編程語言或評(píng)測(cè)任務(wù)的評(píng)測(cè)機(jī),適應(yīng)系統(tǒng)用戶規(guī)模的變化。另外,Celery支持分布式部署和橫向擴(kuò)展,可以在多個(gè)節(jié)點(diǎn)增加評(píng)測(cè)機(jī)的數(shù)量來增加系統(tǒng)的高可用性和并發(fā)性。
平臺(tái)目前已是我院程序設(shè)計(jì)類課程(C/C++/Java/數(shù)據(jù)結(jié)構(gòu))日常實(shí)驗(yàn)教學(xué)的輔助平臺(tái),平臺(tái)訪問地址為https://oj.bnuz.edu.cn/,已建設(shè)實(shí)驗(yàn)題庫(kù)5個(gè):C程序設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)、Java程序設(shè)計(jì)、C++程序設(shè)計(jì)、ACM日常訓(xùn)練。圖4是某題(題號(hào)是1275)的評(píng)測(cè)統(tǒng)計(jì)情況截圖。目前,系統(tǒng)平均在線活躍用戶數(shù)約2 000,已成功完成評(píng)測(cè)任務(wù)幾十萬次,這些數(shù)字還將隨著系統(tǒng)的持續(xù)運(yùn)行不斷增長(zhǎng)。
圖4 實(shí)際應(yīng)用部分截圖
以ACM/ICPC在線評(píng)測(cè)系統(tǒng)為藍(lán)本,設(shè)計(jì)了程序設(shè)計(jì)實(shí)驗(yàn)教學(xué)在線評(píng)測(cè)輔助系統(tǒng)。系統(tǒng)對(duì)學(xué)生提交的程序源代碼進(jìn)行實(shí)時(shí)評(píng)測(cè),具有人工評(píng)判所無法比擬的優(yōu)點(diǎn)。
系統(tǒng)有別于傳統(tǒng)意義上面向比賽的OJ系統(tǒng),擁有更適合課程教學(xué)的教學(xué)中心和作業(yè)管理子系統(tǒng),對(duì)程序設(shè)計(jì)類課程如C/C++/Java/數(shù)據(jù)結(jié)構(gòu)等的實(shí)驗(yàn)教學(xué)起到了很好的輔助作用,有效地提升了教學(xué)質(zhì)量。文中設(shè)計(jì)的基于setUID、LXC、全虛擬化、Linux操作系統(tǒng)權(quán)限機(jī)制的多級(jí)沙箱模型,不但可以隔離非受信的源代碼,而且降低了維護(hù)成本,兼顧了系統(tǒng)運(yùn)行效率。為了適應(yīng)大規(guī)模并發(fā)評(píng)測(cè)的需求,設(shè)計(jì)了基于RabbitMQ-Celery的生產(chǎn)者-消費(fèi)者并發(fā)機(jī)制,在實(shí)際評(píng)測(cè)時(shí)系統(tǒng)可自動(dòng)調(diào)整評(píng)測(cè)機(jī)的數(shù)量以適應(yīng)不同規(guī)模的教學(xué)需求。系統(tǒng)已成為我院程序設(shè)計(jì)課程輔助教學(xué)的有利工具,對(duì)提高教學(xué)質(zhì)量、提升學(xué)生學(xué)習(xí)興趣很有幫助。
[1] 何欽銘,顏 暉,蘇小紅,等.“程序設(shè)計(jì)基礎(chǔ)”課程教學(xué)實(shí)施方案[J].中國(guó)大學(xué)教學(xué),2010(5):62-65.
[2] 葛文庚,藺 莉.程序設(shè)計(jì)基礎(chǔ)課程教學(xué)模式研究與設(shè)計(jì)[J].電子設(shè)計(jì)工程,2012,20(4):44-46.
[3] 孟學(xué)多,俞雪永,顏 暉.基于多核的在線判題系統(tǒng)的設(shè)計(jì)與研究[J].計(jì)算機(jī)時(shí)代,2011(7):7-9.
[4] 韓建平,劉春英,胡維華.“課內(nèi)外貫穿,競(jìng)賽教學(xué)融合”的程序設(shè)計(jì)教學(xué)模式[J].實(shí)驗(yàn)室研究與探索,2014,33(6):169-171.
[5] 劉 楠,孫國(guó)道,田賢忠.ACM在線評(píng)判系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代,2012(2):34-35.
[6] 謝 迪,李文新,郭 煒.“百練”:一個(gè)程序設(shè)計(jì)技能訓(xùn)練與水平測(cè)試平臺(tái)[J].合肥工業(yè)大學(xué)學(xué)報(bào):社會(huì)科學(xué)版,2008,22(4):172-176.
[7] 張浩斌.基于開放式云平臺(tái)的開源在線評(píng)測(cè)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),2012,39(11A):339-343.
[8] 曾棕根.源程序在線評(píng)測(cè)系統(tǒng)技術(shù)改進(jìn)[J].計(jì)算機(jī)工程與應(yīng)用,2011,47(4):68-71.
[9] 車明洙,紀(jì)洪波.一種基于ACM程序設(shè)計(jì)競(jìng)賽在線評(píng)測(cè)系統(tǒng)解決方案[J].微型機(jī)與應(yīng)用,2010(4):11-13.
[10] 蔣 輝,汪大菊.在線評(píng)測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化,2012(2):111-115.
[11] 莊奇東,王鍵聞,張 楠,等.Online Judge系統(tǒng)的優(yōu)化[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011,20(8):115-121.
[12] 黃洪波,宋鴻陟,彭紅星,等.大規(guī)模程序評(píng)判系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2016,37(3):825-831.
[13] 韓君澤,鐘 美,劉東升.程序設(shè)計(jì)在線評(píng)測(cè)輔助教學(xué)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].內(nèi)蒙古師范大學(xué)學(xué)報(bào):自然科學(xué)漢文版,2010,39(5):473-476.
[14] 陳丹偉,唐 平,周書桃.基于沙盒技術(shù)的惡意程序檢測(cè)模型[J].計(jì)算機(jī)科學(xué),2012,39(6A):12-14.
[15] 吳佳杰.基于LXC的Android系統(tǒng)虛擬化關(guān)鍵技術(shù)設(shè)計(jì)與實(shí)現(xiàn)[D].杭州:浙江大學(xué),2014.
DesignofOnlineJudgeTeachingAssistantSystem
XIAO Hong-yu,HE Hui,CHEN Hong-shun
(School of Information Technology,Beijing Normal Univerity,Zhuhai,Zhuhai 519087,China)
To meet the requirements of experimental teaching of programming courses as well as programming contest,the existing online judge teaching system at home and abroad are researched.On the basis of ACM/ICPC competition,an online judge assistant system is designed and implemented in accordance with the RabbitMQ advanced message queue and multi-level safe sandbox by use of Python,Mysql,Django 1.8,HTML5,jQuery 1.11,Bootstrap 3.5 and Nginx 1.8.The needs of concurrency in large-scale judge for system are satisfied based on Celery and the number of judging nodes is adjusted dynamically according to system load.The accidental failures of some nodes have no impact on system operation due to its high fault tolerance.The fairness and security in judging environment is guaranteed by multi-level safe sandbox realized by user permission mechanism of Linux,full virtualization,Linux Container and setUID.The system is mainly designed for judging code in experiment teaching,with four roles,and in comparison with judging system to competition,adds the three modules of teaching management,schoolwork management and statistic analysis.It has been successfully applied in daily experiment teaching like C,C++,Java and data structure.The operation shows that it is very helpful to promoting teaching quality and enhancing students’ learning interest.
online judge;experiment teaching;teaching assistant system;sandbox
2016-12-07
2017-04-13 < class="emphasis_bold">網(wǎng)絡(luò)出版時(shí)間
時(shí)間:2017-08-01
廣東省自然科學(xué)基金-博士啟動(dòng)(2014A030310415);廣東省教育研究課題(GDJY-2015-C-b048)
肖紅玉(1976-),女,博士,副教授,研究方向?yàn)榉植际剿南到y(tǒng)、軟件工程。
http://kns.cnki.net/kcms/detail/61.1450.TP.20170801.1557.074.html
TP302
A
1673-629X(2017)11-0141-05
10.3969/j.issn.1673-629X.2017.11.031