蓝旭后端暑期第五次培训课
声明:本节课内容的前三节都可能需要耗费数年时间去实践和学习。我们这堂课仅是简单的介绍和总结,分析他们的必要性
一、需求分析
什么是用户需求
想要弄清楚什么是需求分析,首先我们要知道什么是用户需求。
简单来说,用户需求就是对产品功能的要求。
当我们在做项目开发时,通常会收到来自用户多方面的要求和建议。例如:
-
“在主页面上加一个商品推荐的榜单”
-
“买家可以管理自己的订单”
-
“对评论设置一下点赞功能“
互联网产品正是由一个个用户所需要的产品功能组合而成。而用户需求又可以分为直接需求和间接需求两种类型。
直接需求:用户直接告知的需求,如上面列举的三个例子中提出的“在主页面上加一个商品推荐的榜单”,“买家可以管理自己的订单”,“对评论设置一下点赞功能“等,可以清晰描述出来的需求,即为直接需求,也可以叫作显性需求。
间接需求:不同于直接需求的另一种需求类型,也就是间接需求。用户在使用过程中遇到了某些问题,但只是在头脑里形成了想法,而没有直接提出明确需求。如在打车软件没有出现之前,用户通常会选择乘坐出租车,但对于出租车存在的绕路、拼车、高峰时段难打车等问题十分苦恼。在洞悉了用户需求后,滴滴等打车软件便应运而生。这种不能直接描述的需求,就是间接需求,也可以称之为隐性需求。
总之:
-
满足用户的显性需求是底线。
-
隐性需求是培养用户忠诚度的最好武器。
明确了用户需求的定义之后,我们再来说说为什么要进行需求分析。
我们可以对用户需求进行用户需求分析,总结出若干个产品功能点。
例如,针对“买家可以管理自己的订单”这一用户需求,我们进行用户需求分析,至少可以得到以下几个功能点:
- 用户查询订单列表(分页)
- 用户查询订单详情
- 用户删除已完成订单
- 用户创建订单
二、简单的项目概要设计
我们仅就概要设计中比较关键的几个部分做讨论。
如果有必要,进行技术选型。
就目前来说,大家还不需要进行这一步。在后期进入工作室,会进一步学习目前市面上主流的技术框架,到大家接触到更多的技术之后在根据实际情况进行技术选型
根据用户的需求,分析出不同角色的行为,形成一个简单的角色行为规约(必要)。
在线考试系统:
用户作为学生的行为有:
1. 答题(可以通过主页进入或者二维码,进入试卷并完成,只有规定时间以外无法进入)
2. 查看成绩及对错情况(如有主观题需要等待批改,如果无则在考试结束后直接显示)|数据库中应该有三位标志位(是否批改,是否完成,是否有主观题)
3. 加入群组(加入老师创建的群组)
4. 退出群组
作为教师行为:
1. 创建群组(通过uuid和二维码进行分享)
2. 生成试卷(通过题库添加或者自己出题)
3. 发布试卷(生成约束条件,和指定人群,如教师所在若干组别或者二维码分享)
4. 批改试卷并查看题目统计(在试题结束时间后可进入)
5. 解散群组(解除一个群组关系)
作为管理员的行为:
1. 进行人员的管理
2. 进行群组的管理
3. 进行试题库的管理
将系统划分为几个功能模块,如果可以的话,画出系统的功能结构图(必要)。
业务模块
用户端
1.登录与认证
登录业务与微信原生业务高度结合,需要调用三个api,完成登录及认证授权服务。
第一个是前端需调用完成的wx.login,获得基础的登录code传入后但,然后通过auth.code2ssesion接口访问,获取用户的ssesion和唯一id
介于该小程序需要用到用户的一些基本信息,可能还需要通过wx.getUserInfo接口得到用户授权。
登录小程序后,可以对小程序中的昵称和真实名字进行修改。
2.创建组
我们是以组为单位建立用户的聚合,即用户需要先建立组,然后将试卷发布到相应的组中去。
建立组时,生成一个根据当前时间戳生成的唯一的六位乱序码作为组码,然后生成二维码或者通过组码进行共享。其余成员通过这种方式加入。
创建者为唯一管理员,其余成员为组成员。
直接生成试卷就相当于直接创建一个组。(该组组名为试卷名称)
3.组管理
提供接口再次得到组二维码或者组号。
组管理员可以删除组成员,修改组名。
组员可以退出相应的组。
4.新建试卷
试卷总览
新建试卷的时候,需要手动给与试卷名,试卷的开始时间和结束时间,试卷的描述。(自动计算考试时间)
新建试卷后,进入题目的新建和加入页面,同时该试卷将出现在新建者的列表中,在设定的开始考试半小时之前,将可以修改试卷题目和设定,半小时内将会出现在组成员的试卷列表中,同时数据库将锁定考试成员,再入组用户无法参加该次考试。
后台关于该试卷是否有主观题自动区分试卷type
试卷将自动计算出总分和时限。
新建和插入题目
题目的必要属性有题目title,类型,分数,选项,答案。
题目基于后台的题库系统实现,新建试卷后,用户只需要添加题库中的题目然后对其修改就可以实现快速创建试卷,当然也可以手动新建题目,题目的类型有四种。
新建和修改的题目可以进行二次上传到题库当中。我们也鼓励这样做。
点击删除可以直接删除试卷中的某个试题。
上传题目到题库时将上传题目的用户名称,并要求用户输入题目的学科,分数属性不会上传。
5.批改试卷
如果试卷有主观题,则结束后不会直接向学生展示成绩和错题,而需要出题者完成主观题的批改。是否有主观题由系统自动判断。
出卷人可以对学生完成情况进行评价,完成评语。
出卷人可以查看学生答卷。
学生由成绩进行顺序排序。
当试卷锁定时,出卷人能查看自己出的试题,无法修改。
6.查看错题
作答者在时间结束后,如果已经完成批改,可以进入试卷查看自己的错误题目和评语,题目的状态将分为未作答,正确,错误,主观题。并且能查看答案和正确答案。
如果评语未填写,评语处显示,暂无评语。
管理员端
1.用户管理
对用户进行管理,可以对非法用户封号,修改不合法昵称和姓名。
2.试题管理
对试题进行管理,对非法试题进行删除。
3.组管理
解散不合法的组,修改不合法组名。
前端根据相应角色行为规约实现原型界面的设计(可选)。
后端对角色行为规约进行扩展,并对原型部分不合理的部分前后端再度商榷(必要)。
对于复杂逻辑进一步形成更严格的文档或者流程图(可选)。
复杂逻辑控制
1.登录逻辑
用户访问小程序-->小程序调用wx.login,处理后传给服务器端(login)-->服务器端调用auth.code2session转化唯一id并保持session,返回用户数据给前台-->完成登录
2.认证逻辑
用户访问小程序-->调用权限检测接口-->判断情况
情况1.用户第一次访问时通过调用scope.getUserinfo-->用户同意授权-->将用户信息传输给后台(giveUserinfo)完成保存
情况2.第二次访问时无需再进行认证
3.试卷状态控制
试卷状态主要通过schedule类进行控制
试卷exam主要状态有{0,1,2,3}未开始考试,预备考试,考试中,考试结束
学生copy答卷主要状态也有{0,1,2,3}预备考试,考试开始,考试结束批改完成,考试结束未批改
prepare方法:将还有15分钟开始考试的试卷取出,然后通过将其exam状态由0设置为1,同时根据exam创建相应组内成员的copy,并根据该exam试题创建copy的试题副本
begin方法:把所有达到考试时间的exam的状态由1设置为2,并将其所有的成员copy副本设置为1
end方法: 将所有达到结束时间的exam的状态由2设置为3,将所有成员copy的状态根据是否存在主观题将其状态置为2或者3
试卷状态另外一个控制方法是在批改judge当中,如果试卷所有的题目都完成批改,则将试卷状态由3变为2
4.成绩列表逻辑设计
成绩列表中的成绩需要返回给出卷人不同的提示,这个同样交给status{1,2,3,4}进行
分别用于标识该试卷是否进行了批改,是否进行了评价,还是这两个都无进行,抑或是已经批改完成
该逻辑在(judge/controller和judge/score通过将相应值赋值为非null),然后在成绩列表逻辑中进行二次判断
分析系统中的不同对象之间的关系,形成实体,进一步组织成数据库文档(必要,详见第三部分)。
分析所有前后端交互对接部分,形成接口文档(必要,详见第四部分)。
三、数据库设计
详见:数据库设计文档
四、接口文档设计
一、什么是接口文档?
在项目开发中,web项目的前后端分离开发,APP开发,需要由前后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护。
二、为什么要写接口文档?
1、项目开发过程中前后端工程师有一个统一的文件进行沟通交流开发
2、项目维护中或者项目人员更迭,方便后期人员查看、维护
三、接口规范是什么?
详见:接口文档设计