4.2 动态测试与静态分析相结合的自动评分
动态测试的评分方法是把源程序编译为可执行文件,用预先定义的测试数据集中的数据作为输入来测试,将结果与期望结果比较,参考对比结果给出具体分数。评分过程如图4所示。源程序静态分析评分是把程序与模板的源代码分析对比,评定学生成绩。评分过程如图5所示。
图4 动态测试的自动评分
Fig.4 Automatic scoring of the dynamic test
图5 静态分析的自动评分
Fig.5 Automatic scoring of static analysis
两种方法各有优缺点,若两者结合,可使评分准确性很大有提升,后者能完成有用模板提取方法,使模板能提高基于静态分析的评分准确性。通过基于动态测试的评分方法的研究,在语义相似度的基础上采用动态测试与静态分析相结合的自动评分方法。该方法删掉冗余的限制,改变评分策略,增加模板提取部分,更适用普通考生在线考试。如图6所示的方法用于实际的上机考试,经考试数据分析,该方法不仅能提高模型评分的准确性,还能降低原有模型对模板库的依赖程度,这为提升评分准确性提供有效方法。由于编程题自动评分的课题研究存在很大难度,涉及诸多知识,还有许多技术亟待解决,该方法不可能完全解决所有问题,故在模板提取方法等方面还需进一步改进。
图6 动态测试与静态分析相结合的自动评分
Fig.6 Automatic scoring combination of dynamic test
and static analysis
4.3 程序分析与树核相似算法相结合的自动评分
程序分析与树核相似算法相结合的自动评分方法,实质上亦是一种动态测试与静态分析结合过程。但不同的是,采用抽象语法树(Abstract Syntax Tree 简称AST)这种中间表示描述考生程序语法结构信息,然后用树核的相似度算法计算程序的结构相似度[7]。即对源程序结构深度分析,把句子表示成树形结构(通过抽象语法树来得到)。使用语法树的优点使树形结构便于匹配。用树核算法计算两个程序相似度,如下举一个简单例子来说明。
程序一
void fun( )
{
int...
for...
}
程序二
void fun( )
{
int...
if...
}
它们的树形结构如图7所示。语法树的5棵子树只有1个子树是相同的,故两程序的结构相似度为1。使用树形结构来表示程序题的嵌套结构是最直观的方法,更能体现结构信息。
图7 语法树的子树
Fig.7 The subtree of syntax tree
该方法在语法错误识别和知识点识别方面虽精确,评分结果也能反映学生的真实水平,虽只注重考查学生程序的内部语法结构。但该方法更人性化,只要考生写出一部分功能语句,系统会给相对合理的分数,基本不会出现全部零分的情况,系统采用以下公式来计算评分的准确率GP:
其中,Tscore表示人工评分,Stscore表示给出的最后分数,Fullscore表示总分。
该方法在实际应用中接近人工阅卷,但有些功能不够完善,如对复杂的程序表达式的处理不完整;同时对模板要求较高,若不提供丰富的模板,会降低评分结果准确率。
5 结论(Conclusion)
本文对程序设计题自动评分方法进行了分类,分析了自动阅卷基本原理、算法步骤和关键技术。程序分析比较法的自动评分虽然准确率相对较高,但在模板提取的技术上有待改进;基于程序理解的综合型评分方法在评分思路上更符合人们的思维习惯,但在程序题的录入编辑技术上有待改进;程序设计题的自动评分是对理论和实践要求较高的问题,要使评分结果更接近人工阅卷,还需在各个方面加强研究。只有将程序设计题自动评分技术理论与实践相结合,并不断发展与改进,才能更好地应用于各类大型计算机考试的自动评分阅卷工作中。
参考文献(References)
[1] 赵晓静.编程题自动阅卷系统的设计与实现[J].软件工程师,
2014,17(9):46-47.
[2] 王宁.编程题自动评分系统中结构体的研究与实现[D].哈尔
滨工业大学,2006.
[3] 杜利峰,牛永洁.字符串相似度在自动评分系统中的应用[J].
电子设计工程,2011,19(7):42-44.
[4] 佘石泉.编程题自动阅卷技术的研究与实现[D].中南大学,
2007.
[5] 苏小红,等.面向综合实践能力考核的C语言编程考试自动评
分系统[J].实验技术与管理,2010,27(10):173-177.
[6] 李必信,等.一种分析和理解程序的方法-程序切片[J].计算机
研究与发展,2000,37(3):284-289.
[7] 陈媛媛.基于抽象语法树的编程题自动评分系统的研究与应
用[D].大连海事大学,2011.
|