周奇 张凯亮 刘昊
摘要 对高校培养人才而言,不仅要培养学生掌握基础的理论知识,而且需要培养学生自身编程的动手实践能力,关于培养学生的自身编程能力方面,可以通过搭建一个在线判题平台来满足学生的需求。本课题在通过详细的需求分析之后,以JAVA技术为核心,使用SpringBoot框架搭建一个Online Judge平台。本平台实现了平台用户添加登陆、权限管理模块、题库管理模块、作业模块、公开题库模块和竞赛模块,为在校师生提供一个高效、快捷的在线判题平台。由于其能够在线自动评判提交的代码是否正确的功能,因此能够减轻老师验收代码的教学任务,极大地提高了效率,并且能够使学生得到及时的反馈,对于培养学生自身编程的实践能力方面具有非常大的提升。本说明书主要从系统分析分析、系统实现和系统测试三个方面对平台设计与实现过程进行详细的描述与说明,说明书共由六部分组成。
关键词 在线判题;Spring Boot;MySQL;VUE
1 研究背景及意义
随着计算机技术的更新与迭代,高校此方面的教学内容与方式也应该随之进步。关于教学内容方面,在注重理论教学的同时也应该更加注重对学生实践能力的培养;关于教学方式方面,传统的编程作业的收发需要教师亲自进行批改,对于学生而言,无法得到实施的反馈,对于教师而言,在日常繁杂的教学任务下,亲自批改也可能会造成很大的工作压力。综上所述,一个能够自动判断提交代码是否正确的在线判题平台,能够大大缓解教师的教学压力,以及能够使学生快速的得到反馈,使得教学质量大大提升。
如今可供学生参加的程序设计类算法竞赛也越来越多,像比较出名的ACM/ICPC、蓝桥杯以及各个地方举办的区域级和国家级比赛。学生参与这些比赛并且能够拿到奖项,在某种意义上便是是对学校教学水平的肯定。因此各个高校对于程序设计类算法竞赛越来越重视,纷纷搭建起各自的OnlineJudge(在线判题,之后简称为OJ)平台。
目前比较出名的杭电OJ、青岛大学的QingDaoUOJ、开源的hustOJ来供学校学生进行算法题目的练习与竞赛。这些OJ在搭建的同时都考虑到了自己学校自身的情况,可能在别的学校根据这些源码进行搭建的时候会出现与学校自身状况不相符的情况。一个良好的OJ不仅能体现出学校对于学生编程实践能力的重视情况,也为学生提供了一个更加便捷与高效的平台。
搭建起本在线判题平台后,教师或者竞赛组织者对题库进行维护然后布置作业或发布比赛供学生参加。对于教师而言能减轻批改学生提交上来的代码的压力,然后能拿出更多的精力放在教学内容的优化与提高方面,有利于相关专业的长远的发展。对于学生来说,能够得到及时的反馈,提高学到新知识之后的巩固的速度,并且为有志于参加算法竞赛的同学提供一个良好的平台支撑,提高其参与感与算法水平。
2 系统分析
2.1 系统需求分析
本在线判题平台主要目标是为了在减轻教师的批改作业的压力的前提下,同时使学生能够在线提交编程作业以及能够进行编程题目练习,达到双赢的效果。本平台共分为五种角色类型,后期可以为各个账户动态分配权限,其中包含除供用户操作的前端页面和给其提供数据的后端服务器之外,还有判题服务器用于启动代码评测机对用户提交的代码进行判题。
教师:主要负责发布作业,可以选择自己所管理的班级进行发布作业的操作,发布作业后可以从总题库中选择题目加入作业列表,并且在此之后可以查看学生的提交情况。若管理员分配了总题库管理的权限,可以对总题库的题目进行编辑。若管理员分配了公开题库的管理权限,可以对公开题库进行管理。
竞赛组织者:主要负责发布竞赛,设置参赛码后便可发布竞赛,同时还可以添加临时参赛者账户供校外学生来参加竞赛。若管理员分配了总题库管理的权限,可以对总题库的题目进行编辑。若管理员分配了公开题库的管理权限,可以对公开题库进行管理。
学生:可以通过公开题库模块进行日常的算法练习,通过作业模块来完成该学生所在的班级的教师布置的算法编程题目,以及通过竞赛模块输入竞赛组织者提供的参赛码来进行算法竞赛。
临时参赛者:临时参赛者只拥有访问竞赛模块的权限,账号由竞赛组织者提供,输入竞赛组织者提供的参赛码后选择相应竞赛便可参加比赛。
超级管理员:负责账号的添加与维护,对于已存在的账号进行进一步的动态权限分配,以及班级的创建和班级成员的维护。
2.2 功能模块分析
功能模块分析是一个项目开发过程中必不可少的一个步骤。在项目进行具体实现前通过功能模块分析,可以大致确定项目的主要模块与功能。如果项目开发的过程中缺少这一步骤,对于后续的项目設计会带来主要功能界限模糊的困扰。本项目用户交互端和评测段在一起共分为六个模块,下面将对本项目进行完整地功能分析:
(1)用户管理模块:只有超级管理员才能进入此模块,该模块分为三个子模块,分别为账号管理、班级管理和权限管理。通过账号管理模块来进行用户的添加与修改以及分配已经创建好的权限类型;通过班级管理模块来管理班级,并且还可以通过该模块对班级的具体成员进行管理。
(2)公开题库模块:该模块可以由普通权限用户进入来进行日常算法题目的练习,拥有增删权限的用户可以新建公开题库或编辑现在已有的题库。除此之外,还可以对具体的某一个公开题库进行权限设置,设置为只有特定用户才能进入该题库进行题目练习。
(3)作业模块:账号类型为学生的用户可以进入此模块完成所在班级的教师布置的算法编程作业。账号类型为教师的用户则可以向自己所管理的班级进行发布作业的操作。作业发布完成之后还可以查看学生的提交情况。
(4)竞赛模块:比赛组织者可以通过该模块进行比赛的创建并设置参赛码,还可以创建临时账号来邀请外校用户来参加比赛。拥有权限的普通用户可以通过该模块进行算法竞赛,并且查看比赛
(5)总题库模块:本系统的所有题目均由本模块管理,编辑权限只对由超级管理权分配增删权限的用户开放,而拥有公开题库、竞赛、作业模块的增删权限的用户,可以进入此模块向公开题库、作业或者竞赛中添加题目。
(6)评测模块:评测模块负责对用户提交上来的代码进行评测。当拥有参赛者权限、刷题权限和作业学生权限的用户进行竞赛、刷题和提交作业操作后,接收用户提交的代码然后进行编译和评测,并将评测结果提交到数据库中。
2.3 用例分析
2.3.1系统业务用例图
图2-1 业务用例模型图
3 系统总体设计
为了方便平台用户使用,本平台总的共分为用户管理模块、公开题库模块、总题库模块、竞赛模块、作业模块和评测模块共六个模块。通过这六个模块,将整个平台的业务囊括其中,为用户提供一个高效、便捷的在线判题平台。如图3-1所示。
图3-1在线判题平台系统功能结构图
拥有总题库权限的用户登陆后,进入总题库管理页面,可以对题库列表进行模糊查询,也可以在此界面新增题库,总题库的实体类图如图3-2所示;选择题库进入之后,可以查看该题库的题目列表(获取题目列表的顺序图如图3-3所示),也可以再此界面模糊查询题目、修改此题库信息和对该题库的题目进行管理。
拥有竞赛、公开题库和作业权限的用户,可以进入到具体题库选择题目添加到竞赛、公开题库和作业的一个题库之中。获取到题库中的题目列表后可以查看题目详情并提交代码。
图3-2总题库实体类图
图3-3获取题目列表顺序图
平台总体E-R图。如图3-4所示
图3-4平台总体E-R图
临时账户和拥有竞赛权限的学生可以进入竞赛页面查看所有的竞赛列表,然后选择要参加的竞赛后输入邀请码,进入相应的竞赛页面。进入竞赛获取题目列表后可以点击题目查看题目详情并提交代码。
比赛组织者账户进入竞赛页面后可以发布竞赛,发布竞赛时要输入竞赛名、简介、开始时间、结束时间以及邀请码;在竞赛页面还可以通过模糊查询获得竞赛列表。进入相应的竞赛页面之后,可以对该竞赛的信息进行编译,以及移除该竞赛中的题目。竞赛模块的实体类图如图3-5所示。
图3-5竞赛模块的实体类图
4 系统测试结果
系统测试主要是在系统上线运行前,验证平台是否按照功能需求保质保量完成项目,同时检测所完成功能是否有Bug。系统测试是项目结束的最重要过程,避免项目在上线使用时出现问题,影响用户体验,严重可能导致用户信息或者资金受到损失。
本平台测试主要采用黑盒测试和白盒测试,黑盒测试主要通过平台功能的正常使用流程检测是否能够正常运行;白盒测试主要体现在项目编写过程中,我针对所编写的接口编写测试单例进行功能测试。
通过对本平台进行白盒测试,发现平台设计时有些复杂逻辑问题存在一定缺陷,后期通过测试结果进行了相应改正,最后测试问题已经解决。总体来说,最终的系统测试结果与前期项目功能设计相符合。通过用户角色去体验本平台,界面设计简洁美观,操作不复杂,用户使用体验感良好。
参考文献
[1]曹郁.基于Docker容器的微服务研究与实现[J].科学技术创新,2019(28):97-98.
[2]黄俊勇.基于Spring框架的研究与设计[J].电脑知识与技术,2018,14(03):116-117.
[3]范开勇,陈宇收.MySQL数据库性能优化研究[J].中国新通信,2019,21(01):57.
[4]李杉,贾彦平,达虎.Mybatis逆向工程在JavaEE中的应用[J].通讯世界,2017(24):342.
[5]吕宇琛.SpringBoot框架在web应用开发中的探讨[J].科技创新导报,2018,15(08):168+173.
[6]高昂,魏惠茹,李晓东,李博.MVC设计模式研究[J].电脑知识与技术,2016,12(01):88-89.
[7]杨家炜.基于Spring Boot的web设计与实现[J].轻工科技,2016,32(07):86-89.
[8]卢云宏,侯文涵,赵前,张丽颖,周世平.基于Linux的OnlineJudge在线提交环境的搭建[J].电子技术与软件工程,2017(12):50-51.
[9]李广宏. vue.js前端应用技术分析[J].中国新通信, 2019, 21(20): 115.
[10]王志任. 基于Vue.js的开发平台的设计与实现[D].广东工业大学,2018.
[11]王宁,李润东.OnlineJudge中反抄袭机制的研究和实现[J].湖南工程学院学报(自然科学版),2016,26(01):45-48.
[12]乔平安,颜景善,周敏.基于Linux系统的构建高性能服务器的研究[J].计算机与数字工程,2016,44(04):653-657.
[13]郭嘉凯.RocketMQ:从阿里巴巴走向世界[J].软件和集成电路,2018(11):56-60.
[14]张文杰. 基于RocketMQ的消息服务系统设计与实现[D].华中科技大学,2016.
[15]张尧. 基于Nginx高并发Web服务器的改进与实现[D].吉林大学,2016.
[16]Fabian Trautsch,Steffen Herbold,Jens Grabowski. Are unit and integration test definitions still valid for modern Java projects? An empirical study on open-source projects[J]. The Journal of Systems & Software,2020,159.
[17]Arief Ginanjar,Mokhamad Hendayun. Spring Framework Reliability Investigation Against Database Bridging Layer Using Java Platform[J]. Procedia Computer Science,2019,161.
[18]Paolo Guagliardo,Leonid Libkin. On the Codd semantics of SQL nulls[J]. Information Systems,2019,86.
[19]Serdar Yegulalp,Serdar Yegulalp. MySQL 8.0: More Unicode, less hassle[J]. InfoWorld.com,2016.
[20]Gregory Barber. JavaScript[J]. Wired,2019,27(6).
2020徐州工程學院大学生创新创业训练计划项目(xcx2020016)