祝小玲
(北海職業學院 廣西壯族自治區北海市 536000)
目前我國教育形勢變化逐漸加劇,信息技術應用已經進入成熟階段,高校在面臨全新教學要求的情況下,應當采取現代化信息技術建設措施,使評測流程能夠從傳統體系框架內脫離,進一步貼合新時代要求,達到提高工作效率目標。通過利用B/S 模式建設的程序設計在線評測系統,可以為教師與學生提供高度自動化的應用服務,有利于解決傳統評測體系存在的弊端問題,使評測工作能夠進一步提高開展質量與效率,為專業建設發展打下堅實基礎。
目前系統的應用價值能夠在程序設計評測環境中得到有效發揮作用,能夠進一步創設理想評測條件,解決傳統體系下存在的負面問題,可以將試卷以數字化形式進行存儲,可以有效節約紙質資源的應用,同時還能夠降低試卷出現污損或丟失的概率[1]。同時,在線評測試卷的題目可以進行重復應用,并根據網絡層面教學趨勢進行靈活改動,能夠對學生的實際能力開展客觀測試流程,具有優越的應用價值。此外,系統可以完成自動抽題任務,能夠為教師提供直接閱卷的途徑,有利于工作效率提升,進一步降低了教師的工作量級別,節約人力資源。
程序設計評測系統屬于無紙化在線應用類型系統,可以減少傳統出卷環節,從而達到降低開支的目標。在現有信息技術框架下,系統的應用價值相對較高,同時開發成本較低、建設周期短,能夠以少量資源應對大量學生。同時,系統的界面架構能夠利用軟件平臺進行高效部署,完成處理的界面用戶友好性高,符合實際應用標準,能夠為傳統評測流程提供改革途徑。
日常程序設計評測工作需求較為復雜,需要針對相關需求進行詳細分析,為后續功能模塊的部署提供重要參考。在系統應用過程中,主要提供對java、C 兩種語言代碼程序處理功能,具有用戶管理模塊,包括普通用戶(學生)和超級管理員(教師),將超級管理員權限與普通用戶權限進行分割處理,使相關操作能夠從架構層面隔離,避免出現越權現象;普通用戶可進行注冊、登錄和修改個人信息功能;超級管理員具有普通用戶和題庫增刪改查操作管理功能,題庫管理可以為超級管理員修改與調整評測試題內容提供重要工具。為降低題庫建設時間,縮短處理周期,系統支持題庫導入功能,使其能夠合理利用其它應用題庫文件,快速完成部署流程;以及比賽模塊,包括比賽試題管理功能及評測功能。除此之外,在線評測系統查看排行榜及比賽狀態功能具有重要應用意義,其處理需求相對較高,是核心模塊。因此,系統提供成績自動統計整合功能,自動快速統計分析成績狀態,要求防止用戶抄襲作弊行為檢測,為后續教學提供重要參考。同時,成績還需要與個人信息進行整合,并利用大數據或云計算等形式,進一步挖掘相關內容價值,達到理想應用目標。
在線評測系統通常可應用C/S 或B/S 兩種基礎架構,由于C/S 架構模式在應用場景中需要利用獨立客戶端進行處理,完成開發操作、維護操作并落實跨平臺建設,因此整體工作量相對較高。在互聯網信息技術應用逐漸成熟的背景下,B/S 架構模式為最佳在線評測系統應用類型,因此需要合理利用其基礎優勢,確保在線評測活動能夠正常進行。B/S 架構模式本身屬于C/S 架構模式的子類延伸,其需要通過平臺瀏覽器軟件進行訪問,獲得相關內容并完成數據傳輸。相對于傳統方案,B/S 可以將WEB 服務技術作為應用核心,使整體跨平臺特性得到完整發揮[4]。通過將服務器分割為數據庫、web、判題機三個部分組成,用戶可以通過web 瀏覽器調用相關接口,強化數據處理質量,使后續解釋反饋工作能夠快速進行,有利于強化在線評測系統靈活性,系統總體架構圖如圖1。

圖1:系統總體架構圖
3.2.1 spring 框架技術
B/S 架構模式在線評測系統設計過程中,需要應用多種技術類型,確保整體運行效果能夠達到理想標準。在編寫底層架構時,需要利用WebWork 作為基礎組件應用平臺,通過借助Spring MVC 提供的 Controller 完成攔截用戶請求模塊的編寫,需要合理利用該技術將業務處理邏輯從傳統體系中剝離,避免服務器承受過大壓力。編寫過程中,服務器在接收到用戶請求前,首先需要配置相關 DispatcherServlet,之后再編寫 Controller。在完成解析后,便可采用過濾模塊分發對應處理請求,使邏輯系統能夠完成信息處理操作,并產生響應信息,為前端用戶提供操作選項。通過編寫ErrorController 方法,用戶對異常的捕獲和處理 Controller,并返回錯誤的頁面。
3.2.2 AJAX 異步請求技術
異步請求技術對在線評測系統具有重要影響意義,其能夠有效解決經典WEB 應用存在的延時弊端問題,對傳統等待插入響應的架構進行改進,達到異步處理目標,有效提高刷新效率。在應用過程中,其需要將JS 與HTTP 請求相互結合,利用瀏覽器軟件平臺內部的XML HTTP 請求機制,將對象以異步方式發送至服務器,達到傳輸與解析目標。
3.2.3 數據庫連接池技術
通常情況下,在線評測系統存在時間限制需求,超過時間段后所有答題應當終止并立即提交試卷。在這種需求下,為實現相關目標,采用數據庫連接池技術進行設計。此類技術的主要原因與登錄階段、提交階段服務器壓力較大存在密切關聯,為避免出現服務端導致整體系統無法正常運轉的情況,工作效率低,需要利用數據庫連接池技術對相關架構進行改進,使系統并發性得到顯著提升,降低請求耗時與資源消耗級別,滿足快速響應標準。數據庫連接池技術需要將數據源與JNDI 進行綁定處理,使系統在啟動初始化階段能夠自動應用相關配置文件處理連接池,達到建立目標。在用戶端發送連接處理請求時,服務系統需要首先對數據池進行遍歷搜尋,獲得對應空閑連接對象,并將其返回至用戶端[4]。在用戶端需要切斷連接的情況下,系統可以釋放連接對象,使其能夠重新返回數據池內部,等待下一請求流程。通過這種技術,可以有效改善系統并發性能,達到處理架構目標。
功能模塊屬于線上評測系統的核心組成部分,包括用戶模塊、后臺管理模塊、在線評測模塊、比賽測試模塊、公告模塊共五大部分組成,用戶模塊主要分為普通用戶和超級管理用戶,普通用戶自行注冊、登錄和修改個人信息等功能,超級管理用戶主要對普通用戶進行增刪改管理,以及用戶權限設置等功能;后臺管理模塊主要包括創建修改比賽,實現題庫增刪改查,公告發布、修改、刪除等功能;在線評測模塊主要包括查看題庫、提交答案、查看排行榜以及比賽狀態等功能,是系統核心模塊;系統功能模塊如圖2 所示。

圖2:系統功能模塊
數據庫可以為在線評測系統提供重要運行支持,是連接系統web 服務器和判題機服務器的橋梁,該系統選用MYSQL 作為數據庫平臺,主要有用戶信息表、提交信息表、題庫信息表、登錄信息表、比賽狀態信息表、排名信息表、公告信息表等數據表,數據表如表1 所示。系統用戶信息表主要存儲用戶名、密碼、做題正確數量、提交次數、正確率等信息;提交信息表主要存儲提交用戶名、題編號、運行結果、提交時間、運行時間以及運行內存等信息;題庫信息表存儲題編號,題標題、題內容、題類別、題難度以及模擬測試次數等信息;登錄信息表存儲用戶登錄情況,包括用戶名、密碼、登錄時間,目的了解訪問系統人數;比賽狀態信息表存儲比賽題庫信息、比賽開始時間、結束時間;排名信息表存儲做題數量,做題用時信息,以及排名信息;公告信息表存儲公告標題、內容、時間等信息。系統數據庫ER 圖如圖3 所示。

圖3:數據庫ER 圖

表1:系統數據表
在線上評測系統應用過程中,判題機是系統核心服務進程,主要功能是訪問web 服務器和數據庫服務器的任務隊列,隨時提取判題隊列,工作流程圖如圖4 所示。評判原理是用戶利用瀏覽器軟件平臺的代碼上傳控制器,即submitAction。控制其在獲得相關請求內容后可以將代碼進行自動注入處理,使其與服務器運行類整合,達到單線程操作目標。隨后,需要調用命令工具的exeCmd 方法,完成用戶提交程序代碼的編譯處理流程。編譯階段需要注重系統實時狀態,并將程序控制開關進行規范化處理,為用戶反饋多種應用結果。若程序編譯處理失效,則自動結束相關流程,并將錯誤信息反饋至用戶層面。若程序編譯成功,則繼續調用classloader 將編譯代碼完成加載,最終借助futuretask 與反射處理體系對main 模塊進行處理,達到執行目標[5]。系統對輸出結果與數據庫內設定的標準結果進行對比,若對比結果正確則反饋通過信息,若對比結果錯誤則反饋答案異常信息。在執行操作階段,若程序出現內存溢出問題,則需要自動向用戶端反饋內存溢出錯誤信息。若運行時間超出限制標準,則需要返回超時錯誤信息。

圖4:進程流程圖
在線上評測系統應用過程中,核心功能設計實現需要滿足程序設計評測的基礎需求。因此系統功能架構應當重視基礎組成,確保其能夠以平衡狀態進行應用。線上評測系統目前主要支持 Java、C 的編譯,包含頂部菜單區域,對公告內容進行輪播處理,題目模塊、比賽模塊、成績數據分析等操作,為用戶提供多樣化的服務結構。在用戶端利用瀏覽器發送對應請求內容后,首先對主要動作類請求進行處理,隨后調用相關處理對象方法,使信息可以動態反饋至用戶層面。核心功能設計實現的邏輯分析主要有以下幾點:
3.6.1 判題模塊
整個系統核心所在是判題部分,該系統把判題服務單獨出來,這樣既有利于增加判題元素加快判斷速度,用戶發送代碼程序請求給RabbitMQ,形成可擴展的worker 判斷元素,提高判斷效率。通過派生出一個進程,設置時間、內容用量等限制,再利用ptrace 進行監控,限制系統調用次數,解決安全問題,利用開源的應用容器引擎Docker 擴展設置計算時間、內存的使用量、程序代碼等參數,編譯判斷程序代碼。Docker 編譯 Java 命令代碼是Docker run --rm -u root -v /oj:/oj openjdk:8 /bin/sh -c cd /oj&&javac Main.java,編譯 C 命令代碼是Docker run --rm -u root -v /oj:/oj openjdk:8 /bin/sh -c cd /oj&&g++ Main.cpp。
3.6.2 賬號安全驗證
Token 由header 密文、payload 密文、Signature 簽名三部分組成,用戶登錄發送請求,生成一個由Base64 解密Token,服務端把Token 的Signature 簽名存于redis 和服務器的數據庫中進行HS256 運算,運算得出的簽名與Token 自帶的簽名進行比較,如一致Token 合法,否則原文被修改。另利用Base64 解密payload 密文,授權時間與當前時間比較判斷是否過期,保證賬號安全驗證通過。
3.6.3 讀取導入文件
根據學生解題情況自動生成績報表并支持導出功能,首先創建模板控制器。把文件傳輸到視圖,DownImport Template()中的參數要與視圖的或導出的文件名一致。用string 獲取表的路徑,文件轉化成流才能傳輸。導入的文件也轉化成流,然后進行判斷,判斷是否讀取到文件,讀取不到進行提示,否則文件返回,獲取到文件。下載導入模板,事先要下載模板填入數據,就可以進行讀取數據。主要是利用 POI 讀取 Excel 文件,支持 xls、xlsx 格式。操作的順序與 Excel 的結構基本一致,按順序逐次獲取Workbook →Sheet →Column →Row。其中Row 的內容可是多種類型,例如數字、字符串類型輸出。最后返回獲取數據,關鍵代碼如下:


3.6.4 檢測抄襲作弊
主要是利用 K-means 檢測代碼抄襲作弊情況,K-means是一種常用的聚類算法,具體原理初始化k 個樣本數目,再針對每個樣本Xi 計算到距離最小的聚類中心的應用類中,每個類aj 根據公式計算聚類中心,聚類中心公式如圖5 所示,再利用WEKA 數據挖掘修改數據源,配置 MySQL 數據庫連接,根據K-means 的流程,設置相關對象參數,執行算法。關鍵代碼如下:

圖5:聚類中心公式

綜上所述,B/S 架構在高校程序在線評測系統設計過程中具有重要應用意義。對在線評測系統的功能進行了全面設計,基本完成前期的分析和設計,為了能夠體現系統整體效果,需進一步加強相關更細致的研究,實現理想系統平臺目標,減少在性能和安全方面的缺陷。