基于VB程序设计题考点的自动阅卷方法研究

2022-05-03 14:55:02 | 浏览次数:

摘要:针对Visual Basic程序设计的考核,在研究其程序设计题目特点的基础上,提出以考点及位置为评分标准对程序设计题进行功能动态测试、逻辑结构分析和语句格式模糊匹配的一种研究方法。详细介绍了整个设计的研究思路。

关键词:自动阅卷;程序设计;考核;动态测试;模糊匹配

中图分类号:TP312文献标识码:A文章编号:16727800(2011)02009402

基金项目:嘉兴学院平湖校区科研项目(0920)

作者简介:杨畅(1981-),男,湖南长沙人,硕士,嘉兴学院平湖校区助教,研究方向为Web服务;刘芳(1982-),男,江西萍乡人,硕士,渝州科技职业学院助教,研究方向为软件工程。0引言

目前对于VB程序设计题的自动阅卷,一般采用两种方法:一种是分析源程序是否拥有规定的控件,针对相应的控件事件判断源程序中是否编写了功能代码。在保证不会对程序功能产生任何影响的情况下加入测试代码及辅助临时代码使VB程序能够在运行过程中输出反映功能的运行参数。在这种系统中,主要是测重于VB本身控件事件等运用,而对程序设计方面很难去做很好的测试,如循环分支等结构、函数表达式的运用,这些都是程序设计中很重要的测评标准。对于运行查看结果,也是很不全面的,有些代码它可能没办法编译运行。这时,就需要具体知道考生代码的详细情况,像人工阅卷一样去检测考生掌握哪些知识点,以此来评分。另一种方法是模糊匹配,采用的是关键字模糊匹配方式,也就是系统把能决定该程序设计题答案的关键词逐一找出来,存储在一个临时数组里,然后将此数组中的字符与考生的答案进行匹配,在考生答案中找这些关键词,再根据匹配的程度来对考生的试卷进行打分。但其也存在一定的问题。比如考生答案中存在这些关键词,但是由于顺序相反使得语义完全改变,或者考生答案中并未出现关键词,但是他的语义和标准答案的语义是一致的。如果采用这种机制进行评分可能会导致误判。

1自动阅卷方法

1.1总体方案

VB是以工程来组织文件的,在集成环境中打开一个VB工程时,首先装载.vbp文件,从中分析出该工程中存在的窗体、模块等对象,然后进一步加载并分析这些对象及其存在的控件、事件、函数和过程等。利用VB的运行环境,可以对VB工程文件进行编译运行。VB程序是一个标准的Windows应用程序,它遵循Windows操作系统的消息驱动(或事件驱动)模式,即可以通过Windows消息与其程序进行通讯。VB程序的源文件主要以文本方式并按照一定格式保存,这就方便我们对它进行分析。因此,本方法要求对程序设计题以VB工程的形式作答,即程序代码写在一个工程中,分析程序对这个工程进行运行分析。其分析流程如图1所示:

图1程序设计题分析流程图

在此流程图中,首先是对程序进行编译运行比较结果。分析程序先嵌入、替换工程文件中相关代码,如果能编译运行则把结果保存到一个文件中。试题一般会要求考生把代码写在某个按钮事件里面,再利用Windows 的消息机制与此程序进行通讯,即发送一个点击相应按钮消息,从而运行要求的代码得到结果进行比较。在此当中,排除工程文件不存在和作弊代码直接给零分,其中任何一个环节出现错误,就进入代码的分析。当然,如果结果正确,又不是作弊代码就直接给满分。

1.2代码的静态分析

在代码的分析当中,最重要的就是考点的表示及考点间位置的描述。考點就是要在代码中进行搜索判断是否存在的知识点,而位置就是其在整个代码中与其它考点的相对位置。因此,把考点分成两类:结构考点和位置考点。

1.2.1结构考点设计

此类主要是针对代码的结构分析,即通过搜索判断考点是否存在及其位置是否正确,通过这两个方面结合来判断给分的。它分为3小类:

(1)循环判断。判断一重循环、二重循环是否存在,此处主要是检验循环运用为主,所以并未涉及大于二重循环的判断。这个问题,在通过出题时可控制试题不出现大于二重循环的考点。循环的判断,将忽略其循环的类型,即For或While等全部看成是的循环。

(2)分支判断。判断N分支在代码中是否存在,来确定对分支运用情况。分支的判断,也是忽略其分支类型,即IF或Case等全部看作是分支。

(3)特定语句判断。特定语句判断又分为:固定格式的判断和控件使用的判断。固定格式的判断如变量赋值、变量类型、格式匹配、固定字符串匹配等,其变量是模糊匹配的。控件使用分为:控件的某个属性、方法的判断、控件的某个事件是否存在。它也是模糊判断,即控件名称是模糊判断,而其属性、方法、事件和值是明确判断的。

1.2.2位置考点设计

在此类中另一个重要的方面就是考点间的相对位置。考点间的位置描述了代码的逻辑关系,即有些代码是必须出现在另外一些代码的前面、后面或中间的。

考点间位置描述如表1所示(考点2在考点1中的位置描述)。

表1考点间位置描述表考点二考点一一重循环二重循环分支特定语句一重循环前、后前、后前、后、中前、后二重循环前、后前、后前、后、中前、后分支前、后、中前、后、中

前两重循环间

后两重循环间前、后、中前、后、中特定语句前、后、中前、后、中

前两重循环间

后两重循环间前、后、中前、后、中1.2.3模糊匹配

在本文中用到的模糊匹配有3种形式:

(1)关键字的模糊匹配。对于循环分支等的判断,由于其关键字确定,但是同一类型的关键字有多个,就需要对多个相同类型的关键字进行模糊判断,把其都归为同一类型。如循环在VB程序设计中有do while...loop、do...loop while、do until...loop、do..loop until、While...Wend、for....next、for Each...next、for Each...in等8种,在本方法中其任何一种都作为循环来判断。对于这种循环分支结构的判断,都是有起始结束语句,可以用堆栈来保存这种结构,检测到起始语句,则把其入栈,碰到其结束语句,则出栈,并标志找到一个符合要求的结构。

(2)自定义名称的模糊匹配。对于固定语句的判断,由于变量名称和控件名称,是可以由考生自定义的,即只要其命名符合VB自定义变量名称的规则,都可以自由定义名称,而VB中的变量类型、操作符等都是很明确的。因此,就没有办法明确进行该语句的比较,只能把其名称进行模糊来比较该语句。在本方法中,名称的模糊取名为变量1、……、变量n,以区别于不同的变量。如 iTotal=iNum* iPrice,其模糊匹配格式为:变量1=变量2*变量3。对于这种模糊判断,首先要判断确定的关键字,如果存在再来判断其它是否为变量名称,以此来形成模糊匹配语句,通过这种模糊匹配来确定是否为要找的语句。

(3)表达式的模糊匹配。在下面表达式的动态测试中,需要判断当前语句是否包含表达式。其匹配方法为判断该语句中是否包含加减乘除等操作符,如果包含即可确定是表达式,可通过VB中提供的一个动态执行代码的接口来执行该语句,输入用例动态执行该表达式得到其结果来判断该表达式是否为要找的表达式。

1.3代码动态测试

此类主要对一些代码进行动态执行,通过输入用例来判断是否正确的形式来给分。它分为两个小类:表达式的动态测试和自定义函数的动态测试。

1.3.1表达式

通过判断取出表达式,给出测试用例,即给出几组变量和结果的值。对于得到的测试表达式进行测试,如果结果完全正确,则给出正确提示,并退出测试,否则继续找寻下一个。其流程图2所示。

图2表达式动态测试流程图图3函数的动态测试流程图

1.3.2自定义函数

通过模糊取函数名称,进行用例测试,来判断测试函数是否达到要求。它是通过两种判断来结合给分的,一是此函数是否存在,二是功能测试是否正确。其流程图3所示。

2方法的优势

本方法很好的结合了Visual Basic,通过程序运行结果比较、静态代码分析和动态代码测试的结合,对VB程序设计题进行了较全面的分析,即通过程序运行比较结果,来对代码进行功能测试。通过静态代码分析和动态代码测试,对代码进行详细的分析。这较为忠实地模拟了人工评阅程序设计题的过程,通过在代码中寻找考点来分析考生对知识点的掌握情况,以此来评分,这样可以具体了解学生的学习情况。

3结束语

目前通用的程序设计题的自动评分技术还难以实现,大多都是针对特定领域、特定需求而设计开发的。本文以Visual Basic程序设计题为突破点,提出以考点为评分标准对程序设计题进行逻辑结构分析、功能动态测试和特定语句模糊匹配的一种自动评价方法,但这种方法对出题者的要求比较高,要求其能准确描述试题的考点。这种自动评分的方法,还有待在实际中检验测试。

参考文献:

[1]高思丹,袁春风.主观试题的计算机自动批改技术研究[J].计算机应用研究,2004(2).

[2]徐全生,刘双.VB 程序主观题自动评阅系统的设计与实现[J].沈阳工业大学学报,2007(2).

[3]田绪安,郭华磊,刘瑞光,等.基于模糊匹配的主观题评分在线考试系统[J].软件技术,2007(10).

[4]孙卫.基于模糊理论的自动阅卷算法[J].福建电脑,2007(5).

(责任编辑:周晓辉)

推荐访问: 阅卷 考点 程序设计 方法 研究