课件软件工程SoftwareEngineering.ppt
《课件软件工程SoftwareEngineering.ppt》由会员分享,可在线阅读,更多相关《课件软件工程SoftwareEngineering.ppt(81页珍藏版)》请在三一文库上搜索。
1、2019/4/17,国防科技大学计算机学院,1,软件工程 Software Engineering,国防科技大学计算机学院 2004.07,齐治昌 教授, 谭庆平 教授, 宁洪 教授, 董威 博士,2019/4/17,国防科技大学计算机学院,2,第八章 软件设计基础,软件设计是软件工程的重要阶段。 软件设计过程是对程序结构、数据结构和过程细节逐步求精、复审并编制文档的过程。 经过软件工程师们多年的努力形成了一些软件设计技术、质量评估标准和设计表示法并用于软件工程实践。 本章讨论与软件设计有关的主要概念, 介绍几个具体的软件设计方法。,2019/4/17,国防科技大学计算机学院,3,8.1软件设
2、计过程,软件开发阶段由设计、编码和测试三个基本活动组成,其中“设计活动”是 获取高质量、低耗费、易维护软件最重要的一个环节。 需求分析阶段获得的需求规格说明书包括对欲实现系统的信息、功能和行为方面的描述, 这是软件设计的基础。对此采用任一种软件设计方法都将产生系统的总体结构设计(archite ctural design)、系统的数据设计(data design)和系统的过程设计(procedural design)( 图81)。,第八章 软件设计基础,2019/4/17,国防科技大学计算机学院,4,软件设计过程,不同的软件设计方法会产生不同的设计形式。 数据设计把信息描述转换为实现软件所要求
3、的数据结构。 总体结构设计旨在确定程序各主要部件之间的关系。 过程设计要完成每一部件的过程化描述。 根据设计结果编制代码。 设计阶段做的决策直接影响软件质量,没有良好的设计就没有稳定的系统,也不会有易维护的软件。 统计表明:设计、编码和测试这三个活动一般占用整个软件开发费用(不包括维护阶段)的75%以上。,8.1软件设计过程,2019/4/17,国防科技大学计算机学院,5,图8.1 开发阶段的信息流,8.1软件设计过程,2019/4/17,国防科技大学计算机学院,6,软件设计过程,软件设计也可看作将需求规格说明逐步转换为软件源代码的过程。 从工程管理的角度看,软件设计可分为概要设计和详细设计两
4、大步骤。 概要设计是根据需求确定软件和数据的总体框架 详细设计是将其进一步精化成软件的算法表示和数据结构。 概要设计和详细设计由若干活动组成,除总体结构设计、数据结构设计和过程设计外,许多现代应用软件,还包括一个独立的界面设计活动。,8.1软件设计过程,2019/4/17,国防科技大学计算机学院,7,8.2软件设计基本概念,软件设计基本概念是过去三十年里陆续提出的。 软件设计者根据这组概念进行设计决策, 如: 划分子部件的标准; 从软件的概念表示中分离出功能和数据结构的细节; 以统一的标准衡量软件设计质量等等。,第八章 软件设计基础,2019/4/17,国防科技大学计算机学院,8,8.2.1抽
5、象与逐步求精,抽象是管理、控制复杂性的基本策略 。 “抽象”是心理学概念,它要求人们将注意力集中在某一层次上考虑问题,而忽略那些低层次的细节。 使用抽象技术便于人们用“问题域”的概念和术语描述问题,而无须过早地转换为那些不熟悉的结构。 软件设计过程是,在不同抽象级别上考虑、处理问题的过程。 ()在最高抽象级别上,用面向问题域的语言叙述“问题”,概括“问题解”的形式。 ()不断地具体化,不断地用面向过程的语言描述问题。 ()在最低的抽象级别上给出可直接实现的“问题解”,即程序。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,9,抽象与逐步求精,软件工程过程的每一步都是对较高
6、一级抽象的解作一次较具体化的描述。 在系统定义阶段, 软件系统被描述为基于计算机的大系统的一个组成部分; 在软件规划和需求分析阶段,软件用问题域约定的习惯用语表达; 从概要设计过渡到详细设计时,抽象级再一次降低; 编码完成后,达到了抽象的最低级。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,10,抽象与逐步求精,在由高级抽象到低级抽象的转换过程中,伴随着一连串的过程抽象和数据抽象。 过程抽象把完成一个特定功能的动作序列抽象为一个过程名和参数表,通过指定过程名和实际参数调用此过程; 数据抽象把一个数据对象的定义(或描述 )抽象为一个数据类型名,用此类型名可定义多个具有相同
7、性质的数据对象。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,11,例8.1 不同抽象级别的软件形式,例81 考虑适用于低级CAD的图形软件包。 抽象1 该CAD软件系统配有能与作图员进行可视化通讯的图形界面。 能用鼠标替代作图板和直尺画各种直线和曲线。 能完成所有几何计算及所有截面视图和辅助视图的设计。 图形设计的结果存在图形文件中,图形文件可包含几何的、正文的和其他各种补充设计信息。 在这一抽象级别上,问题的解用问题域本身的术语描述。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,12,不同抽象级别软件的形式,抽象2 CAD 软件任务; 用户界
8、面任务; 创建二维图形任务; 显示图形任务; 管理图形文件任务; end CAD. 在这一抽象级别上,给出了组成CAD软件任务的所有子任务,术语与问题域有所不同,但仍然不是实现用的语言。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,13,不同抽象级别软件的形式,抽象3 例“创建二维图形任务” PROCEDURE 创建二维图形 REPEAT UNTIL DO WHILE 数字仪接口任务; 判断作图请求: 线:画线任务; 圆:画圆任务; END;,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,14,不同抽象级别软件的形式,DO WHILE 键盘接口任务
9、; 选择分析或计算: 辅助视图:辅助视图任务; 截面视图:截面视图任务; END; END REPETITION; END PROCEDURE 在这一抽象级别上,给出了初步的过程性表示,此时所有术语都是面向软件(比如采用do while结构)并且模块结构也开始明朗。求精过程还可继续下去,直至产生源代码。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,15,不同抽象级别软件的形式,数据抽象与过程抽象一样,能使设计者按不同的详细程度表示数据对象。 例 为CAD软件定义drawing(图)的数据对象: TYPE drawing IS STRUCTURE DEFINED numb
10、er IS STRING LENGTH(12); geometry DEFINED notes IS STRING LENGTH(256); bom DEFINED END drawing TYPE; drawing 被表示为一种结构,各组成部件又可为某种数据抽象,如 geometry 和 bom。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,16,不同抽象级别软件的形式,抽象数据类型drawing定义完毕,即可用类型名直接说明数据对象,而不必涉及其内部构造的细节,如,可用语句 blueprint IS INSTANCE OF drawing; 或 schematic
11、IS INSTANCE OF drawing; 说明blueprint和schematic具有drawing的特性。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,17,不同抽象级别软件的形式,在抽象数据类型的定义中可以附加一组操作的定义,用以确定在此类数据对象上可进行的操作。 以抽象数据类型drawing为例,可以定义擦除(erase)、存储(save)、分类(catalog)和拷贝(copy)等操作。 若干程序设计语言(如Ada,Modula,CLU)都提供了对抽象数据类型的支持,Ada的程序包机制是对数据抽象和过程抽象的双重支持。,8.2软件设计基本概念,2019/
12、4/17,国防科技大学计算机学院,18,不同抽象级别软件的形式,由N.Wirth提出的“逐步求精”概念,与“抽象”密切相关,是早期的自顶向下设计策略。 “逐步求精”的主要思想是,针对某个功能的宏观描述用逐步求精的方法不断地分解,逐步确立过程细节,直至该功能用程序语言描述的算法实现为止。 求精的每一步都是用更为详细的描述替代上一层次的抽象描述,在整个设计过程中产生的,具有不同详细程度的各种描述组成系统的层次结构。 层次结构的上一层是下一层的抽象,下一层是上一层的求精。 在过程求精的同时,伴随着数据求精,无论是过程还是数据,每个求精步都蕴含着某些设计决策,设计人员必须掌握一些基本的准则和各种可能的
13、候选方法。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,19,8.2.2模块化与信息隐藏,模块化的概念 把软件划分为可独立命名和编址的部件,每个部件称为一个模块,当把所有模块组装到一起时则获得满足问题需要的一个解。 软件总体结构体现了模块化思想。 “模块化是软件唯一能使程序获得智能化管理的一个属性”, 没有模块的程序控制路径错综复杂,变量被远距离引用等难于被人掌握。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,20,模块化与信息隐藏,求解问题的过程 假设 函数C(X)定义了问题X已被觉察到的复杂性, 函数E(X)定义了求解问题X所要求的工作量(按
14、时间计), 对于问题P1和P2, 如果 C(P1)C(P2) (81a) 则 E(P1)E(P2) (81b) C(P1+P2)C(P1)+C(P2) (82) E(P1+P2)E(P1)+E(P2) (83) 解决一个复杂问题,比解决一个简单问题耗费多。 由P1、P2组合而成的问题复杂性,比单个问题复杂性的和更大。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,21,模块化与信息隐藏,“分治法” 一个复杂问题分割成若干个可管理的小问题后更易于求解。 当模块总数增加时,每个模块的成本减少了,但模块接口所需代价随之增加。 如果模块数为M时将获得最小开发成本,那么模块数在M附
15、近选择,就能避免模块分割过度和不足。 这些问题涉及信息隐藏、内聚度与藕合度的概念。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,22,模块化与信息隐藏,怎样保证模块数“在M附近”? 依据什么标准划分模块?,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,23,1信息隐藏,模块独立的概念 模块应该设计得使其所含信息(过程和数据)对于那些不需要这些信息的模块不可访问; 每个模块只完成一个相对独立的特定功能; 模块之间仅仅交换那些为完成系统功能必须交换的信息,即模块应该独立。 采用信息隐藏原理指导模块设计优点: 支持模块的并行开发 减少软件测试和软件维护的
16、工作量。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,24,2内聚度,内聚度 模块内部各成分彼此结合的紧密程度。 内聚度按其高低程度可分为七级,内聚度越高越好。 低级内聚度 ()偶然性内聚(Coincidental Cohesion)。 模块内各成分为完成一组功能而组合在一起,它们相互之间即使有关系,也很松散。 ()逻辑性内聚(Logical Cohesion) 模块完成的诸任务逻辑上相关,如,一个模块产生所有与类型无关的输出。 ()时间性内聚(Temporal Cohesion) 模块包含的诸任务必须在同一时间段内执行,如一个初始化模块。,8.2软件设计基本概念,20
17、19/4/17,国防科技大学计算机学院,25,模块化与信息隐藏,中级内聚度 ()过程性内聚(Procedural Cohesion) 模块具有过程性内聚度指,模块内成分彼此相关,并且必须按特定的次序执行; ()通信性内聚(Communicational Cohesion) 模块中各成份都将对数据结构的同一区域进行操作,以达到通信的目的。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,26,模块化与信息隐藏,高级内聚度 ()顺序性内聚(Sequential Cohesion) 模块内的各处理成份均与同一功能相关,且这些处理必须顺序执行,则称顺序内聚。 ()功能性内聚(Fun
18、ctional Cohesion) 模块内所有成分形成一个整体,完成单个功能。 设计软件时,应该能够识别内聚度的高低,并通过修改设计尽可能提高模块内聚度,从而获得较高的模块独立性,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,27,3耦合度,耦合度 软件结构中模块间关联程度的一种度量。 耦合的强弱取决于模块间接口的复杂性、进入或调用模块的位置以及通过界面传送数据的多少等。 设计软件应追求尽可能松散耦合的系统。 松散耦合系统中,任一模块的设计、测试和维护都相对独立。 松散耦合系统模块间联系较少,错误在模块间传播的可能性随之变小。 模块间的耦合程度直接影响系统的可理解性、可测
19、试性、可靠性和可维护性。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,28,模块化与信息隐藏,耦合度也分为七级: ()非直接耦合(Nodirect Coupling) 两模块中任一个都不依赖对方能独立工作, 这类耦合度最低。 ()数据耦合(Data Coupling) 两模块通过参数交换信息,信息仅限于数据。 ()控制耦合(Control Coupling) 传递的信息含有控制信息。控制耦合通常会增加系统的复杂性,适当分解模块可望消除控制耦合。 ()特征耦合(Stamp Coupling)。 介于数据耦合与控制耦合之间,8.2软件设计基本概念,2019/4/17,国防科
20、技大学计算机学院,29,模块化与信息隐藏,()外部耦合(External Coupling) 当若干模块均与同一个外部环境关联,如,I/O处理使所有I/O模块与特定的设备、格式和通信协议相关联。 外部耦合尽管需要,但应限制在少数几个模块上。 ()公共耦合(Common Coupling) 若干模块通过全局的数据环境相互作用, 全局数据环境中可能含有全局变量、公用区、内存公共复盖区、任何存储介质上的文件、物理设备等。 ()内容耦合(Content Coupling) 一个模块使用另 一模块内部的数据或控制信息;一个模块直接转移到另一模块内部等等。 设计软件时应尽量使用数据耦合,减少控制耦合,限制
21、外部环境耦合和公共数据耦合,杜绝内容耦合。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,30,模块化与信息隐藏,模块化设计的思想适用于任何软件系统的设计。当某些软件系统,如实时软件和部分微处理机软件,因不能容忍子程序调用引起的时间开销而必须以整块软件的形式出现时,软件设计仍然应该以模块化设计的思想为指导,直至编码时再改用代入式(inline)方法。这样,源程序中虽不含明显的模块,但模块化设计所带来的大部分益处却已被系统获得。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,31,8.2.3软件总体结构设计,软件总体结构(software archit
22、ecture)应该包括两方面内容 ()由系统中所有过程性部件(即模块)构成的层次结构, 亦称为程序结构; ()输入输出数据结构。 软件总体结构设计的目标是产生一个模块化的程序结构并明确各模块之间的控制关系,此外还要通过定义界面,说明程序的输入输出数据流,进一步协调程序结构和数据结构。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,32,软件总体结构设计,程序结构、数据结构是逐步求精、分而治之的结果。 软件设计从需求定义开始,逐步分层导出程序结构和数据结构,当需求定义中所述的每个部分最终都能由一个或几个软件元素实现时,整个求解过程即告结束。,8.2软件设计基本概念,2019
23、/4/17,国防科技大学计算机学院,33,软件总体结构设计,依据任何一种软件设计方法总能推导出一个软件结构。 模块内聚度和耦合度是判断结构好坏的主要标准 。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,34,软件总体结构设计,表示程序结构的工具 类树图(Treelike diagram) WarnierOrr图 Jackson 图等,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,35,程序结构的术语,软件的深度(Depth)和宽度(Width)分别说明控制的层数和跨度。 模块的“扇出率”(Fanout)指,该模块直接控制的其他模块数。 模块的“扇入
24、 率”(Fanin)指,能直接控制该模块的模块数。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,36,程序结构的术语,如果一个模块控制另一模块,称前者为“主控”模块,后者为“从属”模块。 软件结构的可见域和连通域。 模块的可见域指,该模块可直接或间接引用的一组模块; 模块的连通域指,模块可直接引用的模块。 软件的总体结构应该在考虑每个模块的细节前就确定下来。 软件设计方法鼓励人们首先致力于软件总体结构的设计,而后再进行详细设计。 每一种方法导出总体结构的具体方式不尽相同。,8.2软件设计基本概念,2019/4/17,国防科技大学计算机学院,37,8.2.4数据结构设计,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课件 软件工程 SoftwareEngineering
链接地址:https://www.31doc.com/p-2611303.html