论文部分内容阅读
随着计算机技术的飞速发展,互联网+教育深刻地影响着教育教学方式和课程考试方式。编程题的自动评分是程序设计类课程在线考试中的一个重大需求,实现编程题的在线实际测试是程序设计语言课程考试的最有效形式。由于程序设计题主观因素强、解决方式多、评分标准不完善,因此,如何实现高效合理的编程题自动评分,一直是程序设计类课程在线考试领域研究的难点和热点问题。基于对编程题评测特点的研究,本文依据人工评分思想,设计了一个改进的动静结合评分模型。该模型的动态评分部分依赖于POJ(Peking Online Judge)内核实现,静态评分部分基于抽象语法树实现。改进的动静结合评分模型依据学生程序编译是否通过,分别对学生程序应用不同的评分规则,同时加入了程序是否满足要求的知识点评测。对编译通过的学生程序同时进行动态评分和基于抽象语法树的静态评分。对于编译未通过的学生程序,先按照预先设置的评分规则扣除语法分,之后只进行基于抽象语法树的静态评分。研究并实现了基于抽象语法树的C编程题静态分析方法,该方法首先借助GCC编译命令生成抽象语法树(Abstract Syntax Tree,AST),并依据本文给出的抽象语法树预处理原理及算法实现对生成的抽象语法树进行解析和标准化,采用树编辑距离(Tree Levenshtein)算法计算学生程序抽象语法树与模板程序抽象语法树之间的最小编辑距离,并依据相似度计算公式得出两者之间的相似度。取学生程序抽象语法树和模板程序库中模板程序抽象语法树的最大相似度作为学生程序与模板库程序的相似度,最后依据预先设定的评分规则计算学生程序的静态得分。针对本文设计的动静结合评分模型,以本校2018-2019第一学年的C语言考试数据为数据源,选取42个代表性的学生程序进行实验分析,实验结果表明本文的评分方案较本校现有系统的评分方案更贴近人工评分,且准确率平均可以达到80%,具有很高的可用性。本文以基于抽象语法树的C编程题静态分析方法为核心,借助改进的动静结合评分模型,设计并实现了C语言在线考试系统。该系统减轻了教师评阅试卷的负担且保证了对学生程序评判公平合理。