在指导老师的要求下,我们小组开始编写需求分析文档,同时继续进行前后端技术学习,为开发做准备
需求分析文档如下:
1.引言
1.1编写目的
该文档首先给出了整个系统的整体网络结构和功能结构的概貌,试图从总体架构上给出整个系统的轮廓,然后又对功能需求、性能需求和其它非功能性需求进行了详细的描述。其中对功能需求的描述采用了UML的用例模型方式,而且还给出了非常直观的用例图。这些文字和图形都为了本文档能详细准确地描述用户的需求,同时也为用户更容易地理解这些需求的描述创造了条件。
该文档详尽说明了这一软件产品的需求和规格,这些规格说明是进行设计的基础,也是编写测试用例和进行系统测试的主要依据。同时,该文档也是用户确定软件功能需求的主要依据。
1.2背景
疫情的爆发,网络的普及,使得足不出户就能完成学生考试成为了师生们的一项重要需求。而这催生了在线考试管理系统的开发,它能够为为学校、企业和教育机构提供的在线考试解决方案,使用该系统可以方便的完成组织考试、管理成员、线上答题、成绩统计分析的全部考试流程,有效降低了组织成本,提高工作效率。
1.3读者对象和阅读建议
本文档的主要内容共分4部分:综合描述、系统特性、和非功能性需求和外部接口描述。综合描述部分主要对系统的整体结构进行了大致的介绍;系统特性部分对系统的功能需求进行了详细描述,是本文的主要部分;非功能性需求部分对非功能需求进行了详细的描述;外部接口需求部分对用户界面、软件接口、硬件接口和通讯接口等进行了描述。
本文档面向多种读者对象:
(1)项目经理:项目经理可以根据该文档了解预期产品的功能,并据此进行系统设计、项目管理。
(2)设计员:对需求进行分析,并设计出系统,包括数据库的设计。
(3)程序员:配合《设计报告》,了解系统功能,编写《用户手册》。
(4)测试员:根据本文档编写测试用例,并对软件产品进行功能性测试和非功能性测试。
(5)销售人员:了解预期产品的功能和性能。
(6)用户:了解预期产品的功能和性能,并与分析人员一起对整个需求进行讨论和协商。
(7)其他人员:如部门领导、公司领导等可以据此了解产品的功能和性能。在阅读本文档时,首先要了解产品的功能概貌,然后可以根据自身的需要对每一功能进行适当的了解。
1.4参考资料
软件需求规格说明书IEEE标准
2.总体概述
2.1软件概述
2.1.1 项目介绍
考试管理系统是为学校、企业和教育机构提供的在线考试解决方案,使用该系统可以方便的完成组织考试、管理成员、线上答题、成绩统计分析的全部考试流程,有效降低了组织成本,提高工作效率
系统同时提供题库管理和题目分析功能,可以有效帮助机构完成题目积累和知识沉淀,为机构数据积累提供帮助。
2.1.2 产品环境介绍
系统采用符合J2EE技术规范的多层架构,客户端使用浏览器。整个系统运行与应用服务器之上,利用应用中间件支撑系统的运行,数据库管理系统使用MySQL,应用中间件使用Tomcat。
服务器端:
系统架构:J2EE
开发工具:IDEA
数据库:MySQL
开发技术:java,mybaits,Spring Boot,sql
中间件:Tomcat,jdk1.8
客户端:
开发工具:VScode
开发技术:Vue,Element-ui,node,npm
环境要求:
服务器:
CPU:1GHZ以上
内存:2GB以上
客户端:
CPU:1GHZ以上
内存:2GB以上
2.2软件功能
功能列表:
用例图(具体展开请看第三部分系统设计):
2.3老师类及其特征
登录,注册
题库管理:题目录入(在线录入和批量导入,题目需要录入题干、选型、正确答案、解析,题目类型包括单选题、多选题、判断题、填空题),题目分类(自定义题目分类,多级分类,可以通过分类进行检索),题目检索查询(按题干关键字、题目分类、题目类型进行检索)
考试管理:考试基本信息(创建一次考试活动,设置考试基本信息(考试时间,答题时间,考试介绍)),试卷管理(抽取题库题目组成一套试卷(可以选题组卷和自动组卷)),考试成员管理(添加、删除考试成员)
考试结果管理:判卷(自动判卷、人工审查纠错),统计分析(汇总全部考试成员的成绩和答题信息,进行成绩排名、计算平均分。统计每道题目的得分、对错情况、进行可视化的图标展示)
系统管理:用户管理(增删改查)、账号管理(增删改查)、角色管理(增删改查)
2.4学生类及其特征
登录,注册
在线答题:在线答题(在线完成答题,提交试卷,考试时间结束自动提交),查看考试结果(考试结束之后进行考试结果查询)
2.5假设和依赖关系
本项目是否能够成功实施,主要取决于以下的条件:
(1)为了项目的开发和实施,在必要时对现有的软件开发流程进行详细的了解。
(2)具有相对稳定的项目团队,不稳定的团队将影响项目的进度和质量。
(3)团队成员对软件开发过程使用的性能良好的软件有较好的了解,明确其中必要的功能,为本项目提供完整的功能和性能需求资料,以便于对其进行分析,从而形成完善的软件需求。
(4)团队拥有软件系统的运行必要的且能够满足系统运行条件的硬件环境和通讯环境,不合适的硬件环境和通讯环境将会影响系统的性能。
(5)项目团队掌握先进的能够适用于该项目的技术,这是系统的性能是否优化和项目能否成功的保证。
3 系统功能
3.1题库管理
3.2考试管理
3.3在线答题
3.4考试结果管理
3.5系统管理
4 外部接口需求
4.1用户接口
本系统采用Vue+SpringBoots架构,用户界面的具体细节将在具体中描述。
4.2硬件接口
服务器端建议使用专用服务器。
4.3软件接口
无特殊需求
4.4通信接口
无特殊需求。
5.其它非功能性需求
5.1性能需求
5.1.1可靠性需求
考试期间是系统用户登陆的高峰期,需要确保系统能够适应所有用户的登陆与各种请求。
5.1.2响应时间需求
用户提交不同请求之后,对请求的响应时间不能超过3秒,所有操作将在此时间内将完成,并返回确认信息。
5.1.3开放性需求
系统应该具备十分的灵活性,以适应将来功能拓展的需求。
5.2安全性需求
(1)权限控制
根据不同用户角色,设置相应权限,用户的重要操作都做相应的日志记录以备查看,没有登录注册的用户禁止使用系统,禁止重复登录。
(2)记录日志
本系统应该能够记录系统运行时所发生的所有错误,包括本机错误和网络错
误。这些错误记录便于查找错误的原因。日志同时记录用户的关键性操作信息。
(3)数据备份
每天24点,进行数据的备份。
(4)重要数据加密
本系统对一些重要的数据按一定的算法进行加密,如用户口令、重要参数等。
5.3可用性需求
(1)方便操作,操作流程合理
尽量从用户角度出发,以方便使用本产品。
(2)支持没有计算机使用经验、计算机使用经验较少及有较多计算机使用
经验的用户均能方便地使用本系统。
(3)控制必录入项
本系统能够对必须录入的信息进行控制,使用户能够确保信息录入的完整。同时对必录入项进行有效的统一的提示。
(4)联机帮助与操作指南。
为用户提供操作指南,帮助用户了解使用方式,快速上手。
(5)容错能力
系统具有一定的容错和抗干扰能力,在非硬件故障或非通讯故障时,系统能
够保证正常运行,并有足够的提示信息帮助用户有效正确地完成任务。
5.4市场需求
在网络学习的时代,在线考试也成了学生和老师们的一项重大需求,因此,在线考试管理系统的设计,为学校、企业和教育机构提供了在线考试解决方案。使用该系统可以方便的完成组织考试、管理成员、线上答题、成绩统计分析的全部考试流程,有效降低了组织成本,提高工作效率。系统同时提供题库管理和题目分析功能,可以有效帮助机构完成题目积累和知识沉淀,为机构数据积累提供帮助。
5.5用户文档
使用简单、所见即所得。暂不提供用户文档。
6.软件质量特性
6.1可靠性
要求系统能够长时间正常运行,并且支持多用户同时访问。在任何时间用户均可通过登录进入系统平台,进行操作。
6.2易用性
具有友好易用的用户界面及简单的操作方法,提供用户操作指南,保证用户上手简单
6.3可维护性
能够满足系统管理员对系统维护的需求,能够实现软件开发者对软件的进一步维护
6.4扩展性
能够满足软件开发者对软件功能进一步扩展的需求;
6.5可测试性
在需要时,能够通过配置文件来控制内部关键信息的输出,输出目标也可通过配置文件配置。
6.6健壮性
系统不会产生数据的冗余、不匹配等情况。如果用户在操作过程中与系统中断,只需刷新界面,重新连接系统,系统即可恢复修改未保存的状态。
7.1数据库逻辑设计
7.1.1ER图
7.1.2数据字典
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
id | varchar(64) | 否 | 是 | 自增id |
title | varchar(255) | 否 | 否 | 考试名称 |
content | varchar(255) | 否 | 否 | 考试描述 |
open_type | int(11) | 否 | 否 | 考试类型 |
join_type | int(11) | 否 | 否 | 组题方式 |
level | int(11) | 否 | 否 | 考试难度 |
state | int(11) | 否 | 否 | 考试状态 |
time_limit | tinyint(3) | 否 | 否 | 是否限时 |
start_time | datetime | 否 | 否 | 开始时间 |
end_time | datetime | 否 | 否 | 结束时间 |
create_time | datetime | 否 | 否 | 创建时间 |
update_time | datetime | 是 | 否 | 更新时间 |
total_score | int(11) | 否 | 否 | 总分数 |
total_score | int(11) | 否 | 否 | 总时长 (分钟) |
qualify_score | int(11) | 否 | 否 | 及格分数 |
(2)班级考试表
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
id | varchar(32) | 否 | 是 | 自增id |
exam_id | varchar(32) | 否 | 否 | 考试id |
depart_id | varchar(32) | 否 | 否 | 班级id |
(3)考试题库表
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
id | varchar(64) | 否 | 是 | 自增id |
exam_id | varchar(64) | 否 | 否 | 考试id |
repo_id | varchar(64) | 否 | 否 | 题库id |
radio_count | int(11) | 否 | 否 | 单选题数量 |
radio_score | int(11) | 否 | 否 | 单选题分数 |
multi_count | int(11) | 否 | 否 | 多选题数量 |
multi_score | int(11) | 否 | 否 | 多选题分数 |
judge_count | int(11) | 否 | 否 | 判断题数量 |
judge_score | int(11) | 否 | 否 | 判断题分数 |
sap_count | int(11) | 否 | 否 | 简答题数量 |
sap_score | int(11) | 否 | 否 | 简答题分数 |
(4)用户试卷表
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
id | varchar(64) | 否 | 是 | 自增id |
user_id | varchar(64) | 否 | 否 | 用户id |
depart_id | varchar(32) | 否 | 否 | 班级id |
exam_id | varchar(32) | 否 | 否 | 考试id |
title | int(11) | 否 | 否 | 考试名称 |
total_time | int(11) | 否 | 否 | 考试时长 |
user_time | int(11) | 否 | 否 | 用户时长 |
total_score | int(11) | 否 | 否 | 试卷总分 |
qualify_score | int(11) | 否 | 否 | 及格分 |
obj_score | int(11) | 否 | 否 | 客观分 |
subj_score | int(11) | 否 | 否 | 主观分 |
user_score | int(11) | 否 | 否 | 用户得分 |
has_saq | tinyint(3) | 否 | 否 | 是否包含简答题 |
state | int(11) | 否 | 否 | 试卷状态 |
create_time | datetime | 否 | 否 | 创建时间 |
update_time | datetime | 是 | 否 | 更新时间 |
limit_time | datetime | 否 | 否 | 截止时间 |
(5)用户试卷表
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
id | varchar(64) | 否 | 是 | 自增id |
paper_id | varchar(64) | 否 | 否 | 试卷id |
qu_id | varchar(64) | 否 | 否 | 题目id |
qu_type | int(11) | 否 | 否 | 题目类型 |
answered | tinyint(3) | 否 | 否 | 是否作答 |
answer | varchar(5000) | 否 | 否 | 主观答案 |
sort | int(11) | 否 | 否 | 问题排序 |
score | int(11) | 否 | 否 | 题目分数 |
actual_score | int(11) | 否 | 否 | 实际得分 |
is_right | tinyint(3) | 否 | 否 | 是否答对 |
(6)试卷答案表
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
id | varchar(64) | 否 | 是 | 自增id |
paper_id | varchar(64) | 否 | 否 | 试卷id |
answer_id | varchar(32) | 否 | 否 | 回答项id |
qu_id | varchar(64) | 否 | 否 | 题目id |
is_right | tinyint(11) | 否 | 否 | 是否正确 |
checked | tinyint(11) | 否 | 否 | 是否选中 |
sort | int(11) | 否 | 否 | 排序 |
abc | varchar(64) | 否 | 否 | 选项标签 |
(7)题目表
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
qu_id | varchar(64) | 否 | 是 | 题目id |
qu_type | int(11) | 否 | 否 | 题目类型 |
level | int(11) | 否 | 否 | 题目难度 |
content | varchar(2000) | 否 | 否 | 题目内容 |
create_time | datetime | 否 | 否 | 创建时间 |
update_time | datetime | 否 | 否 | 更新时间 |
remark | varchar(255) | 否 | 否 | 题目备注 |
analysis | varchar(2000) | 否 | 否 | 整体解析 |
(8)题目答案表
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
answer_id | varchar(64) | 否 | 是 | 答案id |
qu_id | varchar(64) | 否 | 否 | 题目id |
is_right | tinyint(3) | 否 | 否 | 是否正确 |
content | varchar(5000) | 否 | 否 | 答案内容 |
analysis | varchar(5000) | 否 | 否 | 答案解析 |
(9)题目题库表
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
id | varchar(64) | 否 | 是 | 自增id |
qu_id | varchar(64) | 否 | 否 | 问题id |
repo_id | varchar(64) | 否 | 否 | 题库id |
qu_type | varchar(64) | 否 | 否 | 题目类型 |
sort | int(11) | 否 | 否 | 排序 |
(10)题库表
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
id | varchar(64) | 否 | 是 | 自增id |
repo_id | varchar(255) | 否 | 否 | 题库id |
title | varchar(255) | 否 | 否 | 题库名称 |
repo_count | int(11) | 否 | 否 | 单选数量 |
mulit_count | int(11) | 否 | 否 | 多选数量 |
judge_count | int(11) | 否 | 否 | 判断数量 |
remark | varchar(255) | 否 | 否 | 题库备注 |
create_time | datetime | 否 | 否 | 创建时间 |
update_time | datetime | 是 | 否 | 更新时间 |
(11)用户错题表
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
id | varchar(64) | 否 | 是 | 自增id |
exam_id | varchar(64) | 否 | 否 | 考试id |
user_id | varchar(64) | 否 | 否 | 用户id |
qu_id | varchar(64) | 否 | 否 | 题目id |
create_time | datetime | 否 | 否 | 加入时间 |
update_time | datetime | 否 | 否 | 最近错误时间 |
wrong_count | int(11) | 否 | 否 | 错误次数 |
gu_id | varchar(64) | 否 | 否 | 题目id |
sort | int(11) | 否 | 否 | 错题序号 |
(12)考试记录表
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
id | varchar(64) | 否 | 是 | 自增id |
exam_id | varchar(64) | 否 | 否 | 考试id |
user_id | varchar(64) | 否 | 否 | 用户id |
try_count | int(11) | 否 | 否 | 考试次数 |
max_score | int(11) | 否 | 否 | 最高分 |
passed | tinyint(3) | 否 | 否 | 是否通过 |
create_time | datetime | 否 | 否 | 创建时间 |
update_time | datetime | 是 | 否 | 更新时间 |
(13)班级信息表
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
id | varchar(64) | 否 | 是 | 自增id |
dept_name | varchar(255) | 否 | 否 | 班级名称 |
dept_id | varchar(255) | 否 | 否 | 班级id |
(14)用户表
字段名称 | 数据类型 | 是否可以为空 | 是否为主键 | 字段说明 |
id | varchar(64) | 否 | 是 | 自增id |
user_name | varchar(255) | 否 | 否 | 用户名 |
real_name | varchar(255) | 否 | 否 | 真实姓名 |
password | varchar(255) | 否 | 否 | 密码 |
salt | varchar(255) | 否 | 否 | 密码盐 |
depart_id | varchar(32) | 否 | 否 | 班级id |
role_type | tinyint(3) | 否 | 否 | 角色类型 |
create_time | datetime | 否 | 否 | 创建时间 |
update_time | datetime | 否 | 否 | 更新时间 |
state | int(11) | 否 | 否 | 状态 |
7.2数据库物理设计
7.2.1索引
无
7.2.2安全机制
系统安全、数据安全
数据安全:
程序启动需要经过登陆认证,登陆ID 和密码正确才能启动程序。
程序内部的任何会引起数据库改动的操作(增删改)均经过了严密的审查判定,以确保数据库的准确性和一致性。
系统安全:
登陆需经过身份认证,即身份口令密码一致才可登录。
不同的用户角色有不同的权限,用户只能使用分配给他的权限,无法越权操作。