1概述
在当前的很多计算机类型考试中,很多都应用了自
动评分系统,既减轻了改卷老师的负担,也大幅度提高了工作效率。但在一些编程类的课程考试中,由于存在了非常多的主观编程题目,这些主观题由于现阶段没有一个比较成熟的技术可以依赖,大部分还是采用的人工批改手段[1]。这些技术的实现是大部分在线考试和自动化阅卷系统的关键所在,因此大部分的研究人员主要通过开发一个中间表示形式来对数据源进行分析和匹配,将整个程序作为整体来进行静态代码分析,然后根据既定的算法进行评分,但这类方法实现技术复杂,计算机系统的负载比较大,而且灵活性也不够。如何通过现有的计算机技术来实现编程主观题自动评分,既兼顾评分结果,又兼顾灵活评分,既易实现,又能够最大化兼顾通用,是研究的难点。以计算机语言编程题为例,研究和探讨一种基于Java 反射机制的自动评分模型,通过反射机制对源代码的执行结果进行分析,融合程序的查错纠错技术以及正则表达式来实现匹配评分,实现了Java 程序主观编程题的自动评分技术和原型系统,具备一定的理论和现实意义。
2Java 反射机制
Java 反射机制主要是通过调用程序中已知的类来进
行编译,然后根据编译结果来判断程序的执行情况,然后根据执行情况来与后续的评分标准进行匹配后进行打分。反射机制通过调用Java 中的lect 包,由这个包里面的4个类来实现,基本思想就是编译学生的
程序,通过获取类名,类的成员变量,构造方法及普通的方法,Java 的反射包中包含了要获取的相关参数和方法,可以比较容易获取需要的信息[2]。
要实现反射的首要条件是获取入口类,反射机制首
先调用Class 类来创建一个类的对象,然后通过前面所提到的其他几个类以及反射APIs 动态处理来获取这个类的相关内部信息,包括该类的变量、方法以及属性等[3]。具体一点来说就是,程序中的任意一个通过程序编译的Java 类,加载到虚拟机后,都被表示为Class 类的对象。该对象提供了比较常用的访问器来获取Class 类所表示的对象,如为了获取构造方法,可使用getDec laredConstructor()。再利用这些对象来反射获取相关的类成员的具体信息。比如可以通过Method 对象来调用get⁃Modifiers()方法与getReturnType()方法就可以获取方法的修饰符和返回类型。同样,也可以通过Field 对象调用get(Object boj)与set(Object obj1,Object obj2),来
访问变量或者修改变量值。
3正则表达式
由于程序编程题目属于偏主观的题目,实现的方法
可以多种多样,也就是说没有所谓的标准答案。但是在基金项目:广州大学华软软件学院校内科研课题(ky 201714)资助。
作者简介:蒋慧勇(1981-),男,硕士,研究方向:软件工程和移动互联网。收稿日期:2018-08-19
基于Java 的主观编程题自动评分技术研究
蒋慧勇
(广州大学华软软件学院软件工程系,广州510990)
要:目前大部分的考试自动评分系统针对的主要还是客观题的自动评测,而对于一些主观题则仍然不够完善,这些技术的实现是大部分在线考试和自动化阅卷系统的关键所在。大部分的研究人员主要通过开发一个中间表示形式来对数据源进行分析和匹配,然后根据既定的算法进行评分,但这类方法实现技术复杂,计算机系统的负载比较大,而且灵活性也不够。以计算机语言编程题为例,研究和探讨了一种基于Java 反射机制的自动评分模型,通过反射机制对源代码的执行结果进行分析,融合程序的
查错纠错技术以及正则表达式来实现匹配评分,实现了Java 程序主观编程题的自动评分技术和原型系统。
关键词:自动评分;Java 反射机制;XML
技术;程序查错;局部纠错
出题过程中,教师一般会指定成员变量、方法名、构造方法参数等基本信息,对实现方法的功能进行要求,不会限定具体实现方式,这时正则表达式则可以通过表达式来对考生程序和相关标准答案进行复杂运算匹配,然后根据运算结果来进行打分,灵活而且高效。
Java 中的正则表达式分为Pattern 和Match 而两个类
来实现,他们都封装在 包中,Pattern 类是对正则表达式进行编译的,Match 类则是对正则表达式进行匹配的,也就是用来检索结果的[4]。主要步骤如下:
(1)构造一个可以实现字符串编译的正则表达式模式对象,通过调用Pattern 类的compile (string string)来实现,其中string 参数为代表正则表达式的字符串。(2)调用Matcher 类中的matcher (CharSequence
mstring)方法来对上一个步骤的Pattern 对象进行匹配对象创建,参数表示待匹配字符。
(3)假设上一个步骤所产生的Matcher 对象为
mMatcher,则使用mMatcher 对象进行结果的搜索匹配。Matcher 对象提供了以下几个常用的方法:
1)boolean find():任意目标的匹配。
2)boolean find(int begin):用来对指定的位置开始
进行字符串匹配查。
3)int begin:返回匹配目标字符串的开始位置。
4)int end ():返回匹配目标字符串的结束位置。
5)String string ():返回当前匹配的字符串内容。4XML 技术
在自动化评分系统中,通过Java 反射机制来调用
源程序进行编译后再将结果通过正则表达式来与标准答案进行匹配。因此,标准答案的存储和表达方式不仅要准确,还要灵活多样,符合各种不同类型的参考答案。这就需要一种可以描述各种复杂关系的通用数据格式。选择了XML 文档作为标准答案的存储格式,简单、方便、通用,内容和格式分离。4.1XML 验证
为了保证XML 文件的有效性,需要对XML 文件的数
据结构进行约束,通过调用约束格式来对XML 文档进行验证来确保有效性。主要通过DTD 和XML Schema 文件来保存XML 格式结构。前者有独立的语法结构,后者则是特殊的XML 文件,也是通过XML 语法来描述约束条件。4.1.1DTD
主要用于对XML 内容的格式进行验证,以确保
XML 内容的严谨性和正确性。但由于缺少对数据类型和命名空间的支持,对XML 格式的限定有限[5]。4.1.2XML Schem
XML Schema 是用来描述XML 文档结构的,本身也
是使用XML 文档结构,所以不需要重新学习一门语言,与DTD 出于同样的目的产生,但是功能更为强大[6]。4.2XML 解析
由于采用XML 文档保存答案,在进行答案匹配的
时候需要从XML 文档中获取答案内容。这里往往会用到XML 的解析技术,主要包括了DOM 和SAX 两种。(1)DOM:XML DOM (XML Document Object Mod⁃
el)定义了访问和操作XML 文档的标准方法。通过该
方法可以将XML 中的数据以树形的结构放入到内存中,然后通过程序对该树进行访问以方便获取所需要的数据。由于该技术需要把所有内容先放到树里面,如果XML 文件内容较多时会占用较多内存空间,影响计算机系统的工作效率[7]。
(2)SAX:全称Simple API for XML,是一个软件
包,提供了外部的API 接口,允许程序调用后对XML 文件进行读取[8]。SAX 不需要对整个XML 文档进行整体读取,实行的是逐行扫描,在扫描的同时进行数据解析。这种方法相对于DOM 来说更加方便,特别是对于
大数据量的XML 文档,由于不需要把所有数据导入内存,SAX 的效率更高一筹。4.3XML 查询
XML 解析技术是对XML 文档进行整体的读取,如果需要对XML 内的数据进行查询匹配的话则会用到相对应的查询技术,主要包含两种:XPath 和XQuery。(1)XPath:确定文档中某部分的具体位置,主要
通过它来实现,它的返回值可能是节点,节点集合,原子值,以及节点和原子值的混合等[9]。XPath 的核心是
XML 文档的路径表达式。通过XPath 所建立的节点路径,应用可以沿着这些路径节点逐一进行比较查,以
获取所需的数据内容。
(2)XQuery:是在Xpath 技术的基础上面发展出来
的用来,是对XPath 的扩展,其功能比较全[10]。XPath 查询返回的是一个经过排序的节点序列,如果需要获取节点内容还需要通过遍历来获取节点数据。而XQuery 返回的则是完整的节点集合,数据就包含在集合本身,(下转第108页)
通过程序可以非常方便地获取。同时,XQuery提供了更加丰富的表达式类型和数据类型,还有模式验证机制等。
5原型设计
通过对以上几种技术的描述,为了验证自动评分技术的可行性和准确性,设计并实现了一个系统原型,该原型在Eclipse平台进行开发,采用了Java程序语言进行编写。系统设计采用了MVC三层结构。评分方式采用了静态分析以及动态模拟执行代码分析两种,客观题主要通过静态方式判分,主观编程题则通过Java的反射机制来进行执行验证。原型系统主要核心功能就在于自动评分,采用了上文所述的Java反射机制,程序查错纠错技术、XML文档存储技术以及正则表达式匹配评分技术结合来实现。系统首先读取考试题中考生所写的程序源代码,调用Java反射机制实现对程序的编译执行,并将执行结果读取出来放入内存,题目参考答案保存到XML文档中,不同答案的组合分数不同,事先需要确定组合类型和对应分数,然后将规则写成正则表达式。然后执行结果与XML中参考答案进行匹配组合,获取到最终表达式后通过正则表达式给出最终的分数。通过多次测试,该方式在准确性方面比较高,只要结果的XML文件考虑周全,与人工评分的误差可忽略不计,但在通用性方面还有待提高,也就是针对不同类型的题目,参考答案的XML文件编写通用性不足,基本达到最初的验证目标,如果题库建设比较成熟之后,采用此种评分方式,其效率还是远超手动评分的。
6结语
通过对几个关键性技术的分析和研究,可以推断可实现基于Java的主观编程题的自动评分,并通过组建原型系统进行了实现验证。系统的评分方法采用了Java 语言本身独特的反射机制结合其他相关技术可以针对Java编程题目实现执行编译后通过对答案的组合匹配实现自动化评分,设计思路相对比较新颖,可为自动评分系统提供一个具备参考意义的案例。由于只适用于Java 语言,也为其他编程语言提供了一个思路,未来在通用性上还有待继续提高。
参考文献
[1]牛永洁,张晓光.关于程序设计题自动评分方法的
研究.信息技术,2010,(11):64-67. [2]段汉周,凌捷,郑衍衡.Visual Basic程序设计考核
自动评阅系统中若干问题的研究.计算机工程, 2001,27(4):167-168.
[3]乔善平.基于智能移动Agent的C语言考试系统.
计算机工程与科学,2004,(4):29-31. [4]王甜甜.基于语义相似度的编程题自动评分方法的
研究:[硕士论文].黑龙江:计算机科学与技术系, 2005.
xml技术的主要应用
[5]马培军,王甜甜,苏小红.基于程序理解的编程题
自动评分方法.计算机研究与发展,2009,46 (7):63-65.
[6]王倩,苏小红,马培军.有语法错误的编程题自动
评分方法研究——
—用局部语法分析和采分点匹配实现,计算机工程与应用,2010,46(17):58-60. [7]娄不夜.Java编程题自动判分软件框架的设计.计
算机工程与设计,2010,31(24):74-76. [8]佘石泉,周肆清.正则表达式在编程题自动阅卷中的
应用.计算机技术与发展,2007,17(7):244-246.
[9]于淑香.C语言程序设计题自动评分系统的设计与
实现.沙洲职业工学院学报,2008,11(2):10-13.
[10]李海华.基于Java的XML加解密系统的设计与实
现.计算机技术与发展,2011,(8):45-47.
校数据共享平台的应用研究,通过OAuth2.0的认证授权技术,实现了各部门子系统统一身份的认证功能,不需要用户在第三方应用中输入用户名和密码,就可以获取用户授权的资源,这样减少用户在各部门多个子系统之间多次登录操作,安全地实现了跨平台的数据共享。
参考文献
[1]欧阳荣彬,等.基于OAuth的数据共享方案研究.
华东师范大学学报,2015,(S1).[2]张德林.高校基于OAuth协议构建统一认证平台的
研究[J].计算与信息科学,2016,7. [3]时子庆,等.基于OAuth2.0的认证授权技术[J].
计算机系统应用,2012,(21).
[4][美]Robert W.Sebesta.Web程序设计[M].8版.
清华大学出版社,2015.
[5]王晓静,等.基于WEB2.0校园信息资源共享平台
的设计与实现[J].现代教育技术,2009,19(3).
(上接第60页)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。