您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > 软件工程-第5章:总体设计
第5章总体设计分析模型数据字典实体-关系图数据流图加工规约数据对象描述状态转换图控制规约接口设计过程设计体系结构设计数据设计软件信息域需求功能与性能需求过程设计系统结构设计程序模块有效的软件开发阶段的信息流设计编码测试数据设计软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构。软件设计任务从工程管理的角度看,软件设计分两步完成。总体设计(概要设计)——将需求转化为数据结构和系统结构详细设计(过程设计)——通过结构的细化,得到详细的数据结构和算法总体设计阶段两个任务1、划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等,但每个物理元素仍然处于黑盒级(具体内容在详细设计时展开)2、设计软件的结构——确定系统中每个程序的组成模块,及模块间的关系。5.1设计过程5.2设计原理5.3启发规则5.4软件结构图形5.5面向数据流的设计方法15.1设计过程两个主要阶段系统设计阶段:确定系统的具体实现方案;结构设计阶段:确定软件结构。在各种可能的实现方案中选出最佳方案最好的出发点:需求分析得出的数据流图通常至少提供或选取低、中和高三种成本方案。典型的总体设计过程的11个步骤1.设想供选择的方案提出低、中、高三种备选方案依据:工程规模和目标,征求用户意见每个方案应准备4份资料:(1)系统流程图;(2)系统物理元素清单;(3)成本/效益分析;(4)系统的进度计划。2.选取合理的方案分析员应该综合分析对比各种合理方案的利弊,推荐一个最佳的方案,并且为推荐的方案制定详细的实现计划。3.推荐最佳方案制定设计时应共同遵守的标准例:各部门文档统一编号,各部门机器接口等统一编号,等等。4.制定规范5.软件结构设计(1)模块化(按功能划分,简单化)(2)确定模块的功能(3)确定模块间调用关系(4)确定模块间的接口(信息传递)(5)评价模块结构质量①功能与性能的算法②模块的控制方式③信号的接收发送形式6.处理方式设计(1)数据结构的设计数据设计是把分析模型中的信息描述转换为实体软件所需要的数据结构。(2)数据库设计选用哪一种数据库?7.数据结构及数据库设计确定软件可靠性和质量指标,考虑质量措施。易维护性8、可靠性设计(也称质量设计)能促使设计人员在设计时注意提高软件的可测试性。9.制定测试计划(1)总体设计说明书系统流程图、物理元素清单、成本/效益分析最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,用IPO图或其他工具简要描述的各个模块的算法,模块间的接口关系,以及需求、功能和模块三者之间的交叉参照关系等。10.书写文档(2)用户手册(需求分析阶段的初步的用户手册)(3)制定测试计划(测试策略,测试方案,预期的测试结果,测试进度计划)(4)详细的实现计划(5)数据库设计说明11.审查和复审5.2设计原理一、模块化1、什么是模块?具有输入输出、逻辑功能、运行程序和内部数据这四种属性的一个程序。特点:单独命名且可以通过名字来访问(过程、函数、子程序、宏)模块化:是把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集总起来组成一个整体,可以完成制定的功能。思维模式:问题分解系统成本=模块成本+模块接口成本2、什么是模块化?选择一个适当的模块数目是软件成功的关键18模块数目接口成本模块成本软件总成本最小成本区成本模块化与软件成本特点:先分解,然后再集成16分解、抽象、逐步求精信息隐蔽、模块独立软件模块化设计的指导思想接口功能逻辑状态3.模块的基本属性面向对象方法学中的对象是模块4.模块的特点15一般先确定外部特性,再确定内部特性①输入输出②功能③内部数据④程序代码外部特性内部特性设: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)5.模块化理论1、什么是抽象?抽象是认识复杂现象过程中使用的思维工具抽象的作用:只考虑事物本质的共性,而暂不考虑的细节及其它因素。二、抽象①可行性研究阶段:是计算机系统的一个元素②需求分析阶段:使用问题环境中的术语来描述③概要设计、详细设计阶段:将面向问题的术语和面向实现的术语结合起来描述解决方法。④编码阶段:最低层抽象层次,直接叙述问题的解决方法。2、软件工程中的抽象三、逐步求精1、什么是逐步求精?为了能集中精力解决主要问题而尽量推迟对问题细节的考虑一个人在任何时候都只能把注意力集中在(7±2)个知识块上2、逐步求精的理论依据Miller法则设计模块时,调用模块只能访问被调用模块内自己需要的信息(过程和数据),而不是全部。四、信息隐藏和局部化信息隐蔽原理局部化:把关系密切的软件元素在物理上就近存放局部化原理五、模块独立定量标准耦合:衡量不同模块彼此间互相依赖的紧密程度;内聚:衡量一个模块内部各个元素彼此结合的紧密程度。1.耦合性(块间联系)非直接耦合(不可能)数据耦合控制耦合特征耦合外部耦合公共耦合内容耦合(避免)(不允许出现)低———————耦合性—————————高强——————模块独立性————————弱非直接耦合数据耦合控制耦合特征耦合外部耦合公共耦合内容耦合模块间通过参数交换信息(且仅是数据)是最低程度的耦合模块间不传递任何信息AB参数非直接耦合数据耦合控制耦合特征耦合外部耦合公共耦合内容耦合模块间交换的信息包含控制信息是中等程度的耦合不提倡使用控制耦合模块适当分解后用数据耦合代替BACDastatus模块B传来的信息决定了A执行C还是D非直接耦合数据耦合控制耦合特征耦合外部耦合公共耦合内容耦合又称标记耦合传递的是数据结构的地址可能导致数据的访问失控,给计算机犯罪提供了机会尽量避免非直接耦合数据耦合控制耦合特征耦合外部耦合公共耦合内容耦合定义:当两个或两个以上的模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合,也称公共耦合或外部耦合。公共环境:全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等。非直接耦合数据耦合控制耦合特征耦合外部耦合公共耦合内容耦合会给错误诊断带来困难,使软件的可维护性、可理解性降低ABCDE全程数据区非直接耦合数据耦合控制耦合特征耦合外部耦合公共耦合内容耦合定义:一个模块与另一个模块的内容直接发生联系高度的耦合对维护带来严重的困难应坚决避免使用许多高级程序设计语言不允许出现任何形式的内容耦合内容耦合表现:一个模块访问另一个模块的内部数据;一个模块未通过正常入口进入另一个模块的内部;两个模块有部分代码重叠;一个模块有多个入口(多个功能)。软件设计应追求尽可能松散耦合,避免强耦合,这样模块间的联系就越小,模块的独立性就越强,对模块的测试、维护就越容易。耦合原则提高模块独立性,降低耦合度的措施(1)耦合方式上:降低模块间接口的复杂性(接口方式、接口信息、参数个数)(2)传递信息类型上:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。耦合是影响软件复杂程度的一个重要因素偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚低———————内聚性—————————高弱——————模块独立性————————强2.内聚理想的内聚是一个模块只做一件事情偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚如果一个模块内所有处理元素完成一个功能,则称为功能内聚。是最高程度的内聚实际中,并不是每个模块都能设计成一个功能内聚模块偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚如果一个模块内处理元素与同一个功能密切相关,且这些处理元素必须顺序执行,则称为顺序内聚。求一元二次方程根模块1.输入方程系数2.求解3.打印方程的解偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚如果一个模块中所有处理元素都使用同一个输入数据和(或)产生同一个输出数据,称为通信内聚,也称数据内聚。A从文件FILE中读出数据1.由数据产生报表A2.由数据产生报表B偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚如果一个模块内的处理元素是相关的,而且必须以特定的次序执行,称为过程内聚单元单元数据流动作动作控制流过程内聚Vs.顺序内聚偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚如果一个模块包含的任务必须在同一段时间内执行,称为时间内聚。也称为瞬时内聚。如:模块的初始化故障处理模块紧急故障处理模块1.关闭文件2.报警3.保留现场偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚如果模块完成的任务在逻辑上相同或相似,称为逻辑内聚。XYZABCXYZABC合并需要有一个功能开关增加了模块之间的联系,不易修改,内聚性较差。偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚如果一个模块由完成若干毫无关系的功能处理元素偶然组合在一起的,就叫偶然内聚。是最差的一种内聚常见的情形:在写完程序时,发现一组语句在多处出现,于是为了节省空间而将这些语句作为一个模块设计,出现偶然内聚。ABCW模块X=Y+ZGETCARDIFI=5THENE=0…偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚原则:力求做到高内聚,尽量少用中内聚,不用低内聚。0分1分3分5分7分9分10分人们在软件开发的实践中积累了很多经验,总结这些经验得出了一些启发式规则。这些规则虽然不像基本原理和概念那样普遍适用,但在许多场合仍能给我们很多有益的启示,帮助我们找到改进设计、提高质量的途径。5.3启发规则多个高耦合度的模块(复杂度低),考虑合并多个模块公有的子功能,考虑独立模块调用相关模块的功能分析,消除重复功能1、提高结构独立性当一个模块包含的语句数超过30以后,模块的可理解程度迅速下降。2.模块规模应该适中建议:最好能写在一页纸内(不超过60行语句)心理学角度3.深度、宽度、扇出和扇入应适当深度:控制的层数(系统的大小和复杂程度)层数过多+模块相对简单→适当合并宽度:软件结构内同一个层次上的模块总数的最大值宽度越大系统越复杂影响宽度的最大因素——扇出经验:典型系统的平均通常是3或4(上限5~9)扇出:是一个模块直接控制(调用)的模块数目常见问题及改进:扇出太大时,适当增加中间层次的控制模块扇出太小时,进一步分解成下级模块,或者合并到它的上级模块中去(不能违背模块独立原理)扇入:有多少上级模块直接调用经验:顶层扇出比较高,中层扇出较少,底层模块扇入较高。扇入越大,则共享该模块的上级模块数目越多,模块通用性越强。不能违背模块独立原理单纯追求高扇入扇出、扇入过大的改进改进方法:①上移判断点②判断所在的模块与父模块合并③下移受判断影响的模块4.模块的作用域应在控制域之内作用域:受该模块内一个判定影响的所有模块的集合控制域:模块本身以及所有直接或间接从属于它的模块的集合模块接口复杂是软件发生错误的一个主要原因。模块的接口要简单、清晰、含义明确,便于理解,易于实现、测试与维护。5.降低模块接口的复杂度讨论:求一元二次方程的根的模块:模块1:Quad_Root(TBL,X)。其中数组TBL传送方程的系数,用数组X回送求得的根。模块2:Quad_Root(A,B,C,Root1,Root2)。其中A、B、C是方程的系数,Root1,Root2是算出的两个根不能出现内容耦合从顶部进入,底部退出容易理解和维护结构化程序设计,不用goto语句。6.设计单入口单出口的模块只要输入的数据相同就产生同样的输出,这个模块的功能就是可以预测的。7.模块功能应该可以预测总结:启发式规则是经验的总结。对改进设计,提高软件质量,有重要的参考价值。但是,它们既不是设计的目标也不是设计时应该普遍遵循的原理。5.4图形工具正文加工系统输入输出编辑加标题存储检索编目录格式化添加删除插入修改合并列表正文加工系统的层次图1.层次图正文加工系统输入1.0输出2.0编辑3.
本文标题:软件工程-第5章:总体设计
链接地址:https://www.777doc.com/doc-4422089 .html