基于XML结构的C语言考试的自动评分系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于XML结构的C语言考试的自动评分系统
李富星;牛永洁
【摘要】在C程序设计语言考试中为了解决定位难、一题多解和对于主观题没有统一的评价标准的情况,对考试系统中客观题和程序题的评分方法进行了研究.在比较结果的评分基础上,引入了XML结构的答案库,以及使用了黑盒测试方法与抽取骨架的方法,成功地解决了上述问题.在设计系统的过程中,十分注重软件的实用性.该系统设计成功后,通过在小范围内使用,初步实验结果证明自动评分模块运行稳定,评分标准能够统一.
【期刊名称】《现代电子技术》
【年(卷),期】2010(033)016
【总页数】3页(P130-132)
【关键词】定位;黑盒测试;骨架法;日志
【作者】李富星;牛永洁
【作者单位】延安大学计算中心,陕西,延安,716000;延安大学计算中心,陕西,延安,716000
【正文语种】中文
【中图分类】TN911-33;G420
0 引言
目前,很多高校都开设了计算机语言程序设计课程,在考试中,使用人工进行阅卷
既费时、费力且容易出错。
于是,针对计算机语言程序设计的自动评分系统就被应运而生。
济南大学计算机工程学院的乔善平等人在《基于智能移动Agent的C语言考试系统》中提出了从人工智能中可信度的角度引入执行可信度、程序最大相似性、代码可信度、指数曲线衡量标准和输出可信度等几个新的概念,然后分析了实
现的过程。
并且将整个程序的设计分为几个部分执行、代码、输出和其他因素。
使之存在偏序和制约关系,以实现自动评分[1]。
但是在实际的使用过程中,自动评分
系统[2]也存在很多问题,不能客观、真实地评价一个考生的真实答题情况。
主要
存在的问题主要如下:
C语言程序设计考试的题型主要分为改错题、填空题、编程题等类型,在C语言
的程序设计考试中,改错题与填空题可以归为客观试题的范畴,而编程题可以归为主观题的范畴。
在C语言程序设计中,改错题与填空题主要是在程序的某个位置出错或者留出空白,让考生在该位置做出解答,为了将对试题与答案进行比较,往往在该位置处进行标注,以往的自动评分系统中,为了对该位置进行定位,往往提示考生不能随意改动试题,特别是不能添加空行等,这样就严格的限制了考生,如果某个考生不小心在里面添加了一个回车换行,即使答案正确,也会得不到成绩,主要原因是自动评分系统将不能找到该位置。
而且,在填空题中一个空往往有很多不同类型的答案,如果考生写出的答案与标准答案不相符,但是也能实现相同的功能,这样,考生也不能得到相应的成绩。
比如,一个填空题应该填i++,其实,考生填写i=i+1,++i。
都应该是正确的,但是以往的评分系统往往不给分,这种一题多解的问题也不能客观、真实地评价一个考生的成绩。
程序编程题的评价更加困难,以往的评分系统往往强制考生使用某种算法去解答,这既违反了程序编程的初衷,也限制了考生的想象与发挥。
即使考生采用了某种算法,也可能在算法的细节方面或可能与标准的答案不同,所以程序编程题不能采用
简单的比对的方法,文献[3]采用了模糊的评价方法,但是这种方法会使一些抄袭
的考生也能过关。
针对以上问题,本文采用了正则表达式[4]进行定位,使用XML结构的答案库,并且使用黑盒测试方法[5]和抽取程序设计的骨架[6]等方法,成功的解决了上述问题。
1 系统设计思想
1.1 试题问题的定位
在C程序设计中,程序设计需要的源文件往往不止一个,所以首先是寻找问题所
在的程序文件,这个程序文件的名称被记录在XML格式的答案库中。
如前所述,在C程序设计的改错题与填空题中,往往在问题出现的地方添加标注,让考生在
添加标注的地方进行作答,为了有效的对问题所在位置进行定位,该系统利用了这些标注,采用正则表达式的匹配准确的定位到问题的所在位置,找到位置后,为了避免考生在问题位置添加空行等问题,接着在该位置的后面过滤掉空行,然后使用字符串前缀的方法准确的定位到问题所在的行,然后取出考生的答案与答案库进行比对。
1.2 一题多解问题的解决
C程序设计的填空题中,一个问题的解答往往有很多种解答的方法,针对问题考虑所有可能出现的解答方法,将这些答案存放在答案库中,根据答案库中答案出现的次数采用循环与考生答案做比对,只要考生的答案符合其中之一的任何一个答案,终止循环,同时给学生成绩。
1.3 程序编程题的评分
程序设计题的评分应该分为两种情况:
(1) 考生编写的程序通过的编译、连接阶段并且有结果输出;
(2) 考生编写的程序没有通过编译。
在第1种情况下,该系统借鉴了软件工程中程序测试的方法,使用了黑盒测试法
来评价考生的程序。
在XML格式的答案库中,针对该题给出一些测试数据,然后根据测试数据对比应该输出的结果,根据考生输出结果与标准的答案的异同给不同的分值。
第2种情况下,因为考生的程序没有通过编译,因此没有输出结果,但是可能考
生已经写了一部分程序,如果仅仅根据没有输出结果,直接给考生零分,显然很不公平。
于是,该系统采用抽取考生程序中骨架的方法来进行。
比如一个排序程序应该有这样的程序设计结构:
for(i=0;i<cnt-1;i++)
for(j=i+1;j<cnt;j++)
if(a>b)
{
…
}
根据C语言的关键字[7],可以抽取骨架为for()for()if(){}或者for(){for()if(){}}等,从考生文件抽取的骨架与标准的骨架[6]相对比,根据异同给予一定的分数。
为了避免考生互相抄袭,该系统采用了两种预防措施。
第一种措施,不同考生在考试期间随机抽取试题库中不同的试题,但是还可能出现相近考生试题相同的情况,该系统从实际出发,采用“记录解答过程”的方法,利用Windows内部功能[8],或考核软件(VC++)提供的“宏”功能[9],跟踪记录考生操作的每一步骤,形成独立日志文件,通过特殊方法“固化”在当前位置,或者直接传送到服务器上,作为评分的必需内容。
评分时,如搜索不到指定日志文件,就可认定为“抄袭”[10]。
2 系统设计
该系统中,XML格式的答案文件是整个系统的核心,在其中几乎记录了所有的跟
自动评分有关的信息,下面是该系统使用的答案文件的一部分。
<QSet name="01">
<First name="PROJ1.CPP" score="30" type="Error"> <Question Sort="1">
<Method>第一种答案</Method>
</Question>
<Question Sort="2">
<Method>第一种答案</Method>
</Question>
…
</First>
<Second name="PROJ2.CPP" score="40"
type="Blank">
<Question Sort="1">
<Method>第一种答案</Method>
<Method>第二种答案</Method>
</Question>
…
</Second>
<Third name="PROJ3.CPP" score="30"
style="Program">
<Question type="Framework">
<Frame>第一种骨架</Frame>
…
<Frame>第n种骨架</Frame>
</Question>
<Question type="Output">
<Answer>
…
</Answer>
</Question>
<Question type="Input">
<data>
…
</data>
</Question>
</Third>
</QSet>
其中:QSet表示试题的套数;First表示第一道题试题考察点在name属性所指的文件名中,本题的分值在score中记录,试题的类型由type来指明。
<Question Sort="1">指示在某一道答题中的第几个小题。
<Method>表明该小题的其中一个答案,如果存在一题多解,将所有的<Method>全部放在该小题中。
在试题类型为Program的编程题中,<Question type="Framework">给出了程序设计的骨架,<Question type="Input">给出了黑盒测试需要的输入数据,<Question type="Output">给出该题黑盒测试的输出结果。
该系统设计的总体思路如图1所示。
图1 系统设计的总体思路
3 结语
该系统经过多次实际的使用,有效地避免了上述出现的问题,能够准确定位问题的
位置,并且对于一题多解的问题也运行良好。
在程序编程问题中,能够基本体现公平、客观的评价一个学生的编程思想,特别是操作日志的使用有效的监督了学生的“抄袭”现象。
对程序编程时,不能通过编译但已经编写了一部分程序的考生,可使用提取骨架的方法,基本能够给考生一个公平的评价,改善了过去很多系统给学生打零分的情况。
参考文献
[1] 乔善平.基于智能移动Agent的C语言考试系统[J].计算机工程与科
学,2004(4):29-31.
[2] 梁振球.填空题自动评分系统的研究与实现[J]. 计算机系统应用,2007(2):109-111.
[3] 嵇敏.自动评分系统的设计与实现[J].辽宁师范大学学报,2006(2):193-194.
[4] 赵兴涛,王斌君,刘舒.正则表达式在文档自动识别中的应用[J].中国人民公安大学学报,2005(4):33-35.
[5] 陈浩,刘海涛.遗传算法在黑盒测试中的应用[J].电子技术应用,2000(9):4-6.
[6] 钟旭,万剑怡,万红艳.基于骨架的结构化网格编程模型[J].计算机工
程,2010,36(2):266-268.
[7] 阂光太.C语言程序设计与数据结构实践[M].北京:高等教育出版社,2005.
[8] 朱友芹.WindowsAPI 参考大全[M].北京:电子工业出版社,2000.
[9] 刘晓华.基于语义的主观题自动批改算法的设计[J].软件导刊,2006(13):27-31.
[10] 程华.计算机语言类课程主观试题的自动评分方案设计 [J].电脑学
习,2006(1):16-17.。