44
软件开发与应用
Software Development And Application
电子技术与软件工程
Electronic Technology & Software Engineering
缘网关、网络的实际负载以及路由开销等因素。常用的路由算法包括:非自适应算法,如固定式路由选择和泛洪算法;主动路由自适应算法;按需路由自适应算法等。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.
McKeown,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-),男,河南省濮阳市人。硕士研究生学历,工程师。研究方向为计算机网络通信,传输监管。
1 引言
现在的期末考试中,很多大中专院校都使用了在线考试系统进行考试,该系统不仅可以提高学生实践操作能力,做到将理论与实践相结合;同时,通过该系统老师也可以更便捷、高效、快速地对学生的考试成绩进行汇总、整理及分析。但是大多数在线考试系统都只是基于选择题、判断题、填空题等客观题目,很少有主观题目。而《JA V A 程序设计》课程是高职院校计算机专业的必修基础课程,该课程主要培养学生动手编写程序的能力,因此,编程题在期末考试中占了很大的比例。但由于现阶段对主观编程题的技术还不成熟,所以该课程大部分采用的还是人工阅卷。因此,研究如何用计算机实现主观题自动评分具有较大的现实意义[1]。2 Java编程题自动评分技术研究2.1 主观编程题评分算法
基于Java 语言的主观编程题考试系统设计
娄自婷
(云南国土资源职业学院  云南省昆明市  652501)
早在1966年,就有外国学者Ellis Pagc 对文本相似度检测进行了研究,提出了让计算机同人工阅卷一样对主观题如作文进行评阅。在对自然语言的文本分析处理方法的研究同时,随着计算机教育的普及,程序代码的检测也在逐渐兴起。目前使用比较广泛的是Online Judge (OJ )在线判题系统,该系统通过对用户提交的代码进行编译和运行,对于能够运行的程序通过预先设定的测试集来检测代码运行的结果,以及运行时间是否在规定范围之内。该系统采用的是动态评分方式,返回结果有七种:答案不完全正确,运行超出时间限制,超出内存限制,输出超出限制,运行时出错,编译出错,程序通过,根据不同结果给予分值。
国内学者对主观编程题自动评分技术也做了大量的研究,并取得了很好的效果。2010年,娄不夜提出了一种基于反射机制、以class 文件为判断对象的java 编程题自动评分技术[1]。2013年,郑燕娥融合了程序查错及局部纠错技术、基于反射机制的黑盒测试
摘 要:本文以《Java 程序设计》课程为研究对象,在这门课程知识库的基础上对主观编程题自动评分技术进行研究,设计并实现一个完整的在线考试自动评分系统。其中,主观编程题自动评分使用静态分析与动态模拟执行代码相结合,首先将能通过编译运行的结果与参考答案匹配,如果匹配成功或部分数据正确,使用正则表达式对核心代码进行再次匹配,根据二次匹配的结果给出分值;若编译运
行的结果与参考答案不匹配或无法运行,将源代码中的类、主方法、核心代码进行正则匹配,根据二次匹配的结果给出分值。通过系统的实现,满足实用性、合理性、高效性原则。
关键词:自动评分;正则表达式;Java 反射机制;Java 编程题
45
软件开发与应用
Software Development And Application
电子技术与软件工程
Electronic Technology & Software Engineering
技术、知识要点的正则表达式匹配评分技术,实现了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 ”
表示数字字符,那么在Java 中“\\d ”就表示正则表达式中的“\d ”[2]jquery源码在线
。3 基于Java语言的主观编程题自动评分系统实现
为了验证自动评分技术的合理性和准确性,本人构建了一个原型系统。该系统开发使用了Eclipse 平台和MySQL 数据库。系统
前端采用jsp + JavaScript + css 的组合技术开发,使用了jQuery 和bootstrap 框架,后端采用SpringBoot 框架实现。3.1 总体设计思路
系统分为学生端与管理员端,学生端功能有:注册、登录、开始考试、查看成绩;管理员端有登录、
学生管理(新增、修改、删除、查询)、学生试卷管理(查询、阅卷)、学生成绩管理(查询、删除)。数据库包括管理员表admin
、学生成绩表performance
、学
●基金项目:云南国土资源职业学院校内科研课题(2020YJ07)资助。
表1:正则表达式常用的元字符
元字符描述元字符
描述
\d 数字字符[0-9][a-z]
字符a-z 之间的
任意字符\D 非数字字符[^0-9]
[^a-z]
字符a 到z 之外的
任意字符
\w 任意单词字符[a-zA-Z_a-9]
x|y x 或y \W 任意非单词字符
(X)捕获组\n 换行符*0或多次\r
回车符
+1或多次\s
空白字符(包括空格、制表符、换行符、回车、换页符)
?0或1次.任意非空白字符
{n}恰好n 次[xyz]包括x 、y 、z 的任意一个字符{n,}至少n 次[^xyz]
除x 、y 、z 之间的任意字符
{n,m}
至少n 次且不多
于m 次
图4:学生成绩管理界面
图1:学生考试管理界面
图2:试卷详情界面
图3:xx 学生编程题评分界面
软件开发与应用
Software Development And Application
电子技术与软件工程Electronic Technology & Software Engineering
生信息表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){
System.out.print(x+" ");
}
}
}
}
学生答案如下所示:
public class Test {
public static void main(String[] args) {
for (inti = 1; i<= 100; i++) {
if(i/2 = 0){
System.out.println(i);
}
}
}
}
该考生程序存在一个语法错误,输出语句、变量名称与参考答案有细微区别但无误,系统首先采用动态模拟执行代码,无法得到运行结果,因此进行静态分析,使用正则表达式进行二次匹配。该题满分为10分,知识要点分为5个得分点,for循环中三个表达式每个为2分,if语句为3分,输出语句为1分。用正则表达式对这5个得分点进行描述,具体如下:
第一个得分点:[\\s\\S]*int [a-zA-Z]+\\s*=\\s*1;[\\s\\S]*
第二个得分点:[\\s\\S]*[a-zA-Z]+\\s*<=\\s*100;[\\s\\S]*
第三个得分点:[\\s\\S]*[a-zA-Z]+\\s*\\+\\+[\\s\\S]*
第四个得分点:[\\s\\S]*if\\s*\\([a-zA-Z]+\\s*%\\s*2\\s*==\\ s*0\\)\\s*\\{[\\s\\S]*
第五个得分点:
[\\s\\S]*System\\.out\\.print(ln)?\\([a-zA-Z]+\\s*(\\+\\s*\\\"\\ W+\\\")?\\);[\\s\\S]*
根据学生结果,语法应扣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-),女,云南省昆明市人。硕士学位,讲师。研究方向为计算机应用。
表2:系统评分与人工评分结果及误差值
序号语法错误语句差异语句系统评分结果人工评阅结果与人工评阅的误差1int x=0System.out.println(x);880
2x<100System.out.print(x);891
3if(x/2=0){System.out.println(x);770
4if(x/2==0){System.out.print(x+”,”);781
5if(x%2=0){System.out.println(x);781
6if(x%2==0);System.out.print(x+”、”);990
7system.out.println(x);-9101
8System.out.printIn(x);-990
9-无if语句770
10public static void main(string[] args)无1091
11class Test{无1091
46

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。