您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 软件设计的目标和任务
软件设计的目标和任务软件需求:解决“做什么”软件设计:解决“怎么做”软件设计的任务:以软件需求规格说明书为依据,进行数据设计系统结构设计过程设计软件设计的目标和任务数据设计侧重于数据结构的定义系统结构设计定义软件系统各主要成分之间的关系过程设计则是把结构成分转换成软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。软件设计的重要性:是软件开发时期的第一个步,最终影响软件实现的成败和软件维护的难易程度。软件设计的两个阶段从工程管理的角度来看,软件设计分两步完成。总体设计:将软件需求转化为数据结构和软件的系统结构。详细设计:即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。软件设计的两个阶段第5章总体设计第5章总体设计5.1设计过程5.2设计原理5.3启发规则5.4描绘软件结构的图形工具5.5面向数据流的设计方法5.6小结习题重点和难点重点:软件设计过程中应遵循的基本原理面向数据流设计方法难点:变换分析、事务分析法过程和应用总体设计的步骤5.1设计过程5.1设计过程设想供选择的方案选取合理的方案系统流程图组成系统的物理元素清单成本/效益分析实现这个系统的进度计划推荐最佳方案功能分解设计软件结构(模块化思想)总体设计的步骤设计数据库制定测试计划书写文档系统说明用户手册测试计划详细的实现计划数据库设计结果审查和复审5.1设计过程设计原理模块化抽象逐步求精信息隐藏和局部化模块独立5.2设计原理一.模块化模块:模块是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。如:OO的对象、方法。模块化思想:模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。“分而治之”是模块化思想的依据:把复杂的问题分解为若干个易于处理的小问题。5.2设计原理一.模块化令C(X):问题X的复杂程度,E(X):解决X问题所需的工作量规律1:若两个问题P1,P2C(P1)C(P2),则E(P1)E(P2)规律2:某问题P可以分成P1,P2,P=P1+P2则:C(P1+P2)C(P1)+C(P2)所以:E(P1+P2)E(P1)+E(P2)5.2设计原理一.模块化结论:分而治之,各个击破?将模块无限分割下去?单个模块的开发成本小,几乎可忽略不计;模块之间接口的开发成本呢?5.2设计原理一.模块化模块数目为M时,软件开发成本最小模块数目与软件成本的关系5.2设计原理二.抽象抽象:把一定事物、状态或过程中共性的方面集中和概括起来,暂时忽略它们之间的差异。抽象的思想:处理复杂系统的惟一有效的方法是用层次的方式构造和分析它。抽象层次:软件设计中的两类抽象:过程抽象:功能-过程、函数数据抽象:数据对象定义、描述-数据类型名最高抽象级别——面向问题的语言较低抽象级别——面向问题和实现的语言最低抽象级别——面向实现的语言5.2设计原理二.抽象CAD图形软件包可以画各种直线和曲线,能完成所有几何图形的计算.图形设计的结果存于图形文件中,图形文件可包含几何的、正文的和其它各种设计信息。抽象1.总体结构层次的抽象图形软件包软件任务图形用户界面创建二维图形任务显示图形任务管理图形文件任务End图形软件包例子:讨论一个在不同抽象级别上的软件设计所具有的形式。5.2设计原理二.抽象抽象2.过程层次的抽象(仅以管理图形文件任务为例)PROCEDUREdrawingfilemanagementtaskIFOpenFileTHENinputfilename;openthefile;displaythefile;ELSEIFSaveFileTHENinputsavefilename;savethefile;ENDIFENDPROCEDURE.抽象3.实现层次的抽象(程序设计语言描述)5.2设计原理二.抽象CAD软件中的数据抽象举例:STRUCTcoordinate{intx;inty};CLASSDrawing//parentclass{PUBLIC:coordinatestartpoint,endpoint;……};CLASSLine:PUBLICDrawing{……};CLASSCurve:PUBLICLine{……};CLASSStraightLine:PUBLICLine{……};CurveobjCurve1;//objCurve1isainstanceofCurveStraightLineobjSL2;//objSL2isainstanceofStraightLine5.2设计原理三.逐步求精逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。逐步求精的思想:对一个事物的认识是一个从高层次抽象向低层次抽象逐步转化和过渡的过程。Miller法则:一个人在任何时候都只能把注意力集中在(7+2)个知识块上。5.2设计原理求精实际上是细化过程求精要求设计者细化原始陈述,随着每个后续求精(即细化)步骤的完成而提供越来越多的细节。抽象与求精是一对互补的概念抽象使得设计者能够说明过程和数据,同时却忽略低层细节。事实上,可以把抽象看作是一种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方法。求精则帮助设计者在设计过程中逐步揭示出低层细节。这两个概念都有助于设计者在设计演化过程中创造出完整的设计模型。三.逐步求精5.2设计原理四.信息隐藏和局部化信息隐藏思想:模块应该设计得使其所含的信息(过程和数据)对那些不需要这些信息的模块不可访问,模块之间仅仅交换那些为完成系统功能所必需交换的信息。隐藏:模块的实现细节,而不是所有信息。优点:1.模块的独立性更好2.支持模块的并行开发(设计和编码)3.便于测试和维护,减少错误向外传播4.便于增加新的功能,新增加的模块和原有的模块关系不大5.在较高层次上进行软件开发,有助于提高软件质量和生产效率5.2设计原理四.信息隐藏和局部化局部化:把一些关系密切的软件元素在物理上放得彼此靠近。例如:在模块中使用局部数据元素有助于信息隐藏5.2设计原理五.模块独立模块独立性:每个模块只完成系统要求的独立的子功能,与其他模块的联系最少且接口简单。模块独立的概念是模块化、抽象、信息隐藏和局部化三个基本原理的直接结果。模块独立重要的理由:有效的模块化的软件比较容易开发独立的模块比较容易测试和维护衡量模块独立程度的标准:耦合、内聚5.2设计原理五.模块独立——1.耦合性耦合:指模块之间联系的紧密程度。模块之间联系越紧密,其耦合性越强,独立性就越差。模块耦合度越低越好:1.独立性;2.减少错误传播。模块的耦合性从低到高可分为以下几种类型:非直接耦合(nodirectcoupling):二个模块都不依赖对方而独立存在数据耦合(datacoupling):二个模块通过参数交换信息,而信息仅限于数据控制耦合(controlcoupling):二个模块通过参数交换信息,传递的信息中有控制信息5.2设计原理五.模块独立——1.耦合性标记耦合/特征耦合(stampcoupling):二个模块通过传递数据结构加以联系(数据结构以参数形式进行交换),或都与一个数据结构有关当被调模块只使用数据结构中的一部分数据元素时,产生标记耦合.被调模块可使用的数据多于它所需要的数据,从而导致对数据的访问失去控制,给非法操作提供了机会。5.2设计原理五.模块独立——1.耦合性非直接耦合举例两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。这种耦合的模块独立性最强。5.2设计原理五.模块独立——1.耦合性数据耦合举例一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数)。属松散耦合开发票计算水费单价,数量金额5.2设计原理五.模块独立——1.耦合性标记/特征耦合举例“住户情况”是一个数据结构,图中模块都与之有关。“计算水电费”和“计算水费”传递的是数据结构,它们之间是标记偶合。“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合。计算水电费计算水费计算电费住户情况水费电费住户情况5.2设计原理五.模块独立——1.耦合性标记/特征耦合举例把标记耦合修改为:数据耦合/非直接耦合计算水电费计算水费计算电费本月用水量本月用电量水费电费5.2设计原理五.模块独立——1.耦合性控制耦合举例控制耦合二个模块通过参数交换信息,传递的信息中有控制信息去除控制耦合的方法:(1)将被调用模块内的判定上移到调用模块中进行(2)被调用模块分解成若干单一功能模块5.2设计原理五.模块独立——1.耦合性公共耦合(commoncoupling):二个模块通过公共数据环境相互作用全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备如果两个模块共享的数据很多,都通过参数传递可能很不方便5.2设计原理五.模块独立——1.耦合性公共耦合举例公共数据耦合存在的问题:(公共数据区及全程变量无保护措施)慎用公共数据区和全程变量!!!软件可维护性差软件可靠性差软件可理解性降低诊断错误困难5.2设计原理内容耦合(contentcoupling):一个模块访问另一个模块的内部数据;一个模块不通过正常入口而转到另一个模块的内部;两个模块有一部分程序代码重叠(只可能出现在汇编程序中);一个模块有多个入口(这意味着一个模块有几种功能)。五.模块独立——1.耦合性5.2设计原理五.模块独立——1.耦合性内容耦合举例5.2软件设计的概念及原理最不好的耦合形式!!!一模块直接访问另一模块的内部信息(程序代码或数据)ABAB模块代码重叠(只可能在汇编中出现)Entry1……Entry2……多入口模块:一个模块不通过正常入口而进入另一个模块内部,如病毒:说明这个模块有多个功能许多高级程序设计语言已经设计成不允许任何形式的内容耦合五.模块独立——1.耦合性耦合性:弱←————————————————→强模块独立性:强←——————————————→弱123456弱耦合中耦合较强耦合强耦合⒈非直接耦合:无信息交换⒉数据耦合:简单数据以参数形式进行交换⒊特征耦合:数据结构以参数形式进行交换;或共享数据结构⒋控制耦合:参与交换的数据内包含控制信息⒌公共耦合:一组模块使用同一个全局性数据结构/公共区⒍内容耦合:一个模块可以直接访问另一个模块内部数据5.2设计原理五.模块独立——1.耦合性例:试指出下述用C语言编写的函数声明所代表的模块的耦合的类型。voidfun0();voidfun1(int);voidfun2(int*);typedefstruct{}DF;*DFfun4(int);voidfun5(){staticx;…fun6(x);}intfun6(intx){return++x;}内容耦合:fun6可以访问fun5的内部数据公共耦合无耦合数据耦合标记耦合5.2设计原理五.模块独立——1.耦合性在软件设计中,提高模块的独立性,建立模块间尽可能松散的系统,是模块化设计的目标。为了降低模块间的耦合度,可以采取以下措施:(1)在耦合方式上降低模块间接口的复杂性。(2)在传递信息类型时的设计原则:尽量采用数据耦合,避免使用控制耦合,慎用或有控制地使用公共耦合,完全不用内容耦合。在实践中要根据实际情况综合考虑。5.2设计原理五.模块独立——2.内聚性内聚性:模块内部各个元素彼此结合的紧密程度。它是信息隐藏和局部化概念的自然扩展。高内聚往往以意味着模块间的低耦合。内聚性低高偶然内聚(coincidentalcohesion)逻辑内聚(logicalcohesion)时间内聚(timecohesion)过程内聚(proceduralcohesion)通信内聚(communica
本文标题:软件设计的目标和任务
链接地址:https://www.777doc.com/doc-3392679 .html