论文部分内容阅读
在计算机教育领域,尤其是程序设计类课程,传统的手动批改源代码和程序的方法,会耗费教师巨大的精力,也难以保证结果的公正。所以程序自动批改系统越来越受到关注。目前,最广泛使用的程序自动批改系统是ACM/ICPC程序批改系统。但是,在多数程序设计类课程中,ACM/ICPC系统并不适用。首先,ACM类型的题目只能处理标准输入输出的程序,无法适应工程教育中各种类型的程序,比如文件操作,网络通信等。其次,老师希望系统能够像手工批改一样对程序各方面进行打分,给出具体分数和详细的打分原因,而ACM/ICPC系统只给出对或者错的两种结果。另外,老师希望系统针对课堂教学提供一些常用的辅助功能。因此,本文设计与实现了一种新的程序自动批改系统。它支持批改不同类型的题目,能适应多样化的课程实际需求,且能根据教师题意选用不同的方式来判断程序的正误,提供细化的打分行为,同时实现了教学辅助功能。为了支持不同类型的题目,本文提出了一种与ACM/ICPC系统不同的批改方法。首先,系统针对每种题型设计了不同的批改策略,具体对应的批改操作根据教师的要求设计。然后系统在运行时,将根据程序对应题目的类型,执行对应的策略下的批改操作。系统目前支持对三大类题目的批改,涵盖了程序设计课程中的绝大多数程序。本文提出将一次批改任务分成相互独立的多组测试,解决了一次性批改导致的错误耦合问题。结合教师在每一组每一步上设置的分值比重,系统能够综合程序在各种情况下的表现给出具体分数。对于批改系统的安全性问题,本文提出使用虚拟机技术来解决。被批改的程序运行在虚拟机上,即使是恶意代码,也无法破坏宿主机上的批改系统和运行环境。被破坏的虚拟机上的批改系统模块可通过虚拟机快照恢复。此外,本文还针对可能引起系统不稳定的因素进行了处理。目前本文系统已在多门本科编程课程中使用,完成了对平时上机作业和期中、期末上机考试的批改,成功地代替了人工批改。