您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > 软件工程PPT-04概要设计1
授课教师:梁丽西华大学数学与计算机学院第四章总体设计内容要点:本章介绍软件设计的基本原理,优化软件结构的准则以及结构化程序设计方法。教学重点:软件设计的基本任务内聚性、耦合性的划分软件结构、模块的影响范围、模块的控制范围软件结构设计的优化准则表示软件结构的图形工具教学难点:将变换流或事务流类型的数据流图转化成软件结构将一个复杂型数据流图转化成软件结构图并优化本章的知识结构图总体目标——根据DFD,确定最恰当实现软件功能、性能要求集合的软件系统结构,实现算法和数据结构。(Howtodo?)过程——从抽象的需求规格向具体的程序与数据集合进行变换的过程。结果——各种软件设计说明书。设计方法——结构化设计(SD)方法,面向数据结构的设计方法和面向对象的设计方法等。结构化软件设计可分为总体设计和详细设计两个阶段,总体设计确定系统的整体模块结构,但这时每个模块仍然处于“黑盒子”级,描述这些黑盒子里的具体内容是详细设计阶段的任务。软件设计根据用信息域表示的软件需求,以及功能和性能需求,进行数据设计系统结构设计过程设计界面设计软件设计的目标将分析模型转换为设计数据词典数据流图实体关系图状态转换图加工规格说明控制规格说明数据对象描述过程设计接口设计体系结构设计数据设计数据设计将实体–关系图中描述的对象和关系,以及数据词典中描述的详细数据内容转化为数据结构的定义。体系结构设计定义软件系统各主要成份之间的关系。接口设计根据数据流图定义软件内部各成份之间、软件与其它协同系统之间及软件与用户之间的交互机制。过程设计则是把结构成份转换成软件的过程性描述。软件设计的两个阶段:(1)概要设计(总体设计)确定软件的结构以及各组成成分(子系统或模块)之间的相互关系。将软件需求转化为数据结构和软件的系统结构。(2)详细设计确定模块内部的算法和数据结构,产生描述各模块程序过程的详细文档。软件设计过程1.制定规范在进入软件开发阶段之初,首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作。包括:阅读和理解软件需求说明书,确认用户要求能否实现,明确实现的条件,从而确定设计的目标,以及它们的优先顺序根据目标确定最合适的设计方法规定设计文档的编制标准规定编码的信息形式,与硬件,操作系统的接口规约,命名规则2.软件系统结构的总体设计基于功能层次结构建立系统。采用某种设计方法,将系统按功能划分成模块的层次结构确定每个模块的功能建立与已确定的软件需求的对应关系确定模块间的调用关系确定模块间的接口评估模块划分的质量数据结构和数据库设计:对于大型数据处理的软件系统是重要的。在概要设计阶段,数据结构设计宜采用抽象的数据类型,数据库设计对应于数据库的逻辑设计。3.处理方式设计确定为实现系统的功能需求所必需的算法,评估算法的性能确定为满足系统的性能需求所必需的算法和模块间的控制方式周转时间响应时间吞吐量精度确定外部信号的接收发送形式4.数据结构设计确定软件涉及的文件系统的结构以及数据库的模式、子模式,进行数据完整性和安全性的设计确定输入,输出文件的详细的数据结构结合算法设计,确定算法所必需的逻辑数据结构及其操作确定对逻辑数据结构所必需的那些操作的程序模块(软件包)限制和确定各个数据设计决策的影响范围若需要与操作系统或调度程序接口所必须的控制表等数据时,确定其详细的数据结构和使用规则数据的保护性设计防卫性设计:在软件设计中就插入自动检错,报错和纠错的功能一致性设计:保证软件运行过程中所使用的数据的类型和取值范围不变在并发处理过程中使用封锁和解除封锁机制保持数据不被破坏冗余性设计:针对同一问题,由两个开发者采用不同的程序设计风格不同的算法设计软件,当两者运行结果之差不在允许范围内时,利用检错系统予以纠正,或使用表决技术决定一个正确结果。5.可靠性设计可靠性设计也叫做质量设计在运行过程中,为了适应环境的变化和用户新的要求,需经常对软件进行改造和修正。在软件开发的一开始就要确定软件可靠性和其它质量指标,考虑相应措施,以使得软件易于修改和易于维护。6.编写概要设计阶段的文档概要设计阶段完成时应编写以下文档:概要设计说明书数据库设计说明书用户手册制定初步的测试计划7.概要设计评审可追溯性:确认该设计是否复盖了所有已确定的软件需求,软件每一成份是否可追溯到某一项需求接口:确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内风险:确认该设计在现有技术条件下和预算范围内是否能按时实现实用性:确认该设计对于需求的解决方案是否实用技术清晰度:确认该设计是否以一种易于翻译成代码的形式表达可维护性:确认该设计是否考虑了方便未来的维护质量:确认该设计是否表现出良好的质量特征各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么限制:评估对该软件的限制是否现实,是否与需求一致其它具体问题:对于文档、可测试性、设计过程..等进行评估在详细设计过程中,需要完成的工作是:确定软件各个组成部分内的算法以及各部分的内部数据组织选定某种过程的表达形式来描述各种算法。进行详细设计的评审详细设计1.软件结构2.软件过程3.模块化4.抽象5.信息隐蔽6.信息局部化§4.2软件设计的概念和原理4.2.1软件体系结构软件体系结构包括两部分:(1)过程构件(模块)的层次结构(2)数据构件控制结构(程序结构)控制结构是软件模块间关系的表示控制结构图示:1.控制结构的层次规则只有一个顶层(0层)模块0层外任一模块都会在它的邻层存在一模块与它有关同层模块间不发生联系4.2.2软件过程软件过程用以描述各模块的处理细节(算法的详细描述),包括对下层模块控制的操作细节。宽度扇出扇入(调用一个给定模块的模块个数)深度(模块的层数)(同一层最大模块数)(一个模块直接调用的模块数)2.软件结构度量术语软件设计的概念与原理软件设计的基本原理是衡量软件设计的技术质量的标准,共有4条:①模块化:即自顶向下逐层将软件系统划分成若干模块。模块化是好的软件设计的一个基本准则从整体上把握问题,隐蔽细节复杂问题较小问题分解可减小解题所需的总的工作该标准是软件解决复杂问题所具备的手段,其依据是适当分解软件系统可降低复杂性,减少开发工作量,降低开发成本、提高软件生产率。但是模块化时应注意接口代价,因为模块划分越多,模块内的工作量虽然减少,但模块间接口的工作量增加。软件设计的概念与原理软件系统的模块化是指整个软件被划分成若干单独命名和可编址的部分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。把问题/子问题的分解与软件开发中的系统/子系统或系统/模块对应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。例:将问题(P1+P2)分解为P1,P2设函数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)"各个击破"理论软件设计的概念与原理②抽象:即抽出事物本质的共同的特性而不考虑细节,不考虑其他因素。该标准与逐步求精、模块化密切相关,它是划分模块过程中的思维原则。软件设计的每一步都是对软件解决方法的抽象层次的一次细化。软件设计的概念与原理软件系统进行模块设计时,可有不同的抽象层次。在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。在较低的抽象层次上,则采用过程化的方法。抽象原则应用举例WindowsNT一体化的I/O系统设计文件管理网络管理设备管理高速缓冲存储器OS对虚拟文件的字节流的管理。虚拟文件可为任何设备和实体抽象③信息隐蔽:即在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。信息隐蔽的目的:提高模块的独立性,减少修改或维护时的影响面。该标准可以定义和实施对模块的过程细节和局部数据结构的存取限制。将自身实现细节与数据隐藏起来有利于提高模块的独立性,对软件系统的修改、测试以及维护都有利。软件设计的概念与原理④模块独立性:即每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。该标准有两个定性的衡量指标:内聚性(度量模块的内部特征)和耦合性(度量模块的外部特征)。这两个标准可判断设计方案的优劣(模块划分时应尽量做到高内聚、低耦合,提高模块独立性)。模块(Module)“模块”,又称“组件”。它一般具有如下三个基本属性:功能:描述该模块实现什么功能逻辑:描述模块内部怎么做状态:该模块使用时的环境和条件模块的独立性:在描述一个模块时,还必须按模块的外部特性与内部特性分别描述模块的外部特性模块的模块名、参数表、其中的输入参数和输出参数,以及给程序以至整个系统造成的影响模块的内部特性完成其功能的程序代码和仅供该模块内部使用的数据模块的独立性:模块独立性模块独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其它的模块的接口是简单的例如,若一个模块只具有单一的功能且与其它模块没有太多的联系,则称此模块具有模块独立性一般采用两个准则度量模块独立性。即模块间耦合和模块内聚模块的独立性:耦合是模块之间的互相连接的紧密程度的度量。内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。模块独立性比较强的模块应是高内聚低耦合的模块。模块的独立性:模块间的耦合①耦合性是根据模块的外部特征提出的,是对软件系统结构中各模块间相互联系紧密程度的一种度量。也称块间关系。耦合性越高,模块独立性越弱②影响模块间耦合程度的最主要因素是模块间信息传递的复杂性。③耦合程度由低到高分为7种:无耦合-没有依赖关系松散耦合-有少量依赖关系紧密耦合-有很多依赖关系耦合强度依赖的因素:•一模块对另一模块的引用•一模块向另一模块传递的数据量•一模块施加到另一模块的控制的数量•模块间接口的复杂程度非直接耦合(NondirectCoupling)如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。模块的独立性:不传递任何消息数据耦合(DataCoupling)如果一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。属松散耦合。传递的是值。模块的独立性:数据耦合举例开发票计算水费单价数量金额标记耦合(StampCoupling)如果一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。传递的是数据结构。标记耦合举例计算水电费计算水费计算电费住户情况水费电费住户情况“住户情况”是一个数据结构,图中模块都与此数据结构有关.“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合.将标记耦合修改为数据耦合举例计算水电费计算水费计算电费本月用水量本月用电量水费电费控制耦合(ControlCoupling)如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。传递的是控制变量,例如开关、标志等。模块的独立性:控制耦合举例A计算平均分或最高分B平均/最高(控制信号)成绩读入分数输出结果计算平均分计算最高分平均/最高?B控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖去除模块间控制耦合的方法:(1)将被调用模块内的判定上移到调用模块中进行(2)被调用模块分解成若干单一功能模块改控制耦合为数据耦合举例A计算平均分B1平均成绩最高成绩计算最高分B2外部耦合(ExternalCoupling)一组模块都访问同一全局简单变量而不是同
本文标题:软件工程PPT-04概要设计1
链接地址:https://www.777doc.com/doc-4973420 .html