软件工程 第四章
合集下载
软件工程第四章 结构化分析

软件需求分析阶段的工作,可以分成以下四个方面 :对问题的识别、分析与综合、制定规格说明以及 ( )。 A.总结 B.实践性报告 C.需求分析评审 D.以上答案都不正确
答案:C
需求验证应该从下述几个方面进行验证:(C ) A 可靠性、可用性、易用性、重用性 B可维护性、可移植性、可重用性、可测试性 C一致性、现实性、完整性、有效性 D 功能性、非功能性
3、需求分析步骤
1、需求获取
3、亲身实践:观察用户工作流程
优点: 1. 通过直接观察提取用户或系统的特性; 2. 有助于理解难以用语言描述清楚的复杂业务。 3. 更加准确和真实 缺点:
1. 观察可能使用户紧张,从而表现与往常不同。 2. 比较费时间
3、需求分析步骤
1、需求获取
3、需求分析步骤
3、需求分析步骤
3 需求描述
1. 又叫:需求规约
2. 是分析任务的最终产物,给出对目标软件的 各种需求。
3. 需求规约作为用户和开发者之间的一个协议 (需求规格说明书),在之后的软件工程各 个阶段发挥重要作用
软件需求分析阶段的目的是澄清用户的要求 ,并把双方共同的理解明确地表达成一份书 面文档——(软件需求规格说明书)。
经调查,系统分析员给出有问题的初略陈述, 其中部分描述如下:某商场的采购部门要求每 天开出定购清单,交采购员输入系统;仓库管 理员还要将库存信息此输入系统,经库存业务 (进贷或出贷)处理后输出。从这段描述可知 该部分数据流图中的外部项为:
A.采购员、仓库管理员 B.定购清单、库存业务 C.库存业务 D.定购清单、采购员 答案A
3、需求分析步骤
4、需求验证
1. 进行需求评审
2. 验证需求的一致性
3. 验证需求的现实性
软件工程-总体设计

设 构约束。
计
(2)子模式设计
子模式是用户使用的数据视图。
过 (3)完整性(Integrality)和安全性(Security)设计
程 (4)优化(Optimize)
主要目的是改进模式和子模式以优化数据的存取。
前一页
总
体
制定测试计划
的
在软件开发的早期阶段考虑测试
设 计
(Testing)问题,能促使软件设计人员 在设计时注意提高软件的可测试性 。
程 设计过程的下一个重要阶段——结构设计。
前一页
功能分解
总
体 为了最终实现目标系统,必须设计出组成 这个系统的所有程序和文件(或数据库)。对
的 程序(特别是复杂的大型程序)的设计,通常
设 分为两个阶段完成:
计
结构设计(Structure Design) :是总体设
计阶段的任务,确定程序由那些模块组
模块彼此间互相依赖(连接)的紧密程度。
前一页
耦合度
耦合度可以分为七级:
软件设计时应尽量使用数据 藕合,减少控制藕合,限制 外部环境藕合和公共数据藕 合,杜绝内容藕合。
非直接藕合 低
数据藕合
控制藕合
藕
特征藕合
合 度
外部藕合
公共藕合 内容藕合 高
数据耦合 (Data Coupling):如果两
个模块彼此间通过参数交换信息, 而且交换的信息仅仅是数据,那么 这种耦合称为数据耦合。
设 计
设函数C(x)定义问题x的复杂程度, 函数E(x)确定解决问题x需要的工作量
的
(时间),对于两个问题p1和p2,如果
概 念
C(p1)> C(p2)
和
E(p1)> E(p2)
软件工程第4章 软件设计

5. 设计软件结构 通常程序中的一个模块完成一个适当的子功能。应 该把模块组织成良好的层次系统,顶层模块调用它 的下层模块以实现程序的完整功能,每个下层模块 再调用更下层的模块,从而完成程序的一个子功能, 最下层的模块完成最具体的功能。
6. 设计数据库 对于需要使用数据库的那些应用系统,软件工程师 应该在需求分析阶段所确定的系统数据需求的基础 上,进一步设计数据库。
高内聚也有两类:如果一个模块内的处理元素和同 一个功能密切相关,而且这些处理必须顺序执行 (通常一个处理元素的输出数据作为下一个处理元 素的输入数据),则称为顺序内聚。根据数据流图 划分模块时,通常得到顺序内聚的模块,这种模块 彼此间的连接往往比较简单。如果模块内所有处理 元素属于一个整体,完成一个单一的功能,则称为 功能内聚。功能内聚是最高程度的内聚。
(2) 用户手册根据总体设计阶段的结果,修改更正 在需求分析阶段产生的初步的用户手册。
(3) 测试计划包括测试策略,测试方案,预期的测 试结果,测试进度计划等等。 (4) 详细的实现计划 (5) 数据库设计结果
9. 审查和复审 最后应该对总体设计的结果进行严格的技术审查, 在技术审查通过之后再由使用部门的负责人从管理 角度进行复审。
为什么模块的独立性很重要呢?主要有两条理由: 第一,有效的模块化(即具有独立的模块)的软件比 较容易开发出来。这是由于能够分割功能而且接口 可以简化,便于多人分工合作开发同一个软件。
第二,独立的模块比较容易测试和维护。这是因为 相对说来,修改设计和程序需要的工作量比较小, 错误传播范围小,需要扩充功能时能够“插入”模块。
(2)详细设计。详细设计阶段的根本目标是确定 应该怎样具体地实现所要求的系统,也就是说,经 过这个阶段的设计工作,应该得出对目标系统的精 确描述,从而在编码阶段可以把这个描述直接翻译 成用某种程序设计语言书写的程序。 详细设计阶段的任务还不是具体地编写程序,而是 要设计出程序的“蓝图”,结果基本上决定了最终 的程序代码的质量。
软件工程第四章

4.3.2、面向数据结构的设计方法 、
2、Jackson方法 (1) 分析并确定输入数据和输出数据的逻辑结构, 并用Jackson 图描绘这些数据结构。 (2) 找出输入数据结构和输出数据结构中有对应关 系的数据单元。
4.3.2、面向数据结构的设计方法 、
2、Jackson方法 (3) 用下述三条规则导出描绘程序结构的Jackson 图: ① 为每对有对应关系的数据单元,按照它们在数据结构图 中的层次在程序结构图的相应层次画一个处理框; ② 根据输入数据结构中剩余的每个数据单元所处的层次, 在程序结构图的相应层次分别为它们画上对应的处理框; ③ 根据输出数据结构中剩余的每个数据单元所处的层次, 在程序结构图的相应层次分别为它们画上对应的处理框。
4.2.2、模块独立性 、
1、耦合性 (4)内容耦合:出现下列情况之一就认为是 内容耦合:一个模块访问另一个模块的内 部数据;一个模块不通过正常入口而转到 另一个模块内部;两个模块有一部分程序 代码重叠;一个模块有多个入口。
4.2.2、模块独立性 、
1、耦合性 对于模块设计,尽量使用数据耦合,少用 控制耦合,限制公共环境耦合的范围,完 全不用内容耦合
4.3.2、面向数据结构的设计方法 、
面向数据结构的设计方法就是用数据结构作为程序 设计的基础。这种方法的最终目标是得出对程序处 理过程的描述,即在完成了软件结构设计之后,可 以使用面向数据结构的方法来设计每个模块的处理 过程。
4.3.2、面向数据结构的设计方法 、
1、Jackson图 (1) 逻辑数据结构 (2) Jackson图的优点 (3) Jackson图与层次方框图的比较
4.2.3、软件结构设计 、
软件结构图,是Yourdon 提出的进行软件 结构设计的有力工具。 主要的模块:传入模块、传出模块、变换 模块和协调模块。
软件工程 第四章 概要设计

4.控制耦合 模块之间传递的不是数据信息,而是控制信息如标志、开关量,一个模块控制了另一模块 的功能。
第4章
4.4 模块的独立性
15
4.4.1 耦合性(Coupling)
5.外部耦合 一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为 外部耦合。 6.公共耦合
若一组模块都访问同一全局数据结构,则称之为公共耦合。公共数据环境可以是全局数据
4
4.2.1 概要设计的任务
概要设计的基本任务是: (1)设计软件系统结构; (2)数据结构及数据库设计; (3)编写概要设计文档;
(4)评审概要设计文档。
第4章
4.2 概要设计的任务与步骤
5
4.2.2 概要设计的步骤
概要设计的一般步骤如下: 1.选定体系结构 2.确定设计方案 3.设计软件结构
4.数据结构及数据库设计
(2)一个模块不通过正常入口而直接转入到另一个模块的内部;
(3)两个模块有一部分代码重叠(该部分代码具有一定的独立功能); (4)一个模块有多个入口。
第4章
4.4 模块的独立性
17
4.4.2 内聚性(Cohesion)
一个模块内各个元素彼此结合的紧密程度用内聚(或称聚合)来度量。一个理想的模块只
完成一个功能,模块设计的目标之一是尽可能高内聚。
第4章
4.4 模块的独立性
21
4.4.2 内聚性(Cohesion)
5.通信内聚
指模块内所有处理功能都通过公用数据而发生关系。即模块内各个组成部分都使用相同的 输入数据或产生相同的输出结果。
第4章
4.4 模块的独立性
22
4.4.2 内聚性(Cohesion)
第4章
4.4 模块的独立性
15
4.4.1 耦合性(Coupling)
5.外部耦合 一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为 外部耦合。 6.公共耦合
若一组模块都访问同一全局数据结构,则称之为公共耦合。公共数据环境可以是全局数据
4
4.2.1 概要设计的任务
概要设计的基本任务是: (1)设计软件系统结构; (2)数据结构及数据库设计; (3)编写概要设计文档;
(4)评审概要设计文档。
第4章
4.2 概要设计的任务与步骤
5
4.2.2 概要设计的步骤
概要设计的一般步骤如下: 1.选定体系结构 2.确定设计方案 3.设计软件结构
4.数据结构及数据库设计
(2)一个模块不通过正常入口而直接转入到另一个模块的内部;
(3)两个模块有一部分代码重叠(该部分代码具有一定的独立功能); (4)一个模块有多个入口。
第4章
4.4 模块的独立性
17
4.4.2 内聚性(Cohesion)
一个模块内各个元素彼此结合的紧密程度用内聚(或称聚合)来度量。一个理想的模块只
完成一个功能,模块设计的目标之一是尽可能高内聚。
第4章
4.4 模块的独立性
21
4.4.2 内聚性(Cohesion)
5.通信内聚
指模块内所有处理功能都通过公用数据而发生关系。即模块内各个组成部分都使用相同的 输入数据或产生相同的输出结果。
第4章
4.4 模块的独立性
22
4.4.2 内聚性(Cohesion)
软件工程第4章

试用有穷状态机说明上述的图书流通系统。
4-5 试用Petri网说明第4题所述图书馆中一本书的循 环过程。在规格说明中应该包括操作H、C及R。
4-6 试用Z语言对第4题所述图书馆图书流通系统做一 个完整的规格说明。
•
生 活 中 的 辛 苦阻挠 不了我 对生活 的热爱 。20.12.2820.12.28Monday, December 28, 2020
第二条和第三条规则,分别对应于电梯即将下降 或者没有待处理的请求的情况。
4.2.3 评价
有穷状态机方法采用了一种简单的格式来描述规 格说明:
当前状态+事件+
这种形式的规格说明易于书写、易于验证,而且 可以比较容易地把它转变成设计或程序代码。
有穷状态机方法比数据流图技术更精确
4.3 Petri网
4.3.1 概念
所有按钮的集合,因此,Z规格说明开始于: 〔Button〕 2. 状态定义 一个Z规格说明由若干个“格(schema)”组成,每个 格含有变量说明和限定变量取值范围的谓词。例如, 格S的格式如图4.12所示。
图4.12 Z格S的格式
3. 初始状态 对于电梯问题来说,抽象的初始状态为:
ˆ Button_Init Button_State|pushed=Φ〕
第4章 形式化说明技术
4.1 概述 4.2 有穷状态机 4.3 Petri网 4.4 Z语言 4.5 小结 习题
按照形式化的程度,可以把软件工程使用的方 法划分成非形式化、半形式化和形式化3类:
• 用自然语言描述需求规格说明,是典型的非形式 化方法。
• 用数据流图或实体-联系图建立模型,是典型的 半形式化方法。
有穷状态机对本产品进行规格说明: 这个问题中有两个按钮集。
4-5 试用Petri网说明第4题所述图书馆中一本书的循 环过程。在规格说明中应该包括操作H、C及R。
4-6 试用Z语言对第4题所述图书馆图书流通系统做一 个完整的规格说明。
•
生 活 中 的 辛 苦阻挠 不了我 对生活 的热爱 。20.12.2820.12.28Monday, December 28, 2020
第二条和第三条规则,分别对应于电梯即将下降 或者没有待处理的请求的情况。
4.2.3 评价
有穷状态机方法采用了一种简单的格式来描述规 格说明:
当前状态+事件+
这种形式的规格说明易于书写、易于验证,而且 可以比较容易地把它转变成设计或程序代码。
有穷状态机方法比数据流图技术更精确
4.3 Petri网
4.3.1 概念
所有按钮的集合,因此,Z规格说明开始于: 〔Button〕 2. 状态定义 一个Z规格说明由若干个“格(schema)”组成,每个 格含有变量说明和限定变量取值范围的谓词。例如, 格S的格式如图4.12所示。
图4.12 Z格S的格式
3. 初始状态 对于电梯问题来说,抽象的初始状态为:
ˆ Button_Init Button_State|pushed=Φ〕
第4章 形式化说明技术
4.1 概述 4.2 有穷状态机 4.3 Petri网 4.4 Z语言 4.5 小结 习题
按照形式化的程度,可以把软件工程使用的方 法划分成非形式化、半形式化和形式化3类:
• 用自然语言描述需求规格说明,是典型的非形式 化方法。
• 用数据流图或实体-联系图建立模型,是典型的 半形式化方法。
有穷状态机对本产品进行规格说明: 这个问题中有两个按钮集。
软件工程(第五版)-习题及答案---第四章

2、(√)概要设计与详细设计之间的关系是全局和局部的关系。
3、(×)一个模块的作用范围应该大于该模块的控制范围。
4、(√)模块间的耦合性越强,则模块的独立性越弱。
5、(×)在设计模块时,应使一个模块尽量包括多个功能。
6、(√)软件结构图可以利用数据流图映射出来。
7、(×)结构化设计是一种面向数据结构的设计方法。
8、(√)在结构化设计过程中首先要确认DFD。
二、选择题
1、软件结构图的形态特征能反映程序重用率的是(C)。
A、深度B、宽度C、扇入D、扇出
2、概要设计的目的是确定整个系统的(B)。
A、规模B、功能及模块结构
C、费用D、测试方案
3、耦合是对软件不同模块之间互连程度的度量。各种耦合从强到弱的排列为(C)。
a内容耦合控制耦合数据耦合公共环境耦合b内容耦合控制耦合公共环境耦合数据耦合c内容耦合公共环境耦合控制耦合数据耦合d控制耦合内容耦合数据耦合公共环境耦合4当一个模块直接使用另一个模块的内部数据时这种模块之间的耦合为dd
一、判断题
1、(√)如果在需求分析阶段采用了结构化分析方法,则软件设计阶段就应采用结构化设计方法。
5、数据耦合和控制耦合相比,则(B)成立。
A、数据耦合的耦合性强B、控制耦合的耦合性强
C、两者的耦合性相当D、两者的耦合性需要根据具体情况分析
6、衡量模块独立性的标准是(D)。
A、耦合的类型B、内聚的类型
C、模块信息的隐藏性D、耦合性和内聚性
7、如果某种内聚要求一个模块中包含的任务必须在同一段时间内执行,则这种内聚为(A)。
……
feturn fee;
}
答:模块A和B是数据耦合,模块B是功能内聚。
2、
模块A:
3、(×)一个模块的作用范围应该大于该模块的控制范围。
4、(√)模块间的耦合性越强,则模块的独立性越弱。
5、(×)在设计模块时,应使一个模块尽量包括多个功能。
6、(√)软件结构图可以利用数据流图映射出来。
7、(×)结构化设计是一种面向数据结构的设计方法。
8、(√)在结构化设计过程中首先要确认DFD。
二、选择题
1、软件结构图的形态特征能反映程序重用率的是(C)。
A、深度B、宽度C、扇入D、扇出
2、概要设计的目的是确定整个系统的(B)。
A、规模B、功能及模块结构
C、费用D、测试方案
3、耦合是对软件不同模块之间互连程度的度量。各种耦合从强到弱的排列为(C)。
a内容耦合控制耦合数据耦合公共环境耦合b内容耦合控制耦合公共环境耦合数据耦合c内容耦合公共环境耦合控制耦合数据耦合d控制耦合内容耦合数据耦合公共环境耦合4当一个模块直接使用另一个模块的内部数据时这种模块之间的耦合为dd
一、判断题
1、(√)如果在需求分析阶段采用了结构化分析方法,则软件设计阶段就应采用结构化设计方法。
5、数据耦合和控制耦合相比,则(B)成立。
A、数据耦合的耦合性强B、控制耦合的耦合性强
C、两者的耦合性相当D、两者的耦合性需要根据具体情况分析
6、衡量模块独立性的标准是(D)。
A、耦合的类型B、内聚的类型
C、模块信息的隐藏性D、耦合性和内聚性
7、如果某种内聚要求一个模块中包含的任务必须在同一段时间内执行,则这种内聚为(A)。
……
feturn fee;
}
答:模块A和B是数据耦合,模块B是功能内聚。
2、
模块A:
软件工程教案_4(第四章)

耦合强度依赖的因素: 耦合强度依赖的因素:
•一模块对另一模块的引用 •一模块向另一模块传递的数据量 •一模块施加到另一模块的控制的数量 •模块间接口的复杂程度
模块间耦合的类型
低 耦 合 性 无直接耦合
(低耦合) 数据耦合 低耦合)
强 模 块 独 立 性 弱
标记耦合
(中耦合) 控制耦合 中耦合)
外部耦合
§4.3 模块的独立性
4.3.1 模块独立性的概念 模块独立的含义: 模块独立的含义:
模块完成独立的功能 符合信息隐蔽和信息局部化原则 模块间关连和依赖程度尽量小
4.3.2 模块独立性的度量
模块独立性取决于模块的 内部和外部特征。 内部和外部特征。 SD方法提出的定性的度量标准: 方法提出的定性的度量标准: • 模块之间的耦合性 • 模块自身的内聚性
数据耦合举例
开发票 单价 数量 计算水费 金额
(3) 标记耦合(特征耦合) 3) 标记耦合(特征耦合)
如两个模块通过传递数据结构 如两个模块通过传递数据结构
(不是简单数据,而是记录、数组 不是简单数据,而是记录、 等)加以联系,或都与一个数据 加以联系,或都与一个数据
结构有关系, 结构有关系, 则称这两个模块 有关系 间存在标记偶合。 间存在标记偶合。
第四章 软件设计
主要内容: 主要内容: ▲ 软件设计的目标和任务 ▲ 软件设计基础 ▲ 模块的独立性 ▲ 结构化设计方法 ▲ 数据设计及文件设计 ▲ 过程设计
讨论要点
(1)如何将分析模型转换为软件 (1)如何将分析模型转换为软件 设计? 设计? (2)作为软件工程师在软件设计 (2)作为软件工程师在软件设计 方面应使用哪些基本原则和 概念? 概念?
将标记耦合修改为数据耦合举例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.2 有穷状态机
4.2.1 概念 一个保险箱上装了一个复合锁,锁有三 个位臵,分别标记为1、2、3,转盘可向左 (L)或向右(R)转动。这样,在任意时刻转盘 都有6种可能的运动,即1L、1R、2L、2R、 3L和3R。保险箱的组合密码是1L、3R、2L, 转盘的任何其他运动都将引起报警。图4.1 描绘了保险箱的状态转换情况。
11
转换函数T:如表4.1所示。 初始态S:保险箱锁定。 终态集F:{保险箱解锁,报警}。 一个有穷状态机可以表示为一个5元组(J, K,T,S,F),其中: J是一个有穷的非空状态集; K是一个有穷的非空输入集; T是一个从(J-F)×K到J的转换函数; S∈J,是一个初始状态; 12 F J,是终态集。
当用Petri网表示电梯系统的规格说明 时,每个楼层用一个位臵Ff代表(1≤f≤m), 在Petri网中电梯是用一个权标代表的。在 位臵Ff上有权标,表示在楼层f上有电梯。
39
1. 电梯按钮 第一条约束C1:每部电梯有m个按钮, 每层对应一个按钮。当按下一个按钮时该 按钮指示灯亮,指示电梯移往相应的楼层。 当电梯到达指定的楼层时,按钮将熄灭。 电梯中楼层f的按钮,在Petri网中用 位臵EBf表示(1≤f≤m)。在EBf上有一个权 标,就表示电梯内楼层f的按钮被按下了。
13
4.2 有穷状态机
为了对一个系统进行规格说明,通常都 需要对有穷状态机做一个很有用的扩展,即 在前述的5元组中加入第6个组件——谓词集 P,从而把有穷状态机扩展为一个6元组,其 中每个谓词都是系统全局状态Y的函数。转 换函数T现在是一个从(J-F)×K×P到J的函 数。现在的转换规则形式如下: 当前状态„菜单‟+事件„所选择的项‟ + 。
14
4.2 有穷状态机
在一幢m层的大厦中需要一套控制n部电 梯的产品,要求这n部电梯按照约束条件C1, C2和C3在楼层间移动。
C1:每部电梯内有m个按钮,每个按钮代 表一个楼层。当按下一个按钮时该按钮指示 灯亮,同时电梯驶向相应的楼层,到达按钮 指定的楼层时指示灯熄灭。
15
4.2 有穷状态机
C2:除了大厦的最低层和最高层之外,每层 楼都有两个按钮分别请求电梯上行和下行。 这两个按钮之一被按下时相应的指示灯亮, 当电梯到达此楼层时灯熄灭,电梯向要求的 方向移动。 C3:当对电梯没有请求时,它关门并停在当 前楼层。
6
4.1.3
应用形式化方法的准则
• 应该仔细选择一种适用于当前项目的形式化说明 技术。 • 应该形式化,但不要过分形式化。用形式化方法 仔细说明系统中易出错的或关键的部分。 • 为了使用形式化方法,通常需要事先进行大量的 培训。最好预先估算所需的成本并编入预算。 • 应该有形式化方法顾问提供指导和培训。 • 把形式化方法和结构化方法或面向对象方法集成 起来,取长补短。 • 使用自然语言注释形式化的规格说明书,建立详 尽的文档。 7
• 除了使用形式化说明技术外,在系统开发过 程中必须仍然实施其他质量保证活动。 • 不应该盲目依赖形式化方法。必须用其他方 法(例如,评审、测试)来验证软件正确性。 • 应该测试、测试再测试。 • 软件重用是降低软件成本和提高软件质量的 合理的方法。用形式化方法说明的软件构件 具有清晰定义的功能和接口,使得它们有更 好的可重用性。 8
图4.3楼层按钮的状态转换图
22
谓词S(d,e,f) :电梯e停在f层并且移
动方向由d确定为向上(d=U)或向下 (d=D)或待定(d=N)。
23
使用谓词S(d,e,f),形式化转换规则为: FBOFF(d,f)+FBP(d,f)+not S(d,1…n,f) FBON(d,f) FBON(d,f)+EAF(1…n,f)+S(d,1…n,f) FBOFF(d,f) 其中,d=U or D。 如果在f层请求电梯向d方向运动的楼层按钮处于关 闭状态,现在该按钮被按下,并且当时没有正停在 f层准备向d方向移动的电梯,则该楼层按钮打开。 反之,如果楼层按钮已经打开,且至少有一部电梯 到达f层,该部电梯将朝d方向运动,则按钮将关闭。
3
4.1 概述
4.1.1 非形式化方法的缺点 用自然语言书写的系统规格说明书,可 能存在矛盾、二义性、含糊性、不完整性及 抽象层次混乱等问题。 所谓矛盾是指一组相互冲突的陈述。 二义性是指读者可以用不同方式理解的陈 述。
4
4.1 概述
系统规格说明书是很庞大的文档,因此, 几乎不可避免地会出现含糊性。比如:“系 统界面应该是对用户友好的。”实际上,这 样笼统的陈述并没有给出任何有用的信息。 不完整性可能是在系统规格说明中最常遇 到的问题之一。 抽象层次混乱是指在非常抽象的陈述中 混进了一些关于细节的低层次陈述。这样的 规格说明书使得读者很难了解系统的整体功 5 能结构。
20
楼层按钮
FB(d,f)表示f层请求电梯向d方向运动的按钮。 楼层按钮的状态如下: FBON(d,f):楼层按钮(d,f)打开 FBOFF(d,f):楼层按钮(d,f)关闭 如果楼层按钮已经打开,而且一部电梯到达f层,则 按钮关闭。 如果楼层按钮原来是关闭的,被按下后该按钮将打 开。 FBP(d,f):楼层按钮(d,f)被按下 EAF(1…n,f):电梯1或…或n到达f层 其中1…n表示或为1或为2…或为n。 21
4.1.2
形式化方法的优点
• 能够简洁准确地描述物理现象、对象或动作 的结果。数学特别适合于表示状态,也就是 表示“做什么”。 • 几乎没有二义性,而且可以用数学方法来验 证,以发现存在的矛盾和不完整性。 • 可以在不同的软件工程活动之间平滑地过渡。 功能规格说明、系统设计都可以用数学表达, 程序代码也是一种数学符号。 • 它提供了高层确认的手段。可以使用数学方 法证明,设计符合规格说明,程序代码正确 地实现了设计结果。
9
4.2 有穷状态机
图4.1 保险箱的状态转换图
10
4.2 有穷状态机
一个有穷状态机包括下述5个部分:状 态集J、输入集K、由当前状态和当前输入确 定下一个状态(次态)的转换函数T、初始态S 和终态集F。对于保险箱的例子,相应的有 穷状态机的各部分如下。 状态集J:{保险箱锁定,A,B,保险箱解 锁,报警}。 输入集K:{1L,1R,2L,2R,3L,3R}。
33
4.3 Petri网
Petri网的标记是 在Petri网中权标 (token)的分配。
当每个输入位臵所拥 有的权标数大于等于 从该位臵到转换的线 数时,就允许转换。
图4.6 带标记的Petri网
34
4.3 Petri网
图4.7 图4.6的Petri网在转换 t1被激发后的情况
35
4.3 Petri网
25
图4.4电梯的状态转换图 DC(e,f):电梯e在楼层f关上门 ST(e,f):电梯e靠近f层时触发传感器, 电梯控制器决定在当前楼层电梯是否停下
RL:电梯按钮或楼层按钮被按下进入打开 状态,登录需求
26
图4.4 电梯的状态转换图
27
电梯的状态转换规则
S(U,e,f)+DC(e,f) M(U,e,f+1) S(D,e,f)+DC(e,f) M(D,e,f-1) S(N,e,f)+DC(e,f) W(e,f)
图4.8 图4.7的Petri网在转换 t2被激发后的情况
36
4.3 Petri网
图4.9 含禁止线的Petri网
37
4.3 Petri网
禁止线是用一个小圆圈而不是用箭头 标记的输入线。 当每个输入线上至少有一个权标,而 禁止线上没有权标的时候,相应的转换才 是允许的。
38
例 子
现在把Petri网应用于上一节讨论过的 电梯问题。
如果电梯按钮(e,f)发光且电梯到达f层,该按钮将 熄灭。 如果按钮熄灭,则按下它时,按钮将发光。 上述描述中包含了两个事件,它们分别是: EBP(e,f):电梯按钮(e,f)被按下 EAF(e,f):电梯e到达f层
18
图4.2 电梯按钮的状态转换图
19
谓词V(e,f) 的含义如下: V(e,f):电梯e停在f层 如果电梯按钮(e,f)处于关闭状态„当前状态‟, 而且电梯按钮(e,f)被按下„事件‟,而且电梯e不 在f层„谓词‟,则该电梯按钮打开发光„下个状 态‟。状态转换规则的形式化描述如下: EBOFF(e,f)+EBP(e,f)+not V(e,f) EBON(e,f) 反之,如果电梯到达f层,而且电梯按钮是打开的, 于是它就会熄灭。这条转换规则可以形式化地表示 为: EBON(e,f)+EAF(e,f)EBOFF(e,f)
16
两个按钮集:
n部电梯中的每一部都有m个按钮,一个 按钮对应一个楼层。因为这m×n个按钮 都在电梯中,所以称它们为电梯按钮。 此外,每层楼(最低层和最高层除外)有 两个按钮,一个请求向上,另一个请求
向下,这些按钮称为楼层按钮。
17
电梯按钮的状态转换图如图4.2所示。 EB(e,f)表示按下电梯e内的按钮并请求到f层去。有 按钮发光(打开)和不发光(关闭) 状态: EBON(e,f):电梯按钮(e,f)打开 EBOFF(e,f):电梯按钮(e,f)关闭
30
4.3 Petri网
Petri网是由Carl Adam Petri发明的。 用Petri网可以有效地描述并发活动。
Petri网包含4种元素:一组位臵P、
一组转换T、输入函数I以及输出函数O。
31
4.3 Petri网
I(t1)={P2,P4} I(t2)={P2}
O(t1)={P1} O(t2)={P3,P3}
图4.5 Petri网的组成
32
4.3 Petri网
更形式化的Petri网结构,是一个四元组 C=(P,T,I,O)。其中, P={P1,…,Pn}是一个有穷位臵集,n≥0。 T={t1,…,tm}是一个有穷转换集,m≥0,且T 和P不相交。 I:T→P∞为输入函数,是由转换到位臵无序单 位组(bags)的映射。 O:T→P∞为输出函数,是由转换到位臵无序单 位组的映射。