第三部分 软件设计与建模(8软件设计)课件.ppt
《第三部分 软件设计与建模(8软件设计)课件.ppt》由会员分享,可在线阅读,更多相关《第三部分 软件设计与建模(8软件设计)课件.ppt(82页珍藏版)》请在三一办公上搜索。
1、软件工程方法与实践(机械工业出版社),高等院校计算机课程案例教程系列,窦万峰 编著,主讲:李淑芝13507077576L,1.现代软件工程(国家示范性软件学院系列教材) 张家浩/东南大学 机械工业出版社 2009.12.软件工程 理论与实践 许家珆 曾翎 彭德中 编著 高等教育出版社 2004.73.软件工程-实践者的研究方法 (美)Roger S. Pressman著 郑人杰等译 机械工业出版社 2008.6 4.Software Engineering, 6th Edition Sommerville.I. (影印版) 机械工业出版社 2003.4,主要参考书:,总 目 录,第1章 软件工
2、程学概述(2学时)第2章 软件过程(2学时)第3章 软件过程模型(4学时)第4章 案例研究(2学时)第5章 软件需求分析过程(4学时)第6章 结构化分析建模(4学时)第7章 面向对象分析(6学时) 第8章 软件设计(4学时)第9章 结构化设计方法(4学时),总 目 录,第10章 面向对象设计(4学时)第11章 软件实现(2学时)第12章 软件测试(4学时)第13章 软件维护(2学时) 第14章 软件项目管理(2学时)第15章 软件项目估算(1学时)第16章 软件项目计划与管理(1学时),第8章 软件设计,8.1 软件设计概述 8.2 软件模块化设计 8.3 软件结构 8.4 软件系统结构模型8
3、.5 体系结构模式 8.6 习题,8.1 软件设计概述,软件设计阶段的基本目标是构造系统“怎么做”的模型描述,它是整个软件开发过程的核心问题开发工作根据设计的方案进行,软件的总体设计决定了系统的质量“设计先于编码”,这是软件工程“推迟实现”基本原则软件系统设计是把软件需求“变换”为用于构造软件的蓝图“输入”是需求分析各种模型元素“输出”是软件设计模型和表示软件设计的目标是对将要实现的软件系统的体系结构、系统的数据、系统模块间的接口,以及所采用的算法给出详尽的描述,总体设计,复审,修 改,详细设计,模块描述,复审,修 改,软件设计工作流程,从工程管理的角度看,软件设计分两步完成:总体设计(概要设
4、计)和详细设计两个阶段。 首先做概要设计(软件结构设计),将软件需求转化为数据结构和软件的系统结构。 然后是详细设计,即过程设计。通过对结构表示进行细化,得到软件详细的数据结构和算法。,通过软件设计阶段的工作将划分出组成系统的物理元素:程序文件数据库人工过程文档等 但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后详细设计。 总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。,设计过程的一般模型,设计活动,设计产品,软件设计,编码,软件测试,开发阶段信息流,总体设计通常由两个主要阶段组成:(1)系统设计阶段:确定
5、系统的具体实现方案;(2)结构设计阶段:确定软件结构。 典型的总体设计过程包括下述9个步骤:1. 设想供选择的方案 需求分析阶段得出的数据流图是总体设计的极好的出发点。 一旦选出了边界划分(分组)最佳的方案,将能大大提高系统的性能/价格比。,2. 选取合理的方案 通常至少选取低成本、中等成本和高成本的三种方案。 在判断哪些方案合理时应该考虑在问题定义和可行性研究阶段确定的工程规模和目标,有时可能还需要进一步征求用户的意见。 对每个合理的方案分析员都应该准备下列4份资料:(1) 系统流程图;(2) 组成系统的物理元素清单;(3) 成本/效益分析;(4) 实现这个系统的进度计划。,3. 推荐最佳方
6、案 分析员综合分析对比各种合理方案的利弊,推荐一个最佳的方案。 用工程网络技术为推荐的方案制定详细的实现计划。 用户和有关的技术专家认真审查分析员所推荐的最佳系统,如果该系统确实符合用户的需要,并且是在现有条件下完全能够实现的,则应该提请使用部门负责人进一步审批。 在使用部门的负责人也接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶段结构设计。,4. 功能分解 为了最终实现目标系统,必须设计出组成这个系统的所有程序和文件(或数据库)。 对程序(特别是复杂的大型程序)的设计,通常分为两个阶段完成: (1)结构设计:确定程序由哪些模块组成,以及这些模块之间的关系; (2)过程设计:确
7、定每个模块的处理过程,这是详细设计阶段的任务。,为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。 分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。 一般说来,经过分解之后应该使每个功能对大多数程序员而言都是明显易懂的。 功能分解导致数据流图的进一步细化,同时还应该用IPO图或其他适当的工具简要描述细化后每个处理的算法。,5. 设计软件结构 通常程序中的一个模块完成一个适当的子功能。 软件结构(即由模块组成的层次系统) 表示软件系统的构成,是软件模块间关系的表示,可以用层次图或结构图来描绘。 如果数据流图已经细
8、化到适当的层次,则可以直接从数据流图映射出软件结构,这就是面向数据流的设计方法。,软件结构图,6. 设计数据库(确定系统的数据结构) 对于需要使用数据库的那些应用系统,软件工程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。7. 设计用户界面 作为人机接口的用户界面起着越来越重要的作用,它直接影响到软件的可用性及使用寿命。8. 制定软件设计测试计划 在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。,9. 书写文档 在这个阶段应该完成的文档通常有下述几种:(1) 系统说明主要内容:系统流程图描绘的系统构成方案,物理元素清单,成本/效益分析,
9、精化的数据流图,用层次图或结构图描绘的软件结构,用IPO图或其他工具简要描述的各个模块的算法,模块间的接口关系等。(2) 用户手册:根据总体设计阶段的结果,修改更正在需求分析阶段产生的初步的用户手册。(3) 测试计划:测试策略,测试方案,预期的测试结果,测试进度计划等。(4) 详细的实现计划。(5) 数据库设计结果。,10. 审查和复审 最后对总体设计的结果进行严格的技术审查,在技术审查通过之后再由使用部门的负责人从管理角度进行复审。,软件设计质量原则,设计过程不应该受“隧道视野”的限制设计对于分析模型应该是可跟踪的设计不应该从头做起设计应该缩短软件和现实问题的“智力距离”设计应该表现出一致性
10、和集成性设计应该能够适应修改设计不是编码在创建设计时,就应该考虑能够评估其质量应该复审每一步设计,以减少语义性错误,概要设计说明书,详细设计说明书,8.2 软件模块化设计,有人说,模块化是为了使一个复杂的大型程序能被人的智力所管理,软件应该具备的惟一属性。,模块是一个独立命名的,拥有明确定义的输入、输出和特性的程序实体。把一个大型软件系统的全部功能,按照一定的原则合理地划分为若干个模块,每个模块完成一个特定子功能,所有的这些模块以某种结构形式组成一个整体,这就是软件的模块化设计(Modular Design)。软件模块化设计可以简化软件的设计和实现,提高软件的可理解性和可测试性,并使软件更容易
11、得到维护。分解、抽象、逐步求精、信息隐蔽和模块独立性,是软件模块化设计的指导思想。,模块(构件)是程序对象有名字的集合。例如,过程、函数、子程序、宏等,是构成软件系统结构的基本元素。 面向对象方法学中的对象是模块,对象内的方法(服务)也是模块。模块是构成程序的基本构件。 模块化就是将系统划分为若干个模块,每个模块完成一个子功能。 模块化的目的是将系统“分而治之”,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。,令:C(X)表示问题 X 的复杂度函数, E(X)表示解决问题 X 所需工作量的复杂度函数;若:有问题 P1,P2 ,C(P1
12、) 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,注意选择分解的最佳模块数。,模块化降低软件复杂度的简单证明:,采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。 因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易测试和调试,因而有助于提高软件的可靠性。 因为变动往往只涉及少数几个模块,
13、所以模块化能够提高软件的可修改性。 模块化的主要优点是:模块化设计降低了软件系统的复杂性,使得系统容易修改,同时使得系统各个部分可以并行开发,从而提高了软件的生产率。,人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。 人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。 把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。 或者说抽象就是抽出事物的本质特性而暂时不考虑它们的细节。,抽象,处理复杂系统的惟一有效的方法是用层次的方式构造和分析它。 软件工程过程的每一步都是对软件解法的抽象层次的一次精化: 在可行性研究阶段,软件作为系统的
14、一个完整部件; 在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的; 当由总体设计向详细设计过渡时,抽象的程度也就随之减少了; 最后,当源程序写出来以后,也就达到了抽象的最低层。,软件体系结构,软件体系结构是指软件的整体结构和这种结构为系统提供概念上完整性的方式。体系结构可以是程序构件或模块的结构或组织,这些构件或模块交互的形式以及这些构件所用数据的结构。体系结构设计可以使用大量的模型来表达。,信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。 实际上,应该隐藏的不是有关模块的一切信息,而是模块的实现细节。 独立
15、的构件或模块之间的“接口”简单而清晰。 所谓局部化是指把一些关系密切的软件元素物理地放得彼此靠近。 在模块中使用局部数据元素是局部化的一个例子。 显然,局部化有助于实现信息隐藏。,信息隐藏和局部化,模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。 希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。 模块的独立性很重要,主要有两条理由:第一,有效的模块化的软件比较容易开发出来。第二,独立的模块比较容易测试和维护。 总之,模块独立是好设计的关键,而设计又是决定软件质量的关键环节。,模块独立,模块独立性的度量标准是两个定性准则:(1)耦合性
16、:描述模块之间联系的紧密程度;(2)内聚性:描述模块内部联系的紧密程度。 模块独立性比较强的模块应该具有高内聚性和低耦合度。 模块独立性愈高,则块内联系越强,块间联系越弱。,低,高,弱,强,耦合性,模块独立性,1. 耦合 耦合是对一个软件结构内不同模块之间互连程度的度量。 耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。 模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。,(1)数据耦合:两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据。 系统中至少必须存在数据耦合,只有当某些模块的输出数据作为另一些模块的输入数据时,系统才能完成有价值
17、的功能。(2)控制耦合:一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。,控制耦合是中等程度的耦合,它增加了系统的复杂程度。控制耦合在把模块适当分解之后通常可以用数据耦合代替它。,(3)特征耦合:被调用的模块需要使用作为参数传递进来的数据结构中的一部分数据元素时,就出现了特征耦合。(4)公共耦合:当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。 公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等。 如果两个模块共享的数据很多,都通过参数传递可能很不方便,这时可以利用公共环境耦合。,(5)内容耦合:是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三部分 软件设计与建模8软件设计课件 第三 部分 软件设计 建模 课件
链接地址:https://www.31ppt.com/p-1526367.html