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

下载本文档

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

文档简介

软件工程第四章软件设计4.1软件设计阶段的任务与目标

软件设计是对实现软件的结构、系统的数据、系统组件之间的接口以及所用算法的描述。软件设计是软件开发的关键步骤,直接影响软件的质量。在软件需求分析阶段已经完全弄清楚了软件的各种需求,较好地解决了所开发的软件“做什么”的问题,并已在软件需求说明书中详尽和充分地阐明了这些需求以后,下一步就要着手实现软件的需求,即软件设计阶段要解决“怎么做”的问题。4.1软件设计阶段的任务与目标第2页,共133页,2024年2月25日,星期天设计过程的一般模型需求描述体系结构设计抽象描述接口设计组件设计数据结构设计系统体系结构软件描述接口描述组件描述数据结构描述算法描述算法设计设计活动设计产品第3页,共133页,2024年2月25日,星期天

4.1.1软件设计在开发阶段中的重要性软件设计功能与性能需求编码软件测试程序模块已测试软件系统结构设计过程设计数据结构设计信息域需求开发阶段信息流

软件设计阶段要解决“如何做”的问题。系统结构设计确定程序有哪些模块组成,以及这些模块之间的关系。数据结构设计主要是进行数据结构的定义。数据库设计要进行数据库的概念设计、逻辑设计和物理设计。

过程设计确定每个模块的处理过程。数据库设计第4页,共133页,2024年2月25日,星期天

4.1.2软件设计阶段的任务一、软件设计的任务总体设计(概要设计)和详细设计。概要设计的主要任务:1.设计软件结构(1)采用某种设计方法,将一个复杂的系统按功能划分成模块(2)确定每个模块的功能(3)确定模块之间的调用关系(4)确定模块之间的接口,即模块之间传递的信息(5)评价模块结构的质量

2.数据结构及数据库设计

(1)数据结构的设计:设计抽象的数据结构(2)数据库的概念设计、逻辑设计和物理设计3.编写概要设计文档

文档主要有:

(1)概要设计说明书。

(2)数据库设计说明书,主要给出所使用的DBMS简介、数据库的概念模型、逻辑设计、结果。

(3)用户手册,对需求分析阶段编写的用户手册进行补充。

(4)修订测试计划,对测试策略、方法、步骤提出明确要求。

第5页,共133页,2024年2月25日,星期天详细设计:确定模块内算法;数据结构详细设计(JACKSON方法);接口内部的细节。第6页,共133页,2024年2月25日,星期天软件设计高可靠性高可维护性高可理解性高效率软件设计的目标二、软件设计的目标在设计阶段应达到的目标是:提高可靠性;提高可维护性;提高可理解性;提高效率。衡量该目标的准则:1、软件实体有明显的层次结构,利于软件元素间控制。2、软件实体应该是模块化的,模块具有独立功能。3、软件实体与环境的界面清晰。4、设计规格说明清晰、简洁、完整和无二义性。常用的设计方法有:SD法、Jackson法、HIPO法、Parnas法、Warnier法等。第7页,共133页,2024年2月25日,星期天4.2软件结构与软件结构图软件结构是软件模块之间关系的表示,它决定了整个系统的结构,也确定了系统的质量。模块之间的关系可有多种,但都可以归结为一种层次关系。软件结构图是总体设计阶段的主要描述工具,它描述了构成系统的基本元素——模块及模块之间的调用关系,模块之间的数据传递关系。本节讨论如何进行软件结构的设计,设计的准则以及为了提高软件系统的质量,如何对软件结构进行改进的技术。第8页,共133页,2024年2月25日,星期天4.2.1软件结构的基本概念二、模块化

模块化就是将系统划分为若干个模块,每个模块完成一个子功能。模块化的目的是将系统“分而治之”,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。

软件结构表示软件系统的构成,是软件模块间关系的表示,下图则为软件结构示意图。下面先介绍几个相关的的概念。ABCDEFGHIJKLM一、模块(Module)

模块是程序对象有名字的集合。例如,过程、函数、子程序、宏等,是构成软件系统结构的基本元素。 软件结构图第9页,共133页,2024年2月25日,星期天模块化降低软件复杂度的简单证明令: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第10页,共133页,2024年2月25日,星期天软件的层次结构顶层1层2层ABCDEFGHIJKLMN深度扇入为2扇出为3扇入为33层4层宽度宽度宽度软件结构示意图有关指标:⑴深度:表示软件结构中从顶层模块到最底层模块的层数。⑵宽度:表示控制的总分布。⑶扇出数:指一个模块直接控制下属的模块个数。⑷扇入数:指一个模块的直接上属模块个数。

一个好的软件结构的形态准则是:顶部宽度小,中部宽度大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数。

软件结构图表示软件的系统结构,它是软件模块间关系的表示,软件之间的各种关系,均可表示为层次结构。如图所示。第11页,共133页,2024年2月25日,星期天4.2.2软件的树状结构和网状结构

由模块连接而得到的软件结构最普通的形式就是树状结构和网状结构。在树状结构中,位于最上层的根部是顶层模块,它是程序的主模块。与其联系的有若干下属模块,各下属模块还可以进一步引出更下一层的下属模块,如图所示的树状结构。树状结构的特点是:整个结构只有一个顶层模块,而对于任何一个下属模块来说,它只有一个上级模块,而且同一层模块之间不发生关系。顶层1层2层3层

软件的树状结构ABCDEFGHIKLM第12页,共133页,2024年2月25日,星期天

在网状结构中,任何两个模块间都可以有双向的关系,不分层次。任何两个模块都是平等的,没有从属关系。

网状结构(a)(b)ABCDEFGHABCD

比较两种结构的特点:对于不加限制的网状结构,由于模块间相互关系的任意性,使得整个结构十分复杂,处理起来势必引起许多麻烦,这与原来划分模块为便于处理的意图相矛盾。所以在软件开发的实践中,人们通常采用树状结构,而不采用网状结构。第13页,共133页,2024年2月25日,星期天模块5模块5模块4模块4模块1模块3模块2valuesvaluesdatadata模块1模块2模块3valuesvaluesdatadata4.2.3软件结构图(SC图)

结构图(StructureChart,简称SC图)是精确表达软件结构的图形表示方法,它以特定的符号表示模块、模块间的调用关系和模块间信息的传递。结构图的主要构成有:⑴模块(Module):⑶数据:模块调用图⑵调用:data○数字信息控制信息第14页,共133页,2024年2月25日,星期天例:画出打印报告的软件结构图

调用次序为上层调用下层;同层按照数据传递关系确定;一般从左到右执行。

执行过程即按照数据流向进行。报告计算获得编辑确认数据读入编辑打印报告头打印报告尾打印输入EOF输入已编辑已编辑已编辑已确认已确认数据已确认数据计算结果结果日期总结果行行行打印报告予以确认第15页,共133页,2024年2月25日,星期天4.3模块的独立性

上一节讨论了关于软件结构与软件结构图的概念,本节进一步讨论影响软件系统质量的另一个关键问题,模块的独立性问题。模块化方法已经为所有工程领域所接受。模块化的主要优点是,模块化设计降低了软件系统的复杂性,使得系统容易修改,同时使得系统各个部分可以并行开发,从而提高了软件的生产率。提高模块质量在于提高模块独立性。模块的独立性用耦合性和内聚性来衡量。 第16页,共133页,2024年2月25日,星期天4.3.1模块独立性(moduleindependence)

“模块”,又称“构件”,一般指用一个名字可调用的一段程序。它一般具有如下三个基本属性:⑴功能即指该模块实现什么功能,做什么事情。必须注意:模块功能,应是该模块本身的功能加上它所调用的所有子模块的功能。⑵逻辑即描述模块内部怎么做。⑶状态即该模块使用时的环境和条件。所谓模块的独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。即功能专一,模块之间无过多的相互作用的模块。这种类型的模块可以并行开发,模块独立性越强,开发越容易。独立性强的模块,还能减少错误的影响,使模块容易组合、修改及测试。第17页,共133页,2024年2月25日,星期天4.3.1模块独立性(moduleindependence)模块独立性的度量标准是两个定性准则:

耦合性用于描述模块之间联系的紧密程度。

内聚性用于描述模块内部联系的紧密程度。模块独立性比较强的模块应该是具有高内聚性和的低耦合度。

第18页,共133页,2024年2月25日,星期天在描述一个模块时,还必须按模块的外部特性与内部特性分别描述模块的外部特性模块的模块名、参数表、其中的输入参数和输出参数,以及给程序以至整个系统造成的影响模块的内部特性完成其功能的程序代码和仅供该模块内部使用的数据第19页,共133页,2024年2月25日,星期天模块间耦合的类型:第20页,共133页,2024年2月25日,星期天内容耦合(ContentCoupling)如果发生下列情形,两个模块之间就发生了内容耦合。(1)一个模块直接访问另一个模块的内部数据;(2)一个模块不通过正常入口转到另一模块内部;(3)两个模块有一部分程序代码重迭(只可能出现在汇编语言中);(4)一个模块有多个入口。最不好的耦合形式

!!!第21页,共133页,2024年2月25日,星期天若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。公共耦合(CommonCoupling)第22页,共133页,2024年2月25日,星期天公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。第23页,共133页,2024年2月25日,星期天Global:V1V2A:……………………A1=V1+V2……………………B:……………………V1=B1……………………Global:V1V2A:……………………V1++……………………B:……………………V2=B1+V1……………………问题:

公共部分的改动将影响所有调用它的模块;

公共部分的数据存取无法控制;

复杂程度随耦合模块的个数增加而增加。第24页,共133页,2024年2月25日,星期天公共耦合举例A公共数据区CB模块A、B、C间存在错综复杂的联系第25页,共133页,2024年2月25日,星期天(1)软件可理解性降低(2)诊断错误困难(3)软件可维护性差,(4)软件可靠性差(公共数据区及全程变量无保护措施)慎用公共数据区和全程变量!!!公共耦合存在的问题:第26页,共133页,2024年2月25日,星期天外部耦合(ExternalCoupling)一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。一组模块均与同一外部环境关联(例如,I/O模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合。外部偶合必不可少,但这种模块数目应尽量少。第27页,共133页,2024年2月25日,星期天控制耦合(ControlCoupling)如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。第28页,共133页,2024年2月25日,星期天控制耦合举例A计算平均分或最高分B平均/最高(控制信号)成绩读入分数输出结果计算平均分计算最高分平均/最高?B第29页,共133页,2024年2月25日,星期天控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖去除模块间控制耦合的方法:(1)将被调用模块内的判定上移到调用模块中进行(2)被调用模块分解成若干单一功能模块第30页,共133页,2024年2月25日,星期天改控制耦合为数据耦合举例A计算平均分B1平均成绩最高成绩计算最高分B2第31页,共133页,2024年2月25日,星期天标记耦合(StampCoupling)一个模块访问另一个模块时,彼此之间是通过简单数据参数

(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的。数据耦合(DataCoupling)一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。第32页,共133页,2024年2月25日,星期天数据耦合举例开发票计算水费单价数量金额第33页,共133页,2024年2月25日,星期天标记耦合举例计算水电费计算水费计算电费住户情况水费电费住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关.“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合.第34页,共133页,2024年2月25日,星期天将标记耦合修改为数据耦合举例计算水电费计算水费计算电费本月用水量本月用电量水费电费第35页,共133页,2024年2月25日,星期天两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。非直接耦合的模块独立性最强。非直接耦合(NondirectCoupling)第36页,共133页,2024年2月25日,星期天如何降低模块间耦合度:(1)尽量使用数据耦合少用控制耦合限制公共耦合的范围

坚决避免使用内容耦合(2)降低接口的复杂性第37页,共133页,2024年2月25日,星期天2.模块独立性的度量之二:内聚性

一个模块内部元素在功能上相互关联的强度

设计目标:高内聚

(模块在软件过程中完成单一的任务)第38页,共133页,2024年2月25日,星期天模块的内聚性类型:第39页,共133页,2024年2月25日,星期天(1)偶然内聚(巧合内聚)

模块内各部分间无联系ABCMMOVEOTORREADFILEFMOVESTOT模块M中的三个语句没有任何联系缺点:可理解性差,可修改性差例:第40页,共133页,2024年2月25日,星期天(2)逻辑内聚(LogicalCohesion)这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。第41页,共133页,2024年2月25日,星期天逻辑内聚模块ABCEFGABCEFGA1B1C1EFG模块内部逻辑E、F、G逻辑功能相似,组成新模块EFG缺点:增强了耦合程度(控制耦合)

不易修改,效率低公用代码段公用代码段第42页,共133页,2024年2月25日,星期天(3)时间内聚(经典内聚)模块完成的功能必须在同一段时间内执行,这些功能只因时间因素关联在一起。例如:初始化系统模块、系统结束模块、紧急故障处理模块等均是时间性聚合模块.第43页,共133页,2024年2月25日,星期天使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。模块内各处理成分相关,且必须以特定次序执行(4)过程内聚(ProceduralCohesion)第44页,共133页,2024年2月25日,星期天过程内聚模块读入成绩单审查成绩单统计成绩打印成绩读入并审查成绩单统计并打印成绩单第45页,共133页,2024年2月25日,星期天如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。(5)通信内聚(CommunicationCohesion)第46页,共133页,2024年2月25日,星期天通信内聚模块例产生工资报表计算平均工资职工工资记录职工工资报表平均工资产生职工工资报表并计算平均工资模块第47页,共133页,2024年2月25日,星期天第48页,共133页,2024年2月25日,星期天这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。(6)信息内聚(InformationalCohesion)第49页,共133页,2024年2月25日,星期天第50页,共133页,2024年2月25日,星期天一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。模块仅包括为完成某个功能所必须的所有成分。

(模块所有成分共同完成一个功能,缺一不可)

内聚性最强(7)功能内聚(FunctionalCohesion)信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓。第51页,共133页,2024年2月25日,星期天内聚与耦合密切相关,同其它模块强耦合的模块意味者弱内聚,强内聚模块意味着与其它模块间松散耦合.设计目标:力争强内聚、弱耦合第52页,共133页,2024年2月25日,星期天4.4结构化设计方法软件设计分为两个阶段:(1)概要设计(总体设计)确定软件的结构以及各组成成分(子系统或模块)之间的相互关系。(2)详细设计

确定模块内部的算法和数据结构,产生描述各模块程序过程的详细文档。第53页,共133页,2024年2月25日,星期天数据结构是数据的各个元素之间的逻辑关系的一种表示。数据结构设计应确定数据的组织、存取方式、相关程度以及信息的不同处理方法。数据结构的组织方法和复杂程度可以灵活多样,但典型的数据结构种类是有限的,它们是构成一些更复杂结构的基本构件块。数据结构第54页,共133页,2024年2月25日,星期天第55页,共133页,2024年2月25日,星期天软件过程软件过程必须提供精确的处理说明,包括事件的顺序、正确的判定点、重复的操作直至数据的组织和结构等等。程序结构与软件过程是有关系的。对每个模块的处理必须指明该模块所在的上下级环境。软件过程遵从程序结构的主从关系,因此它也是层次化的。下图软件过程侧重与描述模块间的处理细节。第56页,共133页,2024年2月25日,星期天第57页,共133页,2024年2月25日,星期天信息隐蔽由parnas方法提倡的信息隐蔽是指,每个模块的实现细节对于其它模块来说是隐蔽的。也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。第58页,共133页,2024年2月25日,星期天4.5概要设计(总体设计)主要确定:软件系统的结构各模块功能及模块间联系(接口)表示软件结构的图形工具结构图层次图和HIPO图第59页,共133页,2024年2月25日,星期天4.5结构化设计方法首先研究、分析和审查数据流图。从软件的需求规格说明中弄清数据流加工的过程,对于发现的问题及时解决。然后根据数据流图决定问题的类型。数据处理问题典型的类型有两种:变换型和事务型。针对两种不同的类型分别进行分析处理。第60页,共133页,2024年2月25日,星期天由数据流图推导出系统的初始结构图。利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为止。修改和补充数据词典。制定测试计划。基本思想:DFDSystemHierarchy第61页,共133页,2024年2月25日,星期天InternalrepresentationInformationTransformflowOutgoingflowIncomingflowExternalrepresentationTime事实上所有信息流都可归结为变换流⑴变换流(TransformFlow):1、DataFlow的分类第62页,共133页,2024年2月25日,星期天⑵事务流(TransactionFlow)

…TTransactionrequest

…Actionpaths

…T=Calloneoftheseveralsubroutinesdependingonthetypeoftheincomingtransactionrequest.当信息流具有明显的“发射中心”时,可归结为事务流。第63页,共133页,2024年2月25日,星期天2系统结构图中的模块分类传入模块─从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。传出模块─从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。变换模块─它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。协调模块─对所有下属模块进行协调和管理的模块。第64页,共133页,2024年2月25日,星期天第65页,共133页,2024年2月25日,星期天3变换型系统结构图变换型数据处理问题的工作过程大致分为三步,即取得数据,变换数据和给出数据。相应于取得数据、变换数据、给出数据,变换型系统结构图由输入、中心变换和输出等三部分组成。第66页,共133页,2024年2月25日,星期天第67页,共133页,2024年2月25日,星期天4事务型系统结构图它接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。在事务型系统结构图中,事务中心模块按所接受的事务的类型,选择某一事务处理模块执行。各事务处理模块并列。每个事务处理模块可能要调用若干个操作模块,而操作模块又可能调用若干个细节模块。第68页,共133页,2024年2月25日,星期天第69页,共133页,2024年2月25日,星期天5变换分析变换分析方法由以下四步组成:审查数据流图;区分有效(逻辑)输入、有效(逻辑)输出和中心变换部分;进行一级分解,设计上层模块;进行二级分解,设计输入、输出和中心变换部分的中、下层模块。第70页,共133页,2024年2月25日,星期天第71页,共133页,2024年2月25日,星期天①

在选择模块设计的次序时,必须对一个模块的全部直接下属模块都设计完成之后,才能转向另一个模块的下层模块的设计。由DFDSC时,应遵循一些原则:第72页,共133页,2024年2月25日,星期天②

在设计下层模块时,应考虑模块的耦合和内聚问题,以提高初始结构图的质量。③使用“黑箱”技术:在设计当前模块时,先把这个模块的所有下层模块定义成“黑箱”,在设计中利用它们时,暂时不考虑其内部结构和实现。在这一步定义好的“黑箱”,在下一步就可以对它们进行设计和加工。这样,又会导致更多的“黑箱”。最后,全部“黑箱”的内容和结构应完全被确定。第73页,共133页,2024年2月25日,星期天④在模块划分时,一个模块的直接下属模块一般在5个左右。如果直接下属模块超过10个,可设立中间层次。⑤如果出现了以下情况,就停止模块的功能分解:

当模块不能再细分为明显的子任务时;

当分解成用户提供的模块或程序库的子程序时;

当模块的界面是输入/输出设备传送的信息时;

当模块不宜再分解得过小时。

第74页,共133页,2024年2月25日,星期天6事务分析在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能。这种数据流就叫做事务。与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统结构图。第75页,共133页,2024年2月25日,星期天

第76页,共133页,2024年2月25日,星期天7事务分析过程①

识别事务源

利用数据流图和数据词典,从问题定义和需求分析的结果中,找出各种需要处理的事务。通常,事务来自物理输入装置。有时,设计人员还必须区别系统的输入、中心加工和输出中产生的事务。第77页,共133页,2024年2月25日,星期天②

规定适当的事务型结构

在确定了该数据流图具有事务型特征之后,根据模块划分理论,建立适当的事务型结构。③

识别各种事务和它们定义的操作。

从问题定义和需求分析中找出的事务及其操作所必需的全部信息,对于系统内部产生的事务,必须仔细地定义它们的操作。第78页,共133页,2024年2月25日,星期天④

注意利用公用模块

在事务分析的过程中,如果不同事务的一些中间模块可由具有类似的语法和语义的若干个低层模块组成,则可以把这些低层模块构造成公用模块。⑤

对每一事务,或对联系密切的一组事务,建立一个事务处理模块;

如果发现在系统中有类似的事务,可以把它们组成一个事务处理模块。第79页,共133页,2024年2月25日,星期天⑥

对事务处理模块规定它们全部的下层操作模块⑦对操作模块规定它们的全部细节模块。

变换分析是软件系统结构设计的主要方法。一般,一个大型的软件系统是变换型结构和事务型结构的混合结构。所以,我们通常利用以变换分析为主,事务分析为辅的方式进行软件结构设计。第80页,共133页,2024年2月25日,星期天SD的总体过程:“变换”“事务”精化数据流图流类型区分事务中心和数据接收通路区分输入和输出分支映射成事务结构映射成变换结构用启发式设计规则精化软件结构导出接口描述和全程数据结构复查详细设计变换分析事务分析优化的前题是:“Getittowork,thenmakeitfast.”第81页,共133页,2024年2月25日,星期天

第82页,共133页,2024年2月25日,星期天8软件模块结构的改进(启发式原则)模块功能的完善化

一个完整的模块应当有以下几部分:

①执行规定的功能的部分;

②出错处理部分。当模块不能完成规定的功能时,必须回送出错标志,出现例外情况的原因。

③如果需要返回数据给它的调用者,在完成数据加工或结束时,应当给它的调用者返回一个状态码。第83页,共133页,2024年2月25日,星期天消除重复功能,改善软件结构

完全相似:在结构上完全相似,可能只是在数据类型上不一致。此时可以采取完全合并的方法。

②局部相似:找出其相同部分,分离出去,重新定义成一个独立的下一层模块。还可以与它的上级模块合并。第84页,共133页,2024年2月25日,星期天如左图,虚线框部分是相似的。此时,不可把两者合并为一,如图(b)所示,因为这样在合并后的模块内部必须设置许多开关,如图(f)所示,势必把模块降低到逻辑内聚一级。一般处理办法是分析R1和R2,找出其相同部分,从R1和R2中分离出去,重新定义成一个独立的下一层模块。R1和R2剩余的部分根据情况还可以与它的上级模块合并,以减少控制的传递性、全局数据的引用和接口的复杂性,这样就形成了图中如(c)、(d)、(e)的各种方案。第85页,共133页,2024年2月25日,星期天模块的作用范围应在控制范围之内

模块的控制范围包括它本身及其所有的从属模块。模块的作用范围是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。如果一个判定的作用范围包含在这个判定所在模块的控制范围之内,则这种结构是简单的,否则,它的结构是不简单的。

第86页,共133页,2024年2月25日,星期天(a),模块A的控制范围为模块A,B,C,D,E,F,G.模块C的控制范围为模块C,F,G.(b)表明作用范围不在控制范围之内。模块G作出一个判定之后,若需要模块C工作,则必须把信号回送给模块D,再由D把信号回送给模块B。这样就增加了数据的传送量和模块间的耦合,使模块间出现了控制耦合,这显然不是一个好的设计。图中反白框表示判定的作用范围。(c)虽然表明模块的作用范围是在控制范围之内,可是判定所在模块TOP所处层次太高,这样也需要经过不必要的信号传送,增加了数据的传送量。虽然可以用,但不是较好的结构。(d)表明作用范围在控制范围之内,只有一个判定分支有一个不必要的穿越,是一个较好的结构。(e)是一个比较理想的结构。解决:判断点上移或模块下移!

从以上比较可知,在一个设计的很好的系统模块结构图中,所有受一个判定影响的模块都应该从属于该判定所在的模块,最好局限于作出判定的那个模块本身及它的直接下属模块。如图(e)那样。第87页,共133页,2024年2月25日,星期天控制域MACBM的控制域为{M,A,B,C}

作用域:M中的一个判定所影响的模块。例如:A:…………if……thengotoB1……………………B:……………………B1:……………………作用域在控制域内A:…………if……thengotoM1……………………M:……………………M1:gotoC1……………………作用域超出了控制域上例中A的作用超出了控制域。改进方法之一,可以把A中的if移到M中;方法之二,可以把C移到A下面。第88页,共133页,2024年2月25日,星期天尽可能减少高扇出结构,随着深度增大扇入。

如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。比较适当的扇出数为2-5,最多不要超过9.模块的扇出数过小,例如总是1,也不好。这样将使得结构图的深度大大增加,不但增大了模块接口的复杂性,而且增加了调用和返回上的时间开销,降低了工作效率。一个模块的扇入数越大,则共享该模块的上级模块数目越多。但如果一个模块的扇入数太大,例如超过8,而它又不是公用模块,说明该模块可能具有多个功能。在这种情况下应当对它进一步分析并将其功能分解。

(c)所示模块Q的扇入数为9,它又不是公用模块,通过分析得知它是3功能的模块。对它进行分解,增加3个中间控制模块Q1,Q2,Q3,而把真正公用部分提取出来留在Q中,使它成为这3个中间模块的公用模块,使各模块的功能单一化,从而改善了模块结构,如图(d).

经验证明,一个设计的很好的软件模块结构,通常上层扇出比较高,中间扇出较少,底层扇入到有高扇入的公用模块中。第89页,共133页,2024年2月25日,星期天

避免或减少使用病态联接

应限制使用如下三种病态联接:

直接病态联接即模块A直接从模块B内部取出某些数据,或者把某些数据直接送到模块B内部。第90页,共133页,2024年2月25日,星期天

公共数据域病态联接模块A和模块B通过公共数据域,直接传送或接受数据,而不是通过它们的上级模块。这种方式将使得模块间的耦合程度剧增。它不仅影响模块A和模块B,而且影响与公共数据域有关联的所有模块。③

通信模块联接即模块A和模块B通过通信模块TABLEIT传送数据。从表面看,这不是病态联接,因为模块A和模块B都未涉及通信模块TABLEIT的内部。然而,它们之间的通信(即数据传送)没有通过它们的上级模块。从这个意义上讲,这种联接是病态的。第91页,共133页,2024年2月25日,星期天模块的大小要适中

模块的大小,可以用模块中所含语句的数量的多少来衡量。把模块的大小限制在一定的范围之内。通常规定其语句行数在50~100左右,保持在一页纸之内,最多不超过500行。设计功能可预测的模块,但要避免过分受限制的模块一个功能可预测的模块,不论内部处理细节如何,但对相同的输入数据,总能产生同样的结果。但是,如果模块内部蕴藏有一些特殊的鲜为人知的功能时,这个模块就可能是不可预测的。对于这种模块,如果调用者不小心使用,其结果将不可预测。第92页,共133页,2024年2月25日,星期天如果一个模块的局部数据结构的大小、控制流的选择或者与外界(人、硬软件)的接口模式被限制死了,则很难适应用户新的要求或环境的变更。为了能够适应将来的变更,软件模块中局部数据结构的大小应当是可控制的,控制流的选择对于调用者来说,应当是可预测的。而与外界的接口应当是灵活的。

第93页,共133页,2024年2月25日,星期天层次图和HIPO图IBM公司发明的HIPO图:层次图

+

输入/处理/输出图

(H图)(IPO图)(HierachyInputProcessOutput)第94页,共133页,2024年2月25日,星期天1.层次图(H图)

表示软件的层次结构正文加工系统输入输出编辑加标题存储检索编目录添加删除插入修改合并列表第95页,共133页,2024年2月25日,星期天带编号的层次图(H图)

正文加工系统输入1.0输出2.0编辑3.0加标题

4.0存储5.0检索6.0编目录

7.0添加3.1删除3.2插入3.3修改3.4合并3.5列表3.6第96页,共133页,2024年2月25日,星期天2.

HIPO图

H图中每一方框(模块)均有一张IPO图对应

航线调度系统HIPO图举例

H图:命令监控器1.0取得输入1.1输入确认

1.2请求确认1.3更新处理

1.4第97页,共133页,2024年2月25日,星期天传统的IPO图举例输入处理输出读口令请求口令文件1取得输入2口令确认3请求确认请求记录权限文件4更新处理权限记录状态报告响应命令监控器(1.0)的IPO图第98页,共133页,2024年2月25日,星期天改进的IPO图格式IPO图系统:模块:编号:作者:日期:被调用:调用:输出:输入:输入:局部数据元素:注释:第99页,共133页,2024年2月25日,星期天§4.6详细设计(过程设计、模块设计)主要任务:编写详细设计说明书为此,设计人员应:(1)确定每个模块的算法,用工具表达算法的过程,写出模块的详细过程性描述。(2)确定每一模块的数据结构。(3)确定模块接口细节。详细设计是编码的先导。第100页,共133页,2024年2月25日,星期天4.6.1详细设计的描述方法详细设计工具:(1)图形工具(2)表格工具(3)语言工具第101页,共133页,2024年2月25日,星期天1.程序流程图2.盒图(N-S图)3.问题分析图(PAD)4.过程设计语言(PDL)(伪码)5.判定表第102页,共133页,2024年2月25日,星期天1.盒图(N-S图)用方框图代替传统的流程图描述五种基本控制结构的图形构件(1)顺序型ABC第103页,共133页,2024年2月25日,星期天(2)选择型(If–then–else)If–then–elseIf–thenABF条件TAFT条件then–部分then–部分else–部分第104页,共133页,2024年2月25日,星期天(3)多分支选择型(CASE型)A1值1A2An........条件值2值n第105页,共133页,2024年2月25日,星期天(4)WHILE重复型(5)UNTIL重复型S(循环体)DO-WHILEPS(循环体)REPEATUNTILP(先测试循环)(后测试循环)循环条件第106页,共133页,2024年2月25日,星期天(6)并行结构A1A2An....第107页,共133页,2024年2月25日,星期天(7)移出标记ACBFX6TA:D(调用结构)第108页,共133页,2024年2月25日,星期天2.问题分析图(PAD)

(ProblemAnalysisDiagram)基本控制结构:(1)顺序结构(2)选择结构

ABCABTF条件第109页,共133页,2024年2月25日,星期天(3)重复结构

WHILE

CSUNTIL

CS(先测试循环)(后测试循环)等价的PASCAL语言:REPEATCUNTILS等价的PASCAL语言:WHILECDOS第110页,共133页,2024年2月25日,星期天(4)多分支选择型(CASE型)

A1值1值2值nA2An......条件第111页,共133页,2024年2月25日,星期天3.判定表(决策表)描述多条件、多目标动作的形式化工具判定表举例(计算机票折扣率)旅游时间订票量折扣量7-9,12月≤20≤20>20>20

15%

5%

20%

30%条件类别四种条件组合操作条件组合下操作的执行1-6,10,11月第112页,共133页,2024年2月25日,星期天判定树(Decision决策树)条件1条件2

结果计7-9,订票量>20:15%算12月订票量≤20:5%折扣1-6,订票量>20:30%量10,11月订票量≤20:5%第113页,共133页,2024年2月25日,星期天保费计算性别男性别女已婚已婚未婚未婚≤25≤25>25>25≤30≤30>30>30CDABGHEF某保险公司对投保人的汽车保费计算方法如下:单身男,年龄30岁以下(含30岁),计保费标准A,30岁以上计保费标准B;已婚男30岁以下(含30岁),计保费标准C,30岁以上计保费标准D,单身女,年龄25岁以下(含25岁),计保费标准E,25岁以上计保费标准F;已婚女25岁以下(含25岁),计保费标准G,25岁以上计保费标准H,请画出对应的判定树。第114页,共133页,2024年2月25日,星期天习题:某校的课酬计算方案如下:(l)基本课酬为每节课10元;(2)如果班级人数超过40人,课酬增加:基本课酬×0.1;(3)如果班级人数超过60人,课酬增加:基本课酬×0.2;(4)如果教师是副教授,课酬增加:基本课酬×0.1;(5)如果教师是教授,课酬增加:基本课酬×0.2;(6)讲师,课酬不增加;(7)助教,课酬减少:基本课酬×0.1。请用判定表表达上述计算方案。第115页,共133页,2024年2月25日,星期天123456789101112人数≤40TTTT40<人数≤60TTTT人数>60TTTT助教TTT讲师TTT副教授TTT教授TTT课酬:9元/节√课酬:10元/节√√课酬:11元/节√√√课酬:12元/节√√√课酬:13元/节√√课酬:14元/节√第116页,共133页,2024年2月25日,星期天4.PDL(1)关键字的固定语法,它提供了结构化控制结构、数据说明和模块化的特点。为了使结构清晰和可读性好,通常在所有可能嵌套使用的控制结构的头和尾都有关键字,例如,if…fi(或endif)等等。(2)自然语言的自由语法,它描述处理特点。(3)数据说明的手段。应该既包括简单的数据结构(例如纯量和数组),又包括复杂的数据结构(例如,链表或层次的数据结构)。(4)模块定义和调用的技术,应该提供各种接口描述模式。第117页,共133页,2024年2月25日,星期天4.6程序复杂程度的定量度量4.6.1McCabe方法4.6.2Halstead方法第118页,共133页,2024年2月25日,星期天

1、可使用性

①使用简单②用户界面中所用术语的标准化和一致性③

具有HELP功能④

快速的系统响应和低的系统成本

⑤具有容错能力

2、灵活性

①考虑用户的特点、能力、知识水平。②提供不同的系统响应信息。③提供根据用户需求制定和修改界面。

3、界面的复杂性与可靠性复杂性—界面规模及组织的复杂程度。应该愈简单愈好。可靠性—指无故障使用的时间间隔。用户界面应该能够保证用户正确、可靠地使用系统,及程序、数据的安全。4.7.1用户界面应具有的特性4.7用户界面设计第119页,共133页,2024年2月25日,星期天

1、用户特性分析—

用户模型了解所有用户的技能和经验,针对用户能力设计或更改界面。从以下方面分析:用户类型—通常分为:外行型、初学型、熟练型、专家型。用户特性度量—与用户使用模式和用户群体能力有关。包括:用户使用频度、用户用机能力、用户的知识、思维能力等。4.7.2用户界面设计的任务这部分工作应该与软件需求分析同步进行。包括以下内容:2、用户界面的任务分析—任务模型(DFD图)是对系统内部活动的分解,不仅要进行功能分解(用DFD图描述),还要包括与人相关的活动。每个加工即一个功能或任务。3、确定用户界面类型第120页,共133页,2024年2月25日,星期天1、菜单(menu)

按照显示方式正文菜单、图标菜单、正文和图标混合菜单,如:开始菜单。4.7.3用户界面的基本类型字符界面、GUI界面、无交互界面。设计原则:以人为本,以用户的体验为准。GUI界面的主要元素如下:按屏幕位置和操作风格固定位置、浮动位置(弹出)、下拉式、嵌入式混合菜单固定及下拉菜单固定菜单下拉菜单第121页,共133页,2024年2月25日,星期天2、图象在用户界面中,加入丰富多彩的画面,将能够更加行象地为用户

温馨提示

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

评论

0/150

提交评论