Java 编程题自动评分技术的研究与实现(一)

来源:互联网 发布:windows虚拟机软件 编辑:程序博客网 时间:2024/05/16 15:36
    目前计算机程序设计语言考试中编程题的自动评分技术仍然不完善,该技术是实现计算机在线考试及自动阅卷的关键和难点所在,因此许多研究者致力于寻找一种程序的中间表示形式(比如系统依赖图、抽象语法树)来进行源码分析并匹配评分,这种方法是将程序整体作为比较对象,不仅内存占用率高,而且实现难度大,同时也会牺牲灵活性。
    本文融合了程序查错及局部纠错技术、基于反射机制的黑盒测试技术、知识要点的正则表达式匹配评分技术等关键技术,实现了Java编程题自动评分技术及原型系统。评分方式兼顾了可执行代码的动态测试与源程序的静态分析,实现了对不同的考生程序采用以下两种评分方法:
    (1)对于可以通过编译的考生程序,利用 Java 反射机制提取考生程序的相关信息进行黑盒测试,给出测试分,再结合语法分、结果分,计算出总得分。
    (2)对于无法通过编译的考生程序,利用本地 jdk 包中的编译器编译考生程序,然后进行查错并局部纠错,每纠正一个错误都要重新编译以消除虚假错误。
    对于纠错后能顺利通过编译的考生程序,采用第一种评分方法。对于无法纠错的考生程序,则采取放弃纠错,根据错误种类适当给出语法分,再结合知识要点匹配情况计算总得分。
    实验结果表明,本文所实现的Java编程题自动评分技术提高了试题评阅过程的合理性和准确性,且具有较好的灵活性
    1.1 研究背景
    随着人类进入信息时代,信息技术作为生产力中最活跃的因素改变着社会的方方面面,网络以其独特的方式介入到社会的各个领域,给人们的行为方式带来巨大影响。现如今,网络已成为人们日常生活必不可少的一种通讯工具,诸如,网络信息查询、网络娱乐、网络购物、网络教学等等。其中,网络教学是将教学与网络技术有机结合,不仅丰富了教师的教学手段,而且充分发挥网络环境及其应用不受时间与地域限制的优势,更好地实现了教学资源共享以及师生即时互动交流,及时帮助学生解决学习上的疑惑,调动学生学习的兴趣,激发学生自主学习,有利于学生开展探究性学习活动,同时也拉近了师生的距离。
    因此,网络教学对辅助教学具有重大意义,受到各个院校的重视及广泛推广。
    无纸化考试是网络教学系统必备功能之一,是衡量教育教学质量和学生学习水平的重要手段。无纸化考试以计算机为工具,能够更加有效地确保考试的客观性、公正性、实时性,具有节约考试资源、规范考试管理、方便考生应考,提高考试工作效率等传统考试不可替代的优势。无纸化考试主要涉及到题库的建立与维护,自动组卷、自动评分等部分。其中试卷的自动评分对于大规模的考试来说意义非常重大,能够真正地使教师从批改统计等费时的工作中解脱出来,将主要精力转移到如何利用现代化的科技手段、教学手段提高教学效率等具有创造性的教学改革工作中,以更好地适应现代教育形势。
    1.2 研究目的及意义
    当前计算机程序语言考试中,客观题自动评分在技术上比较成熟,而属于主观题的编程题自动评分技术的解决方案真正实用的不多。因为,如果仅因程序存在极小错误而导致失分严重,显然不合理,忽略对程序内部结构的分析,不符合人工评阅思维。很多研究者致力于寻找一种中间表示形式,比如系统依赖图、抽象语法树,将考生程序与标准答案都转化成中间表示形式,将其标准化后进行完全匹配。这种方法是将整个程序作为比较对象进行静态代码分析,2不仅实现难度大,而且内存占用大。如何使评分过程能够较合理、灵活并且评分结果与人工评分大致相符是自动评分的要点。
    通过研究国内外相关文献资料,发现对C、C++语言编程题自动评分技术研究的文献较多。Java语言作为目前主流的程序设计语言之一,应用领域广泛,Java语言程序设计的考试也相当普遍,但对Java编程题自动评分技术的研究并不多见。Java是一种纯粹面向对象的程序设计语言,无论从编程思想、程序结构,语法成分等方面都具有自身的特点,本文专门针对Java编程题自动评分技术进行研究与实现,具有一定的理论与现实意义。
    1.3 国内外研究现状
    编程题自动评分技术的研究已成为程序设计语言考试实现自动化的关键。
    许多研究者致力于开发基于不同技术方案的自动评分系统。纵观国内外编程题自动评分技术的研究文献,已有的自动评分系统中真正实用的并不多。归结起来,国内外较典型的自动评分系统主要有以下几种:
    国外CourseMaster系统
    [1]
    的优势在于结合了动态测试和静态分析,能够对考生程序进行自动评分并将系统的分析结果返回给用户。该系统的静态分析技术相对比较成熟,但由于动态测试的算法设计存在不足,从而导致动态测试效果与实际偏差较大。
    段汉周
    [2]
    等人提出的自动评分系统
    [1]
    主要运用于VB程序设计,其优点在于对
    使用过程中可能出现的各种问题进行专门的设计。评分系统对于无法通过编译或者不能运行的考生程序默认是错误的,自动给予零分;显然其前提是程序必须能通过编译、进入运行状态,方可评分,评分标准主要依据运行结果以及程序界面参数。该评分系统对于那些存在极小错误而导致无法编译的程序会给予零分,实际上相当不合理,与人工评阅思维相违背。
    乔善平
    [3]
    等人提出一种基于人工智能中可信度的自动评分技术,主要从执行可信度、程序的最大相似性与代码可信度、指数曲线衡量标准与输出可信度等方面进行制约评分。
    王甜甜
    [4]
    提出基于语义相似度比较的编程题自动评分方法,其基本思想是根据考生程序与模板程序的语义相似度进行评分,程序语义采用系统依赖图来表示,如果两个程序的系统依赖图等价就说明这两个程序具有等价的语义。3马培军
    [5]
    提出基于程序理解的编程题自动评分方法,其基本思想是将考生程序与模板程序都转化为系统依赖图,然后将系统依赖图进行标准化来消除语义多样性,最后将标准化后的系统依赖图在程序的结构、规模、深度及知识应用四个层次进行匹配评分。
    相对而言,比较成熟的编程题自动评分技术模型主要是:基于程序理解的评分和基于语义相似度的评分。这两种方法所具有的共同点是都以系统依赖图作为程序的中间表示形式,然后将整个程序的系统依赖图作为比较对象进行完全匹配评分。不足之处在于词法和语法分析很严格,那么一个极小的错误可能会导致得分偏低,不够客观且实现难度大。
0 0
原创粉丝点击