软件工程导论软件设计总体设计

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

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

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

资源描述

Version1.0总体设计第四章2第四章总体设计4.0软件设计概述4.1总体设计的任务4.2总体设计的过程4.3软件设计原理4.4总体设计准则(启发式规则)4.5描绘软件结构的图形工具4.6面向数据流的设计方法4.7总体设计说明书34.0软件设计概述在软件需求分析阶段确定了要让所开发的软件“做什么”的问题,接下来就是实现软件的需求,解决“怎样做”的问题。软件设计就是处理“怎样做”的问题,它被定义为“应用各种技术和原理,对设备、过程或系统作出足够详细的描述,使之能够在物理上得以实现”。4从工程管理的角度看来,软件设计可划分为概要设计和详细设计两个阶段。首先进行概要设计,将需求转化为软件系统结构和数据结构,其基本目的就是回答“概括地说,系统应该如何实现”这个问题。然后进行详细设计(过程设计),完成对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。5软件结构设计数据设计过程(算法)设计软件设计包括6软件结构设计是确定软件系统各主要部件之间的关系。数据设计是把信息描述转换为实现软件系统所要求的数据结构。过程(算法)设计是把结构部件转换成软件系统的过程性描述。编码是根据这种过程性描述编制代码。然后把生成的程序代码交由测试人员测试,最终得到完整有效的软件产品。74.1总体设计的任务这个阶段必须回答的关键问题是:“应该怎样实现目标系统?”,总体设计又称为概要设计。概要设计的任务:(1)划分出组成系统的物理元素--程序、文件、数据库、人工过程和文档等等;(2)设计软件结构。即确定系统中由那些模块组成,以及这些模块之间的相互关系。84.2总体设计的过程总体设计过程通常由两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构。典型的总体设计过程包括下述9个步骤:(P82)1.设想供选择的方案2.选取合理的方案3.推荐最佳方案4.功能分解5.设计软件结构6.设计数据库7.制定测试计划8.书写文档9.审查和复审91.设想供选择的方案在数据流图的基础上,一个边界一个边界设想并列出供选择的方案。通常,选取的这些方案中至少应包括低成本、中成本和高成本的三种方案类型;对每个合理方案要提供以下几方面资料:(1)系统流程图;(2)数据字典;(3)成本/效益分析;(4)实现这个系统的进度计划。4.2总体设计的过程10实例:假设一家工厂的采购部每天需要一张定货报表,报表按零件编号排序,表中列出所有需要再次定货的零件。对于每个需要再次定货的零件应该列出下述数据:零件编号,零件名称,定货数量,目前价格,主要供应者,次要供应者。零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给定货系统。当某种零件的库存数量少于库存量临界值时就应该再次定货。画出数据流图。4.2总体设计的过程11定货系统的基本系统模型4.2总体设计的过程12定货系统的功能级数据流图4.2总体设计的过程13把处理事务的功能进一步分解后的数据流图4.2总体设计的过程14当用数据流图辅助物理系统的设计时,以图中不同处理的定时要求为指南,能够在数据流图上画出许多组自动化边界,每组自动化边界可能意味着一个不同的物理系统,因此可以根据系统的逻辑模型考虑系统的物理实现。4.2总体设计的过程15这种划分自动化边界的方法暗示以批量方式更新库存清单4.2总体设计的过程16这种划分自动化边界的方法建议以联机方式更新库存清单4.2总体设计的过程172.选取合理的方案从上一步得到的一系列供选择的方案中选取若干个合理的方案,通常至少选取低成本、中等成本和高成本的三种方案;根据系统分析确定的目标,来判断哪些方案是合理的;3.推荐最佳方案综合分析对比各种合理方案的利弊,推荐一个最佳的方案,并为最佳方案制定详细的实现计划。4.2总体设计的过程184.功能分解为了最终实现目标系统,必须设计出组成这个系统的所有程序和文件(或数据库)。对程序(特别是复杂的大型程序)的设计,通常分为两个阶段完成:结构设计。结构设计是总体设计阶段的任务,主要是确定程序由哪些模块组成,以及这些模块之间的关系;过程设计。过程设计是详细设计阶段的任务,主要是确定每个模块的处理过程。4.2总体设计的过程195.设计软件结构软件结构反映系统中模块的相互调用关系:顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,从而完成程序的一个子功能,最下层的模块完成最具体的功能;软件结构通过层次图或结构图(后面4.5节介绍)来描绘,也可以直接从数据流图映射出软件结构(后面4.6节介绍)。4.2总体设计的过程20同一个问题的各种软件结构S4S1S2S3S5S1S4S5S2S3S3S4S5S2S1问题结构1结构2结构3解4.2总体设计的过程216.设计数据库数据库的应用越来越广泛,目前大多数的系统都要用到数据库技术。数据库设计是一项专门的技术,包括模式设计、子模式设计、完整性和安全性设计和优化处理等。4.2总体设计的过程7.制定测试计划在软件开发的早期阶段提前考虑软件的测试计划是很有必要的。这样能促使软件设计人员在设计时注意到软件的测试问题,从而有利于提高软件的可测试性。224.2总体设计的过程8.书写文档系统说明用户手册测试计划详细的实现计划数据库设计结果9.审查和复审先技术审查后管理复查234.3软件设计原理一、模块化即把软件划分为可独立命名和编址的部件,每个部件称为一个模块,每个模块完成一个子功能,当把所有模块组装到一起成为一个整体时,便可以完成指定的功能。模块是数据说明、可执行语句等程序对象的集合,它是单独命名的而且可通过名字来访问。例如,过程、函数、子程序、宏等等都可作为模块。目前,几乎所有的软件体系结构都体现了模块化的思想。241.理想模块理想模块的特点:每个理想模块只解决一个问题;每个理想模块的功能都应该明确,使人容易理解;理想模块之间的联结关系简单,具有独立性;由理想模块构成的系统,容易使人理解,易于编程,易于测试,易于修改和维护;对用户来说,其感兴趣是模块的功能,而不必去理解模块内部的结构和原理。252.模块化和软件成本的关系当模块数目增加时每个模块的规模将减小,开发单个模块需要的成本(工作量)确实减少了;但是,随着模块数目增加,设计模块间接口所需要的工作量也将增加。根据这两个因素,得出如下图所示的总成本曲线。每个程序都相应地有一个最适当的模块数目M,使得系统的开发成本最小。263.采用模块化原理的优点:可以使软件结构清晰,容易设计、容易阅读和理解、容易测试和调试;提高软件的可靠性;有助于软件开发工程的组织管理,一个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配技术熟练的程序员编写困难的模块。27软件系统进行模块设计时,可有不同的抽象层次;在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法;在较低的抽象层次上,则采用过程化的方法,把面向问题的术语和面向实现的术语结合起来叙述问题的解法;在最低的抽象层次上,用可直接实现的方式叙述问题的解法。二、抽象4.3软件设计原理281.过程的抽象在软件工程中,从系统定义到实现,每进展一步都可以看做是对软件解决方法的抽象化过程的一次细化;软件需求分析阶段,用“问题所处环境的为大家所熟悉的术语”来描述软件的解决方法;从概要设计到详细设计的过程中,抽象化的层次逐次降低。当产生源程序时到达最低抽象层次。2.数据抽象在不同层次上描述数据对象的细节,定义与该数据对象相关的操作。29三、逐步求精逐步求精最初是由NiklausWirth提出的一种自顶向下的设计策略。按照这种设计策略,程序的体系结构是通过逐步精化处理过程的层次而设计出来的。通过逐步分解对功能的宏观陈述而开发出层次结构,直至最终得出用程序设计语言表达的程序。逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。4.3软件设计原理30信息隐藏是指每个模块的实现细节对于其它模块来说是隐藏的。也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。局部化是指把一些关系密切的软件元素物理地放的彼此靠近。四、信息隐藏和局部化4.3软件设计原理31模块独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而且和软件系统中其它的模块的接口是简单的。若一个模块只具有单一的功能且与其它模块没有太多的联系,则称此模块具有模块独立性。一般采用两个准则度量模块独立性。即模块间耦合和模块内聚。五、模块独立性4.3软件设计原理模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。321、耦合耦合是对一个软件结构内不同模块之间的互相连接的紧密程度的度量。耦合强弱取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口。一般模块间可能的连接方式有7种,构成耦合性的7种类型:33(1)非直接耦合(NondirectCoupling)两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。非直接耦合的模块独立性最强。1、耦合34(2)数据耦合(DataCoupling)一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,称此为数据耦合。数据耦合是松散的耦合,模块间的独立性比较强,在软件程序结构中至少必须有这种耦合。1、耦合开发票计算水费单价数量金额35(3)标记耦合(StampCoupling)一组模块通过参数表传递记录信息,就是标记耦合。这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。在设计中应尽力避免这种耦合(但允许使用),它使在数据结构上的操作复杂化了。1、耦合36标记耦合举例:计算水电费计算水费计算电费住户情况水费电费住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关。“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记耦合.计算水电费计算水费计算电费本月用水量本月用电量水费电费将标记耦合修改为数据耦合:37如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。控制耦合意味着控制模块必须知道所控制模块内的一些逻辑关系,这样会降低模块的独立性。(4)控制耦合(ControlCoupling)1、耦合38控制耦合举例:平均/最高要求(控制信号)A计算平均分或最高分B成绩B读入分数计算最高分平均/最高?输出结果计算平均分39控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖。去除方法:将被调用模块内的判定上移到调用模块中进行;被调用模块分解成若干单一功能模块。去除模块间控制耦合的方法40(5)外部耦合(ExternalCoupling)一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。例如:C语言程序中各个模块都访问被说明为extren类型的外部变量。1、耦合41(6)公共耦合(CommonCoupling)若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。只有在模块之间共享的数据很多,而且通过参数表传递不方便时,才使用公共耦合,否则,还是使用模块独立性比较高的数据耦合较好些。1、耦合42这种耦合会引起下列问题:所有公共耦合模块都与某一个公共数据环境内部各项的物理安排有关,若修改某个数据的大小,将会影响到所有的模块;无法控制各个模块对公共数据的存取,严重影响软件模块的可靠性和适应性;公共数据名的使用,明显降低了程序的可读性。慎用公共数据区和全程变量!!!43公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况,即松散公共耦合和紧密公共耦合。44(7)内容耦合(Co

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

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

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

×
保存成功