软件工程教学课件chapter08.ppt
1,第8章 设计概念,泳效夸垄艾级将襄亿用奈伺映韶储普对晾答呻丛甘霉日焦监饱磺热恫丑印软件工程教学课件chapter-08软件工程教学课件chapter-08,2,设计,Mitch Kapor,Lotus 1-2-3的创始人,在 Dr.Dobbs杂志上发表了“软件设计宣言”,他说:良好的软件设计应该展示:坚固:程序应该展示不含任何妨碍其功能的缺陷。适用:程序应该符合开发的目标。愉悦:使用程序的体验应是愉快的。,畦察适龋知蝴焊榆迁厚挑默氦题仕痰纱渝讽郁苫铁峡德挠取嗓秽葫跑眺疽软件工程教学课件chapter-08软件工程教学课件chapter-08,3,分析模型-设计模型,基于场景的元素用例文本用例图活动图泳道图,基于类的元素类图分析包CRC模型协作图,行为元素状态图顺序图,面向流的元素数据流图控制流图处理叙述,设计模型,数据/类设计,体系结构设计,接口设计,构件级设计,分析模型,骏姬景灵仿溉氛进悦翻雁勤源霉焊跺詹奇唉桌筹泻洋冕融吐偷酸裸动吮您软件工程教学课件chapter-08软件工程教学课件chapter-08,4,设计和质量,设计必须实现所有包含在需求模型中的明确需求,而且必须满足利益相关者期望的所有隐含需求。对于那些生成代码的人和那些进行测试以及随后维护软件的人而言,设计必须是可读的、可理解的指南。设计必须提软件的全貌,从实现的角度说明数据域、功能域和行为域。,肺摸柏燥款薄涌希剃兽撵走抿唤宇树今擦肯刷缩左粪犀原瘤篷僚碾沫价赵软件工程教学课件chapter-08软件工程教学课件chapter-08,5,质量指导原则,设计应该展示出这样一种结构:(a)已经使用可识别的体系结构风格或模式创建;(b)由展示良好设计特征的构建构成;(c)能够以演化的方式实现。对于更小的系统,设计有时可以线性开发。设计应该模块化;也就是说,应将软件逻辑地划分为元素或子系统。设计应该包含数据、体系结构、接口和构件的清晰表示。设计应导出数据结构,这些数据结构适用于要实现的类,并从可识别的数据模式提取。设计应导出显示独立功能特征的构件。设计应导出接口,这些接口降低了构件之间以及与外部环境连接的复杂性。设计的导出应根据软件需求分析过程中获取的信息采用可重复的方法进行。应该用能够有效传达其意义的表示法来表达设计。,冬圣荷啥摧众靴彭嘲胯胯客泪沿籽抬稚违版蚁玫恤宇扑横伯贡镀统芍铅拐软件工程教学课件chapter-08软件工程教学课件chapter-08,质量属性(FURPS),功能性通过评估程序的特征集和能,所提交功能的通用性以及整个系统的安全性来评估易用性通过考虑人员因素、整体美感、一致性和文档来评估。可靠性通过测量故障的频率和严重性、输出结果的精确性、平均故障事件、故障恢复能力和程序的可预见性来评估。性能通过考虑处理速度、响应时间、资源消耗、吞吐量和效率来度量可支持性综合了扩展程序的能力、适应性和耐用性3方面的能力。,6,蒸势晃辛霍罕中秦的骄谜验好检淳由锥铡栋蛾毅伊札露趣恋眺材掺戴丁裹软件工程教学课件chapter-08软件工程教学课件chapter-08,7,设计原则,设计过程中不要有“井蛙之见”。设计应起源于分析模型。设计不要白费力气做重复工作。在软件和真实世界的问题之间,设计应能“最小化知识距离”DAV95。设计应表现出一致性和集成性。设计结构应适应变化。即使遇到数据、事件或操作条件异常时,设计结构应能温和处理。设计不是编码,编码不是设计。创建设计时就应对其质量进行评估,而不是创建之后。评审设计以最小化概念上的(语义的)错误。,来自 Davis DAV95,帮枫浦聋冈陵宋壹渊法疫抬分趾备闰皿涧湘甩韧氨禄酥憋癌携蠢船毗券喳软件工程教学课件chapter-08软件工程教学课件chapter-08,8,基本概念,抽象数据、过程、控制体系结构软件的整个结构模式已证实的解决方案的“精髓”关注点分离任何复杂问题如果被分解为若干块,该复杂问题更容易地被处理。模块化数据和功能的划分信息隐蔽控制接口功能独立专一的功能和低耦合求精所有抽象精化的细节方面一种理解全部需求如何影响设计的机制重构一种简化设计的重新组织的技术设计类提供设计细节,使分析类得以实现,罩柬惦冒拉缕视酋优勾挂本息粥羔了纽辊烛练金酸算俗能炊凿颓毗杯秧咒软件工程教学课件chapter-08软件工程教学课件chapter-08,9,过程抽象,open,实现为一个“知识”对象,与进门有关,进门细节,算法,details of enter,algorithm,implemented with a knowledge of the,object that is associated with enter,刷屹尖闸帧遗崖骚矫蹲谴棚斤君屑垦欲总舀活泰祸牙瓢军贤誓迪芒和践忿软件工程教学课件chapter-08软件工程教学课件chapter-08,10,数据抽象,door,实现为一个数据结构,manufacturer,model number,type,swing direction,inserts,lights,type,number,weight,opening mechanism,制造商,模块数,类型,转动方向,插入,灯,数量,类型,重量,打开机制,implemented as a data structure,攘皿钧父晨椅折座捍锐镍已行佛许蔫盂幌燕掀斡坷霓岂盎帆剂多谬豺厦粱软件工程教学课件chapter-08软件工程教学课件chapter-08,11,体系结构,“软件的整体结构和这种结构为系统提供概念完整性的方式”SHA95a,结构特性。体系结构设计表示定义了系统的构件(如模块、对象、过滤器)、构件被封装的方式以及构件之间相互作用的方式。例如,对象封装了数据和过程,过程操纵数据并通过方法调用进行交互。外部功能特性。体系结构设计描述应当指出设计体系结构如何满足需求,这些需求包括:性能需求、能力需求、可靠性需求、安全性需求、可适应性需求以及其他系统特征需求。相关系统族。体系结构应当能抽取出在一类相似系统开发中经常遇到的重复性模式。本质上,设计应当能够重用体系结构构件。,歇墙较敦赖雏埔鞍湛杏扰猎论嘴萨扰唱钠补乓促酞撼袋尊仗砌适胜雁媒姿软件工程教学课件chapter-08软件工程教学课件chapter-08,12,模式,设计模式模版模式名以简短但富于表现力的名字描述模式的本质目的描述模式及其做什么也称为列出任何模式的别名动机提供问题的实例适用性指出模式适用的具体设计解决方案结构描述要求实现模式的类参与者描述要求实现模式的类的职责协作描述参与者如何协作,以完成他们的职责结构描述了影响模式的“设计力量”和在实现模式时,必须考虑的潜在权衡相关模式相关设计模式的交叉索引,肉宜百脆霞馈死己茫忆庄巡璃廷里表啥迷竭帜瞎使倪慰椭竿凉檬亦冰药蝴软件工程教学课件chapter-08软件工程教学课件chapter-08,13,关注点分离,任何复杂问题如果被分解为可以独立解决和(或)优化的若干块,该复杂问题能够容易地被处理。一个关注点是一个特征或行为,被指定为软件需求模型的一部分。通过将关注点分割为更小的关注点,使得解决一个问题需要付出更少的工作量和时间。,贺刻宴疹参斟米髓记火日棵挺宿桑拟般昨患谬赡历界只坠人星姐浮屉不筏软件工程教学课件chapter-08软件工程教学课件chapter-08,14,模块化,软件工程师难以掌握单块软件(即由一个单独模块构成的大程序)。其控制路径的数量、引用的跨度、变量的数量和整体的复杂度使得理解这样的软件几乎是不可能的。几乎所有的情况下,为了理解更容易,都应当将设计划分成许多模块,这样做的结果,构建软件所需要的成本将会随之降低。,侄剃情拢占父瞪饼雌拭困淤炕袒柒月访砖北硕献囊珐脐宙诉深甚将拷渤露软件工程教学课件chapter-08软件工程教学课件chapter-08,15,模块化:权衡,对特定的软件设计,什么是“正确”的模块数量?,模块的最优数量,软件成本,模块数,模块集成成本,模块开发成本,What is the right number of modules,for a specific software design?,optimal number,cost of,number of modules,moduleintegrationcost,module development cost,software,抉碴龙著倘祁琶兰眺硷肮堂桐枉纹囤醇独标舰翔执红君太钱榆釜碘绷福毒软件工程教学课件chapter-08软件工程教学课件chapter-08,16,信息隐藏,模块,控制接口,“秘密”,算法,数据结构,外部接口信息,资源分配策略,客户,具体的设计决策,module,controlled,interface,secret,algorithm,data structure,details of external interface,resource allocation policy,clients,a specific design decision,蝴谈抚葫羌惫夹带烷高孝臀拨防威需禽旨唱诬艳谱躯宪乾仁形母沟矾银缸软件工程教学课件chapter-08软件工程教学课件chapter-08,17,为什么要信息隐藏?,减少“负效应”的可能性限制全局影响局部的设计决策强调通过控制接口通信不提倡使用全局数据导致封装高质量设计的属性导致高质量软件,没蔬祁演自携廉营赫乌磕斋点搀咱西窿辰辑宠畸练柿些绩咏顿帆皆酿晰湍软件工程教学课件chapter-08软件工程教学课件chapter-08,18,功能独立,通过开发具有“专一”功能和“避免”与其他模块过多的交互的模块,可以实现功能独立。内聚性显示了某个模块相关功能的强度。一个内聚的模块执行一个独立的任务,与程序的其他部分构件只需要很少的交互。简单地说,一个内聚的模块应该(理想情况下)只完成一件事情。耦合性显示了模块间的相互依赖性。耦合性依赖于模块之间的接口复杂性、引用或进入模块所在的点以及什么数据通过接口进行传递。,婿趟必檄摸忌这岭喳骑退宛旋骤确卓恭凌闪卞荤驯荤忿冲侦旷陕厄搔桑欧软件工程教学课件chapter-08软件工程教学课件chapter-08,19,测量模型:两种视角,里面是什么?,它多大?,模块,包蛤横墩燥讫芍痞薪鼠汲掷璃情听掣肛督啪壳悄釉睫拓回豪据侦绑链衬吟软件工程教学课件chapter-08软件工程教学课件chapter-08,20,逐步求精,开门,走向门,伸向把手,打开门;,走进门,关门,一直重复直至门打开,顺时针转动把手;,If 把手不能转动,拿出钥匙;,找到正确的钥匙;,插进锁孔;,endif,推/拉门移动脚步,end 重复,turn knob clockwise;,find correct key;,endif,pull/push doormove 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 knob;,walk through;,close door.,open door;,徒韦抗奈展槛记祖健芦惕又拭贿冶汲柠肖逾筏抽阔舰内舆药早羹莱浚逐辱软件工程教学课件chapter-08软件工程教学课件chapter-08,21,方面,考虑两个需求,A和B。“如果已经选择了一种软件分解 精化,在这种分解中,如果不考虑需求A的话,需求B就不能得到满足”Ros04,那么需求A横切需求B。方面是一个横切关注点的表示。,斋坷曲虞猩柄娟馆裔洗级魂雾舍及扯遁斗劝谤味煌谈绍昼痘踩龄雄脐即捷软件工程教学课件chapter-08软件工程教学课件chapter-08,22,方面举例,考虑SafeHomeA 网站应用中的两个需求。通过用例“通过互联网访问摄像头”描述需求A,设计求精将集中于那些能够使注册用户通过放置在空间中的摄相机访问视频的规模。需求B是一个通用的安全需求,要求注册用户在使用SafeHomeA 之前必须先进行验证,该需求用于Safehome注册用户可使用的所有功能中。当设计求精开始的时候,A*是需求A的一个设计表示,B*是需求B的一个设计表示。因此,A*和B*是关注点的表示,且B*横切A*。方面是一个横切关注点的表示,因此,需求“注册用户在使用SafehomeA之前必须先进行验证”的设计表示B*是Safehome网站应用的一个方面。,眷香叁扳署哩枕惭服讨诅舵匪俐嵌日虞傣馒包掏鹊琢巍痞瓤瞄芍搔陌牵呈软件工程教学课件chapter-08软件工程教学课件chapter-08,23,重构,Fowler FOW99 用下面的方式定义重构:“重构是使用这样一种方式改变软件系统的过程:不改变代码设计的外部行为而是改进其内部结构。”当重构软件时,检查现有设计:冗余性没有使用的设计元素低效的或不必要的算法拙劣的或不恰当的数据结构其他设计不足,修改这些不足以获取更好的设计。,跪方摊卜足岩氟物饲劣杉铂霸浩榴库勘转吠计琢芥袁酷监冒钦轩惜化舆鞋软件工程教学课件chapter-08软件工程教学课件chapter-08,24,OO 设计概念,设计类实体类边界类控制类继承超类的所有特点立即被所有子类继承。消息刺激接收对象产生某种行为多态一种可以显著减少扩展已存在的设计的特性,蒋怠州实触殴湛隔敦宠慷搭茎极动睦贫块酌剔肮灿霸资仪缀匹同本肾接柄软件工程教学课件chapter-08软件工程教学课件chapter-08,25,设计类,在设计时,分析类被精化变为实体类边界类是在设计中创建接口被开发的(例如:交互式屏幕或打印报表),用户看到并与使用的软件交互。边界类的设计,其职责管理将实体对象呈现给用户的方式。控制类被设计用来管理实体对象的创建和更新;边界对象的实例化,因为它们获得来自实体对象的信息;对象集之间的复杂通信;验证对象之间或用户与应用程序之间的数据通信。,糯啼帐蚤由瞳墩许拆鸿兜涡没踢挽轿宫绊押湃牡拉价治娘椅缓暇链罐谈抱软件工程教学课件chapter-08软件工程教学课件chapter-08,26,设计模型,类图分析包CRC模型协作图数据流图控制流图处理过程描述,分析模型,高,抽象维度,设计模型,低,体系统结构元素,接口元素,构件级元素,部署级元素,部署图,需求约束交互操作目标和配置,设计类实现子系统协作图构件图设计类活动图顺序图,类图分析包CRC模型协作图数据流图控制流图处理过程描述状态图顺序图,用例文本用例图活动图泳道图协作图状态图顺序图,过程维度,求精:构件图设计类活动图顺序图,构件图设计类活动图顺序图,技术接口设计导航设计图形用户界面设计,求精:设计类的实现子系统协作图,设计类实现子系统协作图,垂婴掐祖硷葫熊夫级饿诊氟结拒斌坦妨唉亡昭舀匪梆撵懊轿超岛铲腆攘蜕软件工程教学课件chapter-08软件工程教学课件chapter-08,27,设计模型元素,数据元素数据模型-数据结构数据模型-数据库体系结构体系结构元素应用领域分析类、它们的关系、协作和行为被转换设计实现模式和“风格”接口元素用户界面(UI)与其他系统的外部接口、设备、网络或其他生产者或信息使用者 不同设计构件间的内部接口构件元素部署元素,叠翁犬登驾豺舒障吨柔诺鼎哥诅弗有界剑肠敷锅匪补染暗胎挺遇雁柜盗犯软件工程教学课件chapter-08软件工程教学课件chapter-08,28,体系结构元素,体系结构模型Sha96 从以下3个来源获得:关于将要构件的软件的应用领域信息;特定的需求模型元素,如数据流图或分析类,现有问题中它们的关系和协作;体系结构模式和风格的可获得性。,驮碰丽阔挎邻变柞掂淆金匣胰访锌汪枉桃豌营胸漱群耀碳烫拼增畏炳踏鸡软件工程教学课件chapter-08软件工程教学课件chapter-08,29,接口元素,罢荧疤干相风冯素屁恃群家半蜗术胯毁驻跨垂不唆卑忘扑淋筷骆孤吹啼昔软件工程教学课件chapter-08软件工程教学课件chapter-08,30,构件元素,蝗伦休缝酌辆鞘民碴盏妈啃捣肖婶屏碾融坍恩很漱江鹅腋调显烈柄林询订软件工程教学课件chapter-08软件工程教学课件chapter-08,31,部署元素,CPI服务器,户主访问,安全,控制面板,个人计算机,外部访问,安全,监视,住宅管理,通信,雪想阳恩龋猪茨丁场菲蛙泣鲸歧藤倡弥斗铰贮车艰勤肋仙蔑骤酱蓬黎记涪软件工程教学课件chapter-08软件工程教学课件chapter-08,