软件需求获取
与结构化分析方法
Created: 2024-03-05 Tue 16:42
需求获取 的主要任务是
没有真正从事过 需求获取及分析 工作的人很难相信,
- 获取 并 理解 用户的 需求 是软件工程师所面对的最 困难 的任务之一。
需求获取 涉及 客户 、 用户 及 开发方 。
- 客户 是投资软件的 单位或个人 ,也可能是 销售商 ,
- 用户 是 最终使用软件的人 。
需求获取 除了需要有专业的 系统分析师 ,
还需要 客户 / 开发者 有效地 合作 才能成功。
对于 不同规模 及 不同类型 的项目,需求获取的过程不会完全一样。 下面给出需求获取过程的 参考步骤 。
需求获取 只是软件需求分析阶段的 第一步 , 需求分析 严格地说也只是 需求分析阶段 的一个步骤。
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
flowchart LR
A(("获取")) -->|N| B(("分析"))
B --> |R1| C(("定义"))
C --> |R2| D(("验证"))
D --> |R3| E((" "))
style E stroke: none
style E fill: none
Figure 1: 软件需求分析阶段的工作步骤
结果 | N | R1 | R2 | R3 |
---|---|---|---|---|
需求状态 | 获取的需求 | 分析的需求 | 定义的需求 | 验证的需求 |
Figure 2: 获取的需求不同于分析的需求示意图
- \(N\): 获取的需求
- \(R_1\): 分析的需求
- \(a\): 经分析去掉的部分
- \(b\): 经分析保留的部分
- \(c\): 经分析补充的部分
分析 的过程会对 获取 的需求做部分 调整 ,即:
最有代表性的传统的分析建模方法称为 结构化分析(Structured Analysis, SA) 方法。
Figure 3: 结构化分析模型
功能建模 的思想就是用抽象模型的概念, 按照软件内部 数据传递、变换 的关系, 自顶向下 逐层分解, 直到找到满足功能要求的所有可实现的软件为止。
- 功能模型用 数据流图 来描述。
Figure 4: 数据流图的基本图形符号
Figure 5: 多个数据流之间的关系
环境图(context diagram) 也称为 顶层数据流图(或0层数据流图) , 它仅包括 一个数据处理过程 ,也就是要开发的 目标系统 。
Figure 6: 环境图
Figure 7: 招生系统的环境图
稍微复杂一些的实际问题,在数据流图上常常出现十几个甚至几十个 加工 。 这样的数据流图看起来 不直观 , 不易理解 。
- 分层的数据流图 能很好地解决这一问题。
- 按照系统的 层次结构 进行逐步分解,并以 分层的数据流图 反映这种结构关系, 能清楚地表达整个系统,也容易理解。
Figure 8: 招生系统的分层数据流图
Figure 9: 数据流图的分层
Figure 10: 订货系统的0层数据流图(基本系统模型,突出源点、终点)
Figure 11: 订货系统的1层数据流图(功能级数据流图)
Figure 12: 订货系统的2层数据流图(细化的数据流程图)
银行储蓄系统的业务流程:
要求画出 分层的数据流图 ,并细化到 2层数据流图 。
Figure 13: 银行储蓄系统的环境图
Figure 14: 银行储蓄系统的一层数据流图
Figure 15: 处理存款的数据流图
Figure 16: 处理取款的数据流图
在结构化分析方法中,使用 实体-关系建模技术 来建立 数据模型 。 这种技术是在 较高的抽象层次(概念层) 上对 数据库结构 进行建模的流行技术。
实体-关系模型 表示为可视化的 实体-关系图(Entity-Relationship Diagram, ERD) , 也称为 ER图 。
- 数据对象 是目标系统所需要的 复合信息 的表示,
- 所谓复合信息是 具有若干不同属性 的信息。
- 在ER图中用 矩形 表示数据对象。
在实际问题中,数据对象(实体)可以是:
Figure 17: 属性的表示
Figure 18: ER图中表示关联数量的符号
Figure 19: 几种关系的示例
Figure 20: 关系及其属性的表示
Figure 21: 银行储蓄系统的ER图
状态转换图(简称状态图) 通过描绘
- 系统的 状态
- 引起系统状态转换的 事件
来表示系统的 行为 。
Figure 22: 状态图中使用的主要符号
- 在状态图中定义的状态可能有
- 初态(初始状态)
- 用 实心圆 表示,
- 终态(最终状态)
- 用 牛眼图形 表示,
- 中间态
- 用 圆角矩形 表示。
Figure 23: 三种状态的图形表示
例如,计算机应用软件的启动过程中 没有外部事件触发 , 每个状态下的活动完成时, 状态发生转换 。
Figure 24: 没有事件触发的状态转换
事件 是在某特定时刻发生的事情, 是对引起系统从 一个状态 转换到 另一个状态 的 外界事件 的 抽象 。
Figure 25: 存款过程的状态图(考虑新开户)
Figure 26: 取款过程的状态图
数据字典 以 词条方式 定义 在
- 数据模型
- 功能模型
- 行为模型
中出现的 数据对象 及 控制信息 的 特性 ,给出它们的准确定义,包括
- 数据流 、 加工 、 数据文件 、 数据元素 , 以及 数据源点 和 数据汇点 等。
数据字典 成为把3种分析模型黏合在一起的 黏合剂 ,是分析模型的 核心 。
对于在数据流图中每一个被命名的图形元素均加以定义,其内容包括:
数据流名称 | 借书流 |
编号 | DF01 |
说明 | 读者借书时,流通组工作人员输入的信息 |
数据流来源 | 外部输入 |
数据流去向 | 读者有效性,图书有效性处理 |
数据流组成 | 图书号+读者证件号 |
数据流量和数据量 | 500条/日,0.01K/条 |
数据项名称 | 图书号 |
简称 | bookID |
类型 | char |
长度 | 13字符 |
取值范围 | 无 |
初始值 | 无 |
相关的数据项及数据结构 | 无 |
名称 | 图书信息表 |
编号 | DS001 |
简述 | 存贮图书基本信息 |
数据存储的组成 | 图书号+书名+出版社+作者+价格+分类 |
存储方式 | 数据库表 |
访问频率 | 5000次/日 |
名称 | 流通组 |
简要说明 | 图书馆流通组,负责为读者借还书,并可以查询读者信息和读者借还书信息 |
有关的数据流 | 借书流、还书流、读者编号 |
在数据字典的编制中,分析员最常用的描述数据结构的方式有 定义式 或 Warnier图 。
符号 | 含义 | 解释 |
---|---|---|
\(=\) | 被定义为 | |
\(+\) | 与 | 例如, \(x = a + b\) ,表示 \(x\) 由 \(a\) 和 \(b\) 组成 |
\([\dots, \dots]\) | 或 | 例如, \(x = [a, b]\) ,表示 \(x\) 由 \(a\) 或由 \(b\) 组成 |
\([\dots \vert \dots]\) | 或 | 例如, \(x = [a \vert b]\) ,表示 \(x\) 由 \(a\) 或 \(b\) 组成 |
\(\{\dots\}\) | 重复 | 例如, \(x = \{a\}\) ,表示 \(x\) 由 \(0\) 个或多个 \(a\) 组成 |
\(m \{\dots\} n\) | 重复 | 例如, \(x = 3 \{a\} 8\) ,表示 \(x\) 中至少出现 \(3\) 次 \(a\) ,至多出现 \(8\) 次 \(a\) |
\((\dots)\) | 可选 | 例如, \(x = (a)\) ,表示 \(a\) 可在 \(x\) 中出现,也可不出现 |
\(“\dots”\) | 基本数据元素 | 例如, \(x = “a”\) ,表示 \(x\) 为取值为 \(a\) 的数据元素 |
\(\cdot\cdot\) | 连接符 | 例如, \(x = 1..9\) ,表示 \(x\) 可取 \(1\) 到 \(9\) 之间的任一值 |
符号 | 说明 | 举例 |
---|---|---|
\(=\) | 定义符 | 标识符 \(=\) 字母字符 \(+\) 字母数据串 |
\(+\) | 用于连接两个数据分量 | 标识符 \(=\) 字母字符 \(+\) 字母数据串 |
\([ ]\) | 选择项 | 教师的职称 \(= [\) 讲师 \(\vert\) 副教授 \(\vert\) 教授 \(]\) |
\(\{ \}\) | 重复项 | 级别 \(= 1\{A\}5\) ,即级别是 \(A, AA, \dots, AAAAA\) |
\(( )\) | 可选项 | 曾用名 \(= (\) 姓名 \()\) ,曾用名可有可无 |
\(\cdot\cdot\) | 连接符 | 工龄 \(= 1..50\) |
名字 | 读者信息 |
编号 | DS1 |
描述 | 保存读者的基本信息 |
定义 | 读者信息 = 编号 + 姓名 + 单位 + 读者类型 + 电话 |
位置 | 数据库的读者信息表 |
访问频率 | 10次/天 |
名字 | 读者类型 |
简称 | ReaderType |
类型 | 字符串 |
长度 | 4 |
取值范围 | 读者类型 = [本科 | 硕士 | 博士 | 教师] |
初值 | 读者类型 = 本科 |
相关数据结构 | 读者信息 |
Figure 27: 存折格式
Figure 28: 用Warnier图表示存折的数据结构
写出在数据字典中,电话号码的数据条目的定义(即组成)。
决策表 由4个部分组成:
以下以商店业务处理系统中检查订货单为例,说明决策表的构成。
1 | 2 | 3 | 4 | ||
条件 |
订货单金额 | > 5000元 | > 5000元 | ≤ 5000元 | ≤ 5000元 |
偿还欠款情况 | > 60天 | ≤ 60天 | > 60天 | ≤ 60天 | |
动作 |
在偿还欠款前不予批准 | ✓ | |||
发出批准书 | ✓ | ✓ | ✓ | ||
发出发货单 | ✓ | ✓ | ✓ | ||
发催款通知书 | ✓ |
如果表中有 两条 或 更多 的处理规则具有相同的动作, 并且其 条件项 之间存在着某种 关系 ,就可设法将它们 合并 。
1 | 2 | 3 | ||
条件 |
订货单金额 | > 5000元 | - | ≤ 5000元 |
偿还欠款情况 | > 60天 | ≤ 60天 | > 60天 | |
动作 |
在偿还欠款前不予批准 | ✓ | ||
发出批准书 | ✓ | ✓ | ||
发出发货单 | ✓ | ✓ | ||
发催款通知书 | ✓ |
决策树 也是用来 表达加工逻辑 的一种工具,有时侯它比决策表更 直观 。
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
graph LR
A["检查订货单"] --- B["金额>5000元"]
A --- C["金额≤5000元"]
B --- D["欠款>60天"]
B --- E["欠款≤60天"]
C --- F["欠款>60天"]
C --- G["欠款≤60天"]
D --- H["不发批准书"]
E --- I["发批准书、发货单"]
F --- J["发批准书、发货单及催款通知书"]
G --- K["发批准书、发货单"]
Figure 29: 检查订货单的决策树
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|
国内旅客 | T | T | T | T | F | F | F | F | |
头等舱 | T | F | T | F | T | F | T | F | |
残疾旅客 | F | F | T | T | F | F | T | T | |
行李重量 ≤ 30 | T | F | F | F | F | F | F | F | F |
免费 | ✓ | ||||||||
\((W - 30) \times 2\) | ✓ | ||||||||
\((W - 30) \times 3\) | ✓ | ||||||||
\((W - 30) \times 4\) | ✓ | ✓ | |||||||
\((W - 30) \times 6\) | ✓ | ✓ | |||||||
\((W - 30) \times 8\) | ✓ | ||||||||
\((W - 30) \times 12\) | ✓ |
航空公司的行李收费标准:
- 乘客 免费行李 不超过30公斤。
- 超出部分 国内客头等舱 4/每公斤, 国内客其他舱 6/每公斤,
- 国外客 是国内客的2倍, 残疾客 是正常客的一半。
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
graph LR
A["行李费计算"] --- B["行李重量>30公斤"]
A --- C["行李重量≤30公斤"]
B --- D["国内旅客"]
B --- E["外籍旅客"]
D --- F["头等舱"]
D --- G["非头等舱"]
E --- H["头等舱"]
E --- I["非头等舱"]
F --- J["残疾旅客"] --- JJ["(W−30)×2"]
F --- K["正常旅客"] --- KK["(W−30)×4"]
G --- L["残疾旅客"] --- LL["(W−30)×3"]
G --- M["正常旅客"] --- MM["(W−30)×6"]
H --- N["残疾旅客"] --- NN["(W−30)×4"]
H --- O["正常旅客"] --- OO["(W−30)×8"]
I --- P["残疾旅客"] --- PP["(W−30)×6"]
I --- Q["正常旅客"] --- QQ["(W−30)×12"]
C --- R["一律免费"]
Figure 30: 航空公司行李收费的决策树
需求分析阶段 的 重要任务 之一是根据分析的结果编写 软件需求规格说明 。
软件需求规格说明经过 严格评审 并得到 用户确认 之后,作为这个阶段的最终成果。
按照 GB/T 8567-2006 计算机软件文档编制规范 , 涉及软件需求规格说明的文档有 软件需求规格说明(SRS) 和 数据需求说明(DRD) 等。
- SRS和DRD的 质量要求 包括:
- 完整性
- 无歧义性
- 一致性
- 可验证性
- 可修改性
- 可追踪性
参考教材
软件评审 是软件过程中的 过滤器 。 也就是说,在软件工程过程的 不同阶段进行软件评审 , 可以起到 发现并消除错误和缺陷 的作用。
正式的技术评审(Formal Technique Review, FTR) 是最主要的 需求评审机制 。
1. 功能 | 7. 通信 | 13. 清晰性/无歧义性 | 19. 可维护性 |
2. 性能 | 8. 正确性 | 14. 安全性 | 20. 可追踪性 |
3. 接口 | 9. 完整性 | 15. 健壮性 | 21. 可靠性 |
4. 数据 | 10. 可行性 | 16. 可理解性 | 22. 其他 |
5. 硬件 | 11. 一致性 | 17. 可修改性 | |
6. 软件 | 12. 兼容性 | 18. 可测试性和可验证性 |
参考教材
参考教材
需求管理是一组活动,用于帮助项目组在项目进展的过程中 标识需求 、 控制需求 、 跟踪需求 ,并对需求变更进行管理。
此外,建立 变更控制 或 批准流程 也很重要, 它要求由 指定的团队成员 来负责复审所有提议的变更, 以在全局的高度上对 变更需求 的 好处 和可能引起的 后果 进行客观的权衡和把握。