基于Java语言的主观编程题考试系统设计

基于Java语言的主观编程题考试系统设计


2024年1月21日发(作者:)

软件开发与应用Software Development And Application电子技术与软件工程Electronic Technology & Software Engineering基于Java语言的主观编程题考试系统设计娄自婷(云南国土资源职业学院 云南省昆明市 652501)摘 要:本文以《Java程序设计》课程为研究对象,在这门课程知识库的基础上对主观编程题自动评分技术进行研究,设计并实现一个完整的在线考试自动评分系统。其中,主观编程题自动评分使用静态分析与动态模拟执行代码相结合,首先将能通过编译运行的结果与参考答案匹配,如果匹配成功或部分数据正确,使用正则表达式对核心代码进行再次匹配,根据二次匹配的结果给出分值;若编译运行的结果与参考答案不匹配或无法运行,将源代码中的类、主方法、核心代码进行正则匹配,根据二次匹配的结果给出分值。通过系统的实现,满足实用性、合理性、高效性原则。关键词:自动评分;正则表达式;Java反射机制;Java编程题1 引言现在的期末考试中,很多大中专院校都使用了在线考试系统进行考试,该系统不仅可以提高学生实践操作能力,做到将理论与实践相结合;同时,通过该系统老师也可以更便捷、高效、快速地对学生的考试成绩进行汇总、整理及分析。但是大多数在线考试系统都只是基于选择题、判断题、填空题等客观题目,很少有主观题目。而《JAVA程序设计》课程是高职院校计算机专业的必修基础课程,该课程主要培养学生动手编写程序的能力,因此,编程题在期末考试中占了很大的比例。但由于现阶段对主观编程题的技术还不成熟,所以该课程大部分采用的还是人工阅卷。因此,研究如何用计算机实现主观题自动评分具有较大的现实意义[1]。2 Java编程题自动评分技术研究2.1 主观编程题评分算法早在1966年,就有外国学者Ellis Pagc对文本相似度检测进行了研究,提出了让计算机同人工阅卷一样对主观题如作文进行评阅。在对自然语言的文本分析处理方法的研究同时,随着计算机教育的普及,程序代码的检测也在逐渐兴起。目前使用比较广泛的是Online Judge(OJ)在线判题系统,该系统通过对用户提交的代码进行编译和运行,对于能够运行的程序通过预先设定的测试集来检测代码运行的结果,以及运行时间是否在规定范围之内。该系统采用的是动态评分方式,返回结果有七种:答案不完全正确,运行超出时间限制,超出内存限制,输出超出限制,运行时出错,编译出错,程序通过,根据不同结果给予分值。国内学者对主观编程题自动评分技术也做了大量的研究,并取得了很好的效果。2010年,娄不夜提出了一种基于反射机制、以class文件为判断对象的java编程题自动评分技术[1]。2013年,郑燕娥融合了程序查错及局部纠错技术、基于反射机制的黑盒测试缘网关、网络的实际负载以及路由开销等因素。常用的路由算法包括:非自适应算法,如固定式路由选择和泛洪算法;主动路由自适应算法;按需路由自适应算法等。3.2.3 逐跳路由传输策略我们提出的基于逐跳路由的传输协议用于解决跨网络环境下的端对端业务、末端用户对云端数据的需求,以及多个边缘节点间进行跨网信息共享的数据传输。不同的上层应用业务类型对逐跳路由的需求也不尽相同,这就需要逐跳协议需要具有以下传输特征。(1)“按需路由”与“主动路由”结合。对于端对端业务,其数据流量小且移动性高,按需路由协议开销较小;对于末端用户对云端数据的需求,数据流量较大且节点的移动性较小,此时使用主动路由协议开销较小。通过结合“按需路由”和“主动路由”的结合使用,达到充分利用跨网环境下的网络资源,同时将两种逐跳协议策略的总开销降到最低。(2)混合路由。对于云端向边缘节点进行数据发送的情况,采用混合路由策略建立逐跳网络。云端在开始发送数据时,先通过传输协议获取到达目的地址的部分网络拓扑及有效路由路径。如果有可达的路径且不需要进行协议转换,则直接发送,否则发起逐跳路由请求,同时通过主动路由算法建立逐跳网络。当逐跳路由请求得到响应后,比较两者的开销,选择开销较小的逐跳路径传输数据。4 总结

本文通过对ICN络的架构、关键技术进行分析,提出了基于ICN网内缓存的传输策略优化机制,通过结合ICN和传统IP网络,实现基于TCP/IP网络和ICN的网内缓存机制,并实现了数据平面与控制平面的分离以适应SDN网络的部署。通过网内缓存机制,降低了内容请求的平均跳数,提升了整个网络的内容分发效率。针对信息网络在使用中会发生网络抖动、网络中断以及链路变化的情况,本文提出了基于消息路由的逐跳路由传输优化策略,对上层应用屏蔽了网络抖动、网络中断,以及通信链路多样化和性能差异带来的影响,从而提升了网络传输的可靠性。参考文献[1]王琛.信息中心网络的研究现状和发展趋势[J].网络安全技术与应用,2015.[2]李军,陈震,石希.ICN体系结构与技术研究[J].信息网络安全,2012年.[3]“Named data networking”,L. Zhang, A. Afanasyev, et.

al.,ACM Sigcomm Computer Communication Review (CCR),

Jul. 2014.[4]“Openflow:enabling innovation in campus networks”,n,T. Anderson, et. al., Computer communication

review, 2008.[5]“In-network cache management and resource allocation

for information-centric networks”, I. Psaras, W. K.

Chai, IEEE Transactions on parallel and distributed

systems, Oct. 2014.作者简介栾凯(1980-),男,山东省青岛市人。大学本科学历,高级工程师。研究方向为大型信息化系统的研发和设计、网络通信。左会军(1972-),男,河北省定州市人。硕士研究生学历,副研究员。研究方向为信息系统与信息服务体系设计。曹孝元(1986-),男,江西省南昌市人。博士,高级工程师。研究方向为网络信息传输,大数据分析。苗信凯(1989-),男,河南省濮阳市人。硕士研究生学历,工程师。研究方向为计算机网络通信,传输监管。44

电子技术与软件工程Electronic Technology & Software Engineering软件开发与应用Software Development And Application表1:正则表达式常用的元字符元字符dDwWnr描述数字字符[0-9]非数字字符[^0-9]元字符描述字符a-z之间的[a-z]任意字符字符a到z之外的[^a-z]任意字符x|yx或y(X)捕获组*0或多次+1或多次?{n}{n,}{n,m}0或1次恰好n次至少n次至少n次且不多于m次任意单词字符[a-zA-Z_a-9]任意非单词字符换行符回车符空白字符(包括空格、制表符、s换行符、回车、换页符).任意非空白字符[xyz]包括x、y、z的任意一个字符[^xyz]除x、y、z之间的任意字符图1:学生考试管理界面技术、知识要点的正则表达式匹配评分技术,实现了Java编程题自动评分[2]。2016年,曹亚妮针对C语言设计了动态测试方法和静态分析方法相结合的编程题自动评分模型,其中动态测试方法采用黑盒测试对程序运行结果进行检查,并对程序结构的可信度进行判定,静态分析在代码规范化及代码预处理的基础上使用基于字符串相似度算法进行自动评分[3][4]。2018年,蒋慧勇提出了一种基于Java反射机制的自动评分模型,该技术首先读取考试题中考生写的程序源代码,然后调用Java反射机制对程序进行编译执行,并将执行结果读取放入内存,参考答案保存在XML文档中,不同答案的组合分数不同,实现需要确定组合类型和对应分数,然后将规则写成正则表达式[5]。2019年,李震等人提出了通过比较运行结果、Findbugs分析、文本相似度分析、关键词分析四个评分模块对代码进行评价。同样分为动态测试与静态分析,首先通过编译运行代码,将结果与参考答案进行比较,然后采用Findbugs对代码进行静态分析,找出其中的潜在错误和不规范的编程习惯引起的警告,根据问题个数和错误等级给出分值。同时配合文本相似度分析,关键词分析得出一个综合评分。静态分析工具Findbugs的引入对发现潜在问题,减少人工预置答案的局限性,提高了系统可用性[6]。基于上述研究,本文提出一种使用静态分析与动态模拟执行代码相结合,适用于简单的主观编程题的自动评分技术,并就此设计并实现了完整的自动评分考试系统,为高职院校其他语言的编程题考试系统设计也提供了参考与借鉴。2.2 正则表达式在程序设计语言考试中,对于编程题而言,要实现某个功能方法可能存在很多种,因为很难用一个简单的 文本作为标准答案给分。如果指定特定的解题方法,则会存在局限性,限制考生思维,自动评分与人工评阅的误差也会增大。而是用正则表达式可以描述多种解题方法,既简单有方便,且正则表达式在文本匹配方面的功能强大、灵活而且高效[2]。正则表达式是对某种字符串模式规则的描述,是由普通字符(英文字母及数字等)以及元字符组成的文字模式。它是一种可以用于字符串模式匹配和替换的强有力的工具[2]。在Java中,正则表达式的字符串匹配需要通过包中的Pattern和Matcher两个类来实现,其中Pattern类是编译一个正则表达式的模式对象,Matcher类是搜索是否匹配的匹配器对象[5]。元字符在正则表达式中的作用非常重要,其构造的准确性主要取决于元字符的应用是否合理。Java正则表达式常用的元字符如表1所示。在Java程序中,“”表示转义字符,“”意味着正在插入一个正则表达式斜杠,那么随后的字符具有特殊意义。比如,“d”[2]表示数字字符,那么在Java中“d”就表示正则表达式中的“d”。3 基于Java语言的主观编程题自动评分系统实现为了验证自动评分技术的合理性和准确性,本人构建了一个原型系统。该系统开发使用了Eclipse平台和MySQL数据库。系统图2:试卷详情界面图3:xx学生编程题评分界面图4:学生成绩管理界面前端采用jsp + JavaScript + css的组合技术开发,使用了jQuery和bootstrap框架,后端采用SpringBoot框架实现。3.1 总体设计思路系统分为学生端与管理员端,学生端功能有:注册、登录、开始考试、查看成绩;管理员端有登录、学生管理(新增、修改、删除、查询)、学生试卷管理(查询、阅卷)、学生成绩管理(查询、删除)。数据库包括管理员表admin、学生成绩表performance、学●基金项目:云南国土资源职业学院校内科研课题(2020YJ07)资助。45

软件开发与应用Software Development And Application电子技术与软件工程Electronic Technology & Software Engineering表2:系统评分与人工评分结果及误差值序号11语法错误语句int x=0x<100if(x/2=0){if(x/2==0){if(x%2=0){if(x%2==0);n(x);n(x);-public static void main(string[] args)class Test{差异语句n(x);(x);n(x);(x+”,”);n(x);(x+”、”);--无if语句无无系统评分结果8877799971010人工评阅结果897889109799与人工评阅的误差生信息表student、学生试卷回答表student_answer。学生考卷包括单选题、判断题、填空题和编程题四个部分。系统核心功能是使用静态分析与动态模拟执行代码相结合,完成编程题自动评分。其主要思想是:首先采用动态模拟执行代码,将考生答案转换为java文件进行编译,能通过编译运行的结果与参考答案匹配,如果匹配成功或部分数据正确,使用正则表达式对核心代码进行再次匹配,根据二次匹配的结果给出分值;若编译运行的结果与参考答案不匹配,将源代码中的类、主方法、核心代码进行正则匹配,根据二次匹配的结果给出分值。3.2 运行界面学生提交试卷后,管理员在“学生考试管理”界面可查看到所有提交试卷学生名单,如图1所示。点击操作下“详情”按钮,可进入该生试卷详情界面,如图2所示。考试详情界面由试题、每道试题自动评分结果、参考答案和学生答案,各模块总分及总得分、提交按钮组成。该系统保留了修改分数的功能。下面以一个for循环输出1~100之间的所有偶数程序为例。参考答案如下所示:public class TestDemo { public static void main(String[] args) { for (int x = 1; x <= 100; x++) { if(x%2 == 0){ (x+" "); } } }}学生答案如下所示:public class Test { public static void main(String[] args) { for (inti = 1; i<= 100; i++) {

if(i/2 = 0){

n(i);

} } }}

该考生程序存在一个语法错误,输出语句、变量名称与参考答案有细微区别但无误,系统首先采用动态模拟执行代码,无法得到运行结果,因此进行静态分析,使用正则表达式进行二次匹配。该题满分为10分,知识要点分为5个得分点,for循环中三个表达式每个为2分,if语句为3分,输出语句为1分。用正则表达式对这5个得分点进行描述,具体如下:第一个得分点:[sS]*int [a-zA-Z]+s*=s*1;[sS]*第二个得分点:[sS]*[a-zA-Z]+s*<=s*100;[sS]*第三个得分点:[sS]*[a-zA-Z]+s*++[sS]*第四个得分点:[sS]*ifs*([a-zA-Z]+s*%s*2s*==s*0)s*{[sS]*第五个得分点:[sS]*(ln)?([a-zA-Z]+s*(+s*"W+")?);[sS]*根据学生结果,语法应扣3分。经过自动评分,得到学生评分结果为7分,符合人工评阅结果。系统评分界面如图3所示。试题详情界面可以针对自动评分结果进行二次人工阅卷,也可直接点击提交。提交之后管理员可进入“学生成绩管理”中查看总分数及各模块得分,如图4所示。此时学生也可再次进入考生系统查看考试分数。3.3 系统测试及结果分析考虑到学生答案存在多样性和差异性,本文针对以上编程题抽取了一个班级共50份考卷,除正确答案外,有11个存在明显语法错误和差异语句的考生答案。现对这11个考生答案进行系统评分与人工评分比较,结果见表2,其中与人工评阅的误差指的是系统评分结果与人工评阅结果的差值。通过上述实验结果可以看出,系统评分结果与人工评阅结果存在一定的误差值,但是误差都在1分以内,误差均值控制在0.545,符合自动评分标准。其余编程题通过系统的实现,也满足实用性、合理性、高效性原则。该系统不仅能减轻教师负担,还使系统计算的学生答案得分更具公平性和合理性,也为学生及时得到反馈结果提供可能。4 结论本文提出了一种基于Java语言的主观编程题自动评分技术,采用动态模拟与静态分析相结合的方法,首先将考生答案保存为可编译的java文件,判断程序是否可以编译运行,如果运行成功则返回运行结果,并与参考答案匹配,如果匹配成功或部分数据正确,使用正则表达式对核心代码进行再次匹配,根据二次匹配的结果给出分值,二次匹配的目的是检查考生的功能语句是否符合题目要求;若编译运行的结果与参考答案不匹配或无法运行,将源代码中的类、主方法、核心代码进行正则匹配,根据二次匹配的结果给出分值,这样做可以减少系统自动评分与人工评分的误差值,但也增加了正则表达式的设计难度。实验表明,该考试系统运行良好,自动评分结果与人工评阅结果误差较小,具有较高的准确率。且该系统保留了人工修改分数的功能,对实现上机考试具有一定的参考价值。参考文献[1]娄不夜.Java编程题自动判分软件框架的设计[J].计算机工程与设计,2010,31(24):74-76.[2]郑燕娥.Java编程题自动评分技术的研究与实现[D].华侨大学,2013.[3]胡霖,李溍溍,王庆,韩晓君,马远,郭晓龙.C语言编程题自动评分系统的设计与实现[J].科技与企业,2016(07):105-106.[4]曹亚妮.C语言在线考试系统开发及关键技术的研究[D].西安理工大学,2016.[5]蒋慧勇.基于Java的主观编程题自动评分技术研究[J].电脑编程技巧与维护,2018(11):59-60+108.[6]李震,张博渊,付春龙.Java语言考试编程题综合评分系统的研究[J].数字化用户,2019,025(032):95-96.作者简介娄自婷(1990-),女,云南省昆明市人。硕士学位,讲师。研究方向为计算机应用。46


发布者:admin,转转请注明出处:http://www.yc00.com/web/1705841704a1425262.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信