ImageVerifierCode 换一换
格式:PPT , 页数:119 ,大小:1.24MB ,
资源ID:4052340      下载积分:20 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-4052340.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第6章_软件设计.ppt)为本站会员(dreamzhangning)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

第6章_软件设计.ppt

1、第六章,6,软件设计,软件设计,交互设计软件外部设计,深入理解和修正软件的需求,为软件内部设计提供指导和约束。软件内部设计具体需求转换为软件表示的过程,回答“内部如何实现”软件设计概要设计和详细设计,软件设计的重要性,软件开发阶段的第一步,其基本任务是回答“如何做?” 它是在对系统信息、功能、行为和各种要求理解的基础上构建未来的系统。 设计的决策影响软件实现的成功与否。 是软件开发过程中用以保证质量的关键步骤。 是整个软件工程和软件维护的基础。 如果没有设计,只能建立一个不稳定的系统。,软件设计的重要性,软件设计是后续开发步骤几软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统。 如图

2、所示,只要出现一些微小的变动,就会使得软件受创,而且难以测试。,有设计,分析模型中的每个成分都提供了建立软件设计模型所需要的信息。 根据用户数据、功能和行为模型所描述的软件需求,采用相应设计方法进行数据设计,体系结构设计、接口设计和过程设计。,设计过程设计过程的活动,从工程管理的角度来看,软件设计分两步: 概要设计,将软件需求转化为数据结构和软件的系统结构,并建立接口。 详细设计,即过程设计。通过对结构表示进行细化,得到软件的数据结构和算法。,设计过程设计活动间的关系,数据设计将实体-关系图中描述的对象和关系,以及数据词典中描述的详细数据内容转化为数据结构定义。 体系结构设计定义软件系统各主要

3、成分之间的关系。 接口设计根据数据流图定义软件内部各成分之间、软件与其他协同系统之间及软件与用户之间的交互机制。 过程设计则是把结构成分转换软件的过程性描述。在编码阶段,根据这种过程性描述,生成源程序代码,然后通过测试得到完整有效的软件。,设计过程设计活动间的关系,判断设计好坏的3条特征,设计必须实现分析模型中描述的所有显示需求,必须满足用户希望的所有隐式需求。 设计必须是可读、可理解的,是将来易于编程、测试和维护。 设计应从实现角度出发,给出与数据、功能、行为相关的软件全貌。,设计过程设计与软件质量,模块化 独立功能特征的模块(子程序) 减小接口的复杂性 分层的组织结构 有性质不同、可区分的

4、数据和过程表达式 重用,第六章 软件设计,6.1 概要设计,软件总体设计任务,软件系统结构设计:软件的层次结构。 数据结构及数据库设计:该阶段数据结构设计适宜使用抽象的数据类型。数据库设计不讨论。 网络系统设计: 总体设计文档:GB8576-88 评审,6.1 软件的概要设计 6.1.1 概要设计概述,概要设计,也称为总体设计,是描述软件总的体系结构,给出组成系统的各个模块及模块间的联系。概要设计过程的几个阶段: 系统设计,确定系统合理的实现方案 结构设计,进行功能分解,确定模块组织结构 数据库设计, 编写概要设计文档 进行评审,1. 系统设计,系统设计(System Design)就是为实现

5、系统分析提出的系统逻辑模型所作的各种技术考虑和设计。系统设计又称为系统的物理设计,即是根据新系统逻辑模型建立系统的物理模型。,系统设计的任务,计算机系统及其它硬设备的选择系统的分解与组织原始数据的组织和输入输出信息的方式和管理文件与数据库的组织和管理代码的设计与确定通信网络的设计系统的安全保密性设计系统实施计划其它,更快、更准、更多地提供资料更多、更细的处理功能更有效、更科学的管理方法系统设计的目标是:在保证实现逻辑模型的基础上,尽可能地提高系统的各项指标,即系统的运行效率、可靠性、可修改性、灵活性、通用性和实用性。正确划分人工处理与计算机处理。,系统设计的目标,2. 结构设计,结构设计是确定

6、程序由哪些模块组成,以及它们之间的关系。结构设计的具体方法: 从数据流图导出模块结构图HIPO图 确定每个模块的功能IPO图 确定模块间的调用关系和接口 评价模块接口的质量,3. 数据库设计,大型数据处理的软件系统数据库设计一般经历: 概念设计需求分析 逻辑设计系统概要设计 物理设计(模块)详细设计 性能优化取决于开发者对数据库系统的熟悉程度及开发经验,4. 编写概要设计文档,编写概要设计文档的内容: (1)概要设计说明书 (2)数据库设计说明书 (3)用户手册(对交互设计阶段编写或修改的用户手册进行补充) (4)修订测试计划(对测试策略、方法和步骤提出明确要求)文档参考国家标准 GB8567

7、-1988的计算机软件产品开发文件编制指南,5. 评审,是否完整地实现了需求规定中的功能、性能等要求是否符合交互设计的约束设计方案是否恰当关键的处理及内外部接口是否定义正确各部分之间的一致性,6.1.2 软件设计的基本原理,1. 模块化 模块化原理:依据系统是由元素和结构组成,且它们又可分层、分类的思想,一个信息系统可被逐层划分为大小适当、功能明确独立且容易实现的模块,并由它们的协调和组合去共同达到系统的设计目标模块化原理(modularization)的基本思想是可分性,即最大限度地降低系统设计的复杂性,把问题层层分解,直到容易解决为止。这样就降低了人为划分的主观影响,增强了问题的客观性,定

8、义:把系统划分为若干个模块,每个模块完成一个特定的功能,然后将这些模块汇集起来组成一个整体(即系统),可以完成指定的功能,满足问题的要求模块是可组合、分解和更换的单元,具有以下及格基本属性: (1)接口。模块的输入和输出。 (2)功能。模块实现什么功能。 (3)逻辑。描述内部如何实现要求的功能及所需的数据 (4)状态。模块的运行环境,即模块的调用与被调用关系。接口、功能与状态是反映模块的外部特性,逻辑反映的则是内部特性。,模块化,设对于两个问题P1、P2,C(P1)、C(P2)表示问题的复杂程度,而E(P1)、E(P2)表示解决问题所需的工作量。于是,如果C(P1)C(P2) 则 E(P1)E

9、(P2) 一个有趣的规律是C(P1+ P2) C(P1)+C(P2) 即是说,如果一个问题由两个问题组合而成,那么它的复杂程度大于分别考虑每个问题的复杂程度之和。于是E(P1+ P2) E(P1)+E(P2),推而广之,当一个系统有n个独立元素时,一般总有C(P1+ P2+Pn) C(P1)+C(P2)+ C(Pn) 及E(P1+ P2+Pn) E(P1)+E(P2)+ E(Pn)这就是模块化的依据,模块化,能否认为,如果我们无限地分割系统,最终将导致最基本模块的设计非常容易,因而使得设计系统的工作量非常小?,模块化,这个结论是错误的当模块数目增加时,每个模块的规模将减小,开发单个模块所需的成

10、本(工作量)确实减少了,但随着模块数目的增加,设计模块间接口的工作量也将增加,目标是尽量寻求一个合理的模块分解数目,避免模块数过多或过少,一个模块的规模应取决于它的功能和用途。 减少接口的代价,提高模块的独立性。,2. 抽象,抽象就是将一些具有某些相似性质的事物的公共之处概括出来,暂时忽略其不同之处,或者说,抽象是抽象出事物的本质特性而暂时不考虑它们的细节。建立软件体系结构,要给出抽象级别,软件过程中的每一步骤都是解决方案抽象级别上的求精。,3. 信息隐蔽,定义模块内部信息的访问约束。信息隐蔽原理是指导人们按信息相关度划分模块的一个原理。信息隐蔽原理(information hiding)的基

11、本思想是:在一定规模和条件的限制下,把那些对模块功能相关度最大的信息(如过程与数据)分在一个模块内,而把最少的完成功能所需的交互信息划分在该模块外(接口)。换言之,模块的划分应该使得包含在模块内的信息对于无需这些信息的模块是不可访问的。,3. 信息隐蔽,信息隐蔽原理是把任何系统划分成子系统的普遍性原理。信息隐蔽原理的好处是:模块内部的错误很少可能传播到系统的其它模块最大限度地体现了模块在概念和功能上的独立性、相对完整性和封闭性给系统结构和模块的实现、维护带来了方便,4. 模块独立性,好的系统结构满足: 每个模块完成一个相对独立的特定功能(保证了按模块分解后的设计工作量将小于按整个系统设计的工作

12、量) 模块之间的接口简单(使设计中的接口成本最小)模块独立是好的设计的关键,具有独立功能而且和其它模块之间没有过多相互作用的模块,我们称之为独立的模块。这种开发方法,就可以做到模块独立。所谓两个模块彼此完全独立,是指其中任意一个模块在运行时,与另一个模块的存在与否完全无关。独立只是一个抽象的、相对的概念。,4.模块独立性,模块独立的作用:具有独立性的系统比较容易开发,这是由于能够分割功能而且接口可以简化。系统开发常常由若干人的分工合作完成的,这时具有模块独立性的优点就尤为重要。模块的独立性越好,模块的相互影响就越少。当系统中某一模块出错时,产生连锁反应的概率就越低,从而提高了系统的可靠性。独立

13、的模块比较容易测试和维护。这是因为错误的传播范围小,较容易定位,而且对一个模块进行修改或维护时,不担心其它模块的内部是否会受到影响。,4.模块独立性,模块的独立程度可以由两个定性标准度量,这两个分别称为耦合和聚合。,耦合:度量不同模块彼此间互相依赖(联结)的紧密程度。,聚合:衡量一个模块内部各个元素彼此结合的紧密程度。,4.模块独立性,耦合(coupling)强弱取决于模块间联结形式及接口的复杂程度。模块间接口的复杂性越高,说明联结的程度越高。,模块之间的耦合程度直接影响系统的可读性、可维护性及可靠性。,在系统设计中应尽可能追求松散耦合的系统。,4.模块独立性耦合,影响模块之间联结程度的最主要

14、因素是模块间的联结形式。,模块间的主要联结形式有6种:无直接耦合数据耦合标记耦合控制耦合公共耦合内容耦合,模块的耦合,耦合(Coupling) 软件结构中各构件间相互联系紧密程度的一种度量。 无直接耦合 数据耦合 标记耦合 控制耦合 公共耦合 内容耦合,两个模块间没有直接关系,他们分别从属于不同模块的控制与调用,也不存在任何信息传递。最弱的耦合,独立性最高。,模块的耦合无直接耦合,如果两个模块彼此间通过参数交换信息,而且每一个参数仅仅为数据,那么这种耦合称之为数据耦合。,数据耦合是系统中必不可少的联结形式,它是一种最低的耦合,是一种理想的模块联结。,一个系统内可以将所有模块只设计成数据耦合。,

15、模块的耦合数据耦合,示例:,模块的耦合数据耦合,如果两个模块彼此间传递的是数据结构(如高级语言中的数组名、记录名和文件名等,这些名字即为标记)的地址,那么这种耦合称之为标记耦合。,模块间必须清楚传递的数据结构,并按要求对其进行操作。,可用“信息隐蔽”的方法,把该数据机构及对它的操作集中在一个模块内,从而消除这种耦合,但有时标记耦合不可避免。,如果两个模块彼此间传递的信息间有控制信息,那么这种耦合称之为控制耦合。,控制耦合与数据耦合很相似,只不过传递参数中一个仅仅为数据,而另一个含有控制信息。,控制耦合可以通过适当的方式,如模块的再分解,而转化为数据耦合,但在某些特殊的场合下,控制耦合还有一定的

16、必要。,模块的耦合控制耦合,示例:,模块的耦合控制耦合,如果两个模块彼此间通过一个公共的数据区域传递信息时,称之为公共耦合或公共数据域耦合。,公共数据域实际上就是被设计成为多个模块公用数据的区域。,公共耦合是一种不好的联结形式,尤其当一个公共数据区域被多个模块共同使用时,模块数越多,则其耦合的复杂度越大。,模块的耦合公共耦合,示例:,模块的耦合公共耦合,如果一个模块需要涉及另一个模块的内部信息时,则这种耦合称内容耦合。一个模块访问另一个模块的内部数据;一个模块调用执行另一个模块中间的部分程序代码;模块的出、入口不符合单入单出。,内容耦合的耦合度最高,因此应该坚决避免使用这种耦合。,模块的耦合内

17、容耦合,模块的耦合联结方式比较,结论:模块间尽量使用数据耦合;必要时才采用控制耦合;对公共耦合应限制耦合的模块数(数据库除外);坚决不用内容耦合。,模块的耦合,聚合(cohesion)标志一个模块内部各个元素彼此结合的紧密程度,主要表现在模块内部各个元素为了执行处理功能而组合在一起的程度。,希望系统中的每个模块具有高度的聚合性,它的各个元素都是彼此密切相关的,是为完成一个共同的功能而结合在一起的。,在系统设计中应尽可能追求高聚合的系统。,4.模块独立性聚合,模块内部的紧凑性主要表现在一个模块内部各组成部分之间的联系。,模块间的聚合有7种,我们追求模块的功能聚合,这是因为此时模块具有最强的紧凑性

18、。,对于非功能性聚合的模块应尽量使其转化为功能聚合的模块。通常只需对模块的结构作一番调整就可改进其紧凑性。,模块的聚合,聚合(Cohesion)一个构件内部各个元素彼此结合的紧密程度的度量。 偶然内聚 逻辑内聚 时间内聚 过程内聚:依次调用的过程放在一起 通信内聚 顺序内聚 功能内聚,如果一个模块所要完成的动作之间没有任何关系,或者即使有某种关系,也是非常松散的,就称之为偶然聚合。,偶然聚合内部的紧密程度等于零,无法将其作为一个独立的模块去理解。,偶然聚合的最大缺陷就在于不易修改,此外,可读性也极低。,模块的聚合偶然聚合,示例:当设计模块A、B、C时,发现均有相同的部分代码,则把抽出作为一模块

19、。只是若干条无关语句的简单拼凑,其本身与系统的数据流、控制流无关。,模块的聚合偶然聚合,如果一个模块内部的各个组成部分在逻辑上具有相似的处理动作,但功能上、用途上却彼此无关,则称之为逻辑聚合。,在调用逻辑聚合的模块时,必须完全知道该模块的内部属性。因此,它和其它模块之间具备有相当复杂的耦合(通常是控制耦合),其可修改性差,维护困难。,模块的聚合逻辑聚合,示例:,模块的聚合逻辑聚合,如果一个模块内部的各个组成部分所包含的处理动作必须在同一时间内执行,则称之为时间聚合。,时间聚合是将需要同时执行的部分放在同一模块内。,时间聚合模块的紧凑性也较低,缺陷是修改性较差,维护较困难。但它在一定程度上反映了

20、系统的某些实质,因此,比逻辑聚合要强一些。,模块的聚合时间聚合,如果一个模块内部各个组成部分所要完成的动作彼此间没什么关系,但必须以特定的次序(控制流)执行,则称之为过程聚合。,过程聚合模块常是由程序流程图直接演变过来,它的处理动作彼此并没有什么关系,但在同一控制流支配下汇集在一个模块中。在过程聚合中,次序是唯一重要的,这种次序可能是顺序、判断或循环。,过程聚合较时间聚合等强,但可修改性不高。,模块的聚合过程聚合,如果一个模块内部的各个组成部分所完成的动作都使用了同一个输入数据或产生同一输出数据,或都在同一个数据结构上操作,则称之为通信聚合。,通信聚合的模块与其它模块间的联系较简单,其内部紧凑

21、性比过程聚合强,但它的各部分的执行次序可以是任意的,容易产生重复的动作。易于实现信息隐蔽。,模块的聚合通信聚合,示例:模块A、B调用C时,使用文件编号作为参数调用,而C则将该文件保存,并予以打印,其中保存、打印均是针对同一文件。这里C就称为通信聚合模块。,模块的聚合通信聚合,对一个模块内部的各组成部分,如果前一部分处理动作的输出是后一部分处理动作的输入,则称之为顺序聚合。,顺序聚合模块的紧凑性比较高,与其它模块的联系也较低,通常根据数据流图划分模块时,得到顺序聚合模块。,顺序聚合比通信聚合好。但由于顺序聚合模块中可能包含了几个功能,也可能仅为某个功能的一部分,因此比功能聚合模块要差一些。,模块

22、的聚合顺序聚合,示例:模块A有两部分组成,一部分为读入,另一部分为编辑。显然,读入部分将其输出数据作为编辑部分的输入,因此,A是顺序聚合模块。,模块的聚合顺序聚合,如果一个模块内部各个组成部分全部为执行同一功能而属于一个整体,则称之为功能聚合模块。,功能聚合的模块都具有一个目的、有单一的功能,因而其界面非常清楚,与其它模块的联系低,可读性、可修改性,维护性、可测试性均很好。,应尽可能地追求功能聚合。,模块的聚合功能聚合,模块的聚合比较,结构图与数据流图有着本质的区别:,数据流图反映的是系统的逻辑模型,是从数据在系统中的流动情况来考虑系统的;结构图则是描述系统的物理模型及系统的功能是怎样逐步完成

23、的,它从系统的功能层次上来考虑系统。,6.1.3 软件结构图形工具 1.结构图,软件结构图是软件系统的模块层次结构,反映整个系统将来程序的控制层次体系。 描述一个软件系统由哪些模块组成,以及模块之间的调用关系,6.1.3 软件结构图形工具,结构图并没有严格地表示模块的调用次序,而只表明模块的调用关系。结构图也不指明上级模块在什么时候调用下层模块。 结构图的基本成分有:模块、调用和数据 模块(Module)是指具有一定功能的可以用模块名调用的一组程序语句,如函数、子程序等 在SD中,只关注模块的外部特征,而忽略其内部特征,调用(call):用从一个模块指向另一个模块的箭头来表示,其含义是前者调用

24、了后者 为了方便,有时常用直线替代箭头,此时,表示位于上方的模块调用位于下方的模块 数据(data):模块调用时需传递的参数可通过在调用箭头旁附加一个小箭头和数据名来表示,结构图中的辅助符号,循环调用,递归调用,结构图的几个概念,深度:程序结构图中控制的层数,如图所示结构图的深度是5 宽度:程序结构图中同一层次上模块总数的最大值,例如图中所示的结构图的宽度为7 扇出:该模块直接调用的模块数目。 扇入:能直接调用该模块的模块数目。,相关指标的含义,深度和宽度在一定程序上反映了程序的规模和复杂程度 相对而言,如果程序结构图的深度和宽度较大,则说明程序的规模和复杂程度都较大。 模块的扇入扇出会影响结

25、构图的深度和宽度,例如减少模块的扇出,可能导致宽度变小而深度增加 一个模块的扇出过大通常意味着该模块比较复杂,然而扇出太少,可能导致深度的增加 一般情况,一个模块的扇出以39为宜 一个模块的扇入表示有多少模块可直接调用它,它反映了该模块的复用程度,因此模块的扇入越大越好,模块耦合与聚合是模块设计中最为重要的概念,尽可能地降低模块之间的耦合程度和提高模块内部的聚合程度是我们设计中的两项重要原则。,还存在若干辅助性的原则,同时在不断地反复实践与思考的基础上,人们在信息系统的设计中积累了大量的经验,这些经验对于我们都是极为有益的。,2. 软件结构设计优化准则,对于初步设计出的系统结构,应该仔细地分析

26、与审查,发现高耦合、低聚合的模块,并通过模块的分解与合并,改进系统结构,从而降低耦合、提高聚合。,改进系统结构,2. 软件结构设计优化准则,改进系统结构,对于若干模块共有的一个子功能,应当将其独立抽出,作为一个新的模块可被前述的模块所调用。设计中应提供更多的共用性强的模块,从而简化程序设计工作。尽可能地采用数据信息作为模块之间联系的媒介,可以通过分解等手段,将一些传递控制信息或其它非数据信息的模块转化数据耦合的模块。,一般的方法有:,2. 软件结构设计优化准则,改进系统结构,强调以功能划分模块。每一模块尽量做到只有单一的功能,对于复杂的模块应从功能的角度出发予以分解。强调系统的整体性大于局部的

27、最优性,不片面追求系统中每一模块最优设计,局部的优化应服从整体的安排。,一般的方法有:,2. 软件结构设计优化准则,系统的深度(depth)表示系统结构中的控制层数,宽度(width)则表示控制的总分布,即同一层次的模块总数的最大值。,系统的深度与宽度,一般情况下,深度和宽度标志着一个系统的大小和复杂程度,它们之间应有一定的比例关系,即深度和宽度均要适当。深度过大可能说明系统分割的过分细化;宽度过大,则有可能带来系统管理上的困难。,2. 软件结构设计优化准则,按照模块化设计原则,相应的设计策略如下: 改造程序结构图,降低耦合度,提高内聚度 避免高扇出,并随着深度的增加,力求高扇入 避免如图a那

28、样的“平铺”形态,较好的结构图形态是如图b那样的“椭圆”型,2. 软件结构设计优化准则,一个模块的规模不可过大,也不可过小。过大的模块常常是系统分解的不充分,其内部可能包含了若干部分的功能,使模块聚合降低,因此有必要作进一步分解,即把原有的模块变成若干功能尽可能单一的较小的模块。但分解也必须适度,因为过小的模块有可能降低模块的独立性,造成系统接口的复杂。,模块的规模,2. 软件结构设计优化准则,模块的作用范围是指受该模块内部的一个判定影响的所有模块的集合,只要某一模块中含有一些依赖于这个判定的操作,那么该模块就在这个判定的作用范围之中,如果整个模块的全部操作都受该判定的影响,则这个模块连同它的

29、上级模块都在这个判定的作用范围内。,模块的作用范围和控制范围,模块的控制范围包括该模块本身及所有的下属模块的集合。,2. 软件结构设计优化准则,模块的作用范围应限制在该模块的控制范围内,例如下图中 图a中,模块B2的作用范围(模块A)不在其控制范围(模块B2)内,且出现模块间的控制耦合 图b中,决策控制是在顶层模块,其作用范围(A、B2)在控制范围内,但从决策控制模块到被控模块之间相差多个层次,数据传递量增大,增加了借口的复杂度和耦合度 c和d较合适,d为最好,2. 软件结构设计优化准则,所有受模块M 的一个判定影响的模块应从属于模块M,即对任何一个内部存在判定调用逻辑的模块,其作用范围应是其

30、控制范围的子集。受模块M判定影响的模块,最好局限在模块M本身或其直属下级模块,即作出判定的模块与属于该判定作用范围的模块在系统的层次上不能相隔过远,否则会增大模块间的耦合。,一个“好”的系统设计中,对于模块的控制范围和作用范围,存在着下面两条规则:,模块的作用范围和控制范围,2. 软件结构设计优化准则,示例:设模块B作出的判定影响到模块E和模块C,而模块C又不在B的控制范围内,这样的结构难以理解。,模块的作用范围和控制范围,2. 软件结构设计优化准则,将作判定的模块合并到它的调用模块中或把判定上移到足够高的位置。将受判定影响的模块下移到作判定模块的控制范围内。,如果发现模块的作用范围不在其控制

31、范围内,可进行下述的改进:,模块的作用范围和控制范围,2. 软件结构设计优化准则,示例:前图中的模块C可移到模块B下。,模块的作用范围和控制范围,2. 软件结构设计优化准则,降低模块接口的复杂程度和冗余程度,提高一致性 模块接口上应尽可能传递简单数据,而且传递的数据应保持与模块的功能相一致,即不传递与模块功能无关的数据,若接口复杂,则有可能存在高耦合、低聚合模块的功能应是可预测的,避免对模块施加过多的限制 模块功能可预测是指该模块对相同的输入能产生相同的输出 限制一个模块只处理单一的功能,则这个模块体现出高内聚,其它有益的建议,2. 软件结构设计优化准则,模块应设计成“暗盒”形式 一个模块只完

32、成一个单独的子功能,这就使得模块内部有很强的聚合;尽可能设计单入口和单出口的模块 单入口和单出口的模块能有效地避免内容耦合复杂,则有可能存在高耦合、低聚合。“具体问题具体分析”,其它有益的建议,2. 软件结构设计优化准则,6.1.3 软件结构图形工具,3. HIPO图 系统设计需要从系统整体出发,需要明确系统的层次之间的关系,明确模块之间的关系,明确层次与模块之间的关系,为此出现了HIPO技术。HIPO图(Hierarchy Input/Process/Output),既可描述软件总的模块层次结构,又可描述每个模块输入/输出数据、处理功能及模块调用的详细情况,是一种描述系统结构和模块内部处理功

33、能的工具。,6.1.3 软件结构图形工具,HIPO图示例:,HIPO的作用和特点,HIPO它是结构化设计中最重要最流行的放法即自顶向下逐步精化的顺序设计方法。 HIPO描述整个系统的设计结构,以及各模块之间的关系。 HIPO改进了数据流程图的不足,它表达了模块层次关系。 HIPO清晰易懂,可使用户管理人员和其他系统建设者很方便地理解软件系统结构,有利于程序的编写和系统维护,以及软件系统结构质量的评价,适用于检查设计正确性和评价模块独立性。,6.1.3 软件结构图形工具,IPO图,IPO是HIPO图的补充。这是由于:虽然HIPO反映了系统的总体结构,反映了系统各个模块之间的关系,但HIPO中只有

34、每个模块的名字,没有细节。 IPO图的基本格式和所包含的基本内容:,6.1.3 软件结构图形工具,HIPO图示例:,6.1.3 软件结构图形工具,6.2 结构化设计,结构化设计(SD)是以结构化分析产生的数据流图为基础,按一定的步骤把数据流图映射成软件结构。结构化设计方法与结构化分析相衔接,构成了完整的结构化分析与设计,是使用最广泛的软件设计方法之一。,6.2.1 结构化设计的基本概念,结构化设计的步骤,建立初始结构图 将整个软件看作一个大的功能模块,通过功能分解不断将其分解成若干个较小的功能模块,直至得到一组不必再分解的模块(结构图中的底层模块) 对结构图进行改进 可根据设计准则和启发式设计

35、策略对初始结构图进行改进 书写设计文档 书写设计规格说明,特别要为每个模块书写模块的功能、接口、约束和限制等 设计评审,6.2 结构化设计,6.2 结构化设计,结构化设计是将结构化分析的结果(数据流图)映射成软件的体系结构(结构图) 数据流的类型决定了映射的方法 数据流:变换流和事务流 将数据流图分为变换型数据流图和事务型数据流图,对应的映射分别称为变换分析和事务分析,数据流图到软件结构的映射,在基本系统模型(即顶层数据流图)中,数据通常以“外部世界”所具有的形式进入系统,经过处理后又以这种形式离开系统。,变换流是一种近似线性结构,可明显地划分为输入、处理、输出三个部分。,6.2 结构化设计,

36、变换流,变换流,特征:数据流图可明显分成输入、变换、输出三部分 信息沿着输入路径进入系统,并将输入信息的外部形式经过编辑、格式转换、合法性检查、预处理等辅助性加工后变成内部形式 内部形式的信息由变换中心进行处理 然后沿着输出路径经过格式转换、组成物理块、缓冲处理等辅助性加工后变成输出信息送到系统外,6.2 结构化设计,事务流实际上是以某项业务为基本数据单元来触发事务中心,并由该中心辐射出许多条动作路径,但每次仅沿一条路径流动的数据流。,通常系统中的数据均采用变换流分析。,6.2 结构化设计,事务流,事务流,特征:数据流沿着输入路径到达一个事务中心,事务中心根据输入数据的类型在若干条动作路径中选

37、择一条来执行 事务中心的任务是:接收输入数据(即事务);分析每个事务的类型;根据事务类型选择执行一条动作路径,6.2 结构化设计,数据流图映射到结构图的步骤,复审和精化数据流图 确定数据流图的类型(变换型、事务型) 将DFD映射成初始结构图:采用变换分析或事务分析技术,将DFD映射成初始结构图 改进初始结构图,6.2 结构化设计,一个实际系统的数据流图是变换流和事务流两种类型的混合体。,输入,输出,变换中心,事务中心,6.2 结构化设计,6.2.4 综合数据流图和分层数据流图的映射,6.2 结构化设计,6.2.5 结构化设计过程:,变换分析,变换分析的任务是将变换型的DFD映射成初始的结构图,

38、步骤如下: 划定输入流和输出流的边界,确定变换中心 进行第一级分解:将DFD映射成变换型的程序结构 进行第二级分解:将DFD中的加工映射成结构图中的一个适当的模块 标注输入输出信息:根据DFD,在初始结构图上标注模块之间传递的输入信息和输出信息 分层求精模块结构图:设计中、下层模块,自顶向下、逐层分解 应用模块设计和优化准则,优化模块结构图,6.2 结构化设计,确定输入/出流边界和变换中心-1,相关概念: 物理输入:指系统输入端的数据流 物理输出:指系统输出端的数据流 逻辑输入:指变换中心的输入数据流 逻辑输出:指变换中心的输出数据流 划分可能因人而异,但差别不会太大并可通过以后的结构图改进进

39、行调整 有的时候物理输入无须预处理而直接用于系统的加工处理,此时物理输入就是逻辑输入(同样也存在物理输出就是逻辑输出的情况),6.2 结构化设计,确定输入/出流边界和变换中心-2,基本步骤 确定逻辑输入:根据DFD从物理输入端开始,一步步向系统的中间移动,可找到离物理输入端最远的,但仍可被看作系统输入的那个(或那些)数据流,就是逻辑输入 确定逻辑输出:根据DFD,从物理输出端开始,一步步向系统的中间移动,可找到离物理输出端最远的,但仍可被看作系统输出的那个数据流,就是逻辑输出 确定变换中心:确定了所有的逻辑输入和逻辑输出后,位于逻辑输入和逻辑输出之间的部分就是变换中心,6.2 结构化设计,6.

40、2 结构化设计,示例:统计成绩子图的输入、输出流边界,6.2 结构化设计,进行第一级分解,将DFD映射成变换型的程序结构 大型的软件系统第一级分解时可多分解几个模块,以减少最终结构图的层次数 例如,每条输入或输出路径画一个模块,每个主要变换功能各画一个模块,6.2 结构化设计,进行第二级分解,将DFD中的加工映射成结构图中的一个适当的模块 分解步骤如下 输入控制模块的分解:从变换中心的边界开始,沿着输入路径向外移动,把输入路径上的每个加工映射成结构图中受输入控制模块控制的一个低层模块 输出控制模块的分解:从变换中心的边界开始,沿着输出路径向外移动,把输出路径上的每个加工映射成结构图中受输出控制

41、模块控制的一个低层模块 变换控制模块的分解:把变换中心的每个加工映射成结构图中受变换控制模块控制的一个低层模块,6.2 结构化设计,“统计成绩”第二级分解的结构图,6.2 结构化设计,事务分析,将事务型DFD映射成初始的结构图 事务型的结构图如图所示,包括: 主控模块:完成整个系统的功能 接收模块:接收输入数据(事务) 发送模块:根据输入事务的类型,选择一个动作路径控制模块 动作路径控制模块:完成相应的动作路径所执行的子功能,6.2 结构化设计,事务分析的步骤,确定事务中心:事务中心位于数条动作路径的起点,这些动作路径呈幅射状从该点流出 将DFD映射成事务型的结构图 分解每条动作路径所对应的结

42、构图 接收模块的分解:从事务中心开始,沿着输入路径向外移动,把输入路径上的每个加工映射成结构图中受接收模块控制的一个低层模块 动作路径控制模块的分解:首先确定每条动作路径的流类型(变换流或事务流),然后,运用变换分析或事务分析,将每条动作路径映射成与其流特性相对应的以动作路径控制模块为根模块的结构图,6.2 结构化设计,分层DFD的映射,0层图反映了系统由哪些子系统组成,此时可先将0层图映射成下图中的结构 0层图每个加工的DFD子图可映射成以相应模块为根模块的结构子图 如果DFD子图中的加工还可分解成一张子图,则再将其映射成以相应模块为根模块的结构子图 依次一层一层分解下去得到最终的初始结构图

43、 如果初始结构图太大,也可将它组织成分层的结构图,6.2 结构化设计,“考务处理系统”的初始结构图,“考务处理系统”的初始结构图如教材P128中图5.35所示,5.8 初始结构图的改进,对结构图改进的依据就是观察这种改进是否符合软件设计的准则和启发式设计策略 因此结构图的改进没有明显的步骤,也很难定义终止条件 设计改进往往伴随着折中 例如提取多个模块中的相同功能可以提高模块的独立性和复用程度,但会增加模块间的联系 改进往往不是一次完成的,需要进行多次的反复,有时还需要在多个改进方案进行选择,“考试报名”结构图的改进-1,“考试报名”部分的结构图: “输入报名单”模块比较简单,可以和“检查报名单

44、”合并 将“打印报名单出错信息”模块合并到“检查报名单”模块,降低模块间的耦合度 最终三者合并为“输入并检查报名单”,“考试报名”结构图的改进-2,准考证在“编准考证号”模块产生,一直要到“打印准考证”模块才使用,因此可以将二者合并成“编制并打印准考证” “登记考生”和“输出考生名单”也可合并成“登记并输出考生名单”,“考试报名”结构图的改进-3,“输出控制”模块的作用是调用三个输出模块,现在这三个输出模块都合并到其它模块中去了,故其可删去 对于“输入控制模块”和“报名处理”模块,除了调用低层模块并传递参数外,没有其它实质性的工作,此模块称为管道模块,可以将其删除,其低层模块改由其上层模块调用

45、,“统计成绩 ”结构图的改进-1,先将一些比较简单的模块合并到与其功能相一致的模块中,以减少耦合度 将“输入成绩清单”、“检查成绩清单”、“打印成绩单出错信息”合并成“输入并检查成绩清单” 将“输入合格标准”与“审定合格者”合并,仍取名“审定合格者”,但它包含读入合格标准功能 将“产生考生通知单”与“打印考生通知单”合并成“产生并打印考生通知单”,“统计成绩 ”结构图的改进-2,降低模块间的耦合程度 将“打印难度分析表”模块和“打印分类统计表”模块分别作为“分析试题难度”模块和“分类统计成绩”模块的下属模块,“统计成绩 ”结构图的改进-3,删去“统计成绩输出控制” “统计成绩输入控制”模块和“统计成绩处理模块”均为“管道”模块,也可删去,局部改进后的“考务处理系统”结构图,“考务处理系统”结构图的整体改进,考虑到分析试题难度和分类统计成绩是相对独立的功能,因此将它们移到主控模块下 “考试报名”模块和“统计成绩”模块似乎是管道模块,但删去后主控模块“考务处理系统”的扇出就比较大,因此可不删除,结构图改进技巧,减少模块间的耦合度 消除重复功能 消除“管道”模块 模块的大小适中 避免高扇出 应尽可能研究整张结构图,而不是只考虑其中的一部分,高扇出时重新分解,(a)高扇出,(b)重新分解,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报