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

1.4 课题的研究思路
    本文以 Java 编程题为例,结合人工评阅的方法,对不同的考生程序采用不同的评分方法。考生的程序大致可分为两种情况: 可以通过编译和无法通过编译。
    第一种情况,对于可以通过编译的考生程序,利用 Java 反射机制提取考生程序的相关信息进行黑盒测试。反射机制可以轻松提取考生程序中与输入有关的变量或对象属性,系统根据变量或对象属性的数据类型给定输入值,然后调用具有返回值的方法来验证该方法的输出结果是否与预期的输出值一致,给出测试分,再结合语法分、结果分,计算出总得分。该评分方法简称为“功能性测试评分方法”。
    第二种情况,对于无法通过编译的考生程序,利用本地 jdk 包中自带的编译器对考生程序进行编译,结合使用错误流获取编译的错误信息,然后使用Scanner 类来分解错误信息并进行局部错误,每纠正一个错误都要重新编译以消除虚假错误。对于纠错后能顺利通过编译的考生程序,采用“功能性测试评分方法”计算总得分。对于无法纠错的考生程序,则采取放弃纠错,根据错误种类适当给出语法分,再结合知识要点匹配情况计算总得分,称该评分方法为“知识要点匹配评分方法”。
    1.5 研究目标
    本文以设计出能对 Java程序进行自动评分,并且评分过程能够较合理、灵4活及评分结果与人工评分大致相符为目标。避免因极小错误或标准答案中没有给出多种可能的参考答案而导致失分严重的情况的发生。对于有极小错误的考生程序,应该采取查错并纠正错误,如果运行正确,适当扣点语法分,考生仍然可以得高分;对于后者采用黑盒测试也可以降低评分的误差,使得评分结果更加合理性。在评分系统总体方案设计中,结合UML模型图,以图形化的方式更清晰、直观地展示系统模型。对于。此外,评分系统的功能除了自动评分外,还包含成绩查询、成绩图表统计等后续处理,可以减轻教师繁重的工作量。
    1.6 课题的难点与解决方法
    评分系统的难点在于无法通过编译的考生程序如何进行查错及局部纠错处理、语义多样化问题的解决、特殊算法的处理。查错及局部纠错处理方案是利用java自带的编译器编译考生程序,结合使用错误流获取 编译的错误信息,然后使用Scanner类来分解错误信息并纠正简单的错误,每纠正一个错误都要重新编译以消除虚假错误。对于无法纠错的考生程序,则放弃纠错,根据错误种类扣语法分,然后结合知识要点匹配评分。对于语义多样化的问题,采用正则表达式这个强大的匹配工具描述所有可能的解答方法,然后与考生答案进行匹配给分。对于没有在标准答案文件中给出的特殊算法,采用在评分过程中结合了功能测试的方法,以辅助的方式、比较有效地处理这种特殊情况,从而有效缩小评分误差。
    1.7 系统开发工具
    编程语言: Java
    Java开发包:JDK7.0
    集成开发环境: Eclipse3.7.0
    数据库: SQL Server 2005
    运行平台:Windows XP
    UML绘图工具:StarUML5.0
    正则表达式测试工具:RegexBuddy 35
    1.8 论文组织结构
    论文共分为五章,结构如下:
    第一章 介绍本文的研究背景,研究目的及意义,阐述了国内外的研究现状,提出了本文的研究思路及研究目标,同时对课题的难点提出相应的解决方法,并简要介绍了系统开发工具。
    第二章 介绍系统所涉及到的相关技术。阐述了Java反射机制、正则表达式应用步骤;概括了几种常用的UML模型图以及UML建模过程,并介绍了XML文档的验证、解析、查询技术。
    第三章 阐述自动评分系统的总体设计。对系统需求、静态结构和动态行为进行建模、对数据库及试卷标准答案的存储格式进行设计,同时对XML数据进行加解密。
    第四章 阐述自动评分系统的实现与测试。重点介绍自动评分系统的三大关键技术的实现,包括:程序查错及局部纠错技术的实现、基于反射机制的黑盒测试技术的实现以及知识要点的正则表达式匹配评分技术的实现,构建原型系统进行测试以及实验结果分析。
    第五章 总结本文主要的研究工作,并指出系统需要在哪些方面进行完善。6第 2 章 相关技术简介
    2.1 Java 反射机制
    自动评分系统的基本工作原理是提取考生程序的相关信息与标准答案进行匹配评分。反射机制在读取和修改属性或方法方面具有十分强大的功能。通过Java的反射机制,可以得知一个运行中的Java程序所包含的任何类的属性和方法,可以设置其对象的属性值及调用其对象的任何方法。因此,反射机制用于评分系统的功能测试具有较好的灵活性。
    2.1.1 Java 反射机制原理
    Java反射机制应用的前提是已知名称的Class必须能通过编译,允许于程序运行时取得该类的所有属性和方法,还可创建对象、设置对象的属性值以及调用对象的方法。反射机制主要借助于java.lang.reflect包中的Class、Field、Constructor及Method等四个类来实现,其中Class表示一个类,Field表示类的成员变量,Constructor表示类的构造方法,Method表示类的方法。
    Class类是反射机制应用的入口,即反射机制应用前要先创建一个“Class”对象;然后利用该“Class”对象获得类的内部信息;再通过反射APIs动态处理便可获得类成员的具体信息。具体地说,任何一个Java类文件(通过程序编译后,便可生成的字节码文件)被JVM装入内存后都用Class对象来表示。
    Class对象调用getDeclaredField()、getDeclaredConstructor()和getDeclaredMethod()等方法便可得到类中Field、Method和Constructor对象。
    再利用这些反射对象,可方便地获取其相关的类成员的具体信息。比如要获取方法的修饰符和返回类型,只要通过Method对象调用getModifiers()与getReturnType()即可实现。同样,可通过Field 对象访问变量或修改变量值,方法分别为get(Object obj)与set(Object obj1 , Object obj2 )。

你可能感兴趣的:(Java编程题自动评分技术的研究与实现(二))