北京理工大学
软件工程实践
汤铭端
中国航天科工集团公司 706所
第三讲
需求分析
内容
? 需求分析概念
? 需求分析过程
? 需求分析方法
? 需求分析产品
目的
? 掌握需求分析基本概念
? 掌握需求分析过程
? 了解基本需求分析方法( DFD+DD)
? 了解需求规格说明的内容条目
需求分析概念
软件需求的定义
? 客户定义的, 需求, 对开发者是一个较高层次的产品概念。
? 开发者所说的, 需求, 对用户来说像是详细说明。
? 软件需求包含多个层次,不同层次的需求从不同角度与不
同程度反映着细节问题。
? IEEE软件工程术语( 1997)的需求定义,
( 1)用户解决问题或达到目标所需的条件或能力。
( 2)系统或系统部件要满足合同、标准、规范或其它正
式强制性文件所需具有的条件或能力。
( 3)反映上面( 1)或( 2)所描述的条件或能力的文档
说明。
? 上述定义包括从用户(外部)、从开发者(内部)角度来
阐述需求。
需求的层次
? 业务需求( business requirement):反
映组织机构或客户对系统、产品高层次
的目标要求。
? 用户需求( user requirement):描述用
户使用产品必须要完成的任务。
? 功能需求( functional requirement):
定义开发人员必须实现的软件功能。
? 需求规格说明中还包括非功能需求。
软件需求各组成部分之间关系
业务需求
用户需求
功能需求 系统需求
质量属性
其它非功能需求
约束条件
项目视图与范围文件
使用实例文档
软件需求规格说明
需求管理的困难性
不成熟的需求分析
1,无足够用户参与
2,用户需求的不断增加
3,摸棱两可的需求
4,不必要的特征(镀金)
5,过于精简的规格说明
6,忽略了用户分类
7,不准确的计划
高质量需求过程的获益
? 开发后期和整个维护阶段的重做的工作大大减少
? Boehm发现可以节省成本 68倍
? 有研究认为可以节省成本 200倍
? 强调产品开发中的通力合作,面向市场,让用户积极
参与,可以建立忠实的客户关系,避免在无用功能上
白耗精力,弥补用户期望和开发者实际开发间的期望
鸿沟
? 采用系统方法将需求分配到各子系统可以简化集成
? 有效的变更控制和影响分析能降低变更的负面影响
? 清晰、无二义的需求文档有利于测试
需求说明的特征
? 完整性
? 正确性
? 可行性
? 必要性
? 划分优先级
? 无二义性
? 可验证性
需求规格说明的特点
? 完整性
? 先用 TBD标明缺项
? 在开发前必须解决所有 TBD
? 一致性
? 可修改性
? 每项需求只在 SRS中出现一次
? 可追踪性
? 结构、粒度方便设计、实现、测试的追踪
谁是客户
? 定制软件:合同甲方(提出方)
? 通用软件:高层管理者和(或)市场部
? 嵌入式软件:软件所属计算机系统
客户的权利
1 要求分析人员使用符合客户语言习惯的表达
2 要求分析人员了解客户的业务及目标
3 要求分析人员编写软件需求规格说明
4 要求得到需求工作结果的解释说明
5 要求开发人员尊重你的意见
6 要求开发人员对需求及产品实施提供建议
7 描述产品易使用的特性
8 调整需求,允许重用已有的软件组件
9 要求对变更的代价提供真实可信的评估
10 获得满足客户功能和质量要求的系统
客户的义务
1 给分析人员讲解你的业务
2 抽出时间清楚地说明并完善需求
3 准确而详细地说明需求
4 及时地作出决定
5 尊重开发人员的需求可行性及成本评估
6 划分需求优先级别
7 评审需求文档和原型
8 需求出现变更要马上联系
9 应遵守开发机构处理需求变更的过程
10 尊重开发人员采用的需求工程过程
对签定需求协议的认识
? 签约是客户同意需求的标志行为
? 客户不应当忽略签约的严肃性
? 开发方不应当因此拒绝变更
? 签约应当建立在一个需求协议的基线上
? 应当理解为:, 我同意这份文档表达了目前我
们对项目软件需求的了解。进一步的变更可在
此基础上通过项目定义的变更过程来进行。我
知道变更可能会使我们要重新协商成本、资源
和项目时间工期任务等。,
需求开发过程
需求开发过程
? 需求获取
? 需求分析
? 编写需求规格说明
? 需求验证
? 知识培训
? 需求管理
? 项目管理
需求获取的内容
? 在同用户的交流过程中收集各种用户的
信息
? 认真理解用户的各项要求
? 澄清模糊
? 排除不合理
? 明确约束
分析人员的两个信条
第一:只有在彻底了解和掌握了用户的全
部意图之后,才有可能建立起成功的软
件系统。
第二:一切从用户的角度着想,在条件允
许的情况下,应尽可能地保证用户从所
构造的软件系统中获得最大的利益。
容易产生的问题
? 交流障碍
? 误解
? 各方缺乏共同的语言
?, 完整性, 问题
? 需求永远会变化
? 用户本身的意见不一致
? 错误的要求
? 认识上混淆目标和需求
需求获取的过程
? 确定需求开发过程
? 编写项目目标和范围文档
? 将用户群分类并归纳各自特点
? 选择各类用户的产品代表
? 建立起典型用户的核心队伍
? 让用户代表确定使用实例
? 召开应用程序开发联系会议
? 分析用户工作流程
? 确定质量属性和其它非功能属性
? 通过检查当前系统的问题报告来进一步完善需求
? 跨项目重用需求
工作流程
用户
调查 具体模型
逻辑
抽象
当前系统
逻辑模型
当前系统 计算
机化
评审
修改 正式模型
完善
细节
目标系统 目标系统 初始模型
系统模型 用户
建立模型的步骤
? 分析现有系统和过程,建立物理模型
? 抽取特征,建立旧系统的逻辑模型
? 根据新的要求,补充和建立新的逻辑模

需求分析的任务
需求分析的内容
? 提炼、分析和仔细审查已收集到的需求
? 确保所有利益相关者都明白其含义并找
出其中的错误、遗漏或其它不足的地方
? 是从用户最初的非形式化需求到满足用
户要求的软件产品的映射过程
? 是对用户意图不断进行提示和判断的过

需求分析的步骤
? 绘制系统关联图
? 创建用户接口(界面)原型
? 分析需求可行性
? 确定需求的优先级别
? 为需求建立模型
? 创建数据字典
? 使用质量功能调配( QFD)
? 明确哪些是客户最关心的特征
编制需求规格说明的过程
? 采用软件需求规格说明( SRS)模版
? 指明需求的来源
? 为每项需求注上标号
? 记录业务规范(操作原则)
? 创建需求跟踪矩阵
需求规格说明的作用
? 为用户、分析人员和设计人员之间的交
流提供方便
? 支持目标软件系统的确认
? 控制软件开发进程
软件需求规格说明文档条目
1 范围
2 引用文档
3 工程需求
3.1 外部接口需求
3.2 功能需求
3.3 内部接口
3.4 数据元素要求
3.5 适应性要求
3.6 容量和时间要求
3.7 安全要求
3.8 保密要求
3.9 设计约束
3.10 软件质量因素
3.11 人的工程需求
3.12 需求的可跟踪性
4 合格性需求
4.1 合格性方法
4.2 特殊的合格性需求
5 交付准备
软件需求必须包括的属性
1) 标识:每项软件需求都必须有标识, 使以后的各阶段容易跟踪 。
2) 需要:基础软件需求必须用上述标识标明 。 基础软件需求是非协
商性的;其它不那么重要的需求是可协商的 。
3) 优先级:对于递增式交付, 每一项需求必须包括优先级程度, 以
便决定研制进度 。
4) 稳定性:某些需求在软件生存期内是稳定的;另一些可能是更依
赖来自各设计阶段的反馈, 或可能在软件生存期内要有所修改,
这种非稳定性需求应当被指出 。
5) 源:每一项软件需求都必须有一个能回溯到系统需求的索引 。
6) 清晰性:如果需求有一个并且只有一个解释它就是清晰的 。
7) 验证性:每一软件需求都必须是能被验证的 。 这意味着必须能做
到:检查需求已经体现在设计中;证明该软件将实现需求;测试
该软件确实能实现需求 。
IEEE需求规格说明的编写 8原则
1 从实际重分离功能,描述, 做什么, 不描述, 怎么做,
2 要求有一个面向处理的软件系统规格说明语言,以描述
软件系统的动态行为
3 必须对以该软件为元素的系统进行说明,以描述清楚之
间的关系
4 必须对软件系统的运行环境进行说明,以保持接口描述
的一致性
5 必须是认识的模型而不是实际的模型
6 必须是可操作的
7 必须容忍不完备性和可修改性
8 必须局部化和松散耦合,使得变化时只修改一个片段
SRS编写风格( Kovitz 1999)
? 保持语句和段落的简短
? 采取主动语态的表达方式
? 编写具有正确的语法、拼写和标点的完整句子
? 使用的术语和词汇表中所定义的应该一致
? 需求陈述应该采用一致的样式,如, 主体 +动
作 +可观察的结果,
? 避免使用模糊的、主观的术语以避免不确定性
? 避免使用比较性的词汇
需求表达
? 需求说明语句
? 保持语句和段落的简短
? 采用主动语态的表达方式
? 编写具有正确的语法和标点的完整句子
? 使用的术语应该和词汇表中定义的一致
? 需求陈述应该具有一致的式样,例如, 系统必
须 ……”,或者, 用户必须 ……”,并紧跟一个行为
动作和可观察的结果,例如, 仓库管理子系统必须
现实一张在所请求的仓库中有存货的药品名单。,
需求表达
? 为了减少不确定性,避免采用模糊的、主观
的术语,例如,用户友好、容易、简单、迅
速、有效、支持、许多、最新技术、优越的、
可接受的和健壮的。
? 避免使用比较性的词汇,例如:提高,最大
化,最小化和最佳化。定量地说明所需要提
高的程度或者说清一些参数可接受的最大值
和最小值。
需求表达
?,产品必须在固定的时间间隔内提供状态消息,
并且每次时间间隔不得小于 60秒,
? 后台任务管理器应该在用户界面的指定区域显示状
态消息
? 在后台任务进程启动之后,消息必须每隔 60( +_10)
秒更新一次,并且保持连续的可见性。
? 如果正在正常处理后台任务进程,那么后台任务管
理器必须显示后台任务进程已完成的百分比
? 当完成后台任务时,后台任务管理器必须显示一个
,已完成, 的消息。
? 如果后台任务中止执行,那么后台任务管理器必须
显示一个出错信息。
需求表达
?,产品必须在显示和隐藏非打印字符之间
进行瞬间切换,
?, 用户在编辑文档时,通过激活特定的触发
机制,可以在显示和隐藏所有 HTML标记之间
进行切换。,
需求表达
?,分析程序应该能生成 HTML标记出错的报告,
这样就可以使 HTML的初学者使用它来迅速排错,
? 在 HTML分析程序完全分析完一个文件后,该分析程
序必须生成一个出错报告,这个报告中包含了在分
析文件中所发生错误的 HTML所在的行号以及文本内
容,还包含了对每个错误的描述。
? 如果分析过程中未发生任何错误,就不必生成任何
错误报告
需求验证
? 审查需求文档
? 以需求为依据编写测试用例
? 编写用户手册
? 确定判别产品合格的准则
需求验证的内容
? 一致性:任何需求不与其它需求矛盾
? 可行性:现有技术条件下可以实现
? 完整性:包括用户需要的每一个功能和
性能
? 有效性:正确有效,确实能够解决用户
面对的问题
知识培训
? 培训需求分析人员
? 培训软件需求的用户代表和管理人员
? 让开发人员了解应用领域的基本概念
? 编写项目术语汇编
分析员的职责
1 ) 作为管理员, 用户和顾客的顾问;
2 ) 从各种来源收集数据, 并综合问题的解答;
3 ) 分析新的系统, 并评价现有的系统;
4 ) 准备文档和管理报告;
5 ) 理解硬件和软件的界面;
6 ) 为了产生软件需求规格说明, 必要时要进行
一些研究工作;
7 ) 为编写软件需求规格说明主持座谈会;
8 ) 不断吸收先进技术 。
分析员的素质
1 ) 能够合乎逻辑地, 象征性地, 抽象地, 创造性地思
考问题;
2 ) 能作为小组中的一个成员很好地开展工作;
3 ) 熟悉计算机硬件和软件的能力;
4 ) 自觉遵守时间, 能按规定的进度完成任务;
5 ) 在系统的分析和设计中能发挥其他人的作用;
6 ) 能保持教师和学生的双重身份, 愿意培养其他人,
而他本人亦能通过夜校, 自学, 培训班等不断提高;
7 ) 能够倾听别人的意见, 但又能根据客观事实来作决
策, 而不是依赖别人的意见;
8 ) 熟悉商业和政策管理部门的组织, 原则 。
分析员应该显示的性格特征
1) 善于领会一些抽象的概念, 重新整理使之成为各
种逻辑成分, 并根据各种逻辑成分综合出问题的
解决办法 。
2) 善于从各种相应冲突或混淆的原始资料中汲取恰
当的依据 。
3) 能够理解用户 ——需求者的环境 。
4) 具备把系统的硬件部分和 ( 或 ) 软件部分应用于
用户 ——需求者环境的能力 。
5) 具备良好的用书面或口头形式进行讨论及交换意
见的能力 。
6) 具有, 既能看到树木, 又能看到森林, 的能力 。
需求管理
? 确定需求变更控制过程
? 建立变更控制委员会( CCB)
? 进行需求变更影响分析
? 跟踪所有受需求变更影响的工作产品
? 建立需求基准版本和需求控制版本文档
? 维护需求变更历史记录
? 跟踪每项需求的状态
? 衡量需求稳定性
? 使用需求管理工具
与需求分析相关的项目管理
? 选择一种合适的软件开发模型
? 基于需求的项目计划
? 发生需求变更时协商项目约定
? 文档化和管理与需求相关的风险
? 跟踪需求工程耗费的工作量
需求分析方法工具
描述工具
? 数据流图 (Data Flow Diagram,简称 DFD)
? 控制流图 (Control Flow Diagram,简称
CFD)
? 状态转换图( State Transition diagram,
简称 STD)
? 数据字典 (Data Dictionary,简称 DD)
? 处理说明
分析模型的结构
实体 —
关系图
状态 —迁移图
数据流

数据对象描述 加工规格说明
数据
字典
控制规格说明
数据和控制模型的关系
过程模型
PSPEC
DFD
控制模型
CSPEC
CFD
控制输入
数据输出
控制输出
数据输入








数据流图,DFD( Data Flow Diagram)
? 数据流图是用来描述系统逻辑模型的一
种图形工具
? 数据流图从数据传递和加工的角度,以
图形的方式刻画数据流从输入到输出的
移动变换过程
数据流图图符
2.1
打印
数据流 Data Flow
加工处理 Process
外部实体 External Entity 数据存储 Data Store
数据流图图符说明
? 数据流:箭头表示数据流方向。一般在旁边标
注数据流名。
? 加工处理:对数据进行加工、处理和变换,从
而实现某个功能或操作
? 外部实体:表示要加工处理的数据是从外部得
到或从外部提供,同时也是数据结果的接收者,
可以是人、组织、其它系统
? 数据存储:表示处理过程中存放各种数据的文

建立 DFD的步骤
? 由外向里,先 画系统的输入输出, 然后
画系统的内部, 再画处理的内部 。
? 由顶向下,顶层, 中间层, 底层数据流

? 逐层分解,从外向里
数据流图的层次结构
? 为了表达数据处理过程的数据加工
情况,需要采用 层次结构 的数据流
图。按照系统的层次结构进行 逐步
分解,并以分层的数据流图反映这
种结构关系,能清楚地表达和容易
理解整个系统
数据流图的层次
顶层 DFD
? 用一个加工处理表示软件
? 含所有相关外部实体
? 含外部实体与软件中间的
数据流
? 不含数据存储
? 唯一
? 描述软件的作用范围,对
总体功能、输入、输出进
行抽象描述,反映软件和
系统、环境的关系
A B
C
软件
a b c
d
顶层数据流图
软件
系统
外部实体
外部实体
… …
外部实体
外部实体
… …
中间和底层 DFD
2.1
aaa
2.2
bbb
2.3
ccc
ddd数据
分层的数据流图
F0
F11
F12
F13
F14 F15
F21
F22
F23
F24
F25
第 n 层
第 n+1 层
第 n+2 层
数据流图的层次
? 在多层数据流图中,顶层流图 仅包含 一
个加工,它代表被开发系统。它的输入
流是该系统的输入数据,输出流是系统
所输出数据
? 底层流图 是指其 加工不需再做分解 的数
据流图,它处在最底层
? 中间层流图 则表示 对其上层父图的细化 。
它的每一加工可能继续细化,形成子图。
数据流图中的其它图形元素
A
B
C
------ 有 A 则 B 或者 C,或者两者都有
* A
B
C
+ A
B
C
------ 有 A 则 B 与 C,或者两者同时有
------ 有 A 则 B 或 C,但不会同时有 B与 C
------ 当 A 或 B 有一个存在就有 C
A
B C
*
A
B C ------ 只有当 A 与 B 都存在,则有 C
DFD规则和注意事项
? 数据存储不出现在顶层图中,外部实体通常不
出现在顶层图外
? 数据存储之间不应该有数据流
? 仔细、恰当地为处理命名:处理 +对象
? 仔细、恰当地为数据流命名:反映整体含义
? 对处理建立唯一、层次性编号
? 每个处理通常要求既有输入又有输出
? 一个 DFD的处理个数为 7± 2(魔数 7 ± 2)
? 不要试图让 DFD反映处理的顺序
检查数据流图的正确性
a,数据守恒
? 某个处理用以产生输出的数据没有输入给这个处理,
即出现遗漏
? 另一种是一个处理的某些输入并没有在处理中使用
以产生输出
b,数据存储(文件)的使用
? 数据存储(文件)应被数据流图中的处理读和写,
而不是仅读不写、或仅写不读
c,父图和子图的平衡
父子关系和平衡规则
? 父图表示子图间的接口,即数据流的方
向和数量
? 子图代表父图中某个处理的细节
? 子图个数不大于父图中的处理个数
? 所有子图的输入、输出数据流和父图中
相应处理的输入、输出数据流必须一致
父图和子图的平衡
发票 1.3
开领书单
领书单
(a) 父图
1.3.1 学生
领书单
1.3.2
1.3.3 教材
(b)子图
遵守加工编号规则
? 顶层加工不编号
? 第二层的加工编号为 1,2,3,…,n号
? 第三层编号为 1.1,1.2,1.3… n.1,n.2…
等号
? 依此类推
人工销售教材 系统流程图
举 例
学生
开购书
证明
购书
证明 开购书 发票
发 票 收书费
领书单
发书 学生


教材
购 销
系统
购书单
领书单
缺书单
进书通

进书通知

管员
1
销售
购书单
领书单


缺书单
进书通知
2
采购

管员
第 1 层
第 2 层
教材存量表 F1
缺书登记表 F2
外部实体 外部实体
教材销售子系统
无效书单
购书单
1.3
登记并开
领书单
1.2
开发票
1.1
审查
有效性
1.4
登记
缺书
1.5
补售
教材






进书通知
有效书单 发票 领书单
暂缺书单
1
销售
购书单
领书单
缺书单
进书通知
2
采购
进书通知
缺书登记表
教材存量表



管员
第 2 层
补售
书单
第 3 层
教材存量表 F1
缺书登记表 F2
F1
书号
单价
数量
各班用书表 F3 售书登记表 F4
外部

1
销售
购书单
领书单
缺书单
进书通知
2
采购
进书通知
缺书登记表
教材存量表



管员
采购 子系统
第 2 层
第 3 层
缺书单
2.3
修改教材库
存和待
购量


进书通知 进书通知
2.1
按书号汇
总缺书
2.2
按出版社统
计缺书

管员
教材存量表 F1 待购教材表 F5 教材一览表 F6
缺书登记表 F2
控制板
传感器
家庭
安全
软件
电话线
警 报
控制板显示
警报类型
传感器状态
用户命令和数据
显示数据
电话号码信号
与用户
交互
1
配置
系统
2
启 /停
系统
3
显示消
息状态
5
处理
口令
4
监控
系统
6
配置信息 用户命令和数据
配置请求
配置数据
启 /停
口令
配置数据
配置数据
启 /停消息
显示消息
传感器信息
有效标识消息
传感器状态
电话号码信号
警报类型
评价防
备设置
6.1
显示
格式化
6.2
生成警
报信号
6.3

电话
6.5

传感器
6.4
配置信息
传感器标识,类型
传感器状态
电话号码
配置数据
传感器标识,定位
警报数据
传感器信息
电话号码信号
控制流图( CFD)
2.1
打印
控制流 Control Flow
加工处理 Process
外部实体 External Entity 数据存储 Data Store
控制说明
与用户
交互
1
配置
系统
2
启 /停
系统
3
显示消
息状态
5
处理
口令
4
监控
系统
6
配置信息 显示动作
状态 ( 完
成, 进行
中 )
控制板
控制板显示
警 报
电话线
传感器
传感器事件
闪烁标志
警报状态
时间溢出
警报信号
启 /停开关
数据字典( DD)
? 数据字典是对所有与系统相关的数据元
素的一个有组织的列表,以及精确的、
严格的定义,使得用户和系统分析员对
于输入、输出、存储成分和中间计算结
果有共同的理解。
? 数据字典把不同的需求文档和分析模型
紧密结合在一起
数据字典的作用
? DFD中的数据流、数据存储表示某个
有组织的数据集合,它们要由 SA的
其他描述工具 -需求字典 (数据字典 )
来描述,包括,
? 词条描述
? 数据结构描述
? 加工逻辑说明
数据字典的内容
? DD包含的信息
? 名称(标识)
? 别名
? 来源
? 去向
? 组成(内容描述)
? 流动属性(频率、数
据量)
? 补充信息
? 数据的层次关系
? 原数据元素
? 组合项
? 重复项
? 选择项
? 可选项
数据字典基本符号
= 表示, 等于,,, 定义为,,, 由什么构成,
+ 表示, 与,,, 和,
[|] 表示, 或,, 即选择括号中用, |”号分隔
的各项中的某一项
{ } 表示, 重复,, 即括号中的项要重复若干次,
重复次数的上下限也可以在括号边上标出
( ) 表示, 可选,, 即括号中的项可以没有
** 表示, 注释,
( 1)数据流词条描述
? 数据流名,
? 说明:简要介绍作用即它产生的原
因和结果
? 数据流来源:来自何方
? 数据流去向:去向何处
? 数据流组成:数据结构
? 数据量流通量:数据量,流通量
举例,


单 发票 领书 单 审查并
开发票
开领
书单
无效书单
学生 1 2
各班学生
用 书 表
学生
教材存量表
数据流词条说明举例
数据流名,发票
别名, 无
简述, 学生购书时填写的项目
来源, 学生
去向, 加工 1,审查并开发票”
组成, (学号 )+姓名+{书号+数量}
数据流量,1000次 /周
高峰值,开学期间 1000次 /天
( 2)数据元素词条描述
? 数据元素名,
? 类型:数字(离散值,连续值),
文字(编码类型)
? 长度,
? 取值范围,
? 相关的数据元素及数据结构,
数据元素词条举例
数据项名,货物编号
别名,G-No,G-num
简述,本公司的所有货物的编号
类型,字符串
长度,10
取值范围及含义,
第 1位,[J| G] (进口 /国产 )
第 2-4位,LB01.,LB29 (类别 )
第 5-7位:, A00”..“A99” (规格 )
第 8-10位:, 001”..“999”(品名编号 )
( 3)数据文件词条描述
? 数据文件名,
? 简述:存放的是什么数据
? 输入数据,
? 输出数据,
? 数据文件组成:数据结构
? 存储方式:顺序,直接,关键码
? 存取频率,
数据文件(存储)词条举例
文件名,库存记录
别名, 无
简述,存放库存所有可供货物的信息
组成, 货物名称+编号+生产厂家
+单价+库存量
组织方式,索引文件,以货物编号为
关键字
查询要求,要求能够立即查询
( 4)加工逻辑词条描述
? 加工名,
? 加工编号:反映该加工的层次
? 简要描述:加工逻辑及功能简述
? 输入数据流,
? 输出数据流,
? 加工逻辑:简述加工程序,加工顺

加工逻辑词条举例
加工逻辑名,登记报名单
编号,1.0
激活条件:收到报名单
加工逻辑,{1.1 检查报名单
+ 1.2 编准考证号
+ 1.3 登记考生 }
执行频率,2000次 /日
( 5)源点及汇 (终 )点词条描述
? 名称:外部实体名
? 简要描述:什么外部实体
? 有关数据流,
? 数目,
DD表示
F1:航班信息文件 = {航空公司名称+航班号+起点+终点+日期 +起飞时
间+降落时间 }
航空公司名称= 2{字母 }4
航班号= 3{十进制数字 }3
字母=, A”…,Z”
十进制数字=, 0”…,9”
起点=终点= 1{汉字 }10
起飞时间=降落时间=时+分
时=, 00”…,23”
分=, 00”…,59”
日期=年+月+日
年= [2000| 2001| 2002| 2004]
月=, 01”…,12”
日=, 01”…,31”
数据组合
重复项,起点=终点= 1{汉字 }10
航空公司名称= 2{字母 }4
航班号= 3{十进制数字 }3
组合项,日期=年+月+日
起飞时间=降落时间=时+分
选择项,年= [2000| 2001| 2002| 2004]
原数据项,字母=, A”…,Z”
十进制数字=, 0”…,9”
时=, 00”…,23”
分=, 00”…,59”
月=, 01”…,12”
日=, 01”…,31”
限制重复次数举例
{ 3 5 或 5 3 { } 表示允许重复 3-5次 { }
3 3 或 3 3 { } 表示恰好重复 3 次 { }
{ }
{ }
1 表示至少出现 1 次
表示允许重复 0至任意 次
办理取款手续的 DFD 图


检验
付款 登录
存折
帐卡
检验不合格
现款 付款信息
存折格式
日期
年月日 摘要 支出 存入 余额 操作 复核
户名, 储蓄网点名称, 帐号, 开户日,
性质, 印密,
DD
存折 = 户名 +所号 +帐号 +开户日 +性质 +(印密 )+1{存取行 }20
户名 = 2{字母 }24
所号 =,001”..“999”
帐号 =,00000001”..“99999999”
开户日 = 年 +月 +日
性质 =,1”..“6”
印密 =,0”
存取行 = 日期 +(摘要) +支出 +存入 +余额 +操作 +复核
日期 =年 +月 +日
年 =,1900”..“3000” 月 =,01”..“12” 日 =,01”..“31”
摘要 = 1{字母 }4
支出 = 金额
金额 =,00000000.01”..“999999999.99” … …
数据字典示例
电话号码 =[当地分机号 |外地号码 ]
当地分机号 =[2001|2002… |2999]
外地号码 =9+[当地号码 |长途号码 ]
当地号码 =前缀 +访问的号码
长途号码 =( 1) +区号 +当地号码
前缀 =[795|799|874|877]
访问的号码 ={[0|1|2|3|4|5|6|7|8|9]}4
区号 =
状态转换图( STD)
? 通过描述状态以及导致系统改变状态的
事件来表示系统的行为
? STD可以被用来描述 CSPEC
? STD的基本符号,
? (1)状态
? (2)转移
STD示意
系统在, 状态 1”
当, 事件 1”发
生时采取, 动
作 1”将状态转
移到, 状态 3”
状态 1
状态 3
状态 2 事件 1
动作 1
事件 2
动作 2
事件 3
动作 3
事件 4
动作 4

用户输入
监控
系统状态
基于传感器
事件的动作
显示
用户反馈
闪烁标记
引发显示消息与状态
时间溢出
引发与用户交互
启 /停开关
引发监控系统
无传感器事件
引发监控系统
传感器事件
引发显示消息与状态
启 /停开关
引发显示消息与状态 显示动作状态
引发与用户交互
处理说明
? 数据流图的每一个基本处理 ( 即不再进一步被
分解的处理 ) 都必须有一个处理说明给出这个
处理的精确描述 。 而其它中间处理则可以没有
处理说明, 事实上它可由其子处理, 子子处理
的说明来描述 。
? 理想的处理说明应该既严格精确又容易被软件
设计人员和用户理解 。 但目前通常还是用自然
语言书写的 。 此外, 常用的方式还有结构化语
言, 决策表, 决策树等 。
处理说明的要求
? 对数据流图的每一个基本处理,必须有
一个基本处理说明
? 基本处理说明必须描述基本处理如何把
输入数据流变换为输出数据流的处理规

? 处理说明必须描述实现处理的策略而不
是实现处理的细节
? 处理说明中包含的信息应是充足的,完
备的,有用的,无冗余的
加工说明组成
输入
数据
加工
逻辑
输出
数据
加工说明
描述工具
结构化
语言
判定

判定

描述把输入数据流变
换为输出数据流的加工过
程,是加工说明的主体。
( 1)结构化语言(英语)
? 结构化英语的词汇表由
? 英语命令动词
? 数据词典中定义的名字
? 有限的自定义词
? 逻辑关系词 IF_THEN_ELSE,
CASE_OF, WHILE_DO,
REPEAT_UNTIL等组成。
结构化语言
? 是一种介于自然语言和形式化语言之间的语言
? 语言的 正文用基本控制结构进行分割,加工中
的 操作用自然语言短语来表示
? 其基本控制结构有三种,
? 简单陈述句结构,避免复合语句;
? 重复结构, while_do 或
repeat_until 结构。
? 判定结构, if_then_else 或
case_of 结构;
商店业务处理系统中“检查发货
单”
if 发货单金额超过 $500 then
if 欠款超过了 60天 then
在偿还欠款前不予批准
else (欠款未超期)
发批准书,发货单
else (发货单金额未超过 $500)
if 欠款超过 60天 then
发批准书,发货单及赊欠报告
else (欠款未超期)
发批准书,发货单
( 2)判定表
? 如果数据流图的加工需要依赖于
多个逻辑条件的取值,使用判定
表来描述比较合适
以“检查发货单”为例
判定表格式
( 3)判定树
? 判定树也是用来表达加工逻辑的一种工
具。有时侯它比判定表更直观。





金额 >$500
金额 ?$500
欠款 >60天 不发出批准书
欠款 ?60天
发货单
发出批准书,
欠款 >60天 发出批准书,
发货单及赊欠报告
欠款 ?60天 发出批准书,发货单
练习题
? 对以下软件建立软件需求规格说明文档,
? 辅助图书馆处理借还图书的软件系统
? 缺少条件可自行假设
? 在复习前和其它练习题结果一起提交
谢谢!
68389085( O)
68389504( H)
mdtang@btamail.net.cn