1. Trang chủ
  2. » Công Nghệ Thông Tin

Xây dựng hệ thống tự động chấm thực hành môn lập trình

3 5 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 3
Dung lượng 317,62 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài viết Xây dựng hệ thống tự động chấm thực hành môn lập trình trình bày việc xây dựng hệ thống chấm bài thực hành lập trình được xây dựng cho các môn học lập trình cơ bản ở môi trường đại học, nhằm tự động hóa việc đánh giá kết quả học tập của sinh viên.

Trang 1

XÂY DỰNG HỆ THỐNG TỰ ĐỘNG CHẤM THỰC HÀNH MÔN LẬP TRÌNH

Trương Xuân Nam1, Nguyễn Thị Phương Dung2

1 Bộ môn Tin học - Kỹ thuật Tính toán, Khoa Công nghệ Thông tin, email: namtx@tlu.edu.vn

2 Bộ môn Công nghệ Phần mềm, Khoa Công nghệ Thông tin

1 GIỚI THIỆU CHUNG

Các hệ thống tự động kiểm tra phần mềm đã

được sử dụng từ lâu trong ngành kỹ thuật phần

mềm với các sản phẩm kiểm thử tự động như

Seledium, TestComplete,… hoặc các hệ thống

đám mây tích hợp trí tuệ nhân tạo cho phép

đánh giá các bản vá phần mềm với hàng triệu

tình huống (test case) khác nhau, được sử dụng

trong các doanh nghiệp phần mềm lớn [1]

Về bản chất, việc chấm tự động bài thi lập

trình của sinh viên cũng là hoạt động kiểm thử

phần mềm, nhưng ở quy mô nhỏ hơn và hướng

đến những khía cạnh đặc thù của giáo dục

Báo cáo này trình bày việc xây dựng hệ

thống chấm bài thực hành lập trình được xây

dựng cho các môn học lập trình cơ bản ở môi

trường đại học, nhằm tự động hóa việc đánh

giá kết quả học tập của sinh viên

2 PHƯƠNG PHÁP NGHIÊN CỨU

2.1 Hiện trạng

Các hệ thống chấm thi tự động có lịch sử

phát triển trên thế giới nhiều năm Từ những

năm 1990 đã có những hệ thống được áp

dụng vào các kỳ thi học sinh giỏi về lập trình,

đó là những kỳ thi đòi hỏi nghiêm ngặt về

chất lượng bài làm và sự công bằng trong

đánh giá kết quả; vì vậy việc chấm bằng máy

giải quyết cơ bản được vấn đề này kèm theo

đó tốc độ chấm máy cũng nhanh hơn tương

đối so với chấm bởi con người Tuy nhiên

việc tự động hóa chỉ dừng ở mức chấm bài

làm, việc phát đề bài, nộp bài, công bố kết

quả vẫn phải thực hiện thủ công

Khoảng 10 năm trở lại đây, cùng với sự phát triển của mạng internet, dịch vụ tính toán từ xa và các kiến trúc tính toán mới; các

hệ thống chấm tự động dần được sử dụng phổ biến trong các khóa lập trình Nổi bật nhất là các hệ thống CMS, Codeforces, HackerRank, CodeWars,… Các hệ thống này đơn giản hóa thêm được các khâu ra đề, phát đề, nộp bài và công bố kết quả; tuy nhiên chưa đảm bảo được các yếu tố chống gian lận trong thi cử Các hệ thống chấm thi tự động cũng được

áp dụng trong đào tạo ở Việt Nam từ những năm 2000 đến nay, nhưng không phổ biến; chủ yếu được dùng trong các kì thi học sinh giỏi hoặc những khóa học đào tạo chuyên môn Ví dụ như khóa học Thuật toán Ứng dụng của Samsung sử dụng SPOJ, hệ thống đào tạo nội bộ của FPT sử dụng CodeLearn

Ở các khối chuyện tin cấp ba, phần mềm Themis được sử dụng tương đối rộng rãi

2.2 Phương pháp đánh giá bài thi

Khi mã nguồn đã được dịch và có thể chạy được, có nhiều phương pháp đánh giá bài thi, Bernard [2] đưa ra 5 kiểu phân loại như sau:

1 Batch: hệ thống so sánh đầu ra của

chương trình với đầu ra theo yêu cầu của người làm đề

2 Communication: hệ thống làm cầu nối

giữa chương trình vào module chấm thi (do người làm đề cung cấp)

3 TwoStep: hệ thống sinh tự động các test

(theo khuôn mẫu) sau đó đối sánh kết quả của chương trình do thí sinh nộp và kết quả do chương trình mẫu (do người làm đề cung cấp)

Trang 2

4 ZeroSum: hệ thống làm trọng tài giữa

chương trình do thí sinh nộp và một chương

trình đối nghịch do người làm đề cung cấp,

chủ yếu dùng trong các bài toán thuộc lý

thuyết trò chơi

5 Rank: hệ thống đánh giá và xếp hạng

cùng lúc nhiều chương trình do thí sinh nộp

dựa trên các phép đo chuẩn, sử dụng rất rộng

rãi trong các hệ thống học máy

2.3 Tự động sinh và trộn đề thi

Chúng tôi xây dựng một thuật toán (hình

dưới) cải biên từ thuật toán sinh hoán vị ngẫu

nhiên [3] để giải quyết vấn đề này

Hình 1 Thuật toán chọn ngẫu nhiên đề thi

Thuật toán đảm bảo việc lựa chọn m câu

hỏi trong quỹ n câu theo đúng phân bổ xác

suất tổ hợp Việc khởi tạo nhân (seed) của

thuật toán ngẫu nhiên phân bổ đều đảm bảo

kết quả trả về của hàm là nhất quán với mỗi

key xác định Vì vậy một người dùng chỉ cần

một key (chính là mã đề thi)

2.4 Xử lý lỗi trong khi thi

Trong quá trình thực hiện bài làm, thí sinh

có thể gặp lỗi, máy tính bị treo, mất bài thi;

cách xử lý hiệu quả trong tình huống này là

xây dựng cơ chế đồng bộ bài thi giữa máy tính của thí sinh và máy chủ

2.5 Ngăn chặn sai hỏng hệ thống

Có bốn phương pháp thông dụng để giảm thiểu các rủi ro nêu trên:

1 Sandbox: tạo ra một môi trường riêng

biệt để thực thi chương trình Đây là phương pháp an toàn nhất, nhưng chi phí về phần cứng rất cao

2 Guest: thực thi chương trình với các

hạn chế về quyền và tài nguyên

3 Monitor: vừa thực thi chương trình vừa

theo dõi các hoạt động xem có bất thường hay không

4 Checker: duyệt các đoạn mã chương

trình và ngăn chặn các đoạn mã phá hoại

2.6 Ngăn chặn gian lận khi làm bài thi

Các hệ thống chấm thi tự động thường có hai dạng triển khai:

1 Dạng trưc tuyến, chủ yếu sử dụng trong luyện tập

2 Dạng nội bộ, nửa trực tuyến, vẫn thi tại phòng thi có giám thị

Hệ thống trực tuyến do chỉ sử dụng với mục đích luyện tập, nên không đặt ra vấn đề xử lý gian lận (vẫn có nhưng rất hạn chế) Với hệ thống nội bộ, chúng tôi thực hiện một vài phương pháp hỗ trợ giám thị phát hiện gian lận nhưng chỉ ở mức cảnh báo Cụ thể như sau:

- Phát hiện nguồn gốc bất thường của tập tin mã nguồn (thực hiện phía client)

- Phát hiện bất thường trong quá trình làm bài của thí sinh (thực hiện phía client)

- Phát hiện việc trao đổi thông tin qua mạng của thí sinh (thực hiện phía client)

- Phát hiện bài làm có tương đồng cao giữa các thí sinh (thực hiện phía server)

3 KẾT QUẢ NGHIÊN CỨU 3.1 Kiến trúc hệ thống

Hệ thống được phân tách thành ba khối độc lập, giao tiếp với nhau bởi các truy vấn RESTful/API và https

Khối “Judgement Server”: đóng vai trò các server thực hiện việc chấm thi Xây dựng bằng MONO.NET Core có thể mở rộng mềm dẻo (scalability) tùy thuộc vào nhu cầu chấm

Trang 3

thi, số lượng server tăng lên nếu kì thi đông

thí sinh và giảm xuống nếu ít thí sinh hơn

Khối “Front-end Server”: đóng vai trò giao

diện quản lý và thông tin đến người sử dụng

Được viết bằng PHP/MySQL Laravel, cho

phép người dùng xem kết quả thi, giáo viên gửi

câu hỏi, đáp án, ra đề thi và thực hiện các công

việc khác của quy trình thi như chấm phúc tra

Hình 2 Kiến trúc hệ thống

Khối “Client”: là các ứng dụng đầu cuối

làm nhiệm vụ giao tiếp với thí sinh Được

xây dựng bằng C#.NET, ứng dụng thực hiện

việc đăng nhập, lấy đề bài, nộp bài và các

công việc xác thực, giám sát thi cử khác

3.2 Lựa chọn phương pháp kiểm soát

Chúng tôi đã thử nghiệm 3 phương pháp

kiểm soát sai hỏng là sandbox, guest và

monitor đối với tập thử nghiệm 5 chương trình

từ đơn giản thuộc các loại chương trình bình

thường, đọc dữ liệu nhiều, ghi dữ liệu nhiều,

đòi hỏi bộ nhớ lớn và đòi hỏi công suất tính

toán lớn Mỗi chương trình thực hiện với 1

triệu test và đo tổng thời gian từ khi bắt đầu

đến khi kết thúc nhằm kiểm tra hiệu năng của

các phương pháp kiểm soát Bảng dưới thể

hiện kết quả thực hiện (theo đơn vị giờ)

Bảng 1 So sánh hiệu suất ba loại kiểm soát

Thông thường 0.29h 0.27h 0.27h

Kết quả thử nghiệm cho thấy phương pháp sandbox có hiệu suất rất thấp, phương pháp monitor có hiệu suất gần như tương đương với guest ở các thử nghiệm ngoại trừ loại chương trình đòi hỏi ghi dữ liệu nhiều

Vì vậy, với hệ thống hiện tại, chúng tôi kết hợp giữa phương pháp Guest và một kĩ thuật

an toàn khác là “full side verification” bao gồm hai bước:

1 Thử thực hiện chương trình của thí sinh ngay tại client và không có bất kỳ biện pháp ngăn chặn sai hỏng nào

2 Đưa bài làm lên server chấm thi và thực hiện trong chế độ Guest

3.3 Triển khai thực tế

Hệ thống đã được triển khai thử nghiệm cho hai môn học, 22 lớp, 214 kỳ thi, hơn

6000 lượt thi và gần 50000 bài thi được nộp (một bài có thể được nộp nhiều lần nếu thí sinh chưa hài lòng với kết quả)

4 KẾT LUẬN

Hệ thống đã chứng minh thiết kế hiện tại đạt được các mục tiêu cốt lõi của một hệ thống đánh giá tự động:

1 Tự động ra đề thi với sự can thiệp tối thiểu của cấp quản lý

2 Chấm thi, đánh giá bài thi của sinh viên hoàn toàn tự động

3 Xử lý được lỗi huống bất thường về thiết bị hoặc phẩn mềm trong quá trình thi

4 Ngăn chặn được các hành vi làm hỏng

kỳ thi một cách vô tình hoặc cố ý

5 TÀI LIỆU THAM KHẢO

[1] Priyadharshini.V, Malathi.A; 2014; Survey

on software testing techniques in cloud computing https://arxiv.org/abs/1402.1925

[2] Bernard B, Matteo B, Stefano M,

Giovanni M, Luca W; 2018; Contest Management System: a distributed system for running and organizing a programming contest https://cms.readthedocs.io

[3] Richard D; 1964; Algorithm 235: Random permutation Communications of the ACM

7 (7): 420

Ngày đăng: 09/07/2022, 15:04

HÌNH ẢNH LIÊN QUAN

Chúng tôi xây dựng một thuật toán (hình dưới) cải biên từ thuật toán sinh hoán vị ng ẫ u  nhiên [3] để giải quyết vấn đề này - Xây dựng hệ thống tự động chấm thực hành môn lập trình
h úng tôi xây dựng một thuật toán (hình dưới) cải biên từ thuật toán sinh hoán vị ng ẫ u nhiên [3] để giải quyết vấn đề này (Trang 2)
Hình 2. Kiến trúc hệ thống - Xây dựng hệ thống tự động chấm thực hành môn lập trình
Hình 2. Kiến trúc hệ thống (Trang 3)
Bảng 1. So sánh hiệu suất ba loại kiểm soát - Xây dựng hệ thống tự động chấm thực hành môn lập trình
Bảng 1. So sánh hiệu suất ba loại kiểm soát (Trang 3)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm