题库系统需求文档.docx
《题库系统需求文档.docx》由会员分享,可在线阅读,更多相关《题库系统需求文档.docx(20页珍藏版)》请在冰点文库上搜索。
题库系统需求文档
题库系统需求文档
1.概述
1.1项目背景
过去人们都用纸张和笔来答题,随着网络的发展,网上答题已经逐渐走入人们生活,题库系统应运而生,如:
一起作业网、作业帮。
1.2目的和范围
本文档旨在明确题库系统具备的功能与性能,为本系统的设计和编程提供基础,为测试和验收提供依据。
本文档主要读者范围为产品研发部的产品经理、前后端工程师、UI设计师、产品运营专员、测试工程师。
1.3总体要求
实现一个能够线上线下相结合的试题、作业操作软件,使老师、学生、家长之间有一个沟通的桥梁,共同监督学生学习,学生也能够有更大的积极性来加强自己。
2.产品概要
2.1产品介绍
本产品是基于.......混合开发,让用户能够在PC端、移动wap进行添加试题制作试卷、答题、批阅等功能。
2.2.主要业务流程
2.2.1登录流程:
用户输入账号密码进行登录,通过则进去主页面,否则提示失败。
主网站通过token账号直接能够访问题库的试题列表,匹配通过则显示试题,否则提示失败。
2.2.2功能流程
主流程图:
子流程图:
生成作业试卷流程图
作业布置流程图
试卷布置流程图
完成作业上传流程图
完成试卷上传流程图
批阅流程图
作业、试卷反馈流程图
角色参与和功能:
作业、试卷生成:
管理员通过试题编译器(试题管理中的增加试题里设置好的编辑选择、填空、简答等试题)生成试题,试题可以文字描述的可以描述,如果不能描述比如包括图形,就需要上传图片的方式生成试题,试题编译器类似图1(类似赛码)选项可以图片形式,例如:
填空如果不是图片上传,需要有()或者_结构限制。
图1
作业标签:
管理员给题目加上难度、类型、科目、年级、相关章节知识点、课时标签。
入库:
管理员把设置好的试题导入到题库中。
组卷:
老师或管理员负责把生成的试题通过选择标签筛选指定试题组合成一套试卷,并能够分析试卷类似图2。
图2
作业、试卷布置:
老师把生成的试卷、作业发布给指定班级的学生(老师和学生的关系是多对多的关系,例如:
一个老师对应多个学生,一个学生对应物理、化学、英语等多个老师)。
(类似一起作业网如下图)
完成作业上传:
学生查看自己所有老师布置的作业,答完题之后选择填空连线题等系统自动批阅的题目直接上传,主观题系统无法识别的,通过拍照上传的方式来上传答案(类似于一起作业网)。
批阅:
老师可以通过查询看到学生的答题情况,系统负责批阅选择填空题,老师负责批阅主观题。
试卷批阅:
管理员可以分配和指定的多名老师共同批阅,每个老师负责批阅不同的题目(传统分配方式是扫描试卷,切割题目来进行分配,本需求是学生通过图片上传方式上传题目和答案,系统能够做到分配批阅任务)。
作业批阅:
布置作业的老师批阅。
统计:
管理员根据试卷得分、答题错误率,试题难易程度占比,答题时间,题型占比,题量分部情况对试卷进行统计分析,得出一个总表,并分别统计试卷排名,优秀率。
作业反馈:
系统根据统计分析之后找出每个学生的薄弱点,推荐试题,并能够生成一个综合的分析图(如:
某科目某知识点错误率过高),方便下次对学生下发作业来针对性练习,达到提高成绩的效果,类似下图。
3.主要功能
3.1角色功能
1.管理员
大概流程:
管理员进入主界面,可进行试题管理、知识点管理、试卷管理、分数统计、积分统计、正确率统计、查看优秀答题试卷、机构管理、组织管理、角色管理、会话管理、反馈管理、监督管理。
2.学生
大概流程:
学生通过账号密码登录或者通过token直接登录进来,可以加入指定老师的班级,可进行教材同步练习、随机试题练习、真题练习以及老师布置的作业,也可以自己组装试题添加到试题篮子,生成试卷,所有答错的题都记录在错题本里,学生遇到难点可以互相讨论通过作业问答并可发布悬赏,给别答疑可获得悬赏金,每日签到也可以获得积分。
学生之间可互相邀请进行答题PK,正确率时间最短完成者获胜。
可以查看黑板报和通知公告获得日常部署作业信息。
3.老师:
进入页面创建班级,然后可以选择章节试题布置作业,学生完成的作业进行批阅,能够查看学生答题的分数情况,下发通知公告,黑板报。
4.家长
大概流程:
家长可对自己孩子的作业完成情况进行适时查看,也可以查看老师下达的通知。
3.2功能摘要
1.管理员
功能模块
主要功能点
优先级
试题管理
增加试题(判断题、单选题、多选题、普通填空题、完形填空题、主观题)修改试题、删除试题、导入试题、导出试题、错题纪录(所有试题答案可加入解析并能在前端用户界面提供纠错功能)。
高
知识点管理
增加、删除、修改、查看知识点(分章节、年级、科目)
高
试卷管理
增加(手工录入、题库录入,批量导入并附有下载模板按钮)、删除、查看试卷,对试卷进行编辑(根据试题标签操作试题),导入试卷(附有模板下载按钮)、导出试卷,试卷预览,增加试卷模板,使用试卷模板,试卷分析(各大题占比,知识点占比等)
高
作业管理
根据试题标签把试题添加到指定的课时、章节中,删除修改,查看。
分数统计
对某次学生得分按年级、答题时间等进行统计,并进行排名(相同分数,答题时间少的在前面)正排倒排,导出功能。
中
积分统计
对获得的不同分数段进行积分奖励(例如满分获得5积分、90-99获得4积分等),分数段积分可调整,并且统计出学生总积分,按年度、季度、月度进行排行,导出功能。
中
正确率统计
对某一试卷的正确率进行整体统计,对某一道题进行正确率统计(图文结合),导出功能。
中
优秀答题试卷
对满分试卷进行整理,并能将题目答案展示出来给其他人参考
中
机构管理
增加、删除、修改、查看机构。
高
组织管理
部门增删改查,并能够调整部门关系,管理层级、隶属层级
高
角色管理
新增角色、资源绑定、组织绑定、编辑、删除角色、查看角色
高
用户管理
增加用户、角色绑定、编辑、锁定用户、加权、降权。
高
会话管理
对用户的访问痕迹有所记录(session、时间等)
中
反馈管理
对用户的反馈进行查看、删除
低
监督管理
把实体分配给不同老师批阅,查看某一科目老师批阅进度。
低
2.学生
教材同步练习
分章节同步教材的题目答题
高
错题本
记录以往答错的题目(可一键制作试卷)
中
试题篮子
自己根据需求选择适合自己的难易程度来自动组合试卷
高
真题练习
以往年份考试试题
中
随机试题练习
已有的试卷进行练习
高
作业问答
可以提问,其他人进行作答(可以有悬赏金,悬赏金每日签到获得,或购买)
低
作业习题
显示自己老师布置的作业并作答、作业结果查看附带解析
高
考试
完成老师布置的试卷,提交后,系统自动完成选择题等一些系统能识别出来的题目的打分,主观题等不能自动打分的需要老师来判卷,打分
高
通知公告
查看老师的通知
高
黑板报
学生查看老师发布的黑板报
低
等级成就
根据完成作业正确率获得相应成就,每天答题练习获得积分(不同积分不同等级)
低
学生PK
同学之间可发起PK,系统会随机抽出符合年级章节要求的题来,两人同时做,时间最短,正确率最高者获胜,胜利者获得积分,一天三次,多次无效
低
3.老师
布置作业
一键布置作业(根据课程进度、难度、班级等),选择试题,发布给自己的学生作答
高
作业批阅
对学生答题进行批阅、打分、写评语、并查看作业进度
高
布置试卷
选择标签一键布置试卷或自己选择题型,布置题目(布置之后可预览并能够导出)
高
试卷批阅
对学生答题进行批阅、打分、并将数据上传到题库
高
分数总览
根据日期能够查看学生得分情况
高
通知公告
下发对学生的通知
高
黑板报
老师可以发布一些黑板报(知识点等)
低
4.家长
作业一览
可以查看自己孩子的作业完成情况,以及得分
高
试卷一览
可以查看自己孩子试卷得分,完成情况
高
通知公告
下发给学生的通知
高
公用
反馈
对系统的建议,以及意见
低
我的收藏
收藏一些经典题目
低
4.角色、权限
4.1角色
用户角色
角色描述
超级管理员
超级管理员负责更改权限,授权以及试题试卷等操作
题库管理员
负责对试卷和试题的管理操作
学生
能够完成老师布置下来的作业并上传答案操作如上图学生功能
老师
能够布置作业、布置试卷等操作、如上图老师功能
家长
能够查看自己孩子试卷作业完成情况,如上图老师功能
4.2权限分为三种即菜单权限,数据权限,按钮权限。
系统默认有个超级管理员角色及改角色下用户名为admin的用户,该角色默认拥有系统全部资源的操作权限(新功能开发时由开发人员进行配置),并且在权限分配时只有该角色里面的用户才能看到所有权限并对其进行分配,其他任何角儿里面的用户都不能对其进行修改和重新分配权限,该角色仅限公司内部开发人员,维护人员及测试人员使用,其中菜单管理,系统配置管理等功能为改角色独有权限(业务逻辑上如此规定,如超级管理员将这些权限分配给其他角色则其他角色里面的用户也可以对其进行操作)。
超级管理员可以创建其他角色,创建角色时分配权限,如果将权限分配权限也分配给新角色,那么新角色在穿件其他新角色并对其进行权限分配时只能看到自己所拥有的全部权限,即只能分配知己拥有的权限给其他角色,权限将逐级减少。
数据权限将体现在后台数据展示逻辑控制上,如系统管理员进入用户管理员能看到所有的用户,而普通用户只能查看数据;或者将数据权限拆分成菜单,系统管理员有系统管理员查看用户的菜单,题库管理员有题库管理员查看的菜单,分别进行授权。
按钮权限与菜单权限一致,选择菜单时菜单后面会列出该菜单页面所有的按钮供选择,如果勾选了相应按钮,则进行该菜单页面时选择的按钮可见,其他按钮隐藏。
逻辑图如下图所示:
5.界面与操作要求
要求界面整洁,操作流畅,步骤易懂,易于学习。
6.安全要求
6.1安全编码原则
1.保持简单,程序只实现指定的功能。
2.坚持最小权限,把可能造成的危害降到最低。
3.默认不信任,采用白名单机制,只放行已知的操作。
4.永远不要相信用户的输入,对所有输入进行前台和后台两次检查。
6.2基本开发安全规范
6.2.1跨站点脚本(xss)防范。
XSS的类型:
反射型XSS、存储型XSS、DOM型XSS。
跨站点脚本防范的基本原则:
●一切的输入/输出都是有害的,不要信任任何输入/输出数据。
●所有传递过程都不能保障无侵入,执行前、存储前、显示前都要进行“数据清洗”。
●所有的数据校验、处理工作要在前端和服务器端两次进行。
●目前所有的XSS通过com.keegoo.core.util.XSSUtil来过滤。
DOM-basedXSS的防范当操作页面中DOM对象的时候,要对其输入的参数进行处理,防止XSS的注入。
可采用escape、encodeURI、encodeURIComponent或自定义方法进行处理。
6.2.2防SQL注入规范。
●防SQL注入基本原则:
所有用户输入都必须进行合法性校验。
所有数据库SQL操作必须参数化。
●回收开发人员等操作生产库权限:
减少开发人员、非DBA操作生产库的权限;数据库数据查询要有权限分级和审核。
●尽量使用PreparedStatement代替Statement,一方面,在大多数情况下,使用PreparedStatement的性能将优于使用Statement,另外一方面,可以最大限度的减少SQL注入发生的可能行。
●用户提交的数据都应该做合法性校验,避免用户输入‘,““,-,%,#,&,|,@,+等有可能导致SQL注入的危险字符给系统造成危害。
6.2.3页面组建安全防范。
●页面标签必须关闭,属性值必须加引号。
在页面中使用的标签不关闭,属性值不加引号往往成为被攻击点,攻击者很容易的利用这些漏洞进行注入。
避免这些漏洞的出现可以提高被攻击的可能。
●Form提交方式必须选用POST。
Form默认的提交方式是Get,这种方式将表单中数据的按照variable=value的形式,使用“?
”添加至Action所指向的URL后面,各个变量之间使用“&”连接。
所要传递的信息量除受URL长度限制之外,信息内容都显示暴露。
●所有的非ASCII字符在URL中传递时都需要按照协商好的编码方式做URL编码。
推荐使用encodeURI、encodeURIComponent或者自定义encode实现。
encodeURI、encodeURIComponent默认都返回UTF8编码的URL,区别在于encodeURI方法不会对下列字符进行编码:
":
"、"/"、";"和"?
"。
而encodeURIComponent则会对这些字符进行编码处理。
●尽量使用对象的innerText,不要使用innerHtml属性。
对象的innerText属性默认会对输入的数据进行encode,使得如果数据的数据还有html可执行标记时不会直接执行,而如果使用innerHtml属性的话不会保障。
●输入框设置最大长度、输入数据类型限制。
输入框一般是攻击者比较钟意的攻击对象,攻击者可以通过输入框限制不足的弱点进行数据窃取(比如SQL注入)、或者制造迫害(如比XSS)。
我们可以通过对输入框最大长度、输入数据类型的限制,从一定程度上防范这样的攻击。
我们可以根据实际需求,对一些输入框限定只允许输入字母、数字等。
同时对输入的数据长度做限制。
●关闭客户端自动完成功能,减少驻留在客户端数据。
●设置/
将/
6.2.4敏感数据的安全防范。
●不能任意在Cookie、Session、ServletContext中存放数据,对于这些对象中存放的数据,必须有统一定义、说明、Lifecycle的管理等。
●对于敏感信息都必须保障其私密性。
在页面显示、操作交互中不可避免的会有一些如用户的标识信息、密码、帐号信息、涉及的金额信息等敏感数据(保密性的数据)的存在。
为保障这些数据不被曝露而提高安全性,我们要做到所有敏感信息必须进行加密处理,不能以明文的形式存在于任何网络、内存及其它持久化介质中(如:
数据库、文件磁盘系统等)。
●所有的密码、key、帐号等机密信息都不能在URL中传递。
●所有的密码、key、银行账号等机密信息都不能存储到Cookie,Session、ServletContext中。
●防止信息泄漏:
1.在系统上线使用的loglevel对应的日志输出中不允许包含任何密码、key、账号等机密信息。
2.SVN集成分支上的代码中不允许存留可用的system.out/err.print语句。
3.在测试/调试阶段所使用的测试页面、单元测试模块等不允许提交到SVN集成分支上。
4.不允许将系统产生的错误异常信息直接显示给用户,需要有统一的错误处理。
●尽量减少不必要的信息传递。
在信息的传递过程中,如果当前Step中的对象、对象的属性、参数等在下一个Step中不需要,则不要再做传递,甚至可以显式的销毁。
这样可以有效的减少信息被截获的机率,特别是敏感数据(例如用户密码、账户信息等等)。
6.2.5.Web安全防范。
●Cookie的安全防范:
1.存储于cookie中的敏感数据必须加密。
2.没有特殊要求下,尽量使用会话cookie(非持久化)。
3.如果使用持久化cookie应该设置cookie超时。
4.激活cookie安全传输,表示创建的cookie只能在https连接中被浏览器传递到服务器端进行会话验证,如果是http连接则不会传递该信息。
●必须设置session的超时时间。
●必须构建统一的错误处理页面。
●多线程中线程安全的防范:
1.尽量少用静态(static)变量和static方法。
(除了静态常量:
staticfinalconstants)。
2.尽量多线程框架(java.util.concurrent)构建多线程同步机制。
3.使用ThreadLocal避免多个线程之间类成员的共享冲突。
4.如非必要,不要使用synchronized关键字。
必须要使用synchronized时,应将同步范围最小化,即将同步作用到最需要的地方,避免大块的同步块或方法等。
●增加Referer的检查,防止非法访问。
Referer是HTTPHeader中的一个字段,当浏览器想服务器发送请求时,Referer用来通知服务器请求发起的位置。
7.其他要求
界面操作要求以及后期讨论的要求。