ไอเดีย #36: ระบบคลังข้อสอบและสอบออนไลน์
ครูหลายท่านมีข้อสอบสะสมไว้เป็นร้อยข้อ แต่กระจายอยู่ในไฟล์ Word คนละโฟลเดอร์ ทุกครั้งที่จะสอบเก็บคะแนนต้อง copy มาเรียงใหม่ พอใช้ชุดเดิมซ้ำ รุ่นพี่ก็ส่งเฉลยต่อให้รุ่นน้อง ส่วนการสอบออนไลน์ที่ใช้ฟอร์มสำเร็จรูปก็คุมเวลาและสุ่มข้อไม่ได้อย่างที่ต้องการ ระบบคลังข้อสอบพร้อมสอบออนไลน์จึงเป็นโจทย์ที่ทั้งโรงเรียนและสถาบันกวดวิชาอยากได้ และเป็นโปรเจกต์ที่สอนเรื่องการออกแบบข้อมูลได้ดีมาก
ใครจะใช้
- ครูผู้ออกข้อสอบ — เพิ่มข้อสอบเข้าคลัง จัดชุดสอบ ดูผล
- นักเรียน — เข้าสอบตามเวลาที่กำหนด ดูคะแนนเมื่อครูเปิดให้ดู
- หัวหน้ากลุ่มสาระหรือฝ่ายวิชาการ — ตรวจทานข้อสอบ ดูสถิติรวม
ฟีเจอร์ขั้นต่ำ (MVP)
- คลังข้อสอบแบบปรนัย จัดหมวดตามวิชา หน่วยการเรียนรู้ และระดับความยาก
- สร้างชุดสอบแบบกำหนดเงื่อนไข เช่น สุ่มหน่วยละ 5 ข้อ ง่าย 60 เปอร์เซ็นต์ ยาก 40 เปอร์เซ็นต์
- สุ่มลำดับข้อและลำดับตัวเลือก นักเรียนแต่ละคนได้ข้อสอบไม่เรียงเหมือนกัน
- จับเวลาฝั่ง server หมดเวลาแล้วส่งคำตอบอัตโนมัติ และบันทึกคำตอบทุกครั้งที่เลือก เน็ตหลุดก็ไม่หาย
- กันโกงขั้นพื้นฐาน เช่น เปิดสอบเฉพาะช่วงเวลา ใช้รหัสเข้าห้องสอบ บันทึกเมื่อสลับหน้าต่าง
- ตรวจอัตโนมัติและสรุปคะแนนรายคน export ได้
ต่อยอดได้อีก
- วิเคราะห์ข้อสอบ ค่าความยากและอำนาจจำแนกรายข้อ เพื่อคัดข้อที่ไม่ดีออก
- รองรับข้อสอบอัตนัยให้ครูตรวจเองพร้อมเกณฑ์ rubric
- นำเข้าข้อสอบจาก Excel ตามแม่แบบที่กำหนด
- รองรับสมการคณิตศาสตร์และรูปภาพในโจทย์
โครงข้อมูลตั้งต้น
questions— id, subject_id, unit, difficulty, body, created_by, statuschoices— id, question_id, body, is_correctexams— id, title, duration_min, open_at, close_at, rules_json, access_codeattempts— id, exam_id, student_id, started_at, deadline_at, submitted_at, scoreattempt_answers— id, attempt_id, question_id, choice_id, answered_atattempt_events— id, attempt_id, event_type, created_at
ระดับความยาก และสิ่งที่จะได้เรียนรู้
ระดับ ท้าทาย โดยเฉพาะช่วงที่นักเรียนทั้งระดับชั้นเข้าสอบพร้อมกัน ใช้ Yii2 หรือ Laravel + PostgreSQL/MySQL และอาจเพิ่ม Redis สำหรับ cache สิ่งที่จะได้ฝึก:
- การสุ่มแบบมีเงื่อนไข และเก็บผลสุ่มไว้กับ attempt เพื่อให้รีเฟรชแล้วได้ชุดเดิม
- การจับเวลาที่เชื่อเวลา server ไม่ใช่นาฬิกาเครื่องนักเรียน
- การรับโหลดพร้อมกันจำนวนมากด้วย index ที่ดีและการบันทึกคำตอบแบบเบา
- การวิเคราะห์ผลสอบด้วย SQL aggregate
ข้อควรระวัง
- ห้ามส่งเฉลย (is_correct) ไปที่ browser ระหว่างสอบ เพราะเปิด DevTools ก็เห็นทันที
- การกันโกงในเว็บทำได้แค่ระดับหนึ่ง ควรบอกครูตรง ๆ ว่าระบบช่วยลดและบันทึกพฤติกรรม ไม่ได้กันได้ทั้งหมด
- คะแนนนักเรียนเป็นข้อมูลส่วนบุคคล ควรจำกัดให้เห็นเฉพาะครูประจำวิชาและตัวนักเรียนเองตามหลัก PDPA
ใครเคยทำระบบสอบออนไลน์ที่ต้องรับนักเรียนหลายร้อยคนพร้อมกันบ้างครับ คอขวดไปอยู่ที่ไหน แล้วเรื่องกันโกง คิดว่าวิธีไหนได้ผลจริงในห้องเรียนไทย มาแลกเปลี่ยนกันในกระทู้นี้ได้เลย ถ้าทำเสร็จแล้วเอามาโชว์ในบอร์ดนี้ด้วยนะครับ