【备注】本说明书由华中农业大学2018级计算机科学与技术专业的刘畅、刘铠铭、张清望、卢家伟四位同学共同完成。
本报告的目的是对Asking进行详细设计说明,以便用户及项目开发人员了解产品详细的设计与实现。为开发人员提供开发参考书。以下叙述将结合文字描述、伪代码,图表等来描述Asking的详细设计和相关的模块描述。本报告的预期读者有客户、项目经理、开发人员以及跟该项目相关的其他竞争人员。
(1)项目名称:Asking
(2)任务提出者:刘畅、卢家伟、刘铠铭、张清望
(3)开发者:辣鸡搬砖喵喵团队
(4)用户:喜欢社交并且有想法的年轻人群体
(5)实施单位:辣鸡搬砖喵喵团队
(1)问题箱:一种私密问题。该类问题的回答者仅可以通过Id搜索到问题,输入密钥后查看,并且所有回答都是匿名状态。
(2)硬币:软件内虚拟货币。每日签到可以获取2枚硬币,为赞同的回答点赞时会消耗硬币,并且该硬币会转移给回答者。
(3)称号:根据持有硬币数所给予的等级,依次为:见习、水手、舰长、提督、总督。称号等级高者可表明他收到过大量的赞或者使用此软件的时间较长。
[1]窦万峰.软件工程方法与实践(第三版).北京:机械工业出版社,2016
[2]普莱斯曼.软件工程:实践者的研究方法(原书第8版).北京:机械工业出版社,2016
[3] 辣鸡搬砖喵喵团队.Asking需求规格说明书.
[4] 辣鸡搬砖喵喵团队.Asking软件概要设计说明书
功能需求:
(1)搜索:通过问题标题或标签进行模糊搜索显示结果列表,通过问题箱id精确搜索并显示该问题箱的界面。
(2)提问、删除问题:提出问题、删除自己提出的问题。
(3)创建、删除问题箱:创建问题箱并分享给好友、删除自己创建的问题箱。
(4)查看、回复问题:查看该问题及其回答、回答该问题。
(5)增加、删除回答:回答别人提出的问题,删除自己做出的回答。
(6)个人中心:查看基本资料和功能列表,可以签到、修改资料。
非功能需求:
(1)数据需求:用户信息、问题信息、问题的回复、问题箱信息和问题箱回复。用户自己输入的问题箱密钥、判断用户某一个行为后的状态码和提示消息。
(2)性能需求:用户名、密码和问题ID有相应的精度要求。对于响应时间、更新处理时间和数据的转换及传送时间有相应的时间限制。
(3)运行需求:用户界面在用户操作后发出相应的响应。软件接口和硬件接口提供限制。
图1 Asking系统的第一级分解
图2 Asking系统的软件结构
软件结构图的总体解释说明:Asking系统向下划分为用户登录,系统主控界面两个模块。用户登录主要负责接收用户的输入并进行相应的处理,在这一步信息由外部形式变换成内部数据形式,这被标识为输入流。系统主控界面子系统主要负责响应用户进行的相关操作,该子系统是软件的核心,输入数据经过一系列加工处理,这被标识为变换流。并将处理后得到的相关信息转换成用户可见的形式,即最终将变化流转换成输出流。
图3 系统物理体系结构
如图3所示是对系统的物理体系结构进行详细的描述。
表1 模块基本信息表
名称 | 编号 | 设计者 | 所在文件 | 所在包 |
---|---|---|---|---|
用户登录模块 | 1.1 | 张清望 | .\controller\UserController.java.\entity\User | asking.controllerasking.entity |
新用户注册模块 | 1.2 | 张清望 | . \controller\UserController.java.\entity\User | asking.controllerasking.entity |
个人信息管理 | 2.1 | 卢家伟 | . \controller\UserController.java.\entity\User | asking.controllerasking.entity |
搜索问题 | 2.2 | 卢家伟 | . \controller\UserController.java.\asking\Answer | asking.controllerasking.entity |
问题推送 | 2.3 | 卢家伟 | . \controller \AskingApplication.java.\asking\Answer | asking.controllerasking.entity |
提问管理 | 2.4 | 刘畅 | . \controller\QuestionController.java. \controller\QuestionBoxController.java | asking.controller |
回答管理 | 2.5 | 刘铠铭 | . \controller\QuestionController.java. \controller\QuestionBoxController.java | asking.controller |
问题查看 | 2.6 | 刘畅 | . \controller\QuestionController.java. \controller\QuestionBoxController.java | asking.controller |
回答查看 | 2.7 | 刘铠铭 | . \controller\AnswerController.java. \controller\BoxAnswerController.java | asking.controller |
如表1所示,说明了各个模块的基本信息,包括模块名称、编号、设计者、所在文件和所在包。
表2 功能描述
编号 | 说明 |
---|---|
0 11.11.1.1 1.21.1.21.1.32.12.1.12.1.22.32.42.4.12.4.22.52.5.12.5.22.62.7 | Asking系统:用户登录和新用户注册,个人信息管理,搜索问题,问题推送,提问管理,回答管理,问题查看用户登录,新用户注册获取用户输入的用户名和密码根据用户输入的用户名和密码同用户信息库中的信息核对,并产生登录情况信息获取用户输入的个人信息对新用户输入的个人信息进行合法性检验将检验合格的用户信息存入用户信息库输入信息,执行修改获取用户要修改的信息根据用户输入的修改信息修改用户信息库用户进入主控界面推送热门问题新建提问,删除提问根据输入的问题描述在问题数据库中创建问题记录删除已提出的问题新建回答,删除回答根据用户输入的问题回答在回答数据库创建回答记录并显示删除已存在的回答用户查看自己已经发布过的问题用户查看自己已经发布过的回答 |
如表2所示,表格第一列是模块编号,表格第二列是说明信息。该表对模块的功能进行了概述。
图4 用户登录程序流程图
图4是用户登录模块的程序流程图,该模块开始监听用户输入处于监听状态,若用户输入相应信息并且与用户信息库中的用户信息核对后正确用户进入主控界面,若用户未输入相应信息或者与用户信息库中的用户信息核对有误则系统继续处在监听状态。
图5 新用户注册程序流程图
图5是新用户注册模块程序流程图,该模块开始处于等待用户注册的状态。如果用户提出注册请求就转入获取用户输入信息状态,获取用户输入信息若输入合法在用户信息库创建用户信息记录。如果用户未发出注册请求模块继续处在等待用户注册状态。
图6 搜索问题程序流程图
图6 是搜索问题模块的程序流程图,该模块首先进入等待用户输入搜索信息状态。如果用户已经输入则获取用户输入并根据输入的搜索关键字在问题信息库中匹配问题最后退出。如果用户未输入则模块继续处于等待用户输入搜索信息状态。
图7 问题推送程序流程图
图7是问题推送模块程序流程图,模块开始进入监听状态,如果用户进入主界面则从问题数据库中抽取热门问题推送。如果用户未进入主界面则模块继续处于监听状态。
图8 新建回答程序流程图
图8是新建回答模块程序流程图,该模块开始进行用户是否回复判断,若用户进行回复则获取用户回复信息并且修改问题信息库之后进入用户是否点赞判断,若用户未回复则直接进入用户是否点赞判断。如果用户点赞则修改问题信息库中该问题的获赞数并修改用户信息库中用户的硬币数之后退出,如果用户未点赞则直接退出
图9 新建提问程序流程图
图9是新建提问模块程序流程图,该模块开始进入等待用户发出提问请求状态。若用户发出提问请求则模块进入获取用户输入问题描述处理,若用户未发出提问请求则模块继续处于等待用户发出提问请求状态。进入获取用户输入问题描述处理后判断用户的输入是否合法,若用户的输入合法则判断用户提问是否为问题箱问题,若用户的输入非法则继续处于获取用户输入问题描述状态。经判断若用户的提问为普通问题则在问题信息库中创建普通问题的记录,若用户的提问为问题箱问题则在问题信息库中创建问题箱问题的记录,最后退出。
图10 个人信息管理程序流程图
图10是个人信息管理模块程序流程图,该模块首先进入等待用户修改个人信息请求状态。如果用户发出请求则获取用户输入修改的个人信息并修改用户信息库。如果用户未发出请求则模块继续处于等待用户修改个人信息请求状态。
图11 问题查看
如图11所示,该模块开始进入等待用户发出查看问题请求状态。如果用户发出查看问题请求则从问题信息库中得到该用户所有的问题并显示。如果用户未发出查看问题请求则继续处于等待用户发出查看问题请求状态。最后退出。
图12 回答查看
如图12所示,该模块开始进入等待用户发出查看回答请求状态。如果用户发出查看回答请求则从回答信息库中得到该用户所有的回答并显示。如果用户未发出查看回答请求则继续处于等待用户发出查看回答请求状态。最后退出。
表4 用户信息
数据名称 | 数据类型 |
---|---|
用户名 | char型 |
密码 | char型 |
昵称 | char型 |
个人签名 | text型 |
等级 | int型 |
硬币数 | int型 |
表5 问题信息
数据名称 | 数据类型 |
---|---|
问题ID | int型 |
用户名 | char型 |
问题标题 | text型 |
问题内容 | text型 |
问题标签 | char型 |
问题创建时间 | time型 |
表6 问题箱信息
数据名称 | 数据类型 |
---|---|
问题箱ID | int型 |
用户名 | char型 |
问题箱密码 | char型 |
问题箱标题 | text型 |
问题箱内容 | text型 |
问题箱创建时间 | time型 |
表7 普通问题回答信息
数据名称 | 数据类型 |
---|---|
回答ID | long int型 |
问题ID | int型 |
回答内容 | text型 |
回答时间 | time型 |
表8 问题箱问题回答信息
数据名称 | 数据类型 |
---|---|
问题箱回答ID | long int型 |
问题箱ID | int型 |
问题箱回答内容 | text型 |
问题箱回答时间 | time型 |
表9 数据精度
字段 | 精度 | 备注 |
---|---|---|
用户名 | char型 | 邮箱 |
密码 | char型 | 8-12位 |
昵称 | char型 | |
用户是否存在 | map型 | 前端传过来含有用户名和密码的json对象,后端接受到之后在数据库中匹配,返回是否匹配的信息给前端 |
问题箱ID | int型 |
如表9所示,对不同字段的数据精度进行了详细要求。
时间特性:
(1)响应时间:用户任意操作后5秒内系统给予反馈信息。
(2)更新处理时间:由系统运行状态来决定。
(3)数据的转换和传送时间:能够在20秒内完成。
灵活性:
当需求发生某些变化时,该软件的基本操作、数据结构、运行环境等等基本不会发生变化,只是对系统的数据库的文件和记录进行处理,就可以满足需求。
表10 初步测试计划
模块名称 | 输入数据 | 预期结果 |
---|---|---|
新用户注册 | [email protected] 123 畅喵 | 用户数据库新增了该记录 |
用户登录 | [email protected] 123 | 登录成功进入主界面 |
问题推送 | 进入主界面 | 推送一些问题 |
搜索问题 | 畅喵 | 显示出畅喵的相关问题 |
提问管理 | “畅喵的QQ是多少?”,普通问题 | 问题数据库中新增了该普通问题 |
提问管理 | “畅喵的手机号是多少?”,问题箱问题 | 问题数据库中新增了该问题箱问题 |
回答管理 | 点击问题点赞 | 用户硬币数增多,问题数据库中该问题的点赞量加一 |
个人信息管理 | 修改昵称为“畅汪” | 用户数据库该用户的昵称变为“畅汪” |
问题查看 | 相关的问题可以正常显示 | |
回答查看 | 相关的回答可以正常显示 |
如表10所示,以对应模块的输入数据和预期结果给出了初步的测试方案。