您好,欢迎访问三七文档
软件工程软件工程软件工程第第44章章设计工程设计工程中国地质大学(北京)软件学院2/135内容摘要内容摘要•软件设计工程概述•软件设计原则•软件体系结构设计•部件级设计技术•设计规约与设计评审中国地质大学(北京)软件学院3/135内容摘要内容摘要••软件设计工程概述软件设计工程概述•软件设计原则•软件体系结构设计•部件级设计技术•设计规约与设计评审中国地质大学(北京)软件学院4/135软件设计工程概述软件设计工程概述•软件需求分析解决“做什么”的问题,软件设计过程则解决“怎么做”的问题•软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段:软件体系结构设计阶段和部件级设计中国地质大学(北京)软件学院5/135软件设计的任务软件设计的任务•使用一种设计方法,软件分析模型中通过数据、功能和行为模型所展示的软件需求的信息被传送给设计阶段,产生数据/类设计、体系结构设计、接口设计、部件级设计中国地质大学(北京)软件学院6/135•数据/类设计:将分析-类模型变换成类的实现和软件实现所需要的数据结构•体系结构设计:体系结构设计定义了软件的整体结构•接口设计:接口设计描述了软件内部、软件和协作系统之间以及软件同人之间如何通信•部件级设计:部件级设计将软件体系结构的结构性元素变换为对软件部件的过程性描述中国地质大学(北京)软件学院7/13511)数据)数据//类设计类设计•在类和由CRC中定义的数据对象和关系以及数据字典中描述的详细数据内容提供了数据设计活动的基础•部分数据可能和软件体系结构的设计同时产生,更详细的数据结构则产生于设计每个软件部件时。数据结构是数据的各个元素之间逻辑关系的一种表示。•数据结构设计应确定数据的组织、存取方式、相关程度以及信息的不同处理方法。中国地质大学(北京)软件学院8/13511)数据)数据//类设计类设计•数据设计的过程包括以下两步:–首先,为在需求分析阶段所确定的数据对象选择逻辑表示,需要对不同结构进行算法分析,以便选择一个最有效的设计方案;–然后,确定对逻辑数据结构所必需的那些操作的程序模块,以便限制或确定各个数据设计决策的影响范围。•无论采取什么样的设计方法,如果数据设计的好,往往能产生很好的软件体系结构,具有很强的模块独立性和较低的程序复杂性。•清晰的数据定义是软件开发成功的关键。中国地质大学(北京)软件学院9/13522)体系结构设计)体系结构设计•体系结构设计定义了软件的整体结构,它由软件部件、外部可见的属性和它们之间的关系组成。•体系结构设计表示可以从系统规约、分析模型和分析模型中定义的子系统的交互导出。•软件体系结构设计的概念和风格4.3节中国地质大学(北京)软件学院10/13533)接口设计)接口设计•接口设计描述了软件内部、软件和协作系统之间以及软件同人之间的通信方式。•体系结构设计为软件工程师提供了程序结构的全局试图,就像房子的蓝图一样,如果不画出门、窗、水管、电线和电话线,整个设计将是不完整的。•接口设计主要包括三个方面:–设计软件模块间的接口中国地质大学(北京)软件学院11/13533)接口设计)接口设计–设计模块和其他非人的信息生产者和消费者(比如外部实体)之间的接口–设计人(用户)和计算机间的接口•模块间的接口设计是由模块间传递的数据和程序设计语言的特性共同导致的。一般来说,分析模型中包含了足够的信息用于模块间的接口设计。•外部接口设计起始于对分析模型的每个外中国地质大学(北京)软件学院12/13533)接口设计)接口设计•部实体的评估。外部实体的数据和控制需求确定下来以后,就可以设计外部接口了。•内部和外部接口设计必须与模块内的数据验证和错误处理算法紧密相关,由于副作用往往是由程序接口进行传播的,所以必须对从某模块流行另一个模块(或流向外部世界)的数据进行检查,以保证符合需求分析时的要求。中国地质大学(北京)软件学院13/13544)部件级设计)部件级设计•部件级设计将软件体系结构的结构性元素变换为对软件部件的过程性描述。•从类为基础的模型、流模型、行为模型中得到的信息是部件设计的基础。中国地质大学(北京)软件学院14/135软件设计的目标软件设计的目标•在进行软件设计的过程中,我们要密切关注软件的质量因素。•设计是在软件开发中形成质量的阶段,设计提供了可以用于质量评估的软件表示,是将用户需求准确地转化为完整的软件产品或系统的主要途径。中国地质大学(北京)软件学院15/135软件设计的目标软件设计的目标•McGlanghlin给出了在将需求转换为设计时,判断设计好坏的3条特征,也就是软件设计过程的目标:1)设计必须实现分析模型中描述的所有显式需求,必须满足用户希望的所有隐式需求。2)设计必须是可读、可理解的,使得将来易于编程、易于测试、易于维护。3)设计应从实现角度出发,给出与数据、功能、行为相关的软件全貌。中国地质大学(北京)软件学院16/135衡量设计的技术标准衡量设计的技术标准为了达到设计目标,必须建立衡量设计的技术标准:1)设计出来的结构应是分层结构,从而建立软件成份之间的控制。2)设计应当模块化,从逻辑上将软件划分为完成特定功能或子功能的部件。3)设计应当既包含数据抽象,也包含过程抽象。4)设计应当建立具有独立功能特征的模块。5)设计应当建立能够降低模块与外部环境之间复杂连接的接口。6)设计应能根据软件需求分析获取的信息,建立可驱动、可重复的方法。中国地质大学(北京)软件学院17/135软件设计的过程软件设计的过程软件设计是一个把软件需求变换成软件表示的过程,有以下几个步骤:1)制定规范2)体系结构和接口设计3)数据/类设计4)部件级(过程)设计5)编写设计文档6)设计评审中国地质大学(北京)软件学院18/135软件设计的过程软件设计的过程过程描述:通常在建立软件设计过程时,首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作。包括阅读和理解软件需求说明书,确认用户要求能否实现;明确实现的条件,从而确定设计的目标,以及它们的优先顺序;根据目标确定最合适的设计方法;规定设计文档的编制标准;规定编码的信息形式,与硬件及操作系统的接口规约,以及命名规则。中国地质大学(北京)软件学院19/135软件设计的过程软件设计的过程过程描述:然后进入到体系结构和接口设计、数据/类设计及部件级设计(过程)设计。这个过程是一个迭代的过程。最初的设计只是描绘出可直接反映功能、数据、行为需求的软件的整体框架,接着设计的迭代过程开始,在框架中逐步填入细节,将其加工成在实现细节上非常接近于源程序的软件表示。在设计结束后,要编写设计文档、制定用户手册和初步的测试计划,并组织进行设计评审。中国地质大学(北京)软件学院20/135内容摘要内容摘要•软件设计工程概述••软件设计原则软件设计原则•软件体系结构设计•部件级设计技术•设计规约与设计评审中国地质大学(北京)软件学院21/135抽象化与逐步求精抽象化与逐步求精•抽象,是在软件设计的规模逐渐增大的情况下,控制复杂性的基本策略。•“抽象”是一个心理学概念,要求人们将注意力集中在某一层次上考虑问题,忽略低层次的细节。•抽象的过程是从特殊到一般的过程,上层概念是下层概念的抽象,下层概念是上层概念的精化和细化。中国地质大学(北京)软件学院22/135抽象化与逐步求精抽象化与逐步求精•软件工程过程的每一步都是对较高一级抽象的解作一次具体化的描述–系统定义阶段把整个软件系统抽象成基于计算机系统的一个组成部分;–需求分析阶段是对问题域的抽象,使用问题域中的术语;–经过软件体系结构设计、部件级设计,抽象级别一次一次降低,到编码完成后,到达最低级别的抽象。中国地质大学(北京)软件学院23/135•软件设计中主要抽象手段有:过程抽象和数据抽象•过程抽象(也称功能抽象)是指任何一个完成明确定义功能的操作都可被使用者当作单个实体看待,尽管这个操作实际上是由一系列更低级的操作来完成的;•数据抽象是指定义数据类型和施加于该类型对象的操作,并限定了对象的取值范围,只能通过这些操作修改和观察数据。中国地质大学(北京)软件学院24/135逐步求精逐步求精•逐步求精,把问题的求解过程分解成若干步骤或阶段,每步都比上步更精化,更接近问题的解法•为了能集中精力解决主要问题而尽量推迟问题细节的考虑,逐步求精和抽象是一对互补的概念。•抽象使得设计者能够描述过程和数据而忽略低层的细节,而求精有助于设计者在设计过程中揭示低层的细节中国地质大学(北京)软件学院25/135抽象使得设计者能够说明过程和数据,同时却忽略低层细节。求精则帮助设计者在设计过程中逐步揭示出低层细节。逐步求精逐步求精中国地质大学(北京)软件学院26/135模块化模块化•模块化,即把软件按照规定原则,划分为一个个较小的,相互独立的但又相互关联的部件,实际上是系统分解和抽象的过程。•模块是数据说明、可执行语句等程序对象的集合,它是单独命名的,并且可以通过名字来访问–例如,过程、函数、子程序、宏等中国地质大学(北京)软件学院27/135•设C(x)是描述问题x复杂性的函数,E(x)是解决问题x所需工作量(按时间计算)的函数。对于两个问题p1和p2,如果•C(p1)>C(p2)(4.1a)•那么•E(p1)>E(p2)(4.1b)•即问题越复杂,解决问题所需要的花费更多。模块化的考虑模块化的考虑中国地质大学(北京)软件学院28/135•通过对人解决问题的实验,又存在另一个有趣的规律:•C(p1+p2)>C(p1)+C(p2)(4.2)•方程式(4.2)意味着p1和p2组合后的复杂性比单独考虑每个问题时的复杂性要大。考虑方程式(4.2)和方程式(4.1)隐含的条件,我们可以得出•E(p1+p2)E(p1)+E(p2)(4.3)•不等式(4.3)表达出了一个对于模块化和软件具有十分重要意义的结论(即,模块化的论据):将复杂问题分解成可以管理的片断会更使解决问题更加容易。模块化的考虑模块化的考虑中国地质大学(北京)软件学院29/135•如果我们无限制地划分软件,开发它所需的工作量会变得小到可以忽略?!•事实上,影响软件开发的工作量的因素还有很多,例如模块接口费用等等•上述不等式只能说明,当模块的总数增加时,单独开发各个子模块的工作量之和会有所减少模块化的设计原则模块化的设计原则中国地质大学(北京)软件学院30/135•如果模块是相互独立的,当模块变得越小,每个模块花费的工作量越低;•但当模块数增加时,模块间的联系也随之增加,把这些模块联接起来的工作量也随之增加。中国地质大学(北京)软件学院31/135信息隐藏信息隐藏•每个模块的实现细节对于其它模块来说应该是隐蔽的•块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用•通过信息隐蔽,则可定义和实施对模块的过程细节和局部数据结构的存取限制中国地质大学(北京)软件学院32/135局部化的概念和信息隐藏概念是密切相关的。所谓局部化是指把一些关系密切的软件元素物理地放得彼此靠近。信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。信息隐藏和局部化信息隐藏和局部化中国地质大学(北京)软件学院33/135模块独立模块独立•模块独立:模块完成独立的功能并且与其他模块的接口简单,符合信息隐蔽和信息局部化原则,模块间关联和依赖程度尽可能小•模块独立的重要性–功能被划分,并且接口被简化,所以具有有效模块化的软件更易于开发–由于因设计和编码修改引起的副作用受到局限,错误传播被减小,并且模块复用成为可能,所以独立的模块更易于维护和测试中国地质大学(北京)软件学院34/135模块独立模块独立•模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。•模块的独立性可以由两项指标来衡量:内聚度与耦合度•内聚(cohesion)是一个模块内部各个元素彼此结合的紧密程度的度量•耦合(coupling)是模块之间的相对独立性(互相连接的紧密程度)的度量中国地质大学(北京)软件学院35/
本文标题:软件工程4
链接地址:https://www.777doc.com/doc-213007 .html