第4章软件工程
软件工程第四章 结构化分析
软件需求分析阶段的工作,可以分成以下四个方面 :对问题的识别、分析与综合、制定规格说明以及 ( )。 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. 验证需求的现实性
软件工程 第4章 形式化说明技术
行为建模
1)
2)
3)
系统的需求规格说明通常是用自然语言来叙 述的,但是用自然语言描述往往会出现二义 性。 为了直观地分析系统的动作,从特定的视点 出发描述系统的行为,需要采用动态分析的 方法。 最常用的动态分析方法
有穷状态机
时序图 Petri网
状态迁移图
状态迁移图是通过描述系统的
状态及引起系统状态转换的事 件来表示系统的行为。
形式化方法
形式化方法是建立在严格数学基础上、具有精确数学语义 的开发方法,即就是用数学语言来描述软件的设计规约。 形式化方法可以分为形式化描述和建立在形式化描述基础之 上的形式化开发 形式化的描述:用形式化的语言(具有严格的语法语义定 义的语言)描述描述软件系统及其行为模式,以更好地刻 画软件系统的性质。 形式化的开发:用形式化的语言来描述软件需求和特征, 并且通过推理验证来保证最终的软件产品是否满足这些需 求和具备这些特征,符合给定的行为模式。
应用形式化方法的准则
应该选用适当的形式化方法:主要包括有限状态机、时 序图、Petri网、Z、VDM等。 应该形式化,但不要过分形式化 应该估算成本 应该有形式化方法顾问随时提供咨询 不应该放弃传统的开发方法 应该建立详尽的文档 不应该放弃质量标准 不应该盲目依赖形式化方法 应该测试、测试再测试 应该重用
半形式化方法
软件工程使用方法可分成:非形式化、半形式化和形式化 半形式化: 结构化分析(SA)方法 利用图形等半形式化的描述方式表达需求:用数据流图、 状态转换图或实体-联系图建立数据、行为和功能模型, 形成需求说明书中的主要部分。 利用结构化语言描述加工逻辑:结构化语言是介于自然 语言和形式语言之间的一种半形式语言。加工逻辑结构 可分成外层和内层两层:外层用来描述控制结构,采用 顺序、选择、重复三种基本结构;内层对于顺序执行和 循环执行的动作,用结构化语言描述。 缺点:可能存在矛盾、二义性、含糊性、不完整性及抽 象层次混乱等问题。
软件工程第4章 软件设计
5. 设计软件结构 通常程序中的一个模块完成一个适当的子功能。应 该把模块组织成良好的层次系统,顶层模块调用它 的下层模块以实现程序的完整功能,每个下层模块 再调用更下层的模块,从而完成程序的一个子功能, 最下层的模块完成最具体的功能。
6. 设计数据库 对于需要使用数据库的那些应用系统,软件工程师 应该在需求分析阶段所确定的系统数据需求的基础 上,进一步设计数据库。
高内聚也有两类:如果一个模块内的处理元素和同 一个功能密切相关,而且这些处理必须顺序执行 (通常一个处理元素的输出数据作为下一个处理元 素的输入数据),则称为顺序内聚。根据数据流图 划分模块时,通常得到顺序内聚的模块,这种模块 彼此间的连接往往比较简单。如果模块内所有处理 元素属于一个整体,完成一个单一的功能,则称为 功能内聚。功能内聚是最高程度的内聚。
(2) 用户手册根据总体设计阶段的结果,修改更正 在需求分析阶段产生的初步的用户手册。
(3) 测试计划包括测试策略,测试方案,预期的测 试结果,测试进度计划等等。 (4) 详细的实现计划 (5) 数据库设计结果
9. 审查和复审 最后应该对总体设计的结果进行严格的技术审查, 在技术审查通过之后再由使用部门的负责人从管理 角度进行复审。
为什么模块的独立性很重要呢?主要有两条理由: 第一,有效的模块化(即具有独立的模块)的软件比 较容易开发出来。这是由于能够分割功能而且接口 可以简化,便于多人分工合作开发同一个软件。
第二,独立的模块比较容易测试和维护。这是因为 相对说来,修改设计和程序需要的工作量比较小, 错误传播范围小,需要扩充功能时能够“插入”模块。
(2)详细设计。详细设计阶段的根本目标是确定 应该怎样具体地实现所要求的系统,也就是说,经 过这个阶段的设计工作,应该得出对目标系统的精 确描述,从而在编码阶段可以把这个描述直接翻译 成用某种程序设计语言书写的程序。 详细设计阶段的任务还不是具体地编写程序,而是 要设计出程序的“蓝图”,结果基本上决定了最终 的程序代码的质量。
软件工程 第四章 概要设计
第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章软件总体设计软件总体设计是软件工程的一个重要环节,它涉及到软件系统的整体结构和架构的定义,以及软件模块之间的关系和接口的设计。
软件总体设计的目标是确保软件系统能够满足用户需求,并且具有高性能和可扩展性,同时保证系统的可维护性和可测试性。
软件总体设计的过程包括以下几个步骤:1.确定系统的功能需求:根据用户需求和系统分析的结果,定义系统应该具备的功能和特性。
2.划分系统结构:将系统划分为多个模块和子系统,确定各个模块之间的关系和层次结构。
3.定义模块接口:对每个模块定义清晰的接口,包括输入参数、输出参数和功能描述,以便模块之间的协作和集成。
4.设计系统架构:选择合适的架构风格和模式,确定系统的整体结构和组成,包括数据流、控制流和模块之间的通信。
5.设计数据结构和算法:根据系统需求和性能要求,设计合适的数据结构和算法,以满足系统的功能和性能要求。
6.设计系统界面:设计系统与用户和外部系统的界面,包括图形界面、命令行界面和数据交换接口。
7.考虑系统安全性和可靠性:在设计阶段考虑系统的安全性和可靠性需求,设计对应的安全和可靠性机制。
8.进行评审和验证:对软件总体设计进行评审和验证,确保设计的可行性和完整性。
软件总体设计的核心是系统架构设计,系统架构设计要考虑系统的功能需求、性能要求、可扩展性、可维护性、可测试性等因素。
常用的软件架构风格包括层次架构、客户端-服务器架构、分布式架构、面向服务的架构等。
选择合适的架构风格可以提高系统的灵活性和可维护性。
在软件总体设计过程中,还需要考虑到软件的适应性和可移植性。
软件应该能够适应不同平台和操作系统的要求,并能够方便地移植到其他环境中。
为了提高软件的可移植性,可以采用标准化的接口和协议,避免使用具体的硬件和操作系统依赖。
此外,软件总体设计还需要考虑到系统的可维护性和可测试性。
软件系统通常需要进行修改和维护,因此设计时需要考虑到系统的可扩展性和模块之间的解耦。
软件工程实用案例 第4章 结构化需求分析
3项目范围 3.1 第一版范围 3.2 后续版本范围 3.3 限制与排除
4项目环境 4.1 操作环境 4.2 涉众 4.3 项目属性
词汇表 参考资料 附录
4.3 需求获取
4.3.3 选择信息的来源
• 1. 涉众
• 包括用户、客户、领域专家、用户替代源(市场人员、销售人员) 等。
4.4 需求分析
4.4.1 过程建模
4.4.1.1 数据流图
3. 分层结构 (3)N层图
图4-12 功能分解示意图
4.4 需求分析
4.4.1 过程建模
4.4.1.1 数据流图
3. 分层结构 (3)N层图
图4-13 食物订货系统的1层图
4.4 需求分析
4.4.1 过程建模
4.4.1.2 微规格说明
正式规定文档所需具有的条件或能力。
(3) 对(1)或(2)所描述的条件或能力的文档化表述。 其中,(1)是从用户角度定义的,(2)是从开发人员、
系统的角度定义的。
4.1 需 求
4.1.2 需求的层次
需求通常体现为三个层次:业务需求、用户需求和系 统需求。
4.1 需 求
4.1.2 需求的层次
4.3 需求获取
4.3.2 定义项目前景和范围
• 1.明确问题
P1 决策者:生产的废品过多。
• 2.发现业务需求
BR1:提供销售订单的准确性,减少因此而产生废品。
BR2:提供销售订单的准确性,在使用后3个月内,减少50%因此而产生 的废品。
4.3 需求获取
4.3.2 定义项目前景和范围
• 3.定义解决方案及系统特性
4.3 需求获取
4.3.4 需求获取的方法
软件工程第4章习题解答
说明:1,每一笔交易有3种属性:“交易金额”、“每股售价”、“股数”。
2,“交易总额”有3种值;“每股售价”有3种值;“股数”有2种值。所以每笔交易有18种状态。(表有19列,第1列是说明列)
3,每种状态有一个决策公式。判定表中的决策方案有18行。
4,每个计算公式中只有一个变量“交易金额”,设为a。
教师的工资档案存储在行政办公室的磁带上,档案中有目前的年工资、赡养的人数、雇佣日期等信息。需要写一个计算程序计算并印出每名教师的原有工资和调整后的新工资。要求:
⑴画出此系统的数据流图;
⑵写出需求说明;
⑶设计上述的工资调整程序(要求用判断表描述),设计时请分别采用下述两种算法,并比较这两种算法的优缺点;
set START to (I+1)
else if TABLE(I) > ITEM then
set FINISH to (I-1)
endif
enddo
if TABLE(I) = ITEM or TABLE(START) = ITEM or TABLE(FINISH) = ITEM then
set FLAG to 1
解:
⑴ 系统的数据流图
⑵ 需求说明:(略)
⑶ 程序框图:
算法说明:1 此算法是先找出工资少于$26,000的人, 再进行工资调整,属算法a
2 算法a适于数据库的记录不太多的情况,在数据库中查找较费时。
但是,调整系统的主要部分少一个判断,结构清晰一些。
3 算法b适于数据库的记录较多的情况,利用数据库的排序功能可很快地将教师的档案数据按工资大小排好序,调整程序只对前若干个记录进行操作。这个算法对于修改数据库回更便捷些。
交易
软件工程导论第四章 概要设计
模式4:共享数据模式
共享数据系统以一个或多个数据库 / 数据仓库为中心进行 组织,其它部件可以从中读写存储的数据。共享数据系统还 提供并发访问、容错处理、访问权限控制等功能。 典型的共享数据系统包括: a. 数据库 b. 知识库 c. 源代码控制程序
模式5:信息系统模式
现代信息系统平台模式,主要考虑B/S模式。 B/S模式的三层:表示层(presentation),业务 层(business),和数据存储层(data access) 。 B/S模式的优点: a. 架构简化了客户端。它无需象C/S模式那样在 不同的客户机上安装不同的客户应用程序,而只需安 装通用的浏览器软件。 b. 简化了系统的开发和维护。 c. 使用户的操作变得更简单。 d. 特别适用于网上信息发布 。
第四章 概要设计
•4.1软件体系结构 •4.2概要设计任务与步骤 •4.3软件设计的基本概念 •4.4面向数据流的设计方法 •4.5面向数据结构的分析设计方法 •4.6概要设计文档评审
概要设计
一是要覆盖《需求规格说明书》的全部内容, 二是要作为指导详细设计的依据。
概要设计注重于宏观上和框架上的设计,它是软 件系统的总体结构设计、全局数据库(包括数据结 构)设计、外部接口设计、功能部件分配设计、部 件之间的接口设计。 概要设计又称为架构设计。 • 用于描述系统最顶的结构和组织形式,标识出软 件的各个组成部分。
2.子系统和模块的区别 (1)一个子系统独立一个构成系统,不依赖 于其他子系统提供的服务。 (2)一个模块通常是一个能提供一个或多个 服务的系统组件。 3.体系结构设计的结果 体系结构设计过程的结果是一个体系结构 的设计文档。
4.1软件体系结构 4.1.1概述
4.体系结构模型 (1)静态结构模型 将子系统或组件作为一个个独立的单元来开发 (2)动态过程模型 给出系统在运行时的过程组成。它与静态模型不 同。 (3)接口模型 定义每个子系统从他们的公共接口能得到的服务。 (4)关系模型 关系模型给出子系统间的数据流的关系。
第4章-实用软件工程(第4版)-陆惠恩-清华大学出版社
❖ 1、采用自顶向下、逐步求精的程序设计方法; ❖ 2、仅采用顺序、选择、重复三种基本控制结构,每种基本结构只有一个
入口、一个出口;将这三种基本控制结构根据程序的逻辑,嵌套或组合 成结构化程序,完成预定的功能。 ❖ 3、采用主程序员组的组织形式。
【例4.4】用因果图法设计测试用例
某规格说明规定:输入的第一列字符必须是A或B,第二列字符必须是一个数字。 第一、二列都满足条件时执行操作H;如果第一列字符不正确,则给出信息L; 如果第二列字符不正确,则给出信息R。
根据上述要求画出因果图,并设计测试用例。
例4.4 的因果图
例4.4的判定表
《实用软件工程(第3版)》陆惠恩编著
源程序文档编写规则 1.源程序文档书写规则:含义鲜明的标识符名称、适当的注解和程序布局阶梯式。 2. 数据说明:易于理解、便于查阅 3. 语句构造要简单明了 4. 输入输出语句要合理 5. 程序效率要满足用户需求。
▪ 程序设计主要应考虑的是程序的正确性、可理解性、可测试性和可维护性。
4.2 软件测试目标
《实用软件工程(第3版)》陆惠恩编著
8
程序流程图
《实用软件工程(第3版)》陆惠恩编著
9
程序图
《实用软件工程(第3版)》陆惠恩编著
10
计算程序的环行复杂度:
方法1:图中有4个线性无关的有向环:R1、R2、R3、R4。 在图4.4(b)中,实线弧数为14,节点数为12。因此,环行复杂度为 V(G)=14-12+2=4
《实用软件工程(第3版)》陆惠恩编著
5
4.5 设计测试方案
测试方案包括三个内容:
要测试的功能
软件工程第4章概要设计
通常,通信内聚模块是通过数据流图来定义的。
5.通信内聚(2)
6.功能内聚
一个模块中各个部分都是完成某一具体功能 必不可少的组成部分 或者说该模块中所有部分都是为了完成一项 具体功能而协同工作,紧密联系,不可分割 的 软件结构中应多使用功能内聚类型的模块
内聚类型汇总
5.标记耦合
如果一组模块通过参数表传递信息 这个参数是: 数据结构 字符串 记录 不是简单变量
标记耦合举例 计算水电费
住户情况
计算水费
水费
住户情况
电费
计算电费
“住户情况”是一个数据结构,图中模块都 与此数据结构有关. “计算水费”和“计算电费”本无关,由于 引用了此数据结构产生依赖关系,它们之间 也是标记偶合.
4.2.2 软件结构风格与策略
1.软件结构风格取决于 程序的模块结构表明了程序各个模块的 组织情况,是软件的过程表示 数据的结构表明各个数据之间的关系和 各个数据元素的约束,是软件的信息表 示
2.软件结构的独立性风格
(1).独立性 软件系统中每个模块只涉及软件要求的 具体的子功能, 而和软件系统中其它的 模块的接口是简单的 一个模块和其它模块的独立程度是评价 一个模块设计好坏的重要度量尺度。
例如初始化模块和终止模块。
4.过程内聚
一个模块内部的处理成分是相关的,而且这些处 理必须以特定的次序执行
函数A 函数B 函数C
例如,把流程结构中的循环部分、判定部分、计 算部分分成一个模块,这三个任务组成的模块是 过程内聚模块。
5.通信内聚
如果一个模块内各功能部分都使用了相同的输入数 据,或产生了相同的输出数据,则称之为通信内聚 模块。
《软件工程实用教程》第4章_结构化软件设计
第4 章 結構化軟體設計
3.虛擬機風格 例:解釋器,通過虛擬機特定模組的解釋步驟 如下: 解釋引擎從被解釋的模組中選擇一條指令; 基於這條指令,引擎更新虛擬機內部的狀 態; 上述過程反復執行。
第4 章 結構化軟體設計
特點: 在虛擬機環境中運行的代碼不必須瞭解虛擬 機的具體細節。 一旦運行環境發生變化,只需要重寫虛擬機 本身,而不是整個系統。 通常虛擬機會限制在其中運行的軟體的行為, 特別是那些以實現跨平臺為目的的虛擬機, 如Java虛擬機和.NET CLR。 能夠使系統的結構更具層次性,使用虛擬機 提供的設施編寫的代碼,可以不考慮虛擬機 以外的實際環境,而在正確地實現了這種虛 擬機的環境中執行。
第4 章結構化軟體設計
本章學習內容: 1.瞭解概要設計的任務與過程 2.掌握結構化設計技術的基本原理與準則 3.掌握面向數據流分析的設計方法 4.瞭解面向數據的設計方法 5.掌握資料庫設計原則和步驟 6.瞭解常用的詳細設計工具 7.瞭解概要設計說明書的基本內容
第4 章 結構化軟體設計
4.1 概要設計的任務與過程 概要設計的目標是概要地說明軟體 應該怎樣實現,即解決軟體系統總 體結構設計的問題,包括軟體系統 的結構、模組劃分、模組功能和模 組間的聯繫等。
第4 章 結構化軟體設計
4.2.1 現代體系結構模型的基本概念
1.模式:是針對特定問題的成功解決方案,是指形成 了一種趨於固定的結構形式。 結構模式表達了軟體系統的基本結構組織形式或結 構方案,包含了一組預定義的子系統,規定了這些 子系統的責任,同時還提供了用於組織和管理這些 子系統的規則和嚮導。 設計模式為軟體系統的子系統、構件或者構件之間 的關係提供一個精練後的解決方案,描述了特定環 境下,用於解決通用軟體設計問題的構件以及這些 構件相互通信時的可重現結構。
软件工程课件之第4章用例和用例图
4.2.3 泛化关系
借阅者
.9 泛化关系
4.2.4 分组关系
在一些用例图中,用例的数目可能很多,这时就需要把 这些用例组织起来。这种情况在一个系统包含很多子系 统时就会出现。另一种可能就是,当你按顺序和用户会 谈,收集系统需求时,每个需求必须用一个单独的用例 来表达,这时就需要某种方式来对这些需求进行分类。
4.1.1 参与者
例如,在“图书管理系统”中,可以认为“读者”是 “学生读者”和“教师读者”的泛化,而“学生读者” 还可以具体化为“本科生读者”和“研究生读者”;同 样,“图书管理员”也是“采购员”、“ 编目员”及 “借阅人员”的泛化。图4.3表示出了参与者之间的泛 化关系。
4.1.1 参与者
“<<extend>>”是扩展关系的构造型,箭头指向基本用例。
4.2.2 扩展关系
借阅者
<<include>>
还书
<<extend>>
查询图书 交罚款
图4.8 扩展关系
区别与联系:
联系:都是从现有的用例中抽取出公共的那部分信息
,作为一个单独的用例,然后通过不同的方法来重用这 个公共的用例,以减少模型维护的工作量。
因此,在“图书管理系统”中“借阅者”和“系统管理 员”都是参与者。
4.1.1 参与者
【例4-1】客户给销售员发来传真订货, 销售员下班前 将当日订货单汇总输入系统。谁是系统的参与者?
分析:根据参与者的定义可知,此系统的参与者是销售 员。
4.1.1 参与者
【例4-2】在需求分析中常见的权限控制问题,一般的 用户只可以使用一些常规的操作,如查询等,而管理员 除了常规操作之外还需要进行一些系统管理工作,如一 些关键数据的增加、删除、修改等,操作员既可以进行 常规操作又可以进行一些配置操作。
自考软件工程第4章知识点总结
第4章 软件概要设计
逻辑 输入
逻辑 输出 物理 输出
物理 输入
输入 流
变换 中心
输出 流
图 4-6 变换型DFD
22
第4章 软件概要设计
2. 事务型的数据流图
若某个加工将它的输入流分离成许多发散的数据流,形成 许多平行的加工路径,并根据输入的值选择其中一个路径来执 行,这种特征的DFD称为事务型的数据流图,这个加工称为事 务处理中心,如图4-7所示。
9
第4章 软件概要设计
模块的耦合性由低到高有以下6种类型: (1) 无直接耦合:指两个模块之间没有直接的关系。 这 种耦合性最弱,模块独立性最高。 (2) 数据耦合:指两个模块之间有调用关系,传递的是简 单的数据值。这种耦合程度较低, 模块的独立性较高。 (3) 标记耦合:指两个模块之间传递的是数据结构的地址, 如高级语言中的数组名、记录名和文件名等这些名字即为标 记。标记耦合是不可避免的。 (4) 控制耦合: 指一个模块调用另一个模块时,传递的 是控制变量(如开关、 标志等),被调模块通过该控制变量的 值有选择地执行块内某一功能。 通常将控制耦合改变为数据 耦合。
25
第4章 软件概要设计
输入 变换 中心 f7 f4 f3 f2 A f1 主模 块 f3 f3 f7 f8 get f3 f2 f2 get f2 f2 f1 get f1 f1 A f10 H f11 put f11 B f3 C f3 将f3变换 成 f7和f8 f4 f4 f5 f6 D f7 f8 f5 E F f6 f7 f9 put f9 G f7 f8 B f5 E f10 C f6 D f8 G H f11 F 输出 f9
加工 路径 事务 处理 中心
T 输入 流 „
软件工程导论 第4章 形式化说明技术1
形式化说明技术按照形式化的程度,可以把软件工程使用的方法划分成非形式化,半形式化和形式化3类。
用自然语言描述需求规格说明,是典型的非形式化方法。
用数据流图或实体—联系图建立模型,是典型的半形式化方法。
所谓形式化方法,是描述系统性质的基于数学的技术,也就是说,如果一种方法有坚实的数学基础,那么它就是形式化的。
4.1 概述4.1.1 非形式化方法的缺点用自然语言书写的系统规格说明书,可能存在矛盾、二义性、含糊性、不完整性及抽象层次混乱等问题。
所谓矛盾是指一组相互冲突的陈述。
例如,规格说明书的某一部分可能规定系统必须监控化学反应容器中的温度,而另一部分(可能由另一位系统分析员撰写)却规定只监控在一定范围内的温度。
如果这两个相互矛盾的规定写在同一页纸上,自然很容易查出,不幸的是,它们往往出现在相距几十页甚至数百页的两页纸中。
二义性是指读者可以用不同方式理解的陈述。
例如,下面的陈述就是具有二义性:“操作员标识由操作员姓名和密码组成,密码由6位数字构成。
当操作员登录进系统时它被存放在注册文件中。
”在上面这段陈述中,“它”到底代表“密码”还是“操作员标识”,不同的人往往有不同的理解。
系统规格说明书是很庞大的文档,因此,几乎不可避免地会出现含糊性。
例如,我们可能经常在文档中看到类似下面这样的需求:“系统界面应该是对用户友好的。
”实际上,这样笼统的陈述并没有给出任何有用的信息。
不完整性可能是在系统规格说明中最常遇到的问题之一。
例如,考虑下述的系统功能需求:“系统每小时从安放在水库中的深度传感器获取一次水库深度数据,这些数值应该保留6个月。
”假设在系统规格说明书中还规定了某个命令的功能:“AVERAGE命令的功能是,在PC机上显示由某个传感器在两个日期之间获取的平均水深。
”如果在规格说明书中对这个命令的功能没有更多的描述,那么,该命令的细节是严重不完整的,例如,对该命令的描述没有告诉我们,如果用户给定的日期是在当前日期的6个月之前,那么系统应该做什么。
软件工程4-史济民
--面向对象开发的优点
• 面向对象符合人类习惯的思维方式 • OO开发的优点
• 提高软件系统的可复用性 • 提高软件系统的可扩展性 • 提高软件系统的可维护性
4.2 UML简介
• Unified Modeling Language(统一建模 语言) • 近10多年来OOSE最重要的成果 • 贡献者:Grady Booch, Ivar Jacobson, Jim Rumbaugh • 中文网站
用户模型 模型 元模型 元元模型
• 下一层是上一层的基础,上一层是 下一层的实例。
3. 图和视图 • UML用模型描述系统的结构或静态特征 以及行为或动态特征。 • UML从不同的视角为系统建模,形成不 同的视图,每个视图由一组图构成,图 中包含了强调系统中某一方面的信息, 显示了系统中某一特定的方面。
属性值
书名:数学 价格:21.8
类图表示类间关系
• 关联关系 (Association)
• 类之间存在的语义上的关系 • 普通关联、递归关联、多重关联等
• 关联类
• 两个类之间的关联是多对多时,可以把该关联定义成关联类。 关联类也可以有属性、操作和其他的关联。
• 聚集关系(Aggregation)
• 特殊的关联:整体-部分
• 组合关系(Composition)
• 特殊的聚集:整体强烈拥有部分
• 泛化关系(Generalization)
• 继承
• 依赖关系(Dependency)
• 对一个类/对象的修改会影响另一个类/对象
关联关系
学生 书
姓名:string 学号:string
书名:string 价格:real
面向对象概述
对象的概念
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当前状态〔菜单〕+事件〔所选择的项〕 当前状态〔菜单〕 事件〔所选择的项〕 事件 ⇒ 下个状态。 下个状态。
扩展:在 元组中加入第 个组件——谓词集 , 元组中加入第6个组件 谓词集P, 扩展 在5元组中加入第 个组件 谓词集 每个谓词都是系统全局状态Y的函数 的函数。 每个谓词都是系统全局状态 的函数。 转换函数T现在是一个从 现在是一个从(J-F)×K×P到J的函数。现 的函数。 转换函数 现在是一个从 × × 到 的函数 在的转换规则形式如下: 在的转换规则形式如下:
第4章 形式化说明技术 章
4.1 概述 4.2 有穷状态机 4.3 Petri网 网 4.4 Z语言 语言 4.5 小结 习题
按照形式化的程度分3类 按照形式化的程度分 类: 非形式化:自然语言 非形式化 自然语言 半形式化:模型如 数据流图或实体-联系图 模型如:数据流图或实体 半形式化 模型如 数据流图或实体 联系图 形式化。 形式化。 :描述系统性质的基于数学的技术,也就是说,如 描述系统性质的基于数学的技术, 描述系统性质的基于数学的技术 也就是说, 果一种方法有坚实的数学基础, 果一种方法有坚实的数学基础,那么它就是形式化 的。
110101E-101 -100111E11101 +1E0 更形式化地,浮点二进制数定义如下: 更形式化地,浮点二进制数定义如下:
〈floatingpoint binary〉∷=[〈sign〉]〈bitstring〉E 〉 [ 〉 〉 [〈sign〉]〈bitstring〉 〉 〉 〈sign〉∷=+|〉 | 〈bitstring〉∷=〈bit〉[〈bitstring〉] 〉 〈 〉 〉 〈bit〉∷=0|1 〉 |
当然,形式化方法也有缺点: 当然,形式化方法也有缺点:大多数形式化的规格 说明主要关注于系统的功能和数据,而问题的时序、 说明主要关注于系统的功能和数据,而问题的时序、 控制和行为等方面的需求却更难于表示。此外, 控制和行为等方面的需求却更难于表示。此外,形 式化方法比欠形式化方法更难学习, 式化方法比欠形式化方法更难学习,不仅在培训阶 段要花大量的投资,而且对某些软件工程师来说, 段要花大量的投资,而且对某些软件工程师来说, 它代表了一种“文化冲击” 它代表了一种“文化冲击”。 把形式化方法和欠形式化方法有机地结合起来, 把形式化方法和欠形式化方法有机地结合起来,使 它们取长补短,应该能获得更理想的效果。本章讲 它们取长补短,应该能获得更理想的效果。 述的应用形式化方法的准则(见4.1.3节),对于读者 述的应用形式化方法的准则 见 节, 今后在实际工作中更好地利用形式化方法, 今后在实际工作中更好地利用形式化方法,可能是 有帮助的。 有帮助的。
图4.12 Z格S的格式 格 的格式
3. 初始状态 抽象的初始状态是指系统第一次开启时的状态。 抽象的初始状态是指系统第一次开启时的状态。对 于电梯问题来说,抽象的初始状态为: 于电梯问题来说,抽象的初始状态为: Button_Init〔Button_State|pushed=Φ〕 | 〕 上式表示,当系统首次开启时pushed集为空,即所 集为空, 上式表示,当系统首次开启时 集为空 有按钮都处于关闭状态。 有按钮都处于关闭状态。 4. 操作 如果一个原来处于关闭状态的按钮被按下, 如果一个原来处于关闭状态的按钮被按下,则该按 钮开启,这个按钮就被添加到pushed集中。图4.14 集中。 钮开启,这个按钮就被添加到 集中 见书77页 定义了操作Push_Button(按按钮 。 按按钮)。 (见书 页)定义了操作 按按钮
4.4 Z语言 语言
4.4.1 简介
语言描述的、 用Z语言描述的、最简单的形式化规格说明含有下 语言描述的 个部分: 述4个部分: 个部分 给定的集合、数据类型及常数。 给定的集合、数据类型及常数。 状态定义。 状态定义。 初始状态。 初始状态。 操作。 操作。
1. 给定的集合 一个Z规格说明从一系列给定的初始化集合开始 规格说明从一系列给定的初始化集合开始。 一个 规格说明从一系列给定的初始化集合开始。 所谓初始化集合就是不需要详细定义的集合,这种 所谓初始化集合就是不需要详细定义的集合, 集合用带方括号的形式表示。对于电梯问题, 集合用带方括号的形式表示。对于电梯问题,给定 的初始化集合称为Button,即所有按钮的集合,因 的初始化集合称为 ,即所有按钮的集合, 规格说明开始于: 此,Z规格说明开始于: 规格说明开始于 〔Button〕 〕 2. 状态定义 一个Z规格说明由若干个 规格说明由若干个“ 组成, 一个 规格说明由若干个“格(schema)”组成,每个 组成 格含有一组变量说明和一系列限定变量取值范围的 谓词。例如, 的格式如图4.12所示。 所示。 谓词。例如,格S的格式如图 的格式如图 所示
ˆ =
Hale Waihona Puke 4.5 小结基于数学的形式化规格说明技术,目前还没有在软 基于数学的形式化规格说明技术, 件产业界广泛应用,但是, 件产业界广泛应用,但是,与欠形式化的方法比较 起来,它确实有实质性的优点: 起来,它确实有实质性的优点:形式化的规格说明 可以用数学方法研究、验证(例如 例如, 可以用数学方法研究、验证 例如,一个正确的程 序可以被证明满足其规格说明, 序可以被证明满足其规格说明,两个规格说明可以 被证明是等价的,规格说明中存在的某些形式的不 被证明是等价的, 完整性和不一致性可以被自动地检测出来)。此外, 完整性和不一致性可以被自动地检测出来 。此外, 形式化的规格说明消除了二义性, 形式化的规格说明消除了二义性,而且它鼓励软件 开发者在软件工程过程的早期阶段使用更严格的方 从而可以减少差错。 法,从而可以减少差错。
习题
4-1 举例对比形式化方法和欠形式化方法的优缺点。 举例对比形式化方法和欠形式化方法的优缺点。 4-2 在什么情况下应该使用形式化说明技术 使用形 在什么情况下应该使用形式化说明技术?使用形 式化说明技术时应遵守哪些准则? 式化说明技术时应遵守哪些准则 4-3 一个浮点二进制数的构成是:一个可选的符号 一个浮点二进制数的构成是: (+或-),后跟一个或多个二进制位,再跟上一个字 或 ,后跟一个或多个二进制位, 符E,再加上另一个可选符号 或-)及一个或多个 ,再加上另一个可选符号(+或 及一个或多个 二进制位。例如,下列的字符串都是浮点二进制数: 二进制位。例如,下列的字符串都是浮点二进制数:
其中, 其中, 符号∷ 表示定义为 表示定义为; 符号∷=表示定义为; 符号[ ]表示可选项; 符号[...]表示可选项;
符号a| 表示 表示a或 。 符号 |b表示 或b。 假设有这样一个有穷状态机:以一串字符为输入, 假设有这样一个有穷状态机:以一串字符为输入, 判断字符串中是否含有合法的浮点二进制数。试对 判断字符串中是否含有合法的浮点二进制数。 这个有穷状态机进行规格说明。 这个有穷状态机进行规格说明。 4-4 考虑下述的自动化图书馆流通系统:每本书都 考虑下述的自动化图书馆流通系统: 有一个条形码, 有一个条形码,每个借阅人都有一个带有条形码的 卡片。当一个借阅人想借一本书时, 卡片。当一个借阅人想借一本书时,图书管理员扫 描书上的条形码和借阅人卡片上的条形码, 描书上的条形码和借阅人卡片上的条形码,然后在 计算机终端上输入C;当归还一本书时, 计算机终端上输入 ;当归还一本书时,图书管理 员将再做一次扫描,并输入R。 员将再做一次扫描,并输入 。图书管理员可以把 一些书加到(+)图书集合中 也可以删除(-)它们 图书集合中, 它们。 一些书加到 图书集合中,也可以删除 它们。
借阅人可以在终端上查找到某个作者所有的书(输 借阅人可以在终端上查找到某个作者所有的书 输 和作者名字), 入“A=”和作者名字 ,或具有指定标题的所有书籍 和作者名字 (输入“T=”和标题 ,或属于特定主题范围内的所 输入“ 和标题), 输入 和标题 有图书(输入 输入“ 加主题范围)。 有图书 输入“S=”加主题范围 。最后,如果借阅 加主题范围 最后, 人想借的书已被别人借走, 人想借的书已被别人借走,图书管理员将给这本书 设置一个预约, 设置一个预约,以便书归还时把书留给预约的借阅 输入“ 加书号)。 人(输入“H=”加书号 。 输入 加书号 试用有穷状态机说明上述的图书流通系统。 试用有穷状态机说明上述的图书流通系统。 4-5 试用 试用Petri网说明第 题所述图书馆中一本书的 网说明第4题所述图书馆中一本书的 网说明第 循环过程。在规格说明中应该包括操作H、 及 。 循环过程。在规格说明中应该包括操作 、C及R。 4-6 试用 语言对第 题所述图书馆图书流通系统做 试用Z语言对第 语言对第4题所述图书馆图书流通系统做 一个完整的规格说明。 一个完整的规格说明。
当前状态〔菜单〕+事件〔所选择的项〕 事件〔 当前状态〔菜单〕 事件 所选择的项〕 +谓词下个状态。 谓词 谓词 ⇒下个状态。
4.3 Petri网 网
4.3.1 概念
Petri网包含 种元素: 网包含4种元素 网包含 种元素: 一组位置P、 一组位置 、 一组转换T、 一组转换 、 输入函数I 输入函数 输出函数O。 输出函数 。
4.2 有穷状态机
4.2.1 概念
状态集J:{保险箱锁定, , ,保险箱解锁,报警}。 状态集 :{保险箱锁定,A,B,保险箱解锁,报警}。 :{保险箱锁定 输入集K:{ , , , , , }。 输入集 :{1L,1R,2L,2R,3L,3R}。 :{ 转换函数T:如表 所示 所示。 转换函数 :如表4.1所示。 初始态S:保险箱锁定。 初始态 :保险箱锁定。 终态集F:{保险箱解锁,报警}。 终态集 :{保险箱解锁,报警}。 :{保险箱解锁
如果使用更形式化的术语, 如果使用更形式化的术语,一个有穷状态机可以表 示为一个5元组 元组(J, , , , ,其中: 示为一个 元组 ,K,T,S,F),其中: J是一个有穷的非空状态集; 是一个有穷的非空状态集; 是一个有穷的非空状态集 K是一个有穷的非空输入集; 是一个有穷的非空输入集; 是一个有穷的非空输入集 T是一个从 是一个从(J-F)×K到J的转换函数; × 到 的转换函数; 是一个从 的转换函数 S∈J,是一个初始状态; ∈ ,是一个初始状态; ⊆ FJ,是终态集。 ,是终态集。