基于问答系统的需求分析和概念原型建模
一、引言
本文使用高级软件工程的方法论对我的项目——类知乎问答系统进行了分析,主要包括需求分析、用例建模、业务领域建模和数据建模,最后结合具体应用场景,得到项目的概念原型。
二、需求分析
1、概念及目标
- 需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。
- 需求分析的目标是把用户对待开发软件提出的“要求”或“需要”进行分析与整理,确认后形成描述完整、清晰与规范的文档,确定软件需要实现哪些功能,完成哪些工作。此外,软件的一些非功能性需求(如软件性能、可靠性、响应时间、可扩展性等),软件设计的约束条件,运行时与其他软件的关系等也是软件需求分析的目标。
2、方法
-
原型化方法(Prototyping):整理出用户接口方式(UI,User Interface),比如界面布局和交互操作过程。
-
建模的方法(Modeling):给出有关事件发生顺序或活动同步约束的问题,能够在逻辑上形成模型来整顿繁杂的需求细节。
3、项目的具体功能
-
注册登录功能:用户可以通过常规方式或者绑定QQ进行注册,之后即可安全登录。
-
查看功能
- 用户可以查看话题列表和话题的详细信息。
- 用户可以查看问题列表和问题的详细信息。
- 用户可以查看每日热门回答、每月热门回答。
- 用户可以查看自己和其他用户所创建或关注的收藏夹内的详细信息。
-
提问功能:用户可以提出问题。
-
回答功能:用户可以回答问题。
-
评论功能:
- 用户可以评论问题、评论答案。
- 用户可以回复评论。
-
点赞功能:用户可以点赞答案、点赞评论。
-
关注功能:
- 用户可以创建收藏夹。
- 用户可以关注话题、关注问题、关注答案、关注收藏夹。
三、用例建模
1、概念
- 用例(Use Case)是一种描述系统需求的方法,使用用例的方法来描述系统需求的过程就是用例建模。
- 从用户的角度来看,他们并不想了解系统的内部结构和设计,他们所关心的是系统所能提供的服务,也就是被开发出来的系统将是如何被使用的,这就用例方法的基本思想。
2、基本步骤
- 从需求表述中找出用例,往往是动名词短语表示的抽象用例;
- 描述用例开始和结束的状态,用TUCBW和TUCEW表示的高层用例;
- 对用例按照子系统或不同的方面进行分类,描述用例与用例、用例与参与者之间的上下文关系,并画出用例图;
- 逐步分析用例与参与者的详细交互过程,完成一个两列的表格将参与者和待开发软件系统之间从用例开始到用例结束的所有交互步骤都列举出来扩展用例。
3、对项目进行用例建模

四、业务领域建模
1、概念
业务领域建模(Domain Modeling)是开发团队用于获取业务领域知识的过程。因为软件工程师往往需要工作在不同的业务领域或者不同项目中,他们需要业务领域知识来开发软件系统。软件工程师往往来自不
同的专业背景,这可能会影响他们对业务领域的认知。因此业务领域建模有助于开发团队获取业务领域知识形成统一的业务认知。开发团队获取业务领域知识的过程一般包括收集业务领域相关信息、执行团队头
脑风暴、对业务领域相关的知识概念进行分类,最后用UML类图将业务领域知识图形化展示。
2、基本步骤
- 收集应用业务领域的信息。聚焦在功能需求层面,也考虑其他类型的需求和资料。
- 头脑风暴:列出重要的应用业务领域概念,给出这些概念的属性,以及这些概念之间的关系。
- 给这些应用业务领域概念分类:分别列出哪些是类、哪些属性和属性值、以及列出类之间的继承关系、聚合关系和关联关系。
- 将结果用 UML 类图画出来。
3、业务UML类图

五、数据建模
基于上述分析,可以得到以下数据表
1、user表
| 字段 | 类型 | 注释 |
|---|---|---|
| user_id | int | 用户 id |
| username | varchar(50) | 用户名 |
| simple_desc | varchar(50) | 简介 |
| varchar(50) | 邮箱 | |
| password | varchar(50) | 密码 |
| join_time | bigint | 加入时间 |
| liked_count | int | 被点赞数 |
| followed_count | int | 被关注数 |
| follow_count | int | 关注数 |
| collection | int | 收藏夹数 |
2、topic表
| 字段 | 类型 | 注释 |
|---|---|---|
| topic_id | int | 话题 id |
| topic_name | varchar(30) | 话题名字 |
| topic_desc | text | 话题描述 |
| create_time | bigint | 创建时间 |
| followed_count | int | 被关注数 |
3、collection表
| 字段 | 类型 | 注释 |
|---|---|---|
| collection_id | int | 收藏夹 id |
| collection_name | varchar(100) | 收藏夹名字 |
| create_time | bigint | 创建时间 |
| user_id | int | 所属用户 id |
| followed_count | int | 被关注数 |
4、question表
| 字段 | 类型 | 注释 |
|---|---|---|
| question_id | int | 问题 id |
| question_title | varchar(255) | 问题题目 |
| question_content | varchar(200) | 问题内容 |
| create_time | bigint | 创建时间 |
| topic_id | int | 所属话题 id |
| followed_count | int | 被关注数 |
5、answer表
| 字段 | 类型 | 注释 |
|---|---|---|
| answer_id | int | 答案 id |
| answer_content | text | 答案内容 |
| create_time | bigint | 创建时间 |
| question_id | int | 所属问题 id |
| user_id | int | 回答用户 id |
| liked_count | int | 被点赞数 |
6、comment 表
| 字段 | 类型 | 注释 |
|---|---|---|
| comment_id | int | 评论 id |
| comment_content | text | 评论内容 |
| create_time | bigint | 创建时间 |
| user_id | int | 所属用户 id |
| answer_id | int | 所属答案 id |
| followed_count | int | 被关注数 |
六、业务概念原型
-
概念是人对能代表某种事物或发展过程的特点及意义所形成的思维结论。
-
概念原型是一种虚拟的、理想化的软件产品形式。
-
概念原型 = 用例 + 数据模型
工作流程:
- 用户通过邮箱注册并登录。
- 用户提出并回答问题。
- 用户对问题和答案进行评论、点赞和关注。
- 用户在收藏夹内查看关注的话题、问题、答案和关注。
七、总结
本文采用软件工程的方法论,对知乎问答系统这个项目进行了需求分析、用例建模、业务领域建模和数据建模,最终得到了业务的概念原型。
通过此次学习使我不仅对整个知乎问答系统项目的流程有了更深的认识,还体会到了一个软件产品概念原型的诞生。
参考文献:

浙公网安备 33010602011771号