【备注】本说明书由华中农业大学2018级计算机科学与技术专业的刘畅、刘铠铭、张清望、卢家伟四位同学共同完成。
本说明的目的是对Asking APP进行概要的功能说明,以便用户及项目开发人员了解产品大致的设计与实现。以下叙述将结合文字描述、数据流图、变换图等来描述Asking的体系结构设计、接口设计,数据设计等方面。本说明的预期读者有客户、项目经理、开发人员以及跟该项目相关的其他竞争人员。
Asking APP是一款针对年轻人的咨询类社交软件,大家可以在这里分享自己有趣的想法,以及咨询自己的烦心事或畅聊每天的趣事。现在市场上大部分的咨询类社交软件都不仅仅是帮助用户解决问题,还掺杂了一些诸如推送广告、推销等的附带功能,为了解决这一问题我们推出Asking APP,主打咨询类社交,无其他附带功能,为用户提供一个纯粹的问答平台。我们希望用户可以在使用我们的产品时不被“问答”之外的事情烦扰。
功能需求:
(1) 注册、登录:获取用户输入的用户名、密码进行登录和注册。
(2)搜索:通过问题标题或标签进行模糊搜索显示结果列表,通过问题箱id精确搜索并显示该问题箱的界面。
(3)提问、删除问题:提出问题、删除自己提出的问题。
(4)创建、删除问题箱:创建问题箱并分享给好友、删除自己创建的问题箱。
(5)查看、回复问题:查看该问题及其回答、回答该问题。
(6)增加、删除回答:回答别人提出的问题,删除自己做出的回答。
(7)个人中心:查看基本资料和功能列表,可以签到、修改资料。
非功能需求:
(1)数据需求:用户信息、问题信息、问题的回复、问题箱信息和问题箱回复。用户自己输入的问题箱密钥、判断用户某一个行为后的状态码和提示消息。
(2)性能需求:用户名、密码和问题ID有相应的精度要求。对于响应时间、更新处理时间和数据的转换及传送时间有相应的时间限制。
(3)运行需求:用户界面在用户操作后发出相应的响应。软件接口和硬件接口提供限制。
采用免费的开发软件,开发成本低,但运行效率受限。技术上,采用现有的小组成员掌握的技术保证项目的最终实现。环境上,在浏览器、安卓手机端保证运行正确。
(1)问题箱:一种私密问题。该类问题的回答者仅可以通过Id搜索到问题,输入密钥后查看,并且所有回答都是匿名状态。
(2)硬币:软件内虚拟货币。每日签到可以获取2枚硬币,为赞同的回答点赞时会消耗硬币,并且该硬币会转移给回答者。
(3)称号:根据持有硬币数所给予的等级,依次为:见习、水手、舰长、提督、总督。称号等级高者可表明他收到过大量的赞或者使用此软件的时间较长。
《软件工程方法与实践 (第3版)》, 窦万峰等编著, 机械工业出版社,2016
《Asking软件需求规格说明书》,辣鸡搬砖喵喵团队编著
(1)复审整个数据流图,检查是否有问题和可以完善的部分
复审后的Asking 系统的0层数据流图如图1所示:
图1 Asking的0层数据流图
(2) 对部分数据流图的精化如下
l 用户登陆功能精化数据流图如图2所示:
图2 登陆精化数据流图
l 搜索功能精化数据流图,如图3所示:
图3 搜索精化数据流图
l 回答管理精化数据流图,如图4所示:
图4 回答管理精化数据流图
l 提问管理精华数据流图,如图5所示:
图5 问题管理精化数据流图
根据复审的数据流图,得出软件的逻辑结构,利用事务设计的方法,得到的软件结构图如图6所示:
图6 Asking系统的软件结构图
本系统软件结构图展示说明如下:
(1) 用户登录:
l 用户选择登陆或注册,如果选择登录,输入的信息将进行身份验证,
l 选择注册,则将进行合法性验证后写入用户信息库。
(2) 系统主控界面:
l 用户可以选择个人信息管理,进行个人信息修改和头像修改;
l 选择问题搜索,看自己想看的问题
l 选择问题推送,系统推送相关问题列表给用户
l 选择提问管理,创建新的提问或删除自己不想要的提问
l 选择回答管理,创建新的回答或删除自己不想要的回答
l 选择问题查看,查看对应问题
l 选择回答查看,查看该问题对应的回答
Asking系统模块组成
1.用户登录子系统
1.1 用户登录包含模块:
用户登录模块:从下层模块获取用户输入信息以后,将得到的用户输入信息与用户信息数据库中的数据进行匹配,判断是否可以登录。如果匹配成功,将此用户信息提供给上层模块用户输入子系统。如果匹配失败,拒绝用户登录。
1.2 用户注册包含模块:
新用户注册模块:从下层模块获取用户输入信息以后,将得到的新用户信息添加到用户信息库,完成新用户注册。
2.系统主控子系统
2.1 个人信息管理包含模块:
个人信息管理:用户可以修改自己的个人信息。并将新的用户信息更新到用户信息库。
2.2 搜索问题包含模块:
搜索问题模块:用户提供问题关键字,该模块根据用户提供的问题关键字在问题信息库寻找相关问题,返回相关问题信息。分为普通问题和问题箱问题。
2.3 问题推送包含模块
问题推送模块:根据用户信息在问题信息库中寻找该用户感兴趣的问题,并将问题以列表的形式呈现给用户
2.4 提问管理包含模块
提出问题模块:用户提出新的问题并发布
删除问题模块:用户可以选择删除自己提出的问题
2.5 回答管理包含模块
新建回答模块:用户提出新的回答并发布
删除回答模块:用户可以选择删除自己做出的回答
2.6 问题查看包含模块
问题查看模块:根据问题信息显示相应的问题。
2.7 回答查看包含模块
回答查看模块:显示该问题相应的所有回答。
用户登录界面:当用户访问正确的网址时,进入用户登录界面。该界面至少包含用户名输入栏和密码输入栏以便接受用户的输入,还应该有“登录”按钮使得用户可以提交用户名和密码和“注册”按钮。
注册界面:用户点击用户登录界面的“注册”按钮后可以进入注册界面。该界面应提供“用户名”、“昵称”、“密码”、“确认密码”栏供用户输入,还应该提供“提交”按钮让用户提交用户信息并完成注册。
主界面:用户提供正确的用户名和密码后,跳转到该界面。该界面根据问题库中问题的热度,问题的时间等信息为用户推送相关的问题。并且需要提供搜索问题的输入栏和“个人中心”的跳转按钮。
搜索结果显示界面:通过读取主界面的搜索关键字在问题信息库中匹配相关问题,并将相关问题显示到该界面。
查看问题界面:用户在看到问题后可以点击该问题便可跳转到该界面,在该界面展示问题的详细信息,并且需要提供给用户“点赞”按钮和评论栏。
个人中心界面:用户在主界面点击个人中心跳转按钮可以跳转到该界面。该界面显示用户的昵称、签名、称号、硬币数、提问数、回答数等基本信息,并且提供给用户查看“我的回答”、“我的提问”、“创建问题”、“帮助\提示”和“退出”等按钮方便用户进行相应操作。
我的回答界面:用户在个人中心界面点击“我的回答”按钮可以跳转到该界面。该界面显示本用户发表过的所有回答,并且提供给用户“返回”按钮方便用户跳转回个人中心界面。
我的提问界面:用户在个人中心界面点击“我的提问”按钮可以跳转到该界面。该界面显示本用户发表过的所有问题,并且提供给用户“返回”按钮方便用户跳转回个人中心界面。
创建问题界面:用户在个人中心界面点击“创建问题”按钮可以跳转到该界面。该界面提供给用户问题标题栏、设置为问题箱选项、问题标签选项、问题描述栏以及“发布”按钮。用户点击“发布”按钮后的问题信息会及时存储到问题信息库。
硬件接口:
系统运行服务器要求运行内存大于1G,存储空间大于2G
使用者电脑内存要求512M以上,磁盘空间要求40G以上,硬盘空间要求1.5G以上。
软件接口:
VScode、IntelliJ IDEA、MySQL8.0,浏览器或安卓手机端。
图7 Asking系统结构图(带编号)
l 系统总模块:Main( ):void
l 用户登录
1.1 用户登录:login(username:string,password:string):user
1.2 用户注册:register(username:string,password:string):user
l 系统主控界面:
2.1 个人信息管理:
2.1.1 修改信息:update(info:string……):void
2.1.2 修改头像:updateavater(img:file):void
2.2 搜索问题:search(index:string):list
2.3问题推送:list(username:string):list
2.4 提问管理:
2.4.1 新建提问: addquestion(info:question):void
2.4.2 删除提问: deletequestion(questionid:string):list
2.5 回答管理
2.5.1 新建回答::addanswer(info:answer):void
2.5.2 删除回答:deleteanswer(answerid:string):void
2.6 问题查看: seequestion(questionid:list):list
2.7 问题查看: seeanswer(answered:list):list
用户(user):包括用户名,密码,昵称,个人签名,身份信息,硬币数等。
问题信息(question):包括问题标题,问题内容,问题创建时间,回答数量等。
问题箱信息(question_box):包括问题箱ID,问题箱标题,问题箱内容,问题箱创建时间等。
普通问题回答信息(answer):包括回答ID,回答内容,回答时间等。
问题箱问题回答信息(box_answer):包括问题箱回答ID,问题箱回答内容,问题箱回答时间等。
用户信息
数据名称 | 数据类型 |
---|---|
用户名 | char型 |
密码 | char型 |
昵称 | char型 |
个人签名 | text型 |
等级 | int型 |
硬币数 | int型 |
问题信息
数据名称 | 数据类型 |
---|---|
问题ID | int型 |
用户名 | char型 |
问题标题 | text型 |
问题内容 | text型 |
问题标签 | char型 |
问题创建时间 | time型 |
问题箱信息
数据名称 | 数据类型 |
---|---|
问题箱ID | int型 |
用户名 | char型 |
问题箱密码 | char型 |
问题箱标题 | text型 |
问题箱内容 | text型 |
问题箱创建时间 | time型 |
普通问题回答信息
数据名称 | 数据类型 |
---|---|
回答ID | long int型 |
问题ID | int型 |
回答内容 | text型 |
回答时间 | time型 |
问题箱问题回答信息
数据名称 | 数据类型 |
---|---|
问题箱回答ID | long int型 |
问题箱ID | int型 |
问题箱回答内容 | text型 |
问题箱回答时间 | time型 |
1. 数据库物理模型
2. 数据库表结构
用户信息表(user)
编号 | 字段名称 | 字段含义 | 字段类型 | 字段长度 | 是否主键 | 是否为空 |
---|---|---|---|---|---|---|
1 | username | 用户名 | varchar | 1024 | √ | 非空 |
2 | password | 密码 | varchar | 1024 | 非空 | |
3 | nickname | 昵称 | varchar | 1024 | 非空 | |
4 | profile | 个性签名 | text | |||
5 | gender | 性别 | int | 1 | ||
6 | coin | 硬币 | int | 11 | ||
7 | avater | 头像 | varchar | 1024 | 非空 | |
8 | last_sign | 最后一次登录时间 | datetime |
问题表(question)
编号 | 字段名称 | 字段含义 | 字段类型 | 字段长度 | 是否主键 | 是否为空 |
---|---|---|---|---|---|---|
1 | question_id | 问题编号 | int | 11 | √ | 非空 |
2 | username | 用户名 | varchar | 1024 | 外键 | 非空 |
3 | question_title | 问题标题 | text | 非空 | ||
4 | question_content | 问题内容 | text | 非空 | ||
5 | tag | 标签 | varchar | 1024 | 非空 | |
6 | question_time | 问题创建时间 | datetime | |||
7 | question_view | 问题的浏览量 | bigint | 20 | ||
8 | comment_count | 问题的评论量 | bigint | 20 | ||
9 | nickname | 昵称 | varchar | 1024 | ||
10 | user_avater | 用户头像 | varchar | 1024 |
问题回答表(answer)
编号 | 字段名称 | 字段含义 | 字段类型 | 字段长度 | 是否主键 | 是否为空 |
---|---|---|---|---|---|---|
1 | answer_id | 回答编号 | bigint | 20 | √ | 非空 |
2 | question_id | 问题编号 | int | 11 | 外键 | 非空 |
3 | answer_content | 回答内容 | text | 非空 | ||
4 | thumb | 评论的点赞量 | int | 11 | ||
5 | answer_time | 回答时间 | datetime | |||
6 | username | 用户名 | varchar | 1024 | ||
7 | user_avater | 用户头像 | varchar | 1024 | ||
8 | nickname | 昵称 | varchar | 1024 |
问题箱表(question_box)
编号 | 字段名称 | 字段含义 | 字段类型 | 字段长度 | 是否主键 | 是否为空 |
---|---|---|---|---|---|---|
1 | box_id | 问题箱的编号 | int | 11 | √ | 非空 |
2 | username | 用户名 | varchar | 1024 | 外键 | 非空 |
3 | box_password | 问题箱的密钥 | varchar | 1024 | 非空 | |
4 | box_title | 问题箱的标题 | text | 非空 | ||
5 | box_content | 问题箱的内容 | text | 非空 | ||
6 | box_time | 问题箱创建时间 | datetime | |||
7 | box_count | 问题箱的数量 | bigint | 20 | ||
8 | nickname | 昵称 | varchar | 1024 | ||
9 | user_avater | 用户头像 | varchar | 1024 |
问题箱回答表(box_answer)
编号 | 字段名称 | 字段含义 | 字段类型 | 字段长度 | 是否主键 | 是否为空 |
---|---|---|---|---|---|---|
1 | box_aid | 问题箱回答的编号 | bigint | 20 | √ | 非空 |
2 | box_id | 问题箱的编号 | int | 11 | 外键 | 非空 |
3 | box_acontent | 问题箱回答的内容 | text | 非空 | ||
4 | box_atime | 问题箱回答的时间 | datetime | |||
5 | username | 用户名 | varchar | 1024 |
需求名称 | 实现的模块名称 |
---|---|
用户登录 | 用户登录模块 |
新用户注册 | 新用户注册模块 |
搜索问题 | 搜索问题模块 |
提出问题 | 提问管理模块 |
删除问题 | 提问管理模块 |
创建问题箱 | 提问管理模块 |
删除问题箱 | 回答管理模块 |
查看问题 | 问题查看模块 |
回复问题 | 回答管理模块 |
个人中心 | 个人信息管理模块 |
集成策略:采用自底向上的增量式集成方式
测试方针:首先对规定的正常的功能进行测试,以黑盒测试为主,白盒测试为辅助来设计测试用例,测试用例要尽量覆盖所有的程序功能,记录测试中的问题。