罗定福, 陈永松, 吴权轩
(广东松山职业技术学院 计算机系, 韶关 512126)
大学计算机基础课程最重要的组成部分是Office。就Office文档的自动改卷提供一个可行的方案,开发Office操作题改卷中间件平台[1],通过中间件平台连接不同的考试系统和Office文档,不同的考试系统不需要再写复杂的代码,只需要调用中间件平台的相关组件就可以快速实现Office自动改卷,当教学内容更新之后,考试系统不需要改动,只要使用最新版的中间件即可。
国内高职院校关于Office改卷系统的研究主要有两种,一是构造一个Office软件的仿真系统[2],通过仿真系统模拟Office软件的环境界面,考试时记录考生的操作步骤来进行自动改卷;二是通过引用相关组件,利用VBA技术[3、4、5]提取文档信息和标准答案比较实现自动改卷。文章提出一种可行方案,将自动改卷的操作封装为中间件,不同语言不同的DBMS,只要了解中间件的接口,编写少量代码就可以实现对Office文档的自动改卷。
开发出一个Office操作题改卷中间件,给软件开发者提供了Office文档自动改卷的数据存取层,屏蔽Office程序的接口细节和实现逻辑,做成组件式的系统[6],需要时将不同组件进行组装,建立新系统的代价将大大降低。
改卷中间件实现的主要功能有两个。一是将考生完成的Office文档(以下简称考生文档)和标准答案进行比较,实现对文档的评分;二是从教师完成的具有标准答案性质的文档(以下简称样文)提取信息作为标准答案。
改卷中间件平台的总体设计目标是在应用程序和Office文档之间,开发出一个实现应用程序对文档进行自动改卷的专业中间件平台。通过改卷中间件平台就可以控制Office实现自动改卷,可以用不同的程序设计语言和DBMS进行调用,实现可重用性、可维护性。
改卷组件实现Office文档评分和标准答案生成两大功能。为了减轻开发难度,改卷组件采用与VBA技术语法相近的VB.NET作为组件开发语言。利用“类库”[7]开发改卷组件,最终生成动态链接库(DLL)文件。通过.NET平台提供的工具,可以将DLL伪造一个COM接口[8]并注册到系统中。通过这个伪COM接口来实现对.NET的DLL的调用。本系统改卷信息点存储在Access表中。调用时,可以根据需要将数据表导入到不同的DBMS中。
3.2.1 改卷组件建模
改卷中间件平台最重要的组成部分是改卷组件,它的主要工作流程是通过VBA技术调用Word、Excel、PowerPoint的COM组件的不同对象和属性,达到自动改卷和答案录入的目的。改卷组件分为实体类和操作类。实体类封装要操作的数据,隔离代码对数据库的依赖[9],不同数据库可以通过组件的接口发送和接收实体类数据。而操作类是依据实体类的数据对文档进行的操作从而实现自动改卷和答案生成功能。
1)实体类
如果将每种操作类型定义为一个实体类[4],每个操作点定义为一个属性,则不仅设计非常复杂,而且会降低组件的可重用性。为了保证在后期设计中对外接口始终保持不变[10]。只设计了三个实体:Word、Excel、PowerPoint,分别对应于Word、Excel、PowerPoint所有的操作,在类的实例中通过类型号(num)属性区分该实例为何种类型的操作,不同实例的操作点属性名使用统一名称,即第1个操作点属性用point[1],第r个用point [r]。同时,由于Word、Excel、PowerPoint实体有不少属性是相同的,因此设计一个parert entity为父类,然后通过继承生成Word entity、Excel entity、PowerPoint entity。实体图如图1所示。
图1 实体图
实体图属性说明:mark:操作实例总得分;error:错误信息;para1、para2:特殊参数;position:改卷点地点(位置);sheetnum:工作表序号;cell address:单元格地址或范围;slide num:幻灯片序号;position:对象序号;point mark[1]:第1个改卷点分值,point[r]:第r个改卷点分值。特殊参数用于特殊改卷信息的输入,如替换操作的替换次数等。
2)操作类
改卷组件操作类实现本系统两个主要功能:1.读取考生文档,返回某项操作得分;2.读取样文,获取某项操作不同改卷点标准答案信息。操作类由Word操作类、Excel操作类、PowerPoint操作类组成,三者的设计方法相似,以Word操作类为例进行介绍。
Word操作类分为Word评分类(WordMark类)和Word标记类(WordTab类)。评分类实现考生文档评分,标记类实现标准答案的生成和检验。评分类和标记类都是对Word文档进行操作,有不少操作和属性是相同的,因此先设计一个基础Word程序类,然后通过继承生成评分类和标记类。在评分类中, Mark方法功能为考生Word文档评分,在标记类中,AnswerTab方法功能为样文标准答案的生成和检验,BlankTab用于对空白文档评分,空白文档评分主要是为了避免样文和空白文档某项改卷点结果相同,从而出现白送分的情况。Tab、BlankTab方法的评分与AnswerTab方法中检验答案的操作流程基本相同,而标准答案的生成只需在上述基础上增加少数语句就可实现,而且这些语句的执行对性能几乎无影响,为了提高编写代码的效率,提高系统的可重用性,系统在设计时,上述3个方法通过同一个操作来实现。
在实际设计中,上述操作通过第三个类Word打分类(WordTabing)的评分方法(WordMark)实现,为了避免每次调用WordMark方法都进行实例化,WordMark方法声明为静态方法[11](VB.NET称为共享方法)。
出于系统运行效率及教师生成答案的操作习惯的考虑,评分类调用WordMark方法采取的操作方式是对考生文档的多个操作实例同时进行评分,而标记类调用WordMark方法采取的操作方式是对样文或空白文档的单个操作实例进行检验和生成答案。这样就存在一个矛盾,评分类调用时按照多个实例的集合进行操作,标记类调用时对单个实例进行操作,为了即能够对集合进行操作也能对单个对象进行操作。设计接口IwordOj。该接口包括Count属性和Item属性,Count属性为返回实例的个数,Item(n)返回第n个实例。在评分类和标记类分别实现该接口,在WordMark方法中以该接口作为WordMark方法的输入参数,从而使WordMark方法同时实现对单一实例和实例集合的操作。
3.2.2 改卷信息点数据设计
改卷中间件平台的目的是建立一个不同DBMS都可以调用的Office文档改卷服务。实体类各个属性的含义存储在Access表中,该表的结构与改卷组件实体类的结构相类似,但增加了解释(Explain)属性,去掉了不需要说明含义的一些属性,由于数据库表不允许出现数组属性,将x(m)改成xm属性。解释属性用于对某个实例的输入进行一些必要的说明。
本系统中,实现改卷的代码主要集中在Word打分类的评分方法编写。
在本系统中,改卷组件的主体为“类库”,由于类库输出类型无法直接启动。为了能对组件中编写的代码进行调试,需要编写一个实现调用类库实现评分和答案信息录入的简单项目,考虑到用单机版程序进行调试最为方便,该调试项目为用C#开发的WinForm程序。
前面设计生成改卷组件文件名为Marking.DLL,是.NET平台的“类库”。建立在.NET平台的应用程序,可以直接调用Marking.DLL实现自动改卷,如果是其他语言的应用程序,无法直接调用。
Marking.DLL设计中,使用了集合类型,有些方法的参数为复杂数据类型,然而在很多语言中,不支持集合类型,也无法正常调用复杂类型参数的方法,为了使不同程序语言开发的应用程序,都能正常调用,平台新建一个专门作为接口的“COM类库”,在该类库中,将复杂数据类型的各个字段转换为类的属性,集合类型改用索引器,在类的方法中,利用属性和索引器构造复杂数据类型和集合类型。同时,为了简化接口,在类库中定义AnsInfo方法,将改卷点字符串(由多个改卷点连接生成)转换为类的属性。最后定义Mark方法,功能是依次调用AnsInfo方法和改卷方法。引入上述方法后接口单一,调用也较方便。结果直接生成DLL和COM文件。其他语言调用COM文件时,直接调用Mark方法实现改卷。经多种语言调用测试,运行结果相当理想。例如用JavaScript调用本平台COM组件实现Word文档的自动改卷,可以编写如下函数:
function Mark(FileName,strAnswer)
{var Mark = new ActiveXObject("ComMark.Mark");
var s = Mark.WordTab(FileName,strAnswer);
alert("最后得分为"+s);}
其中FileName为待检验文件名,strAnswer为改卷点字符串,例如检验隶书20号新建样式,并将新建样式应用到文档第3段,总分4分,则赋值为"ClassNo11||x0,新建||n0,1||x1,隶书||n1,1|x4,20||n4,1||
对全院近三年使用本系统的非计算机专业的计算机统考成绩进行统计,如表1所示。
表1 近三年计算机基础考级成绩
可以看到,合格率和平均分都名列前茅,应用效果极好。
本文通过对现行Office改卷系统进行分析,提出Office改卷中间件平台解决方案。中间件平台实现了Office文档评分和标准答案生成2大功能,由改卷组件和改卷信息点数据组成,在核心的改卷组件设计中,针对现有方案的不足,提出一种实现隔离代码对数据库依赖和接口简单并能最大限度避免误判的设计方案,建立在该方案基础上的中间件平台,不同的开发语言不同的DBMS只需编写少量代码就可以调用本台实现对Office文档的自动改卷。同时,本设计方案对于其他课程的自动改卷设计也有一定的借鉴作用。