在線考試系統設計思路


0.模塊

近日對在線考試系統有些想法,所以寫下來和大家討論一下,順便自己也記錄一下這些想法。

在線考試系統大致有這幾部分內容,下面逐一分析這些模塊和需求

 

1.試題庫

    創建試題庫的意義在於根據知識點創建試題,比如創建一個期中的考試,只需要在試題庫中選擇知識點12。而期末考試需要選擇知識點1234。這樣類似將試題分組更有利於試題的重復的利用,創建試卷配置中也能更快的找到試題。

     然后分析一下試題的類型,實際生活中試題類型基本有這幾種:單選,判斷,多選,填空,問答,作文。前3種題型是可以通過判斷自動打分的,后三種只能通過人工閱卷。實際在線考試中很少用到后三種的試題,並且必然消耗大量的人力改卷。所以在這里只考慮單選,判斷,多選的考試試題類型。

     試題選項和答案Json的形式保存在試題表中的,主要考慮到這些選項並不常用也很少關於選項的查詢,所以試題表不需要在多余的選項表,試題在編輯的和瀏覽操作可以通過反序列化json內容。最重要的是當生成試卷的時候這些選項json是要復制起來相當方便,這樣避免當試卷生成以后,試題被修改造成試卷邏輯混亂。

 

2.試卷配置

  這個模塊是系統中最重要的模塊,配置一張試卷的流程如下   。

  • 選擇考試學員或者配置為開放試卷讓學員自由進入考試(練習考試)
  • 其他選項配置試卷,比如:考試開始時間,結束時間,及格分數線
  • 設置考試引用的題庫。
  • 設置大題和分數,比如:第一大題單選10題每題5分,第二大題單選10題每題10
  • 組卷就是將題庫的題目填充到大題中,組卷可以分自動組卷,或者手動組卷。
  • 生成試卷是根據組卷配置將每張試卷的試題抽取出來,生成一個JSON結果集合。學員考試時,直接讀取這個集合。

(要注意的是,生成的試卷JSON結果集合不能修改但是可以停用試卷,防止學員考過以后的試卷被修改,造成之前的數據和當前的不匹配)

 

討論在線考試系統的性能瓶頸在於,大批量學員同時開始考試時,系統配卷消耗大量的性能。我的處理方式是所有的試卷都預先生成,教師可以選擇隨機由系統組卷還是手動組卷。系統組卷設置一個組卷份數比如100份,當1000個學生同時進入考試時,將1000張試卷隨機分配一張給學員,生成的份數越多隨機率越高.如果教師只想給讓所有學員考同一份試卷,只需要手動組一張試卷即可

 

 3.學員

      學員是參與考試的主體,學員通過注冊或者是后台導入的方式進入系統。如果是注冊還需要對應的審核功能。學員有兩種方式參加考試和練習,一種是主動選擇這張考卷,一種是被推送這張考卷,只有被推送的學生才能能參加考試。有些比較復雜的系統還會有考試的預先報名。通過審核以后才能獲取考試的權限。

     學員的表結構相對簡單沒什么可討論的,只是建議學員的主表應該和登錄表分開,學員應該可以支持多種賬號登陸,比如注冊郵箱、准考證、身份證等登錄方式。

 

 

4.考試過程

      這里我們從學員進入考試說起,當學員點擊進入時,隨機分配一個試卷給學員。頁面加載試卷的內容。 然后開辟一個內存空間用hash形式保存學員根據“本次考試ID_試題ID”保存學員的本次考試的答題記錄,學員每次點擊選項,都向服務器提交本題的數據,提交數據時需要帶上時間戳,防止先提交的數據后到達。當學員不小心關閉頁面,或者電腦死機重新打開瀏覽器的時候,我們將緩存中的數據顯示在頁面上,讓學員繼續考試。

     改卷是一個異步的操作,后台一個C/s程序實時掃描數據庫,查找已完成答卷並且未改卷的試卷,在內存中提取學員的考試數據一一比對,評卷完成以后將內存的答題內容序列化JSON保存起來(類似試題的保存方式,也可以考慮保存成文本文件)。查看試卷時先加載試卷,然后加載學員的答卷內容。

 

5.Api

  Api模塊通過REST的方式提供這幾個服務。

  •   考試添加學員
  •   查詢成績(批量或者單個)
  •   創建試卷配置
  •  學員獲得試卷(被推送試卷)時發郵件通知,並告知考試地址
  •  提供試卷快速訪問地址,也就是學員點擊這個地址以后輸入賬號(或者SSO登錄)直接進入考試頁面

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM