2.1.1 動態測試評分系統
傳統黑箱測試的自動評分系統無法針對學生練習的邏輯錯誤進行提示及回 饋,目前許多針對程式的自動評分系統已被開發,但多數是使用測試數據進行比 對,只能區分通過以及未通過。例如 Brenda, Andy, Andrew, & Chong 等人提出的 Online Judge[7] , Ellsworth, Fenwick, & Kurtz 等人提出的 Quiver[8]和 Daly &
Horgan 等人提出的 RoboProf[4]。其中 Online Judge 重點在於強調評分的公平性,
使用的多種防弊機制,並提出了架構嚴格限制伺服器端的資源管理,而 Quiver 則是使用動態測試去評分 GUI 的元件,並發展了一個建立評分題目的 Builder,
而 RobotProf 則提出了使用隨機測試案例的機制,加強評分的可靠度並在檔案的
檔頭的加入識別用的 code,並以此來達到防抄襲的目的。
Online Judge[7]是由 Elsevier Science Ltd 發展,並以廣泛的被利用在目前的程 式競賽的自動評分方面,例如:ACM Programming Contest selection 。主要是為 了改善手動評分的缺陷,一個程式練習如果答案是完全正確的才能通過評分,而 不管實際是如何設計架構的。並限制的程式的大小和執行的時間,而且針對特定 程式碼中的關鍵字進行限制,維護伺服器的穩定性。
Online Judge 將評分的過程分成兩個階段,繳交完畢後會加入排成,直到完成評 分後再通知學生。針對程式輸出的格是有嚴格的限制,配合上大量的測試案例和 運算時間、資源的限制可以確保程式的品質跟正確性,但對輸出格式的嚴格要求 和非即時性的回饋使的本系統一般適用於程式競賽而不是初學者教學。
Quiver[8]是一個基於網路平台下的程式練習自動評分系統,他提供了專用的 程式碼編輯工具,而在 GUI 練習方面則透過動態測試按鈕元件的 event handler 方法來進行評分的動作。對於其他 GUI 元件則缺乏對應的機制去進行測試。
RobotProf[4]使用了 Java Applet 的技術開發,將評分程式於客戶端執行,並 設計了一套能隨機產生測試案例的機制,並在客戶被評分的檔案打上浮水印,防 Gray, Symeonidis, & Tsintsifas 等人提出的 CourseMarker[9],Joy, Griffiths, & Boyatt 等人提出的 Boss[10],以及 Green, Fogelman, Nguyen, & Muthukkumarasamy 等人 提出的 GAME[11]。其中 CourseMarker 利用靜態分析的技術,建構了樹狀的結構 檢查評分機制,並提供流程圖的檢查(有要求學生使用工具繪製特定流程圖),希
望以此產生更細緻的回饋訊息。
CourseMarker[9]會將對程式架構的要求以樹狀的結構列出如下圖 1,並依照 蒐尋樹的方法追蹤結點並進行程式碼的靜態分析,當完成部分的某個節點才往下 繼續檢查,而完成葉節點才能獲得分數,以這樣的評分方是確保學生程式的架構 符合需求。另外,某些題目是以繳交流程圖的方式,再將流程圖轉換成程式架構,
最後根據靜態分析的方法進行評分。並輔以傳統動態測試的結果進行最後的評分。
這種評分方是對學生的程式結構有嚴格的限制,對於初學者而言會造成比較大的 負擔。
圖 1 CourseMarker 評分樹狀結構
Boss[10]可以針對學生提交的練習進行半自動化的測試,他針對錯誤的結構 設計靜態分析的測試案例,並把靜態分析的結果作為評分的依據,同時允許半自 動的回饋訊息來加強學生的學習效果,但實際上 Boss 並未進行自動測試,而是 根據文本的內容直接進行分析評分。此外,Boss 還提供了良好的管理和行政的機 制。但缺乏動態測試使的練習程式是否能正確運行都無法確定,對程式練習評分 而言有著一定的問題。