高级软件工程软件设计.ppt
《高级软件工程软件设计.ppt》由会员分享,可在线阅读,更多相关《高级软件工程软件设计.ppt(70页珍藏版)》请在三一办公上搜索。
1、高级软件工程,软件设计,4.1软件设计的目标和任务,软件设计的基本目的就是回答“系统应该如何实现?”。软件设计的任务,就是把分析阶段产生的软件需求说明转换为用适当手段表示的软件设计文档。,1软件设计的目标,不管采用何种软件设计方法,软件设计一般都包括数据设计、体系结构设计、接口设计和过程设计(或称构件级设计)等设计活动。软件设计的过程和目标:根据用信息域表示的软件需求,以及功能和性能需求,进行数据设计、系统结构设计、过程设计。在每个设计活动中,软件开发者产生软件的数据设计模型、体系结构设计模型、接口设计模型和过程设计模型。软件设计过程最终目标是产生一个设计规约,该规约包括描述数据、体系结构、接
2、口和构件的设计模型。,体系结构设计,定义软件主要结构性元素之间的关系。体系结构设计表示(即基于计算机的系统的框架)可以从系统规约、分析模型以及分析模型中所定义子系统的交互导出。,数据设计,将分析阶段创建的信息模型转变成实现软件所需的数据结构。部分数据设计可能和软件体系结构的设计同时发生,但更详细的数据设计活动则会发生在每个具体软件构件(或模块)设计的时候。,接口设计,描述软件内部模块之间以及软件与人之间是如何通信的(包括数据流和控制流)。一个接口意味着特定信息流(如数据流和/或控制流)以及行为类型,因此,数据和控制流图提供了接口设计所需的信息。,构件级设计,将软件体系结构的结构性元素转变成对软
3、件构件的过程性描述,即描述软件构件的详细内部设计细节。,软件设计非常重要,它将最终影响软件构造是否成功、最终软件的质量以及软件维护的难易程度。软件设计为我们提供了可以用于质量评估的软件表示,设计是我们能将用户需求准确地转化为完整的软件产品或系统的唯一方法。软件设计是所有软件维护步骤的基础。,2软件设计的任务,从工程管理的角度来看,传统的软件设计任务通常分两个阶段完成:第一个阶段是概要设计(总体设计或初步设计),将软件需求转化为数据结构和软件的系统结构,包括结构设计和接口设计,并编写概要设计文档。第二阶段是详细设计阶段(过程设计),其任务是通过对结构表示进行细化,确定各个软件构件的详细数据结构和
4、算法,产生描述各软件构件的详细设计文档。,概要设计主要确定实现目标系统的总体思想和设计框架。系统分析员使用系统流程图或其他工具,描述每种可能的系统,推荐一个较好的系统方案(最佳方案),并且制定实现所推荐系统的详细计划。在用户确认后,系统分析员就要设计软件的整体结构和框架,确定程序有哪些某块组成,以及模块与模块之间的关系,最后提出总体设计说明书;详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统。面向对象开发方法中,概要设计的部分内容,例如类及对象的设计将提前到OOA阶段开始,而在OOD阶段,概要设计将更多地关心对象之间的协作与交互。,4.2软件设计基本概念,在过去四十年中发展起来一套基
5、本的软件设计概念,每一种概念都为设计者提供了应用更加复杂设计方法的基础。,4.2.1 构件与构件化,1构件在软件系统设计中,构件是指这样一组程序语句,它包括输入、输出和逻辑处理功能、内部信息及其运行计划。构件指可单独命名且可通过名字访问的过程函数、子程序或宏调用。模块就是构件的一种具体形式。模块是一个拥有明确定义的输入、输出和特性的程序实体。,一般构件/模块具有以下几种特征:(1)接口,模块的输入输出;(2)功能,指模块实现什么功能,有什么作用;(3)逻辑,描述模块内部如何实现需求及所需数据;(4)状态,该模块的运行环境,模块间调用与被调用关系。,2构件化,构件化就是将程序划分成若干个独立的模
6、块,每个模块完成一个特定子功能,每个模块既是相对独立的,又是相互联系的,它们共同完成系统指定的各项功能。构件化的目的:降低软件的复杂性。对软件进行适当的分解,不但可以降低复杂性,而且可减少开发工作量,从而降低软件开发成本。我们常说的模块化就是构件化的一种具体形式。,4.2.2 抽象与逐步求精,1抽象 抽象是指从一些事物中抽取其本质的共同的特性,而忽略其非本质细节的差异。当我们考虑对求解问题的模块化时,可以进行多层次抽象。在抽象的最高层次使用问题环境的语言,以概括的方式叙述问题的解法,在较低层次上使用更过程化的方法,把面向问题的术语和面向实现的术语结合起来描述问题的解法。软件工程中的每个步骤都是
7、对软件解决方案抽象化程度的一次细化(即求精)。,2逐步求精,逐步求精是一种先总体、后局部的思维原则,也就是一种逐层分解、分而治之的方法。在面对一个复杂的大问题时,它采用自顶向下、逐步细化的方法,将一个大问题逐层分解成许多小问题,然后每个小系统再分解成若干个更小的问题,经过多次逐层分解,每个最低层问题都足够简单,最后再逐个解决。,逐步求精是与抽象相反但又互补的一个概念。抽象使得设计者能够刻画过程和数据的同时,忽略低层细节,求精有助于设计者在数据过程中揭示低层的细节,两者均能帮助设计者在设计演化中,构造出完整的设计模型。,4.2.3 信息隐藏,信息隐蔽是在设计和确定模块时,使得一个模块内包含的信息
8、(过程和数据)对于不需要这些信息的模块来说是不能访问的。它通过定义一组独立的模块来实现有效的模块化。信息隐蔽作为一种设计准则用于模块化系统,在测试与维护期间对软件修改会带来极大的好处。信息隐蔽的目的,是为了提高模块的独立性,当修改或维护模块时减少把一个模块的错误扩散到其他模块中去的机会。,4.2.4 构件独立性,构件独立性(Module Independence)概括了把软件划分为构件时要遵守的准则,也是判断构件构造是不是合理的标准。模块独立性是构件独立性的一种具体表现形式。独立的模块指具有独立功能而且和其他模块之间没有过多的相互作用的模块。模块独立性是通过判定系统中划分的模块是否是独立的模块
9、来实现的,即使每个模块只完成系统要求的一个相对独立的特定子功能,而且与软件结构的其他部分的接口是简单的。,模块独立的重要性,第一,具有独立模块的软件比较容易开发出来。这是由于能够分割功能而且接口可以简化,当许多人分工合作开发同一个软件时,这个优点尤其重要;第二,独立模块比较容易测试和维护。总之,模块独立是好设计的关键,而设计又是决定软件质量的关键环节。,独立性可以从两个方面来度量,即模块本身的内聚(Cohesion)和模块之间的耦合(Coupling)。内聚指模块内部各个成分之间的联系,所以也称为块内联系或模块强度;耦合指一个模块与其他模块之间的联系,所以又称为块间联系。模块的独立性愈高,则模
10、块内联系越强,模块间联系越弱。C、Myers把耦合和内聚各划分为7类,现分别介绍如下。,这是从功能角度对模块内部聚合能力的量度。按照由弱到强的顺序,Myers把模块内部聚合能力分为7类,如图4.3所示。在图中,从左到右内聚强度逐步增强。,1内聚,偶然性内聚 Coincidental Cohesion逻辑性内聚 Logical Cohesion时间性内聚 Temporal Cohesion过程性内聚 Procedural Cohesion通信性内聚 Communicational Cohesion顺序性内聚 Sequential Cohesion功能性内聚 Functional Cohesion
11、,图4.3 内聚强度的划分,低内聚,偶然性内聚块内各组成成分在功能上是互不相关的。例如,如图4.4所示,如果有模块X,Y,Z调用模块W,模块W中的这几条语句是为了节省空间把它们放在一个模块之中,而这几条语句之间没有任何联系,我们称模块W的块内联系为偶然性内聚。,偶然性内聚模块的各成分之间没有联系,此模块很难理解、测试和维护;另一方面不易修改。只要有足够的空间,就应尽量避免因节省空间而产生的模块偶然性内聚。,逻辑性内聚,这种模块把几种相关、相似功能组合在一起,每次被调用时,由传递给模块的参数来确定该模块应完成哪一种功能。,时间性内聚,如果一个模块所包含的任务必须在同一“时间”内完成,则这个模块的
12、块内联系称为时间性内聚。例如,一个处理意外故障模块中,“关闭文件”、“报警”、“保留现场”等任务必须无中断地同时处理。由于要求它们在同一段时间内执行相关功能,故称为时间性内聚。如图4.7所示。,中内聚,过程性内聚 当一个模块中包含的一组任务必需按照某一特定的次序执行时,就称为过程性内聚模块。,通信性内聚,通信性内聚型模块除了具有过程内聚的特点外,还有另外一种关系,即它的所有功能都通过使用公用数据而发生关系,即模块内部的各个成分都使用同一种输入数据,或者产生同一个输出数据。,图4.9 通信性内聚两例,高内聚模块,顺序性内聚 如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行,
13、通常一个处理元素的输出数据作为下一个处理元素的输入数据,则成为顺序性内聚。,功能性内聚,如果一个模块包括并仅为完成某一具体任务所必需的所有成分,或者说模块中所有成分结合起来是为了完成一个具体的任务,此模块则为功能性内聚模块。例如对一个数开平方,求一组数中的最大值,从键盘上读入一行等。功能性内聚模块具有内聚强,与其他模块的联系少等优点。,“一个模块,一个功能”,已成为模块化设计的一条准则,也是设计人员争取的目标。当然,其他的高内聚和中内聚模块也是允许使用的,低内聚模块因块内各成分的联系松散,可维护性和可重用性都比较差,在设计中应尽可能避免使用。,2耦合,耦合是对软件内部模块之间相互联系的度量。按
14、照Myers的划分,也归纳为7类:,图4.11 耦合强度的等级,弱耦合,非直接耦合 若两个模块没有直接关系,它们之间的联系完全是通过主程序的控制和调用来实现的,便称这两个模块为非直接耦合,这样独立性最强。,数据耦合,若一个模块访问另一个模块,且被访问模块的输入和输出都是数据项参数,则称这两个模块之间的联系为数据耦合。,模块B从属于模块A,A对B的访问是通过一个约定的变元表或者模块接口界面进行数据传递的,这里只传递数据,所以称A和B之间的联系为数据耦合。,图4.13 数据耦合一例,特征耦合,若两个以上的模块都需要其余某一数据结构的子结构时,不使用全局变量的方式而是用记录传递的方式,这样的耦合称为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 软件工程 软件设计
链接地址:https://www.31ppt.com/p-6151391.html