软件工程第四章-1(软件设计)_第1页
软件工程第四章-1(软件设计)_第2页
软件工程第四章-1(软件设计)_第3页
软件工程第四章-1(软件设计)_第4页
软件工程第四章-1(软件设计)_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章软件设计主要内容:(1)如何将分析模型转换为软件设计?(2)作为软件工程师在软件设计方面应使用哪些基本原则和概念?软件结构设计人们不能在没有设计图的情况下建造房子,否则房子将难以建成,就算建成了也很难保证房子的质量。计算机软件比房子复杂的多,因此在开发软件时更需要一个”设计图”来指导软件的开发。经过了需求分析阶段的工作,开发人员已经正确理解了系统的需求并以需求规格说明书的文档形式表达了系统“做什么”的问题。软件设计阶段的任务是应用一组原理与方法并遵循质量的评价原则根据软件的需求对软件进行设计,解决“如何做”的问题。

正确的软件设计软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构§4.1软件设计的目标和目的

软件需求:解决“做什么”

软件设计:解决“怎么做”

4.2软件设计的任务问题结构(软件需求)软件结构,从软件需求规格说明书出发,形成软件的具体设计方案。映射将分析模型转换为软件设计数据字典数据流图E-R图状态变迁图加工规约控制规约数据对描述象数据设计体系结构设计接口设计过程设计分析模型设计模型1.软件设计分为两个阶段:(1)概要设计(总体设计)

将软件需求转化为数据结构和软件的系统结构。确定软件的结构以及各组成成分(子系统或模块)之间的相互关系。(2)详细设计

即过程设计,通过对软件的结构表示进行细化,确定模块内部的详细的数据结构和算法,产生描述各模块程序过程的详细文档。2软件设计过程1)制定规范在进入软件开发阶段之初,首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作。⑴阅读和理解软件需求说明,确认用户要求是否可行⑵确定最合适的设计方法。⑶规定设计文档的编制标准。⑷规定编码的信息形式(代码体系),与硬件、操作系统的接口规约,命名规则等。

2)概要设计(软件系统结构的总体设计)基于功能层次结构建立系统。☆确定每个模块的功能☆建立与已确定的软件需求的对应关系☆确定模块间的调用关系☆确定模块间的接口☆评估模块划分的质量

主要任务:设计软件的结构,也就是要确定需求分析的每个需求要分配给哪些模块,以及这些模块相互间的组成关系。必要性:可以站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。3)详细设计(处理方式设计)确定为实现系统的功能需求所必需的算法,评估算法的性能确定为满足系统的性能需求所必需的算法和模块间的控制方式4)数据结构设计确定软件涉及的文件系统的结构以及数据库的模式、子模式,进行数据完整性和安全性的设计确定输入,输出文件的详细的数据结构结合算法设计,确定算法所必需的逻辑数据结构及其操作5)编写概要设计阶段的文档概要设计阶段完成时应编写以下文档:概要设计说明书数据库设计说明书用户手册制定初步的测试计划§4.3软件设计遵循的原则

1.软件采用层次结构2.自顶向下,逐步细化3.模块化4.抽象5.信息隐蔽6.信息局部化4.3.1软件体系结构软件的体系结构通过一个划分过程来完成。该划分过程从需求分析确立的目标系统的模型出发,对整个问题进行分割,使其每个部分用一个或几个软件成份即模块加以解决,整个问题就解决了1.控制结构(程序结构)控制结构是软件模块间关系的表示对模块结构图的说明模块是指整个系统中一些相对独立的程序单元,每个程序单元完成和实现一个相对独立的软件功能。模块被视为一个黑盒子,模块通过其外部特征(名字,输入/输出信息)来标识和调用。在模块结构图中,矩形表示相对独立的功能单元,称为“模块”。连接上下层模块的线段表示它们之间的调用关系。一个控制模块可以调用一个或多个下属模块;同时一个下属模块也可以被多个控制模块所调用。2.控制结构的层次规则

只有一个顶层(0层)模块0层外任一模块都会在它的邻层存在一模块与它有关同层模块间不发生联系3.软件结构度量术语深度宽度扇出扇入(模块的层数)(同一层最大模块数)(一个模块直接调用的模块数)(调用一个给定模块的模块个数)4.3.2自顶向下,逐步细化将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。编外人员工资取得工资数据计时制工资额薪金制工资额编外人员税款编外人员扣款常规扣款税收扣款计算实发工资计时工人实发工资计薪工人实发工资编外人员实发工资4.3.3模块化模块是数据说明、可执行语句等程序对象构成并执行相对独立功能的逻辑实体,它可以单独命名而且可以实现按名访问。例如,过程、函数、子程序、宏等等都可以看作模块。模块化是指把大型软件按照规定的原则划分为一个个较小的,相对独立但又相关的模块。模块化是一种“分而治之,各个击破”式的问题求解方式,它降低了问题的复杂程度,简化了软件的设计过程。模块化的基础是下面介绍的软件工程设计原理。1、软件工程设计原理C(P)是表示问题P的复杂性程度的函数,E(P)表示解决问题P的工作量。(人—年,人—月计)规律证明:如果有两个问题P1,P2,其复杂性满足:C(P1)>C(P2)则其工作量满足:E(P1)>E(P2)规律还证明:一个复杂问题P分解为两个问题P1+P2,则C(P)>C(P1)+C(P2)如果忽略因分解问题而增加的工作量,即P1与P2是互相独立的,则E(P)>E(P1)+(P2)

上面的原理说明把一个复杂的问题分解为若干独立的问题,不仅能降低复杂性C(P),使问题变得简单,而且还可以降低工作量E(P),从而降低开发成本。因此在设计中采用“分而治之,各个击破”的原理。如果继续分解,总复杂度和工作量会继续减少,但是,能否无限地分解下去,以至大事化小,小事化了呢?

否!!因为分解要增加接口的工作量。

模块化和软件成本成本或工作量模块数量软件总成本集成成本成本/模块M最小成本区域4.3.4抽象化软件系统进行模块设计时,可有不同的抽象层次。抽象和分解抽象是人类特有的一种思维方法,其原理是从事物的共性中抽取出所关注的本质特征而暂时忽略事物的有关细节。抽象的过程是自底向上的,越在高层,抽象的程度越高,就越容易分析、弄清事物之间的关系。抽象举例:数列2、4、6… 其本质:能被2整除,抽象为“偶数”。数列1、3、5… 其本质:不能被2整除,抽象为“奇数”。踢足球、长跑、游泳……抽象为“体育运动”。……这些都是抽象的过程。抽象与分解是软件工程中的应用示意图需求分析数据流图结构设计软件结构图procedureSPELLCHECK

begin

loopgetnextwordaddwordtowordlistinsortorder计算机储蓄系统某银行欲开发一个计算机储蓄系统。业务活动描述如下,储户填写的存款单或取款单由业务员键入系统,如果是存款,……抽象抽象抽象分解分解分解Mapsinto结构化设计方法示意图需求分析数据流图结构设计软件结构图遵循自顶向下的系统化分解的思想,应用一组转化规则将软件的数据流图逐步转化为一组程序模块的层次结构。4.3.5信息隐蔽

(InformationHiding)

模块所包含的信息,不允许其它不需要这些信息的模块访问,独立的模块间仅仅交换为完成系统功能而必须交换的信息。信息隐蔽的目的:

提高模块的独立性,减少修改或维护时的影响面。信息隐藏的图示说明模块控制接口"secret"•算法•数据结构•外部接口的细节•资源分配策略用户模块的详细设计4.3.6信息局部化

把关系密切的软件元素物理地放得彼此靠近。优点:可维护性好可靠性好可理解性好§4.4模块的独立性4.4.1模块独立性的概念模块独立的含义:模块完成独立的功能符合信息隐蔽和信息局部化原则模块间关联和依赖程度尽量小所谓模块独立性是指模块完成它自身规定的功能而与系统中其它的模块保持一定的相对独立。模块的独立性是评价模块化设计的重要指标,也是评价软件结构设计的重要指标。一个好的软件结构设计,其模块的独立性也较好。这是因为:第一,独立性好的模块,模块之间的相关因子较小导致模块之间的接口也较简单。第二,独立的模块比较容易测试和维护。因为局部性好的模块,错误局部于模块内部,传播范围小,修改设计和程序需要的工作量比较小。模块的独立性可以使用内聚和耦合这两个定性的指标来度量。4.4.2模块独立性的度量

模块独立性取决于模块的内部和外部特征。SD方法提出的定性的度量标准:

模块之间的耦合性模块自身的内聚性

耦合是模块之间的互相连接的紧密程度的度量。

内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。

模块独立性比较强的模块应是高内聚低耦合的模块。1.模块独立性的度量之一:耦合性

模块间相对独立性(相互依赖程度)的度量

耦合性越高,模块独立性越弱无耦合-没有依赖关系松散耦合-有少量依赖关系紧密耦合-有很多依赖关系

耦合强度依赖的因素:一模块对另一模块的引用一模块向另一模块传递的数据量一模块施加到另一模块的控制的数量模块间接口的复杂程度模块间耦合的类型

无直接耦合耦数据耦合合标记耦合性控制耦合外部耦合公共耦合高

内容耦合模块独立性弱(低耦合)强(中耦合)(较强耦合)(强耦合)(1)无直接耦合两个模块没有直接关系(模块1和模块2),模块独立性最强。模块1模块2模块3模块4(2)数据耦合一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数)。属松散耦合。数据耦合举例开发票计算水费单价数量金额(3)标记耦合(特征耦合)如两个模块通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系,则称这两个模块间存在标记偶合。标记耦合举例计算水电费计算水费计算电费住户情况水费电费住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关.将标记耦合修改为数据耦合举例计算水电费计算水费计算电费本月用水量本月用电量水费电费(4)控制耦合一模块向下属模块传递的信息(开关量、标志等控制被调用模块决策的变量)控制了被调用模块的内部逻辑。控制耦合举例A计算平均分或最高分B平均/最高(控制信号)成绩读入分数输出结果计算平均分计算最高分平均/最高?B控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖去除模块间控制耦合的方法:(1)将被调用模块内的判定上移到调用模块中进行(2)被调用模块分解成若干单一功能模块改控制耦合为数据耦合举例A计算平均分B1平均成绩最高成绩计算最高分B2(5)外部耦合一组模块均与同一外部环境关联(例如,I/O模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合。外部偶合必不可少,但这种模块数目应尽量少。(6)公共耦合(公共数据区耦合)一组模块引用同一个公用数据区(也称全局数据区、公共数据环境)。公共数据区指:

全局数据结构共享通讯区内存公共覆盖区等公共耦合举例A公共数据区CB模块A、B、C间存在错综复杂的联系(1)软件可理解性降低(2)诊断错误困难(3)软件可维护性差,(4)软件可靠性差(公共数据区及全程变量无保护措施)慎用公共数据区和全程变量!!!公共耦合存在的问题:(7)内容耦合一模块直接访问另一模块的内部信息(程序代码或数据)最不好的耦合形式!!!ABAB模块代码重叠Entry1……Entry1……多入口模块(8)模块化设计的原则和目标耦合是影响软件复杂程度和设计质量的重要因素目标:建立模块间耦合度尽可能松散的系统(9)如何降低模块间耦合度:(1)尽量使用数据耦合少用控制耦合限制公共耦合的范围坚决避免使用内容耦合!!(2)降低接口的复杂性2.模块独立性的度量之二:内聚性

一个模块内部元素在功能上相互关联的强度设计目标:高内聚

(模块在软件过程中完成单一的任务)模块的内聚性类型

低偶然内聚0分逻辑内聚1分内时间内聚3分聚过程内聚5分性通信内聚7分信息内聚9分高功能内聚10分模块独立性弱(功能分散)强(功能单一)(1)偶然内聚(巧合内聚)

模块内各部分间无联系ABCMMOVEOTORREADFILEFMOVESTOT模块M中的三个语句没有任何联系缺点:可理解性差,可修改性差例:(2)逻辑内聚把几种相关功能(逻辑上相似的功能)组合在一模块内,每次调用由传给模块的参数确定执行哪

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论