软件设计第四章.ppt

上传人:本田雅阁 文档编号:2604151 上传时间:2019-04-16 格式:PPT 页数:93 大小:659.01KB
返回 下载 相关 举报
软件设计第四章.ppt_第1页
第1页 / 共93页
软件设计第四章.ppt_第2页
第2页 / 共93页
软件设计第四章.ppt_第3页
第3页 / 共93页
亲,该文档总共93页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《软件设计第四章.ppt》由会员分享,可在线阅读,更多相关《软件设计第四章.ppt(93页珍藏版)》请在三一文库上搜索。

1、第四章 结构化设计,第二篇 传统方法学,上一章小结:,需求分析是软件工程过程中的第一个技术步骤,通过该步骤,软件需求被描述为具体的规约,为软件设计奠定了基础; 需求分析旨在描述 “做什么”,必须关注问题的信息域、功能域和行为域。用创建模型、划分问题、描述需求要素的方法来表示需求细节; 结构化分析依赖于数据建模和流建模来创建全面的需求分析模型。 ERD描述系统中的数据对象,DFD描述控制转换,它们共同创建系统的功能模型。STD创建行为模型,DD描述数据内容。,开发阶段的工作流程是:,设计阶段完成:数据与结构设计和过程设计; 设计阶段的任务是回答:怎么做?,本章要解决的问题:,软件需要“怎么做”?

2、 如何描述“怎么做”? 如何衡量软件设计的质量? 即:软件设计的基本概念、任务、原则、方法和标准是什么?,软件设计的目标与任务 软件设计的概念与原理 模块独立 启发规则 软件结构的图形工具 面向数据流的设计方法 人机界面设计 过程设计及工具 面向数据结构的设计方法,第四章 软件设计,4-1 软件设计的目标和任务,根据分析模型(数据、功能、行为)所描述的软件需求,以及功能和性能需求,使用某一种设计方法进行: 数据设计 系统结构设计 接口设计 过程设计。,数据设计:将分析时创建的信息域模型(ERD)变换成实现软件所需的数据结构。 体系结构设计:定义程序的主要结构元素之间的关系。 接口设计:描述了软

3、件内部、软件和协作系统之间的以及软件同人之间如何通信。 过程设计:将程序体系结构元素变换为对软件构件的过程描述。,将分析模型转换为软件设计,开发阶段的信息流,软件设计过程,从工程管理的角度来看,软件设计分两步完成。 概要设计,将软件需求转化为数据结构和软件的系统结构。 详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。,软件设计的重要性:软件工程过程的技术核心,软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构,基本概念:为“使程序正确”提供了框架,软件设计概念力求解决以下问题: 使用什么标准将软件系统划分为单个构件(独立成分)

4、在各构件内,功能细节和数据结构细节如何表示 用什么标准对软件设计的技术质量做统一衡量?,4-2 软件设计概念与原理,模块化 抽象化 逐步求精 信息隐蔽,一、模块化,软件系统的模块化是指整个软件被划分成若干单独命名和可编址的部分,称之为模块(构件)。这些模块可以被组装起来以满足整个问题的需求。 优点:降低复杂度、方便修改、并行开发,模块用矩形框表示,并用模块的名字标记它。,模块定义的五个标准:,模块的可分解性 模块的可组装性 模块的可理解性 模块的连续性 模块的保护性,模块化是好的软件设计的一个基本准则,高层模块从整体上把握问题, 隐蔽细节 复杂问题 分解 较小问题 构造 低层模块,如何进行模块

5、化设计? 抽象是一个重要的概念!,二、抽象,什么是抽象? 概念:抽象出事物的本质特性而暂时不考虑它们的细节。,软件设计为什么要用抽象概念?,处理复杂系统的惟一有效的方法是用层次的方法构造和分析它。 软件系统进行模块设计时,可有不同的抽象层次。,模块化与抽象,用自顶向下由抽象到具体的方式分配控制,其优点: 简化了设计与实现; 提高了软件的可理解性和可测试性; 使软件更易于维护。,三、逐步求精,逐步求精是人类解决复杂问题时采用的基本技术,定义:为了能集中精力解决主要问题而尽 量推迟对问题细节的考虑,求精,抽象,四、信息隐蔽,信息隐蔽(parnas)方法:每个模块的实现细节对于其它模块来说是隐蔽的。

6、也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。,4-3 模块的独立性,如何度量模块的独立性? 如何设计具有独立性的模块?,一、模块的基本概念,模块(Module) “模块”,又称“组件”。它一般具有如下三个基本属性: 功能:描述该模块实现什么功能 逻辑:描述模块内部怎么做 状态:该模块使用时的环境和条件,模块的特性描述,模块的外部特性 模块的模块名、参数表、其中的输入参数和输出参数,以及给程序以至整个系统造成的影响。 模块的内部特性 完成其功能的程序代码和仅供该模内 部使用的数据,基本概念,模块的独立性 例如:若一个模块只具有单一的功能且与其它模块没有太多的

7、联系, 则称此模块具有模块独立性。,模块的独立性是模块化、抽象化和信息隐藏概念的直接结果,是完成有效设计的基本标准。,基本概念,模块独立的优点: 易于开发 易于测试和维护 度量模块独立性的两个质量标准: 耦合 内聚,耦合是模块之间的互相连接的紧密程度的度量。 内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。 模块独立性比较强的模块应是高内聚低耦合的模块。,基本概念,二、模块间的耦合,中度耦合,与外部环境联系,(1)非直接耦合(Nondirect Coupling),A B无直接耦合,(2)数据耦合 (Data Coupling) 如果一个模块访问另一个模块时,彼此之间是通过

8、简单数据参数(不是控制参数) 来交换输入、输出信息的,则称这种耦合为数据耦合。 (3)标记耦合 (Stamp Coupling) 如果一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。,(4)控制耦合 (Control Coupling) 如果一个模 块通过传送开 关、标志、名 字等控制信息, 明显地控制选 择另一模块的 功能,就是控 制耦合。,举例:,到货检验任务,(5)外部耦合(External Coupling) 一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。 (6)公共耦合(C

9、ommon Coupling) 若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。,公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。,(7)内容耦合 (Content Coupling) 如果发生下列情形,两个模块之间就发生了内容耦合: (1) 一个模块直接访问另一个模块的内部数据; (2) 一个模块不通过正常入口转到另一模块内部; (3) 两个模块有一部分程序代码重迭(只可能出现在汇编语言中); (4) 一个模块有多个入口。,

10、c,内容耦合,如何降低模块间的耦合度?,(1) 如果模块必须存在耦合,则要选择适当的耦合类型。 原则:尽量使用数据耦合 少用控制耦合 限制公共耦合的范围 避免使用内容耦合 (2)降低接口的复杂性,c,三、模块内聚,(1)偶然内聚(低内聚) 如果一个模块完成一组任务,这些任务彼此间即使有关系关系也是松散的。例如:写完一个程序后,发现一组语句在两处或多处出现,把这些语句作为一个模块,为偶然内聚。 (2)逻辑内聚(低内聚) 一个模块所完成的任务属于相同或相似的一类称为逻辑内聚(一个模块产生各种类型的全部输出) (3)时间内聚(低内聚) 如果一个模块包含的任务必须在一个时间段内完成,成为时间内聚。例如

11、初始化模块,(4)过程内聚(中内聚) 如果一个模块处理元素是相关的,必须顺序执行,则称为过程内聚。通过划分程序流程图来完成。 (5)通信内聚(中内聚) 模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,称为通信内聚,(6)顺序内聚(高内聚) 如果一个模块处理元素和同一个功能相关,并且必须顺序执行,则称为顺序内聚。通常一个的输出是另一个的输入。通过划分数据流图。 (7)功能内聚(高内聚) 模块中所有元素都属于一个整体,完成一个单一功能,称为功能内聚。,提高模块独立性。评估程序结构的第一次迭代,以降低耦合提高内聚; 模块规模适中(60行)。高扇34(上限5 9 ),当深度增加时争取提高

12、扇入; 将模块的作用域限制在模块的控制范围内(作用域是控制域的子集); 降低模块接口的复杂程度并提高一致性(传递的信息与功能的一致性); 例:Q_ROOT(TBL,X)不易理解,改:Q_ROOT(A,B,C,X1,X2) 定义功能可以预测的模块,但要避免模块功能过分局限;(黑盒模块可预测) 设计单入口单出口模块,避免“病态连接”(内容耦合)。,4-4有效模块化的设计启发规则,模块化的设计启发规则,控制耦合,解决方法: 判定点上移(AM) B移到控制域内(BA下面),4-5 表示软件结构的图形工具,三种表示软件结构的图形工具: 层次图(Hierachy) HIPO图(Hierachy Input

13、 Process Output ) 结构图(Yourdon),1、层次图和HIPO图,IBM公司发明的HIPO图: 层次图 + 输入 / 处理 /输出图 (H图) + (IPO图) (Hierachy Input Process Output ),(1).层次图(H图),带编号的层次图(H图),(2). HIPO图,H图中每一方框(模块)均有一张IPO图对应。,改进的IPO图格式,改进的IPO图格式,2、结构图 SC (Structure Chart) 精确表达程序结构的图形表示,结构图反映程序中模块之间的层次调用关系和联系:它以特定的符号表示模块、模块间的调用关系和模块间信息的传递。,模块的

14、调用关系和接口 模块之间用单向箭头联结,箭头从调用模块指向被调用模块,表示调用模块调用了被调用模块。,结构图,模块间的信息传递 当一个模块调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行。而被调用模块在执行过程中又把它产生的数据或控制信息回送给调用模块。,模块调用方式 在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B。当一个在调用箭头尾部标以一个弧形符号,表示模块A反复调用模块C和模块D。,条件调用,循环调用,为什么用面向数据流的设计方法?,选择软件设计方法的重要因素是应用范围,“面向数据流的设计”方法可以应用于大量的应用领域(数值分析、

15、过程控制、MISS系统),但不包括专家系统、用户界面。 方法起源模块化、自顶向下逐步细化、结构化程序设计的基本概念,是基于“数据在系统中的流动”而发展起来的。,4-6 面向数据流的设计方法,变换型结构 由输入、变换中心和输出三部分组成。 基本模型:,特征:具有明确的输入、变换(或称主加工)和输出界面,事务型结构,特征:具有在多种事物中选择执行某类事物的能力。基本模型:,大型系统DFD中,变换型和事务型 结构往往共存:,面向数据流设计方法的设计步骤,(1)精化DFD (2)确定DFD类型 (3)把DFD映射到系统模块结构 设计出模块结构的上层 (4)基于DFD逐步分解高层模块 设计出下层模块 (

16、5)根据模块独立性原理,精化 模块结构 (6)模块接口描述,4、软件模块结构的改进(设计优化),精化软件结构,导出不同的软件结构,评价和比较找出最优的。 有效模块化的前提下,保持最少的模块,满足信息要求的前提下使用最简单的数据结构,设计优化的方法:,不考虑时间因素的情况下精化软件结构 详细设计选出最耗时的模块,仔细设计提高效率 使用高级语言编程 软件中孤立出大量占用处理机资源的模块 必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码,以求提高效率,4-7 用户界面设计,技术问题 系统响应时间 用户与计算机的交互问题 用户帮助信息 出错信息处理 命令交互,4-8 过程设计(详细设

17、计)及其工具,任务:,设计程序“蓝图”,衡量程序的质量不仅要看它的逻辑是否正确,性能是否符合要求,更主要的是看它是否容易阅读和理解。,程序流程图,程序流程图也称为程序框图,程序流程图使用五种基本控制结构是:,示例,程序流程图的标准符号,循环的标准符号 注解的使用,多出口判断,N-S图,N-S图也叫做盒图。五种基本控制结构由五种图形构件表示。,示例,N-S图的嵌套定义形式,PAD也设置了五种基本控制结构的图式,并允许递归使用。,问题分析图(PAD),PAD描述的示例,对应于增量型循环结构 for i := n1 to n2 step n3 do 在PAD中有相应的循环控制结构,PAD的扩充控制结

18、构,判定表,判定表用于表示程序的静态逻辑 在判定表中的条件部分给出所有的两分支判断的列表,动作部分给出相应的处理 要求将程序流程图中的多分支判断都改成两分支判断,无多分支判断结构,建立判定表的步骤,列出与一个具体过程(或模块)有关的所有处理。 列出过程执行期间的所有条件(或所有判断)。 将特定条件取值组合与特定的处理相匹配,消去不可能发生的条件取值组合。 将右部每一纵列规定为一个处理规则,即对于某一条件取值组合将有什么动作。,PDL (Program Design Language),PDL是一种用于描述功能模块的算法设计和加工细节的语言。称为设计程序用语言。它是一种伪码。 伪码的语法规则分为

19、“外语法”和“内语法”。 PDL具有严格的关键字外语法,用于定义控制结构和数据结构,同时它的表示实际操作和条件的内语法又是灵活自由的,可使用自然语言的词汇。,示例: 拼词检查程序,PROCEDURE spellcheck IS BEGIN split document into single words look up words in dictionary display words which are not in dictionary create a new dictionary END spellcheck,PDL的特点,提供全部结构化控制结构、数据说明和模块特征。能对PDL正文进行

20、结构分割,使之变得易于理解。 为了区别关键字,规定关键字一律大写,其它单词一律小写。或者规定关键字加下划线,或者规定它们为黑体字。,内语法使用自然语言来描述处理特性。内语法比较灵活,只要写清楚就可以,不必考虑语法错,以利于人们可把主要精力放在描述算法的逻辑上。 有数据说明机制,包括简单的(如标量和数组)与复杂的(如链表和层次结构)的数据结构。 有子程序定义与调用机制,用以表达各种方式的接口说明。,使用PDL语言,逐步求精:,PROCEDURE spellcheck BEGIN -* split document into single words LOOP get next word add

21、word to word list in sortorder EXIT WHEN all words processed END LOOP -* look up words in dictionary LOOP get word from word list,IF word not in dictionary THEN -* display words not in dictionary display word prompt on user terminal IF user response says word OK THEN add word to good word list ELSE

22、add word to bad word list ENDIF ENDIF EXIT WHEN all words processed END LOOP,-* create a new words dictionary dictionary : merge dictionary and good word list END spellcheck,4-9 面向数据结构的设计方法,Jackson图,A由B、C、D三个元素顺序组成,A是B、C、D中的某一个,A由B出现N次组成,面向数据结构的设计方法首先需要分析确定数据结构,并且用适当的工具清晰地描绘数据结构,软件设计的目标与任务 软件设计的概念与原理 模块独立 启发规则 软件结构的图形工具 面向数据流的设计方法 人机界面设计 过程设计及工具 面向数据结构的设计方法,小结,数据设计、系统结构设计、接口设计、过程设计 模块化、抽象、逐步求精、信息隐藏 高内聚、低耦合 HIPO、结构图 变换流、事务流 程序流程图、盒图、PAD、判定表(判定树)、PDL过程设计语言 Jackson图,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1