编译程序在线评测辅助教学系统的设计与实现毕业论文
2020-02-19 18:15:18
摘 要
本文通过借助Springboot框架,以Idea为开发平台,Tomcat作为服务器,Mysql作为数据库,实现了一个B/S模式的基于功能测试的编译程序在线评测辅助教学系统,系统清晰地组织了各大功能模块,提高了应用程序的灵活性和可配置性。
论文主要详细讲述了本系统的整个体系结构,概述了系统的主要功能,分析了每个功能模块的主要任务。然后介绍从相关技术介绍,需求分析,系统设计到具体实现的过程。文章着重介绍了在线评测模块的原理设计,内核评测原理设计,黑盒和白盒测试用例设计,ActiveMQ生产者消费者模型的设计以及对6种评判结果的设计。在此基础上,系统还对传统扩充了的传统的OJ系统的代码处理形式,支持文本框代码提交编译和工程文件代码打包压缩提交编译。系统提供了代码文件丰富的编译环境,同时支持Java,C ,C等大学课程中最常用的高级程序设计语言。系统还对结果不唯一的算法提出了一种划分子模块合并编译[1]的处理方法,并结合编译原理课程对此方法进行了应用,更加高效地,准确地考察了学生对整个编译原理过程的理解和学习。此外,针对系统的容错处理进行了设计,设置一个监听器TimerTask去监听一个程序的运行时间,防止系统被恶意代码,例如while(1)等死循环代码所攻击。
校内学生和喜欢编程的用户都可以通过本系统才进行题目训练,系统为用户提供了丰富的题库分类,分为基础算法题目集和编译原理子模块的合并题目集。同时,被授权的学生用户还可以参加平台所发布的比赛,也可用于学校对特长编程学生的选拔。老师端可用系统平台进行发布实验作业和教学视频,方便与学生的交流互动。管理员端可以进行创建比赛、题库管理和系统升级,为用户提交良好的系统体验。
关键词:在线评测;消息队列;合并编译;用例测试
Abstract
This article uses the Springboot framework, Idea as the development platform, Tomcat as the server, Mysql as the database, realizes a B/S mode based on the functional test compiler online evaluation auxiliary teaching system, the system clearly organizes the major functional modules. Increased application flexibility and configurability.
The paper mainly describes the whole architecture of the system in detail, summarizes the main functions of the system, and analyzes the main tasks of each functional module. Then introduce the process from related technology introduction, requirements analysis, system design to concrete implementation. The article focuses on the principle design of the online evaluation module, the design of the kernel evaluation principle, the design of the black box and white box test cases, the design of the ActiveMQ producer consumer model and the design of the six evaluation results. On this basis, the system also supports the traditional OJ system code processing form, which supports the text box code submission compilation and the project file code package compression submission and compilation. The system provides a rich compilation environment for code files, and supports the most popular high-level programming languages in Java, C , C and other university courses. The system also proposes a processing method of sub-module merge compiling[1] for the algorithm with non-unique result, and applies this method in combination with the compiling principle course, which more effectively and accurately examines the students' process of the whole compiling principle. Understanding and learning. In addition, the system's fault-tolerant processing is designed to set a listener TimerTask to monitor the running time of a program to prevent the system from being attacked by malicious code, such as while loop code such as while(1).
Both the students in the school and the users who like to program can use the system to carry out the topic training. The system provides users with a rich classification of question bank, which is divided into the combination of the basic algorithm topic set and the compilation principle sub-module. At the same time, authorized student users can also participate in the competitions published by the platform, and can also be used for the selection of students for special programming. The teacher can use the system platform to publish experimental work and teaching videos to facilitate interaction with students. The administrator can create contests, question bank management and system upgrades to submit a good system experience for users.
Key Words:Online evaluation; message queue; merge compilation; use case test
目录
摘 要 I
Abstract II
第1章 绪论 1
1.1 研究背景以及研究的目的和意义 1
1.2 国内外现状 1
1.3本文主要研究内容 1
1.4本文的结构组织 2
第2章 系统开发相关技术介绍 3
2.1 Springboot框架 3
2.2 Mybatis自动注入 3
2.3 B/S架构 3
2.4 I/O重定向 4
2.5 JAVA并发之阻塞队列 4
2.6 GitHub代码托管 4
2.7 本章小结 4
第3章 系统需求分析 6
3.1 系统需求的作用 6
3.2功能需求 6
3.2.1软件系统的接口需求 6
3.2.2 软件系统的功能需求 6
3.3 非功能需求 8
3.3.1软件系统的性能需求 8
3.3.2软件系统的其他需求 8
3.4 本章内容总结 8
第4章 系统设计 9
4.1 系统设计的作用 9
4.2 系统总体设计 9
4.2.1平台物理架构设计 9
4.2.2系统软件架构设计 10
4.3在线评测模块设计 10
4.3.1内核评测原理设计 10
4.3.2黑盒白盒测试用例设计 11
4.3.3 ActiveMQ消息队列设计 12
4.3.4评判结果设计 13
4.3.5合并子模块设计 14
4.4数据库设计 16
4.4.1 E-R模型 16
4.4.2 系统数据表设计 19
4.5本章内容总结 21
第5章 系统编码实现和测试 22
5.1系统开发环境 22
5.2系统功能模块界面实现 22
5.2.1 系统主页实现及其截图 22
5.2.2 评测模块实现及其截图 23
5.2.3 比赛模块实现及其截图 25
5.2.4 排名和提交状态模块实现及其截图 26
5.2.5 后台管理模块实现及其截图 27
5.3系统测试 27
5.3.1 测试环境 27
5.3.2 测试方法 28
5.3本章内容总结 28
第6章 总结与展望 29
6.1总结 29
6.2展望 30
参考文献 31
致 谢 33
第1章 绪论
1.1 研究背景以及研究的目的和意义
“编译原理”作为计算机专业主要理论课程,其核心的目的是使学生能够掌握程序设计语言的编译过程其中的构造原理,并且能够根据编译原理的基本原理进行编译程序的设计和实现应用。因此,编译原理就是编译程序的核心,将编译原理用于在线评测系统的设计和开发将会有重大的意义。首先,我们可以将整个编译程序的复杂编译过程实现简单化、小型化、独立化,使得编译程序能够实现从简单到复杂,从小到大、循序渐进;另一方面,它为我们提供了一种新的学习模式,有助于帮助我们去学习复杂的编译程序,对课程的学习起着很大的作用。编译程序在线评测系统一方面提供传统OJ的编译算法评判,另一方面可以将整个编译过程进行分解,从词法分析、语法分析、语义分析各个模块,各个模块之间通过不同的接口连接,为用户提供一套完整的编程接口测试和代码编写功能。
1.2 国内外现状
随着的在线测评系统不断的成熟和完善,越来越多的在线程序评测系统的方式能够充分锻炼学生的分析问题和解决问题的实际能力,更能激发大学生的团结合作精神,创造力和软件开发过程中的创新意识。例如北京大学的openjudge、浙江大学的acm平台、LeetCode在线评测平台。
但是,目前的在线评测系统系统还存在着如下几种缺陷。其一:多数ACM在线评测系统只能用于算法类的测评,通过黑盒测试中的测试用例集合来进行测评;其二:目前的测评系统仅限于支持控制台的输入输出,这对于有着大量输入的程序测试中,控制台的处理变得更加繁杂。其三、平台对用户编写的代码编写仅局限在一个类中,所有的类方法和成员变量仅在一个类中实现。而编译原理算法中每一个子模块(词法分析、语法分析、语义分析等等)都有不同形式的对应答案(多种输入和输出),每一个子模块要在不同类之间进行方法和成员变量的调用和处理,这就使得传统的在线评测系统难以处理。因此、现阶段开发一款编译原理在线评测辅助教学系统就显得很有必要。
1.3本文主要研究内容
(1)编译程序在线评测系统的设计模块拆分:将编译过程各阶段中使用的算法进行了拆分归纳形成彼此独立的模块,由于各个模块之间的独立性,就可以单独的算法实现其中其中任一模块的评测而无须实现其所依赖的算法模块,其依赖的模块将通过系统通过合并编译来完成;系统架构:主要由子系统和模块其他一些辅助功能组成:评测子模
块,合并子模块和展示子模块。
(2)编译程序在线评测系统的实现:重点是测试子系统、合并子系统以及用户管理、题库管理、在线比赛和消息通信等系统的实现。
(3)解决传统模式下基于用例测试在评判系统中的不足,设计并实现满足多元化测试目标,如采用黑盒和白盒测试相结合考核的细粒度的评判方案。
(4)研究分布式和多线程的技术、针对在线评判的特点、设计并实现支持进行在线比赛的评判系统。
1.4本文的结构组织
本文的组织结构如下:
第一章为绪论。主要介绍本文的研究背景、研究目的和意义,当前的国内外现状,同时介绍本文的主要研究内容。
第二章为相关技术知识介绍。主要介绍了Springboot框架,Mybatis自动注入,Json Jquery的前端知识构件,B/S的服务架构,I/O重定向技术,JAVA并发之消息队列,GitHub代码托管等相关知识。
第三章为系统需求分析。主要介绍了系统需求的功能需求和非功能需求。系统的功能需求包括接口需求和功能需求;系统的非功能需求包括性能需求和其他需求。
第四章为系统设计。主要介绍了系统的总体设计,在线评测模块设计,数据库的设计。着重阐述了在线评测模块的设计包含内核评测原理设计,黑和白盒测试用例设计,ActiveMQ消息队列的设计,评判结果的设计,合并子模块的设计。本章内容作为整个系统设计的核心,解决了评判过程中最为核心的问题。
第五章为系统编码和测试。主要介绍了系统的开发环境,各功能模块界面的设计,系统测试。这将为用户重构代码,系统的可扩展性提供一个良好的基础。
第六章为总结与展望。主要介绍了系统目前的状况已经存在的问题,以及到以后的发展前景。
第2章 系统开发相关技术介绍
2.1 Springboot框架
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot[2]致力于在蓬勃发展的快速应用开发领域(rapidapplication development)成为领导者。Springboot是升级版的SSM框架,不在像传统的通过复杂的XML文件去配置,而是通过依赖注解来进行自动配置,同时Spring Boot还提供了SpringBoot Cloud微服务等生态链,更加完善了Springboot的开发功能。同时,Spring Boot[3]也对目前的主流的工程Maven工具都提供支持,同时也对其他工具提供支持。
2.2 Mybatis自动注入
Mybatis是Apache的一个Java开源项目,是一个支持动态Sql语句的持久层框架。Mybatis可以将Sql语句配置在XML文件中,避免将Sql语句硬编码在Java类中。首先,MyBatis通过参数映射的方式,可以灵活的配置在SQL语句中的配置文件,避免了在Java类中通过JDBC的方式去配置参数;其次:Mybatis[4]通过输出映射机制,将结果集的检索成相应的Java Bean对象,避免了手工去对结果进行检索。最后,Mybatis可以通过XML配置文件对数据库的连接进行管理。
2.3 B/S架构
图2.1 三层B/S体系流程图
B/S[5]结构(Browser/Server,浏览器/服务器模式),B/S一般建立在广域网上,对安全的控制能力相对较弱,面向的是不可知的用户群。B/S的多重结构,要去构建软件具有相对的独立功能,能够实现较好的重用,就像买来的餐桌就可以利用一样,而不是坐在墙上的石头桌子。B/S一般建立在浏览器上[6],具有更加丰富和生动的表现方式和用户交互性,并且大部分开发成本较低,难度也低。
2.4 I/O重定向
I/O重定向技术主要是用来实现用户和远程软件应用工具的交互而推出的。可用于捕获一个文件,一个命令,编译程序或者Shell脚本甚至一个代码块的输出,然后将它捕获到的输出作为输入发送到另外一个文件,命令,编译程序或者脚本。I/O重定向最常用的方法就是管道符。可以把程序的输入重定向到一个文件里,重定向操作符可以用来将命令Scanner的输入和输出数据流从默认位置重定向到制定的位置,其输入或输出数据流的位置称为句柄;常见的句柄有三种,即:标准输入、标准输出和标准错误[7]。
2.5 JAVA并发之阻塞队列
阻塞队列(BlockingQueue[8])是一个先进先出的队列(Queue)因为阻塞队列支持当获取队列元素但是队列如果为空时,将会阻塞等待队列中的元素再返回;也支持添加元素时,如果队列已满,那么等待队列有空间放入新的元素时再进行入队操作。阻塞队列是一个接口,继承自 Queue,所以其实现类也可以作为 Queue 的实现来使用,而 Queue 又继承自 Collection 接口。
2.6 GitHub代码托管
Github为程序开发者提供了一个代码托管平台和交流社区,开发者可以在Github上创建自己的项目分支,也可以和其他开发者进行结对编程。同时,科技公司可以利用GitHub来进行托管软件项目,职责分配。GitHub可以托管各种项目分支,并且为用户提供一个客户端和web端,用户可以随时进行项目的查看和管理。一般用户可以通过建立一个仓库来进行组织一个独立的项目,建立一个分支可以在同一时间对一个仓库的多个不同版本进行工作的方法。通过Commit命令进行保存提交,pull request进行下载,merge命令将分支工作贡献到项目中去。
2.7 本章小结
以上是毕业论文大纲或资料介绍,该课题完整毕业论文、开题报告、任务书、程序设计、图纸设计等资料请添加微信获取,微信号:bysjorg。
相关图片展示: