软件工程软件设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

软件设计4第四章4.1软件设计阶段的任务与目标软件设计是对实现软件的结构、系统的数据、系统组件之间的接口以及所用算法的描述。软件设计是软件开发的关键步骤,直接影响软件的质量。在软件需求分析阶段已经完全弄清楚了软件的各种需求,较好地解决了所开发的软件“做什么”的问题,并已在软件需求说明书中详尽和充分地阐明了这些需求以后,下一步就要着手实现软件的需求,即软件设计阶段要解决“怎么做”的问题。4.1软件设计阶段的任务与目标设计过程的一般模型需求描述体系结构设计抽象描述接口设计组件设计数据结构设计系统体系结构软件描述接口描述组件描述数据结构描述算法描述算法设计设计活动设计产品4.1.1软件设计在开发阶段中的重要性软件设计功能与性能需求编码软件测试程序模块已测试软件过程设计数据结构设计信息域需求开发阶段信息流4.1.1软件设计在开发阶段中的重要性软件设计阶段要解决“如何做”的问题。系统结构设计确定程序有哪些模块组成,以及这些模块之间的关系。数据结构设计主要是进行数据结构的定义。数据库设计要进行数据库的概念设计、逻辑设计和物理设计。过程设计确定每个模块的处理过程。数据库设计4.1.2软件设计阶段的任务4.1.2软件设计阶段的任务一、软件设计的任务总体设计(概要设计)和详细设计。概要设计的主要任务:1.设计软件结构(1)采用某种设计方法,将一个复杂的系统按功能划分成模块(2)确定每个模块的功能(3)确定模块之间的调用关系(4)确定模块之间的接口,即模块之间传递的信息(5)评价模块结构的质量2.数据结构及数据库设计(1)数据结构的设计:设计抽象的数据结构(2)数据库的概念设计、逻辑设计和物理设计3.编写概要设计文档文档主要有:(1)概要设计说明书。(2)数据库设计说明书,主要给出所使用的DBMS简介、数据库的概念模型、逻辑设计结果。(3)用户手册,对需求分析阶段编写的用户手册进行补充。(4)修订测试计划,对测试策略、方法、步骤提出明确要求。详细设计:确定模块内算法;数据结构详细设计(JACKSON方法);接口内部的细节。软件设计高可靠性高可维护性高可理解性高效率软件设计的目标4.1.2软件设计阶段的任务二、软件设计的目标在设计阶段应达到的目标是:提高可靠性;提高可维护性;提高可理解性;提高效率。衡量该目标的准则:1、软件实体有明显的层次结构,利于软件元素间控制。2、软件实体应该是模块化的,模块具有独立功能。3、软件实体与环境的界面清晰。4、设计规格说明清晰、简洁、完整和无二义性。常用的设计方法有:SD法、Jackson法、HIPO法、Parnas法、Warnier法等。4.2软件结构与软件结构图4.2软件结构与软件结构图软件结构是软件模块之间关系的表示,它决定了整个系统的结构,也确定了系统的质量。模块之间的关系可有多种,但都可以归结为一种层次关系。软件结构图是总体设计阶段的主要描述工具,它描述了构成系统的基本元素——模块及模块之间的调用关系,模块之间的数据传递关系。本节讨论如何进行软件结构的设计,设计的准则以及为了提高软件系统的质量,如何对软件结构进行改进的技术。4.2.1软件结构的基本概念二、模块化模块化就是将系统划分为若干个模块,每个模块完成一个子功能。模块化的目的是将系统“分而治之”,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。4.2.1软件结构的基本概念软件结构表示软件系统的构成,是软件模块间关系的表示,下图则为软件结构示意图。下面先介绍几个相关的的概念。ABCDEFGHIJKLM一、模块(Module)模块是程序对象有名字的集合。例如,过程、函数、子程序、宏等,是构成软件系统结构的基本元素。软件结构图模块化降低软件复杂度的简单证明4.2.1软件结构的基本概念模块化降低软件复杂度的简单证明令:C(X)表示问题X的复杂度函数;E(X)解决问题X所需工作量的复杂度函数;若:有问题P1,P2;C(P1)C(P2);显然:E(P1)E(P2)由经验:C(P1+P2)C(P1)+C(P2)于是:E(P1+P2)E(P1)+E(P2)将问题(P1+P2)划分为两个问题P1和P2后,其工作量和复杂度都降低。并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。显然,每个软件系统都有一个最佳模块数M。注意选择分解的最佳模块数。右上图描述了模块化与软件成本的关系。软件总成本模块化与软件成本的关系成本模块数目模块成本接口成本最小成本区M软件的层次结构4.2.1软件结构的基本概念顶层1层2层ABCDEFGHIJKLMN深度扇入为2扇出为3扇入为33层4层宽度宽度宽度软件结构示意图有关指标:⑴深度:表示软件结构中从顶层模块到最底层模块的层数。⑵宽度:表示控制的总分布。⑶扇出数:指一个模块直接控制下属的模块个数。⑷扇入数:指一个模块的直接上属模块个数。一个好的软件结构的形态准则是:顶部宽度小,中部宽度大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数。软件结构图表示软件的系统结构,它是软件模块间关系的表示,软件之间的各种关系,均可表示为层次结构。如图所示。4.2.2软件的树状结构和网状结构4.2.2软件的树状结构和网状结构由模块连接而得到的软件结构最普通的形式就是树状结构和网状结构。在树状结构中,位于最上层的根部是顶层模块,它是程序的主模块。与其联系的有若干下属模块,各下属模块还可以进一步引出更下一层的下属模块,如图所示的树状结构。树状结构的特点是:整个结构只有一个顶层模块,而对于任何一个下属模块来说,它只有一个上级模块,而且同一层模块之间不发生关系。顶层1层2层3层软件的树状结构ABCDEFGHIKLM网状结构在网状结构中,任何两个模块间都可以有双向的关系,不分层次。任何两个模块都是平等的,没有从属关系。网状结构(a)(b)4.2.2软件的树状结构和网状结构ABCDEFGHABCD比较两种结构的特点:对于不加限制的网状结构,由于模块间相互关系的任意性,使得整个结构十分复杂,处理起来势必引起许多麻烦,这与原来划分模块为便于处理的意图相矛盾。所以在软件开发的实践中,人们通常采用树状结构,而不采用网状结构。模块5模块5模块4模块44.2.3软件结构图(SC图)模块1模块3模块2valuesvaluesdatadata模块1模块2模块3valuesvaluesdatadata4.2.3软件结构图(SC图)结构图(StructureChart,简称SC图)是精确表达软件结构的图形表示方法,它以特定的符号表示模块、模块间的调用关系和模块间信息的传递。结构图的主要构成有:⑴模块(Module):⑶数据:模块调用图⑵调用:data数字信息控制信息例:画出打印报告的软件结构图调用次序为上层调用下层;同层按照数据传递关系确定;一般从左到右执行。执行过程即按照数据流向进行。报告计算获得编辑确认数据读入编辑打印报告头打印报告尾打印输入EOF输入已编辑已编辑已编辑已确认已确认数据已确认数据计算结果结果日期总结果行行行4.2.3软件结构图(SC图)打印报告予以确认4.3模块的独立性4.3模块的独立性上一节讨论了关于软件结构与软件结构图的概念,本节进一步讨论影响软件系统质量的另一个关键问题,模块的独立性问题。模块化方法已经为所有工程领域所接受。模块化的主要优点是,模块化设计降低了软件系统的复杂性,使得系统容易修改,同时使得系统各个部分可以并行开发,从而提高了软件的生产率。提高模块质量在于提高模块独立性。模块的独立性用耦合性和内聚性来衡量。4.3.1模块独立性(moduleindependence)4.3.1模块独立性“模块”,又称“构件”,一般指用一个名字可调用的一段程序。它一般具有如下三个基本属性:⑴功能即指该模块实现什么功能,做什么事情。必须注意:模块功能,应是该模块本身的功能加上它所调用的所有子模块的功能。⑵逻辑即描述模块内部怎么做。⑶状态即该模块使用时的环境和条件。所谓模块的独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。即功能专一,模块之间无过多的相互作用的模块。这种类型的模块可以并行开发,模块独立性越强,开发越容易。独立性强的模块,还能减少错误的影响,使模块容易组合、修改及测试。4.3.1模块独立性(moduleindependence)4.3.1模块独立性模块独立性的度量标准是两个定性准则:耦合性用于描述模块之间联系的紧密程度。内聚性用于描述模块内部联系的紧密程度。模块独立性比较强的模块应该是具有高内聚性和的低耦合度。模块间耦合的类型:低无直接耦合耦数据耦合合标记耦合性控制耦合外部耦合公共耦合高内容耦合模块独立性弱(低耦合)强(中耦合)(较强耦合)(强耦合)(1)无直接耦合两个模块没有直接关系(模块1和模块2),模块独立性最强。模块1模块2模块3模块4(2)数据耦合一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数)。属松散耦合。数据耦合举例开发票计算水费单价数量金额(3)标记耦合(特征耦合)如两个模块通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系,则称这两个模块间存在标记偶合。标记耦合举例计算水电费计算水费计算电费住户情况水费电费住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关.“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合.将标记耦合修改为数据耦合举例计算水电费计算水费计算电费本月用水量本月用电量水费电费(4)控制耦合一模块向下属模块传递的信息(开关量、标志等控制被调用模块决策的变量)控制了被调用模块的内部逻辑。控制耦合举例A计算平均分或最高分B平均/最高(控制信号)成绩读入分数输出结果计算平均分计算最高分平均/最高?B控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖去除模块间控制耦合的方法:(1)将被调用模块内的判定上移到调用模块中进行(2)被调用模块分解成若干单一功能模块改控制耦合为数据耦合举例A计算平均分B1平均成绩最高成绩计算最高分B2(5)外部耦合一组模块共享全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息。C语言Extern(6)公共耦合(公共数据区耦合)一组模块引用同一个公用数据区(也称全局数据区、公共数据环境)。公共数据区指:•全局数据结构•共享通讯区•内存公共覆盖区等公共耦合举例A公共数据区CB模块A、B、C间存在错综复杂的联系(1)软件可理解性降低(2)诊断错误困难(3)软件可维护性差,(4)软件可靠性差(公共数据区及全程变量无保护措施)慎用公共数据区和全程变量!!!公共耦合存在的问题:(7)内容耦合一模块直接访问另一模块的内部信息(程序代码或数据)最不好的耦合形式!!!ABAB模块代码重叠Entry1……Entry1……多入口模块多个功能如何降低模块间耦合度:(1)尽量使用数据耦合少用控制耦合限制公共耦合的范围坚决避免使用内容耦合(2)降低接口的复杂性2.模块独立性的度量之二:内聚性一个模块内部元素在功能上相互关联的强度设计目标:高内聚(模块在软件过程中完成单一的任务)模块的内聚性类型:低偶然内聚内逻辑内聚聚时间内聚性过程内聚通信内聚信息内聚高功能内聚模块独立性弱(功能分散)强(功能单一)(1)偶然内聚(巧合内聚)模块内各部分间无联系ABCMMOVEOTORREADFILEFMOVESTOT模块M中的三个语句没有任何联系缺点:可理解性差,可修改性差例:(2)逻辑内聚几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如一个模块读取各种不同类型外设的输入。尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能的修改有时也会影响全局,因此这类模块的修改也比较困难。逻辑内聚模块ABCEFGABCEFGA1B1C1EFG模块内部逻辑E、F、G逻辑功能相似,组成新模块EFG缺点:增强了耦合程度(控制耦合

1 / 120
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功