WEB基础上的程序设计语言实验考试自动评分系统

摘 要自动评分是大规模计算机考试的必然选择.本文以自主实现的一个计算机高级语言实验考试自动评分系统为例,详细说明及分析自动评分的策略.

关 键 词多线程考试系统评分策略

中图分类号:TP399文献标识码:A

1系统构成与自动评分整体思路

1.1系统构成

系统从模块上划分,本系统可以分为几个模块:题库管理模块、试卷管理模块、用户管理模块、系统基础数据管理模块、自动评分模块.系统角色可以分为三类,分别为:管理员、教师、学生.

1.2自动评分整体思路

系统实现的整体思路为当学生进行作答时,首先,进行存盘操作,具体包括向数据库写入数据与向本地硬盘创建高级程序设计语言源代码文件.接着,采用多线程技术、IDE输入/输出模拟器与I/O流技术编译源程序,这里我们记为编译阶段;再次,调出测试用例进行测试,这里我们记为测试阶段.最后,进入评分阶段.


2自动评分的策略

2.1系统总体判题/评分思想

2.1.1实时评分

当学生提交一道题的代码时,服务器马上创建一个线程单独进行判分处理,整个判分处理时间与试题要求中最长运行时间相关.

2.1.2依据5种方式进行评分

(1)按编译是否成功:如果编译成功则可以得到总成绩的20%的成绩,如果编译失败则只能得0分.(2)按测试结果进行评分:在编译通过的情况下,评分线程将进行实时评分,评分后会产生一个临时输出结束,按测试结果评分即测试结果与临时输出结果进行比较,如果相等则说明测试通过,得100分,否则以编译成功计成绩.(3)为按关键字进行评分:首先,提取出源代码及判题关键字,然后,以关键字进行统计,判断源代码中,关键字的出现频率,最后以关键字出现的频率进行评分.(4)按占用内存的多少进行判分:首先,记录下程序运行时大概占用多少内存,接下来再取出对应试题要求程序占用内存大小值,接着,通过比较之间的差值来计算成绩,如果小于试题要求程序占用内存大小值,那么不扣分,否则扣试题总分的2%.(5)按运行时间的长短进行判分:首先,在进行用用例对程序进行测试时,记录下测试的开始时间T1(单位为ms),然后,运行测试程序并进行测试,然后,在测试程序运行结束后,再记录下运行的结束时间T2(单位为ms),最后将运行的结束时间T2减去运行的开始时间T1就得出程序运行的总时间△T.在得到程序运行的总时间后,我们从数据库取出该题最大运行时间Tmax,接着比较△T与Tmax,如果前者大于后者,那么我们以通过编译进行评分同时再进行一次关键字进行评分,最后得分为编译通过得分及关键字评分得分的总和.

2.2判题/评分采用的技术

2.2.1常见评分方式

常用评分方式的过程为,从一个输入文件(input.dat)读入测试数据,然后,将输出结果写入到输出(output.dat)文件.然后,再通过比较预期输入结果与结果输出output.dat文件中的内容来测试是否可以得分或者可以得多少分.

2.2.2潜在的问题

当了解常见评分方式的过程后,我们可以很快找到它的评分漏洞.漏洞在哪里呢?就在比较结果和从输入文件(input.dat)读入测试数据这两个操作中.这是因为输入文件(input.dat)和输出文件(output.dat)可以人为更改.

IDE编译环境想必大家一定都很熟悉,IDE运行环境可以捕获输入、输出、错误流,以达到与用户进行交互及反馈.但它们是怎样实现的呢,我们有没有更快的实现方法呢?很高兴的是Ja已经给我们提供了一个Process类.Process类提供了执行应用程序的方法及重定向输入输出错误流的方法,我们利用它可以很方便地实现对IDE输入输出的模拟.通过对输入输出流的重定向我们可以不使用输出文件及输入文件,全部采用输入输出流实现,进而避免了上述潜在问题.

2.3判题/评分算法

首先,调用编译器对源代码进行编译.当然,对于不同的源文件调用不同的编译器,如Ja的默认编译器为jac,C/C++的编译器有VisualStudioC++6.0的cl.exe命令行编译器、TurborC3.0编译器.本系统采用的是VisualStudioC++6.0的cl.exe编译器.在编译的过程中,我们可以通过重定向后的输出流及错误输出流捕获错误信息.其次,判断编译是否通过.当发生编译错误时,将编译状态变量设置为False,否则设置为True,并进入评分阶段.接着,判断是否为编译型语言.如果为编译型语言再进行连接操作,否则进入测试阶段.然后,判断连接是否通过.如果连接通过则进入测试阶段,否则进入评分阶段.再次,进入了测试阶段.进入测试阶段前,还需要准备测试数据,准备好测试数据后,利用IDE模拟器向重定向的输入流注入数据.向重定向的输入流注入数据后,调用生成的目标程序,进行测试,在测试的过程中要监视测试程序的运行时间及所占用内存的大小,如果耗用时间过长或者占用内存过多都计为未通过测试处理.完成测试后,进入评分阶段.然后,进入评分阶段.具体的评分细节在3.1.1节中已经描述,这里不赘述.最后,返回得分.

类似论文

计算机基础考试自动评分系统

【摘 要】随着科技的不断发展,计算机应用到社会的各个领域当中,传统的试卷收发已经不能够适应当今社会。
更新日期:2024-8-12 浏览量:105895 点赞量:23188

《C语言程序设计》实验教学探究

摘 要:针对《C语言程序设计》课程实验教学存在的若干问题,结合教学实践,提出了提高实验教学效果。
更新日期:2024-5-21 浏览量:70652 点赞量:16187

非计算机专业程序设计语言教学方法

摘 要:在《高级语言程序设计》教学过程中,如何使学生不再感到枯燥、难懂,找到一条新颖有趣的教学方。
更新日期:2024-11-25 浏览量:145574 点赞量:31602

《程序设计语言》性教学改革与实践

摘 要:为让学生更好掌握程序设计的基本方法和培养他们利用计算机分析问题、解决问题的能力,论文在分析程序设计语言课。
更新日期:2024-6-8 浏览量:15494 点赞量:5144

C程序设计语言教学方法的

【摘 要】目的:探索提高C程序设计语言课程教学质量、增强教学效果的方法 方法:在教学实践过程中尝试多种教学方。
更新日期:2024-9-27 浏览量:119364 点赞量:25726

JA程序设计语言在高校教学中的探究

摘 要:随着科学技术的不断发展,计算机技术越来越受到人们的重视,在我国,很多高校都陆续在计算机相关专业开设了《。
更新日期:2024-6-25 浏览量:83902 点赞量:19017