Xem mẫu
- Tuyển tập Hội nghị Khoa học thường niên năm 2020. ISBN: 978-604-82-3869-8
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 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
Các hệ thống tự động kiểm tra phần mềm đã
toán từ xa và các kiến trúc tính toán mới; các
được sử dụng từ lâu trong ngành kỹ thuật phần
hệ thống chấm tự động dần được sử dụng phổ
mềm với các sản phẩm kiểm thử tự động như
biến trong các khóa lập trình. Nổi bật nhất là
Seledium, TestComplete,… hoặc các hệ thống
các hệ thống CMS, Codeforces, HackerRank,
đám mây tích hợp trí tuệ nhân tạo cho phép
CodeWars,… Các hệ thống này đơn giản hóa
đánh giá các bản vá phần mềm với hàng triệu
thêm được các khâu ra đề, phát đề, nộp bài và
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]. công bố kết quả; tuy nhiên chưa đảm bảo
Về bản chất, việc chấm tự động bài thi lập được các yếu tố chống gian lận trong thi cử.
trình của sinh viên cũng là hoạt động kiểm thử Các hệ thống chấm thi tự động cũng được
phần mềm, nhưng ở quy mô nhỏ hơn và hướng áp dụng trong đào tạo ở Việt Nam từ những
đến những khía cạnh đặc thù của giáo dục. năm 2000 đến nay, nhưng không phổ biến;
Báo cáo này trình bày việc xây dựng hệ chủ yếu được dùng trong các kì thi học sinh
thống chấm bài thực hành lập trình được xây giỏi hoặc những khóa học đào tạo chuyên
dựng cho các môn học lập trình cơ bản ở môi môn. Ví dụ như khóa học Thuật toán Ứng
trường đại học, nhằm tự động hóa việc đánh dụng của Samsung sử dụng SPOJ, hệ thống
giá kết quả học tập của sinh viên. đà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
2. PHƯƠNG PHÁP NGHIÊN CỨU Themis được sử dụng tương đối rộng rãi.
2.1. Hiện trạng 2.2. Phương pháp đánh giá bài thi
Các hệ thống chấm thi tự động có lịch sử Khi mã nguồn đã được dịch và có thể chạy
phát triển trên thế giới nhiều năm. Từ những được, có nhiều phương pháp đánh giá bài thi,
năm 1990 đã có những hệ thống được áp Bernard [2] đưa ra 5 kiểu phân loại như sau:
dụng vào các kỳ thi học sinh giỏi về lập trình, 1. Batch: hệ thống so sánh đầu ra của
đó là những kỳ thi đòi hỏi nghiêm ngặt về chương trình với đầu ra theo yêu cầu của
chất lượng bài làm và sự công bằng trong người làm đề.
đánh giá kết quả; vì vậy việc chấm bằng máy 2. Communication: hệ thống làm cầu nối
giải quyết cơ bản được vấn đề này kèm theo giữa chương trình vào module chấm thi (do
đó tốc độ chấm máy cũng nhanh hơn tương người làm đề cung cấp).
đối so với chấm bởi con người. Tuy nhiên 3. TwoStep: hệ thống sinh tự động các test
việc tự động hóa chỉ dừng ở mức chấm bài (theo khuôn mẫu) sau đó đối sánh kết quả của
làm, việc phát đề bài, nộp bài, công bố kết chương trình do thí sinh nộp và kết quả do
quả vẫn phải thực hiện thủ công. chương trình mẫu (do người làm đề cung cấp).
69
- Tuyển tập Hội nghị Khoa học thường niên năm 2020. ISBN: 978-604-82-3869-8
4. ZeroSum: hệ thống làm trọng tài giữa xây dựng cơ chế đồng bộ bài thi giữa máy
chương trình do thí sinh nộp và một chương tính của thí sinh và máy chủ.
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ý 2.5. Ngăn chặn sai hỏng hệ thống
thuyết trò chơi. Có bốn phương pháp thông dụng để giảm
5. Rank: hệ thống đánh giá và xếp hạng thiểu các rủi ro nêu trên:
cùng lúc nhiều chương trình do thí sinh nộp 1. Sandbox: tạo ra một môi trường riêng
dựa trên các phép đo chuẩn, sử dụng rất rộng biệt để thực thi chương trình. Đây là phương
rãi trong các hệ thống học máy. pháp an toàn nhất, nhưng chi phí về phần
cứng rất cao.
2.3. Tự động sinh và trộn đề thi
2. Guest: thực thi chương trình với các
Chúng tôi xây dựng một thuật toán (hình hạn chế về quyền và tài nguyên.
dưới) cải biên từ thuật toán sinh hoán vị ngẫu 3. Monitor: vừa thực thi chương trình vừa
nhiên [3] để giải quyết vấn đề này. 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
Hình 1. Thuật toán chọn ngẫu nhiên đề thi 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
Thuật toán đảm bảo việc lựa chọn m câu các thí sinh (thực hiện phía server).
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 3. KẾT QUẢ NGHIÊN CỨU
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 3.1. Kiến trúc hệ thống
key xác định. Vì vậy một người dùng chỉ cần Hệ thống được phân tách thành ba khối
một key (chính là mã đề thi) độc lập, giao tiếp với nhau bởi các truy vấn
2.4. Xử lý lỗi trong khi thi RESTful/API và https.
Khối “Judgement Server”: đóng vai trò các
Trong quá trình thực hiện bài làm, thí sinh server thực hiện việc chấm thi. Xây dựng
có thể gặp lỗi, máy tính bị treo, mất bài thi; bằng MONO.NET Core có thể mở rộng mềm
cách xử lý hiệu quả trong tình huống này là dẻo (scalability) tùy thuộc vào nhu cầu chấm
70
- Tuyển tập Hội nghị Khoa học thường niên năm 2020. ISBN: 978-604-82-3869-8
thi, số lượng server tăng lên nếu kì thi đông Kết quả thử nghiệm cho thấy phương pháp
thí sinh và giảm xuống nếu ít thí sinh hơn. sandbox có hiệu suất rất thấp, phương pháp
Khối “Front-end Server”: đóng vai trò giao monitor có hiệu suất gần như tương đương
diện quản lý và thông tin đến người sử dụng. với guest ở các thử nghiệm ngoại trừ loại
Được viết bằng PHP/MySQL Laravel, cho chương trình đòi hỏi ghi dữ liệu nhiều.
phép người dùng xem kết quả thi, giáo viên gửi Vì vậy, với hệ thống hiện tại, chúng tôi kết
câu hỏi, đáp án, ra đề thi và thực hiện các công hợp giữa phương pháp Guest và một kĩ thuật
việc khác của quy trình thi như chấm phúc tra. 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í
Hình 2. Kiến trúc hệ thống sinh chưa hài lòng với kết quả).
Khối “Client”: là các ứng dụng đầu cuối 4. KẾT LUẬN
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 Hệ thống đã chứng minh thiết kế hiện tại
việc đăng nhập, lấy đề bài, nộp bài và các đạt được các mục tiêu cốt lõi của một hệ
công việc xác thực, giám sát thi cử khác. thống đánh giá tự động:
1. Tự động ra đề thi với sự can thiệp tối
3.2. Lựa chọn phương pháp kiểm soát thiểu của cấp quản lý.
Chúng tôi đã thử nghiệm 3 phương pháp 2. Chấm thi, đánh giá bài thi của sinh viên
kiểm soát sai hỏng là sandbox, guest và hoàn toàn tự động.
monitor đối với tập thử nghiệm 5 chương trình 3. Xử lý được lỗi huống bất thường về
từ đơn giản thuộc các loại chương trình bình thiết bị hoặc phẩn mềm trong quá trình thi.
thường, đọc dữ liệu nhiều, ghi dữ liệu nhiều, 4. Ngăn chặn được các hành vi làm hỏng
đòi hỏi bộ nhớ lớn và đòi hỏi công suất tính kỳ thi một cách vô tình hoặc cố ý.
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 5. TÀI LIỆU THAM KHẢO
đến khi kết thúc nhằm kiểm tra hiệu năng của [1] Priyadharshini.V, Malathi.A; 2014; Survey
các phương pháp kiểm soát. Bảng dưới thể on software testing techniques in cloud
hiện kết quả thực hiện (theo đơn vị giờ). computing. https://arxiv.org/abs/1402.1925.
Bảng 1. So sánh hiệu suất ba loại kiểm soát [2] Bernard. B, Matteo. B, Stefano. M,
Giovanni. M, Luca. W; 2018; Contest
Loại Sandbox Guest Monitor Management System: a distributed system
Thông thường 0.29h 0.27h 0.27h for running and organizing a programming
High INPUT 0.90h 0.77h 0.72h contest. https://cms.readthedocs.io.
High OUTPUT 7.11h 4.52h 6.85h [3] Richard. D; 1964; Algorithm 235: Random
High MEMORY 2.07h 1.19h 1.45h permutation. Communications of the ACM.
7 (7): 420.
High CPU 25.14h 22.74h 22.03h
71
nguon tai.lieu . vn