1、Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,These slides are designed to accompany,Software Engineering:A Practitioners Approach,7/e,(McGraw-Hill,2009)Slides copyright 2009 by Roger Pressman.,*,Click to edit Master title style,
2、Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,1,第7章 设计概念,设计:,Mitch,Kapor,,,Lotus 1-2-3,的创始人,在,Dr.Dobbs,杂志上,发表了“软件设计宣言”,他说:,良好的软件设计应该展示:,坚固:,程序应该展示不含任何妨碍其功能的缺陷。,适用:,程序应该符合开发的目标。,愉悦:,使用程序的体验应是愉快的。,2,设计的任务,分析模型 设计模型 设计文档,回答,How to do,?,可以分为概要设计、详细设计,把分析阶段产生的软件需求分析
3、说明转换为用适当手段表示的软件设计文档。,需求,分析,设计,用户需求,需求分析规格说明,过程设计,接口设计,体系结构,数据设计,3,设计模型,数据设计,信息模型 软件数据结构,体系结构设计,定义软件部件间的关系,接口设计,软件内部、外部及与人之间的通信,构建级(过程)设计,软件组件的过程性描述,4,分析模型,-,设计模型,基于场景的元素,用例文本,用例图,活动图,泳道图,基于类的元素,类图,分析包,CRC,模型,协作图,行为元素,状态图,顺序图,面向流的元素,数据流图,控制流图,处理叙述,设计模型,数据,/,类设计,体系结构设计,接口设计,构件级设计,分析模型,5,设计和质量,设计必须实现所有
4、包含在需求模型中的,明确需求,,而且必须满足利益相关者期望的所有隐含需求。,对于那些生成代码的人和那些进行测试以及随后维护软件的人而言,,设计必须是可读的、可理解的指南。,设计必须提软件的全貌,,从实现的角度说明数据域、功能域和行为域。,6,质量指导原则,设计应该展示出这样一种结构,:,(,a,)已经使用可识别的体系结构风格或模式创建;(,b,)由展示良好设计特征的构建构成;(,c,)能够以演化的方式实现。,对于更小的系统,设计有时可以线性开发。,设计应该模块化;,也就是说,应将软件逻辑地划分为元素或子系统。,设计应该包含,数据、体系结构、接口和构件的,清晰表示,。,设计应导出数据结构,,,
5、这些数据结构适用于,要实现的类,并从可识别的数据模式提取。,设计应导出显示独立功能特征的构件。,设计应导出接口,这些接口降低了,构件之间以及与外部环境连接的,复杂性,。,设计的导出应,根据软件需求分析过程中获取的信息,采用可重复的方法进行,。,应该用能够有效传达其意义的表示法来表达设计。,7,设计原则,设计过程中不要有“井蛙之见”。,设计应起源于分析模型。,设计不要白费力气做重复工作。,在软件和真实世界的问题之间,设计应能“最小化知识距离”,DAV95,。,设计应表现出一致性和集成性。,设计结构应适应变化。,即使遇到数据、事件或操作条件异常时,设计结构应能温和处理。,设计不是编码,编码不是设计
6、创建设计时就应对其质量进行评估,而不是创建之后。,评审设计以最小化概念上的(语义的)错误。,来自,Davis DAV95,8,基本概念,抽象,数据、过程、控制,体系结构,软件的整个结构,模式,已证实的解决方案的“精髓”,关注点分离,任何复杂问题如果被分解为若干块,该复杂问题更容易地被处理。,模块化,数据和功能的划分,信息隐蔽,控制接口,功能独立,专一的功能和低耦合,求精,所有抽象精化的细节,方面,一种理解全部需求如何影响设计的机制,重构,一种简化设计的重新组织的技术,面向对象设计概念,附录,II,设计类,提供设计细节,使分析类得以实现,9,数据抽象,door,实现为一个数据结构,manuf
7、acturer,model number,type,swing direction,inserts,lights,type,number,weight,opening mechanism,制造商,模块数,类型,转动方向,插入,灯,数量,类型,重量,打开机制,implemented as a data structure,10,过程抽象,open,实现为一个“知识”对象,与进门有关,进门细节,算法,details of enter,algorithm,implemented with a knowledge of the,object that is associated with enter,
8、11,体系结构,“软件的整体结构和这种结构为系统提供概念完整性的方式”,SHA95a,结构特性。,体系结构设计表示定义了系统的构件(如模块、对象、过滤器)、构件被封装的方式以及构件之间相互作用的方式。例如,对象封装了数据和过程,过程操纵数据并通过方法调用进行交互。,外部功能特性。,体系结构设计描述应当指出设计体系结构如何满足需求,这些需求包括:性能需求、能力需求、可靠性需求、安全性需求、可适应性需求以及其他系统特征需求。,相关系统族。,体系结构应当能抽取出在一类相似系统开发中经常遇到的重复性模式。本质上,设计应当能够重用体系结构构件。,12,模式,设计模式模版,模式名,以简短但富于表现力的名字
9、描述模式的本质,目的,描述模式及其做什么,也称为,列出任何模式的别名,动机,提供问题的实例,适用性,指出模式适用的具体设计解决方案,结构,描述要求实现模式的类,参与者,描述要求实现模式的类的职责,协作,描述参与者如何协作,以完成他们的职责,结构,描述了影响模式的“设计力量”和在实现模式时,必须考虑的潜在权衡,相关模式,相关设计模式的交叉索引,13,关注点分离,任何复杂问题如果被分解为可以独立解决和(或)优化的若干块,该复杂问题能够容易地被处理。,一个,关注点,是一个特征或行为,被指定为软件需求模型的一部分。,通过将关注点分割为更小的关注点,使得解决一个问题需要付出更少的工作量和时间。,C(P,
10、1,+P,2,)C(P,1,)+C(P,2,),E(P1+P,2,)E(P,1,)+E(P,2,),C,为问题的复杂度,,E,为解题需要的工作量,14,模块化,“模块化是软件的单一属性,它使程序能被智能化地管理”,Mye78,。,软件工程师难以掌握单块软件(即由一个单独模块构成的大程序),。,其控制路径的数量、引用的跨度、变量的数量和整体的复杂度使得理解这样的软件几乎是不可能的。,几乎所有的情况下,为了理解更容易,都应当将设计划分成许多模块,这样做的结果,构建软件所需要的成本将会随之降低。,15,模块化:,权衡,对特定的软件设计,什么是“正确”的模块数量?,模块的最优数量,软件成本,模块数,模
11、块集成成本,模块开发成本,What is the right number of modules,for a specific software design?,optimal number,cost of,number of modules,module,integration,cost,module development cost,software,16,模块化:,权衡,模块数,接口成本,最小成本区,M,软件开发工,作,量,总成本,模块成本,17,信息隐藏,模块,控制接口,“秘密”,算法,数据结构,外部接口信息,资源分配策略,客户,具体的设计决策,module,controlled,in
12、terface,secret,algorithm,data structure,details of external interface,resource allocation policy,clients,a specific design decision,18,为什么要信息隐藏?,减少“负效应”的可能性,限制全局影响局部的设计决策,强调通过控制接口通信,不提倡使用全局数据,导致封装,高质量设计的属性,导致高质量软件,19,功能独立,通过开发具有“专一”功能和“避免”与其他模块过多的交互的模块,可以实现功能独立。,模块的独立性有两条定性标准进行评估:,内聚性,显示了某个模块相关功能的强度
13、一个内聚的模块执行一个独立的任务,与程序的其他部分构件只需要很少的交互。简单地说,一个内聚的模块应该(理想情况下)只完成一件事情。,耦合性,显示了模块间的相互依赖性。,耦合性依赖于模块之间的接口复杂性、引用或进入模块所在的点以及什么数据通过接口进行传递。,模块的独立性高,块内联系强,块间联系弱,20,内聚,弱 强,低内聚中内聚高内聚,21,七种内聚,偶然内聚,模块内各元素间无实质性联系,功能无关;,如:“读,A”,和“写,B”,等操作,就是被整合在一个模块中,供其他模块调用。,逻辑内聚,模块内各元素在逻辑上相似功能;,如:两个逻辑上相似的两个功能放在同一个模块中,可以省去其中重复的部分。,
14、时间内聚,模块内各元素在同一时间段内执行;,如:变量初始化等,在同一时间内执行,22,七种内聚,过程内聚,模块内元素必须以特定次序执行;,通信内聚,模块内所有元素使用同一输入,产生同一输出;,顺序内聚,模块内元素必须以特定次序执行,前者输出为后者输入;,功能内聚,模块内元素组成不可分的整体,完成特定功能。,23,七种耦合,非直接耦合,两模块间没有直接联系,数据耦合,通过数据参数访问另一模块,特征耦合,通过数据结构传递记录信息,控制耦合,通过控制参数或开关量来访问另一模块,外部耦合,一组模块访问同一全局简单变量,公共耦合,一组模块访问同一公共数据结构,内容耦合,一个模块直接转入另一模块内,24,
15、逐步求精,开门,走向门,伸向把手,打开门;,走进门,关门,一直重复直至门打开,顺时针转动把手;,If,把手不能转动,拿出钥匙;,找到正确的钥匙;,插进锁孔;,endif,推,/,拉门,移动脚步,end,重复,turn knob clockwise;,find correct key;,endif,pull/push door,move out of way;,end repeat,repeat until door opens,if knob doesnt turn,then,insert in lock;,take key out;,open,walk to door;,reach for
16、knob;,walk through;,close door.,open door;,25,测量模型:两种视角,里面是什么?,它多大?,模块,26,方面,考虑两个需求,,A,和,B,。“如果已经选择了一种软件分解,精化,,在这种分解中,如果不考虑需求,A,的话,需求,B,就不能得到满足”,Ros04,,那么需求,A,横切需求,B,。,方面,是一个横切关注点的表示。,27,方面,举例,考虑,SafeHomeA,网站应用中的两个需求。通过用例,Access camera surveillance via the Internet,描述需求,A,,设计求精将集中于那些能够使注册用户通过放置在空间中的
17、相机访问视频的规模。需求,B,是一个通过的安全需求,要求注册用户在使用,SafeHomeA,之前必须先进行验证,改需求用于,Safehome,注册用户可使用的所有功能中。当设计求精开始的时候,,A*,是需求,A,的一个设计表示,,B,*,是需求,B,的一个设计表示。因此,,A*,和,B*,是关注点的表示,且,B*,横切,A*,。,方面是一个横切关注点的表示,因此,需求“注册用户在使用,SafehomeA,之前必须先进行验证”的设计表示,B*,是,Safehome,网站应用的一个方面。,28,重构,Fowler FOW99,用下面的方式定义重构:,“重构是使用这样一种方式改变软件系统的过程:不改
18、变代码,设计,的外部行为而是改进其内部结构。,”,当重构软件时,检查现有设计:,冗余性,没有使用的设计元素,低效的或不必要的算法,拙劣的或不恰当的数据结构,其他设计不足,修改这些不足以获取更好的设计。,29,OO,设计概念,设计类,实体类,边界类,控制类,继承,超类的所有特点立即被所有子类继承。,消息,刺激接收对象产生某种行为,多态,一种可以显著减少扩展已存在的设计的特性,30,设计类,在设计时,分析类被精化变为,实体类,边界类,是在设计中创建接口被开发的(例如:交互式屏幕或打印报表),用户看到并与使用的软件交互。,边界类的设计,其职责管理将实体对象呈现给用户的方式。,控制类,被设计用来管理,
19、实体对象的创建和更新;,边界对象的实例化,因为它们获得来自实体对象的信息;,对象集之间的复杂通信;,验证对象之间或用户,与,应用程序之间的数据,通信,。,31,设计模型,类图,分析包,CRC,模型,协作图,数据流图,控制流图,处理过程描述,分析模型,高,抽象维度,设计模型,低,系统结构元素,接口元素,构件级元素,部署级元素,部署图,需求,约束,交互操作,目标和配置,设计类实现,子系统,协作图,构件图,设计类,活动图,顺序图,类图,分析包,CRC,模型,协作图,数据流图,控制流图,处理过程描述,状态图,顺序图,用例,文本,用例图,活动图,泳道图,协作图,状态图,顺序图,过程维度,求精:,构件图,
20、设计类,活动图,顺序图,构件图,设计类,活动图,顺序图,技术接口设计,导航设计,图形用户界面设计,求精:,设计类的实现,子系统,协作图,设计类实现,子系统,协作图,32,设计模型元素,数据元素,数据模型,-,数据结构,数据模型,-,数据库体系结构,体系结构元素,应用领域,分析类、它们的关系、协作和行为被转换设计实现,模式和“风格”,(,第,9,章和第,12,章,),接口元素,用户界面,(UI),与其他系统的外部接口、设备、网络或其他生产者或信息使用者,不同设计构件间的内部接口,构件元素,部署元素,33,体系结构元素,体系结构模型,Sha96,从以下,3,个来源获得:,关于,将要构件的软件的,应用领域信息,;,特定的需求模型元素,,如数据流图或分析类,现有问题中它们的关系和协作;,体系结构模式,(第,9,章),和风格,(第,12,章),的可获得性。,34,接口元素,35,构件元素,36,部署元素,CPI,服务器,户主访问,安全,控制面板,个人计算机,外部访问,安全,监视,住宅管理,通信,






