admin 管理员组

文章数量: 1184232


2024年4月17日发(作者:数据库课程设计总结心得)

软件开发与应用

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.

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-),男,河南省濮阳市人。硕士研究生学历,工程师。

研究方向为计算机网络通信,传输监管。

44

电子技术与软件工程

Electronic Technology & Software Engineering

软件开发与应用

Software Development And Application

表1:正则表达式常用的元字符

元字符

d

D

w

W

n

r

描述

数字字符[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:系统评分与人工评分结果及误差值

序号

1

2

3

4

5

6

7

8

9

10

11

语法错误语句

int x=0

x<100

if(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语句

系统评分结果

8

8

7

7

7

9

9

9

7

10

10

人工评阅结果

8

9

7

8

8

9

10

9

7

9

9

与人工评阅的误差

0

1

0

1

1

0

1

0

0

1

1

生信息表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


本文标签: 评分 系统 结果 自动