类知乎问答系统的需求分析和概念原型
一、前言
本篇博客基于本小组工程实践项目——设计一个类知乎问答系统,并进行了用例建模、业务领域建模以及数据建模,最终形成概念原型。
整个开发过程以知乎为相关参考范例,结合自己具体的需求分析,包含了基本的登录、注册、提问、搜索问题、回答、点赞、评论、关注等基本操作。
在此任务基础上对高级软件工程中的需求分析建模等场景进行深入学习。
二、需求分析
1.需求分析的定义
1)需求就是对用户期望的软件行为的表述;
2)获取需求就是需求分析师通过关注用户的期望和需要,从而获得用户期望的软件行为,然后对其进行表述的工作;
3)需求分析是在获取需求的基础上进一步对软件涉及的对象或实体的状态、特征和行为进行准确描述或建模的工作。
2.类知乎项目的需求分析
1)用户注册,登录,修改信息:用户可使用邮箱进行注册和登录,并在有需要的时候通过邮箱认证来修改个人信息;
2)用户发布问题,查看问题,浏览详情,关注问题,搜索问题:用户可使用自己的账号进行提问,也可以搜索或者关注自己感兴趣的问题,在提出问题后可浏览自己发布的问题的浏览详情;
3)用户发布回答,修改回答,赞同回答,不赞同回答,查看所有回答:针对具体问题,用户可以发布自己的回答,并在有需要的时候对自己发布的回答进行修改,也可以对其他人提交教的回答进行赞同和不赞同的操作。
三、用例建模
1.用例的基本概念
用例(Use Case)的核心概念中首先它是一个业务过程(business process),经过逻辑整理抽象出来的一个业务过程,这是用例的实质。什么是业务过程?在待开发软件所处的业务领域内完成特定业务任务(business task)的一系列活动就是业务过程。
2.用例建模的基本步骤
1)从需求表述中找出用例,往往是动名词短语表示的抽象用例;
2)描述用例开始和结束的状态,用TUCBW和TUCEW表示的高层用例;
3)对用例按照子系统或不同的方面进行分类,描述用例与用例、用例与参与者之间的上下文关系,并画出用例图;
4)进一步逐一分析用例与参与者的详细交互过程,完成一个两列的表格将参与者和待开发软件系统之间从用例开始到用例结束的所有交互步骤都列举出来扩展用例。
2.类知乎项目的用例建模
类知乎项目的用例如下:
1)用户相关用例:用户注册,登录,修改信息;
2)问题相关用例:发布问题,查看问题,浏览详情,关注问题,搜索问题;
3)回答相关用例:发布回答,修改回答,赞同回答,不赞同回答,查看所有回答。
2.类知乎项目的项目用例图
四、业务领域建模
1.业务领域建模定义
业务领域建模是开发团队用于获取业务领域知识的过程。因为软件工程师往往需要工作在不同的业务领域或者不同项目中,他们需要业务领域知识来开发软件系统。软件工程师往往来自不同的专业背景,这可能会影响他们对业务领域的认知。因此业务领域建模有助于开发团队获取业务领域知识形成统一的业务认知。
2.获取业务领域知识的过程
收集业务领域相关信息->执行团队头脑风暴->对业务领域相关的知识概念进行分类->用UML类图将业务领域知识图形化展示
3.知乎问答系统项目业务分类
3.1用户类
包含用户邮箱、用户名、密码、昵称、头像、描述、注册时间,用户可进行注册,登录,修改信息的操作。
3.2问题类
包含问题名字、问题描述、创建者、回答人数、浏览人数、创建时间,可进行创建问题,删除问题,修改问题的操作。
3.3回答类
包含回答者用户名、回答内容、点赞人数、不赞同人数、浏览人数、创建时间,可进行创建回答,删除回答,修改回答的操作。
3.4评论类
包含评论者用户名、评论的内容、评论的回答、点赞人数、不赞同人数、浏览人数、创建时间,可进行创建评论,删除评论,修改评论的操作。
4.项目UML图
基于第三点的分类,绘制出如下UML图:
五、数据模型
数据模型(Data Model)是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架。数据模型所描述的内容有三部分,分别是数据结构、数据操作和数据约束。
1.用户表
名称 | 类型 | 注释 |
---|---|---|
varchar | 邮箱 | |
username | varchar | 用户名 |
password | varchar | 用户密码 |
name | varchar | 昵称 |
avatar | varchar | 简介头像 |
description | varchar | 个人简介 |
registration_time | datetime | 注册时间 |
2.问题表
名称 | 类型 | 注释 |
---|---|---|
title | varchar | 问题名 |
content | text | 问题描述 |
create_user | int | 提出问题的用户ID |
answer_number | int | 回答的数量 |
visit_number | int | 浏览人数 |
create_time | datetime | 创建时间 |
3.回答表
名称 | 类型 | 注释 |
---|---|---|
answer_id | int | 问题用户 |
content | text | 回答的内容 |
up_count | int | 点赞数 |
down_count | int | 不赞同数 |
visit_number | int | 浏览人数 |
create_time | datetime | 创建时间 |
4.评论表
名称 | 类型 | 注释 |
---|---|---|
comment_id | int | 评论用户 |
content | text | 内容 |
create_user | int | 提出问题的用户ID |
up_count | int | 点赞数 |
down_count | int | 不赞同数 |
visit_number | int | 浏览人数 |
create_time | datetime | 创建时间 |
六、概念原型
1.概念原型定义
概念是人对能代表某种事物或发展过程的特点及意义所形成的思维结论,概念原型是一种虚拟的、理想化的软件产品形式。
程序 = 算法 + 数据结构
概念原型 = 用例 + 数据模型
2.知乎问答系统项目的概念原型
用户通过软件设计的登陆页面进行登录,登录后可以进行搜索问题的操作,针对问题可以进行回答,也可以对问题进行评论和点赞。
针对其他用户提交的答案,也可以进行评价和点赞以及收藏操作。
在回答界面,可以对自己发布的答案进行编辑,对自己发布的答案也可以进行删除操作。
七、心得体会
通过本次的学习,我对自己的工程实践项目进行了需求分析和用例建模,在此基础上完成了业务领域建模以及形成了此项目的数据模型和概念原型的结构。这对于我后期对项目进行完善和细化,以及具体的代码实现有很大的帮助,相信借助相关知识会让我的工程实践进行的更加顺畅。同时,由于理解还处于初级阶段,难免会有不足之处,希望能在日后学习工作过程中继续使用相关知识,完善自己的知识体系。