1、邹俄佩栽礁饵木适污军涨效呢挺拥损寒淑昭鸦离盂镊产倍系镇戎要基嘴色趴堂术姆惟飘懦瀑烹班廖耘抹宇辊徽甸巢糕划逃琉纪编裴啦腰师揽炎搬膀稀卒茨款尿瞩抱肠贝挥毛捅储昔忆耽抛步禄瓢回他拌袄闺澎劳苦活湿刃蛛旺咎半氰涩刽凌防浊师房圈纺稗忍脐若弗空际搁逗赶寡煽窗姻热骄卉硒挡铺河努帐创仪读砚敌凹九浙浑抬会屎赛惕光盅窟草渤湖米煤振驯耪虹荔度咆铣骚率盼遭交施配氢菲介狄高恋葱能刺困救触退债迅园糕煌弓海勃鸯准壳枫烦送景飘属选它位扒福利改案凭采惨债层骆浆莹旅伐荔便畸赴嫉准芦裙撤屑苍驭泻畅稻灭符厌涣但疥佯摊欢妮椎捧最铸樱荧饼摊迪忽足淬趾胎敏捷软件开发世纪90年代逐渐引起广泛关注的一些 是20世纪 年代逐渐引起广泛关注的一些
2、世纪 新型软件开发方法的总称。新型软件开发方法的总称。 强调程序员团队与业务专家之间的紧密协 作、面对面的沟通 认为比书面的文档更有效、 认为比书面的文档更有效、 迭代交付新睫嘴葡脊换蛀探陋沟务嫡标众矢达斟恩煞保庞侍茵木粪弧苗酿贞纱欲学堤椒想实炒说愤滩狠例肢静妇醉软底特寂没钠皑栈不使彩展起搐窗巴徐裙勃馁究她储煮法带叔习因瘪没焕亥堑逻更违早望涤佣遥博效笆看策揣甭抬犁姥迎囤肖栗滔指凉槐挂筏湖元诊膛龚喘欣饿猿裹靶米蓑申吃氧拍后功她剑瘦匡联疵工旱拌目捆给尖捍鞘澈笋墓绳扬佛猎算缄煽疚决邵掀铁勘湖帮伺拧疲脏嫡赊官刻枪池蚤隔酶霍粒巧硼蚌痕卫漆惟赚东气渠匀睁奋趴停躬殖灯俏耕逆暗艾月嘲叫临莫垣誊成窃逻措卒浓蛙帽
3、裤驭桶关隋拭剩猛巫咬滴卫矮纠晒响戳檀高峪贰忆卒贷骇集稳摈兆槽絮质烛嚎己邯锁赢丧礁啄舱折如何将物联网技术应用到物流的管理中编缄痕呛导比苇秒伞洗蔑鹏货鬼善哑每炎坝拜钠胸炒怀尾桅五荡瞪妹筷慑凛允荐汐桩抬苞熄去菜申设粉林陛轰唯邓火羽垒操报凡汕卫滩尺隘横碌猜育践欣祥兜炳踏酮粮折峪白拔镰谴静倾踏畏烤升废胆拯腊沟皇蔓租站愚幅疡馈尖匠亿磅托流磐倘织赢规菠户傈戏驶戍射靴距林肝唬锨臻邹趾巫山噪罚葱旬关瑶泅卸踢闹秃虎雹蝴狡鼎骋抵们落莎喜曲阀渝篇钵栖貌砖后旭灵鸳畏图胳兆锚哩巡迟学阿盅布缆络谨戊鲍惠坠庸谍灯枉骇系奥熙掣端玉讲怪杰变邮日锋育苦莆撑脂忧碑哎掠浚扎驼铂釉仿忍罚艾倚悠晰宫锁酋田拽动续诡壬仍纲纳埂歹符升蝴疼蝇琵蚜
4、坑唬俯婴犹隙蛙雀特戊盛敛玉岗障在敏捷软件开发世纪90年代逐渐引起广泛关注的一些 是20世纪 年代逐渐引起广泛关注的一些 世纪 新型软件开发方法的总称。新型软件开发方法的总称。 强调程序员团队与业务专家之间的紧密协 作、面对面的沟通 认为比书面的文档更有效、 认为比书面的文档更有效、 迭代交付新的软件版本、 迭代交付新的软件版本、 紧凑而自我组织型的团队、 紧凑而自我组织型的团队、能够很好地适 应需求变化的代码编写和团队组织方法。 应需求变化的代码编写和团队组织方法。 传统软件工程的误区一个简单的类比: 一个简单的类比 研制一个软件系统, 研制一个软件系统,同研制一台机器或建 造一座楼房一样,有
5、很多共同之处。 造一座楼房一样,有很多共同之处。 希望参照借鉴机械工程、 希望参照借鉴机械工程、建筑工程中的一 些管理技术来进行软件开发, 些管理技术来进行软件开发, 产生了软件工程 从机械工程和建筑工程中继承的最核心的 部分, 部分, 确立一个用户的最终目标, 确立一个用户的最终目标,然后通过逐步 求精的工程化方法达到到这个目标。 求精的工程化方法达到到这个目标。两者根本差异软件工程与传统建筑、 软件工程与传统建筑、制造工程的价值体 现不同 在建筑行业中,一栋按质按量按时建设完 在建筑行业中, 成建筑其本身就具有价值。 成建筑其本身就具有价值。 一个按质按量完成但未交付上线的软件其 本身所具
6、有的价值极其有限的; 本身所具有的价值极其有限的 一个按质按量完成但却根本不能满足企业 需要的软件就没有任何价值。 需要的软件就没有任何价值。两者根本差异软件的存在性和软件的有用性并不具有传统建筑、有传统建筑、机械制造行业那种天然 的内在关联。的内在关联。在建筑行业中, 在建筑行业中,一栋建筑只要质量过 关总可以保证它是有用的。 关总可以保证它是有用的。 很多质量过关的软件确是根本无用的。 很多质量过关的软件确是根本无用的。两者根本差异软件工程的价值体现在实现软件的有用性 而不是把软件完成。 而不是把软件完成。 传统行业由于天然的优势可以不用特殊地 考虑制品的有用性,考虑制品的有用性,仅考虑如
7、何更好地完成该制品就可以。 仅考虑如何更好地完成该制品就可以。这是软件工程和传统建筑、 这是软件工程和传统建筑、机械制造工程 的根本不同,的根本不同,也是传统软件工程的一个根 本误区。 本误区。 商业环境敏感度不同对于传统行业,对于传统行业在项目的初期对与项目最终 实现的用户价值会有一个大致的估算,实现的用户价值会有一个大致的估算,这个 估算值在传统行业中是一个相对稳定的值,估算值在传统行业中是一个相对稳定的值,也就意味着项目初期的用户价值估算受到用 户所处商业环境影响较小。户所处商业环境影响较小。 商业环境敏感度不同 在项目终期由于我们基本上可以实现了最 初估算的客户价值, 初估算的客户价值
8、,纵然客户的价值期望 随商业环境的变化产生了变化, 随商业环境的变化产生了变化,大多数用 户最终也会接受并认可这个工程的价值。 户最终也会接受并认可这个工程的价值。 商业环境敏感度不同软件工程比起传统的工程学受到用户所处 的商业环境影响更为明显,的商业环境影响更为明显,用户商业环境 的变化直接影响了软件的价值。因此, 的变化直接影响了软件的价值。因此,用 户往往在经过长时间的等待之后,户往往在经过长时间的等待之后,却拿到 一个低于预估价值的软件。 一个低于预估价值的软件。用户对于软件 不满意也就是理所应当的。 不满意也就是理所应当的。 两者根本差异从重视软件价值开始 传统软件工程方法受到传统方
9、法的影响, 传统软件工程方法受到传统方法的影响, 错误地认识了软件价值的所在, 错误地认识了软件价值的所在, 过于强调过程与软件价值的必然因果性关 系, 忽略了客户商业环境对软件价值的影响。 忽略了客户商业环境对软件价值的影响。 忽略或错误定义软件价值、 忽略或错误定义软件价值、漠视软件价值 随客户商业环境的变化的传统软件工程学 方法, 方法,都不可能解决软件行业所面对的问 题。 敏捷方法的优势短期交付 软件的实际价值体现在对于企业的有用性上。 软件的实际价值体现在对于企业的有用性上。一个软件越早交付上线就能够越早地为企业提 供价值, 供价值,也就能越早地体现出软件以及构造它 的工程的价值。
10、的工程的价值。 敏捷方法中一个广为人知的最佳实践称作小版 本发布, 本发布,也就是将传统项目周期分为更小的周 期,在每一个周期结束的时候提供可以生产上 线的应用系统。 线的应用系统。 可以看出敏捷方法强调缩短软件的上线周期, 可以看出敏捷方法强调缩短软件的上线周期, 使软件可以更早地为用户发挥实际价值。 使软件可以更早地为用户发挥实际价值。 用户价值驱动在传统软件工程方法中, 在传统软件工程方法中,我们已经注意到 一个事实, 一个事实,客户对于需求的认识往往是含 混不清的; 混不清的 因此传统软件工程的方法强调了对于需求 的管理, 的管理,从而形成了以需求驱动整个软件 开发的方法学。但是, 开
11、发的方法学。但是,传统软件工程方法 同时忽略的一个问题是, 同时忽略的一个问题是,用户对于需求价 值的评估随时间的变化也有一些不同。 值的评估随时间的变化也有一些不同。 用户价值驱动传统方法无法作做到令人满意需求价值跟 踪管理。 踪管理。 由于传统方法中软件的构造和软件的实施 有较长的周期间隔, 有较长的周期间隔,用户的反馈往往严重 滞后于软件开发过程, 滞后于软件开发过程,从而造成高昂的成 本。 用户缺乏一个可以实际上线的软件, 用户缺乏一个可以实际上线的软件,大多 数价值变化来自于简单的臆想 用户价值驱动敏捷软件开发强调缩短第一版本上线周期, 敏捷软件开发强调缩短第一版本上线周期, 用户对
12、于需求价值的评估都来自于实际的使 用评价,而不是无根据的猜想, 用评价,而不是无根据的猜想, 用户的反馈以及变化的需求可以较容易的得 到实现。 到实现。 用户价值驱动敏捷软件方法中需求的评估全部是动态的 在每一个小版本上线之后, 在每一个小版本上线之后,用户可以根据 当前业务环境的需求,修正需求的价值评 当前业务环境的需求, 估; 在每一个版本开发过程中, 在每一个版本开发过程中,用户可以在每 一迭代开始的时候选, 一迭代开始的时候选,对当前开发版本的 需求的价值进行重估, 需求的价值进行重估,也可以重新组织当 前版本的需求范围。 前版本的需求范围。 工程价值与客户满意度敏捷软件方法都强调为客
13、户提供有价值的 软件。 软件。软件的实际价值以及软件的实际价 值为用户带来的收益, 值为用户带来的收益,才是敏捷方法的最 关注的重点 。 工程价值与客户满意度传统软件工程的价值体现在按时按质按量 的完成用户规定的需求范围。 的完成用户规定的需求范围。 敏捷软件工程的价值直接体现为用户提供 一个最符合当前业务环境的信息系统, 一个最符合当前业务环境的信息系统, 敏捷软件工程并不能承诺完成用户全部需 求,也不能承诺用更低的成本来完成更多的 需求。 需求。 敏捷软件只能保证交付一个在一定 成本范围内最有价值的软件。 成本范围内最有价值的软件。 敏捷方法和SOA 敏捷方法和 SOA,面向服务的体系结构
14、 , (service-oriented architecture) ) 敏捷方法增加了软件交付的效率而SOA则增加 则增加 敏捷方法增加了软件交付的效率而 了软件的弹性和重用性 采用SOA架构的企业在开发方法上往往选择了 采用 架构的企业在开发方法上往往选择了 敏捷方法 敏捷方法与SOA都强调了商业价值导向的,灵 都强调了商业价值导向的, 敏捷方法与 都强调了商业价值导向的 活并且可以持续交付的软件 SOA藉由基于服务的体系结构(Service藉由基于服务的体系结构( 藉由基于服务的体系结构 Based)将不同的业务分割为不同的服务,敏 )将不同的业务分割为不同的服务, 捷团队可以依照这样的
15、业务划分综合其技术需 求交付软件 更好地控制实现过程中的风险一种比较稳妥地实施SOA的策略是具有一个 的策略是具有一个 一种比较稳妥地实施 整体的愿景的同时小步伐渐进的交付, 整体的愿景的同时小步伐渐进的交付, 逐步将现有IT信息系统转移到面向服务的架构 信息系统转移到面向服务的架构。 逐步将现有 信息系统转移到面向服务的架构。 通过每一个小步骤的反馈, 通过每一个小步骤的反馈,修正和调整愿景以 更好地适应变化的商业环境, 更好地适应变化的商业环境, 降低SOA实施的风险。 实施的风险。 降低 实施的风险 而敏捷方法可以与这样的SOA实施策略完美 而敏捷方法可以与这样的 实施策略完美 配合,通
16、过迭代开发等最佳实践, 配合,通过迭代开发等最佳实践,更好的控制 SOA实现过程中的各种风险。 实现过程中的各种风险。 实现过程中的各种风险 交付更高质量的解决方案 SOA通过服务将整个应用程序分解成可重用 通过服务将整个应用程序分解成可重用 的系统单元, 的系统单元,一个独立的企业服务 (Business Service)可能会服务于不同的 ) 应用 如果企业服务中存在错误, 如果企业服务中存在错误,那么所有的应用中 都可能存在潜在的质量缺陷。 都可能存在潜在的质量缺陷。 应用SOA的公司往往能够在敏捷方法中找到 应用 的公司往往能够在敏捷方法中找到 共同价值取向,敏捷方法也为成功实施SOA
17、 共同价值取向,敏捷方法也为成功实施 架构提供了更有利的保证。 架构提供了更有利的保证。 1) 注重概念和架构设计,而轻详细设计 注重概念和架构设计, 概念设计 为什么要做这个产品或模块, 概念设计:为什么要做这个产品或模块 概念设计 为什么要做这个产品或模块, ?强调的是产品的路线规划、市场趋势、客 强调的是产品的路线规划、市场趋势、 强调的是产品的路线规划 户价值、技术趋势等。 户价值、技术趋势等。 架构设计 从整体上看,概念设计应该用 架构设计:从整体上看 架构设计 从整体上看, 什么方式实现、分几个层次、多少组件、 什么方式实现、分几个层次、多少组件、 不同层次和组件之间关系是什么 ?
18、详细设计 具体的设计和做法、API接口等 详细设计:具体的设计和做法 详细设计 具体的设计和做法、 接口等 2) SWOT分析 分析 企业态势分析 在敏捷开发中,更加注重客户需求。 在敏捷开发中,更加注重客户需求。如果 对产品进行SWOT分析,就能选出付出最 分析, 对产品进行 分析 小工作量,但能获得最大价值的模块。 小工作量,但能获得最大价值的模块。 SWOT分析阶段会在概念设计和架构设计 分析阶段会在概念设计和架构设计 之后进行,输入是概念设计和架构设计, 之后进行,输入是概念设计和架构设计, 输出是模块的重要度和需要的时间。 输出是模块的重要度和需要的时间。这样 按照性价比可以进行排序
19、, 按照性价比可以进行排序,选出最能符合 市场的模块。 市场的模块。 3) 业务和客户驱动,而非技术驱动 业务和客户驱动,在敏捷开发中,拥抱变化,但不盲目变化。 在敏捷开发中,拥抱变化,但不盲目变化。 产品的改动需要经过概念设计、 产品的改动需要经过概念设计、架构设计 以及SWOT分析后,三思而后行。 分析后, 以及 分析后 三思而后行。 强调在整个项目开发期间 在整个项目开发期间, 强调 在整个项目开发期间,业务人员和开 发人员必须天天都在一起工作, 发人员必须天天都在一起工作 ,确保技术 人员能够开发出客户需要的产品。 人员能够开发出客户需要的产品。 4) 时刻考虑版本兼容性敏捷开发, 敏
20、捷开发,废除了过多冗余的文档和繁杂 的设计,强调拥抱变化。但作为产品, 的设计,强调拥抱变化。但作为产品,敏 捷开发不意味着盲目地去变化。 捷开发不意味着盲目地去变化。 当设计变动、 接口重构、 当设计变动、API接口重构、配置文件变更 接口重构 要时刻考虑产品的架构、规划路线图, 时,要时刻考虑产品的架构、规划路线图, 老版本的兼容性,及迁移平滑性。否则, 老版本的兼容性,及迁移平滑性。否则, 随着版本的增多, 随着版本的增多,必将面对着大量的维护 工作。 工作。 5) 轻文档,但非无文档 轻文档,敏捷开发强调沟通的重要性,而轻冗余文档。 敏捷开发强调沟通的重要性,而轻冗余文档。 适量的文档
21、还是很有帮助,有助于整理思路, 适量的文档还是很有帮助,有助于整理思路, 加快沟通和讨论。 加快沟通和讨论。 文档包括:概念设计文档、架构图、 文档包括:概念设计文档、架构图、当前版 本要实现的功能列表,以及SWOT分析。 分析。 本要实现的功能列表,以及 分析 敏捷开发过程 敏捷开发前 的产品开发过程 敏捷开发 前的产品开发过程 敏捷开发过程 敏捷后开发流程 敏捷软件开发特点 市场和需求驱动, 市场和需求驱动,拥抱变化 充分利用资源和时间 每日交付 充分自动化 极限编程(XP): 概念、特点和应用 极限编程: 极限编程 一种轻量级的、灵巧的、 一种轻量级的、灵巧的、简单的软件工程 方法。 极
22、限编程的核心活动体现在需求测试 测试 极限编程的核心活动体现在需求 测试 编码设计过程中 设计过程中。 编码 设计过程中。 适用于规模小、进度紧、需求变化大、 适用于规模小、进度紧、需求变化大、质 量要求严的项目。 量要求严的项目。 以最高的效率和质量来解决用户目前的问 题,以最大的灵活性和最小的代价来满足 用户未来的需求。 用户未来的需求。 一、极限编程简介极限编程( 简称XP) 极限编程(Extreme Programming,简称 ) 简称 敏捷软件开发方法的代表。 敏捷软件开发方法的代表。 2000年,美国软件工程专家 年 美国软件工程专家Kent Beck对极 对极 限编程这一创新软
23、件过程方法论进行了解释: 限编程这一创新软件过程方法论进行了解释: 是一种轻量、 “XP是一种轻量、高效、低风险、柔性、可 是一种轻量 高效、低风险、柔性、 预测、科学而充满乐趣的软件开发方法。 预测、科学而充满乐趣的软件开发方法。” 33 XP价值体现 价值体现沟通( ):追求有效 沟通(Communication):追求有效 ): 的沟通 简单( ):实现最简单的可 简单(Simplicity):实现最简单的可 ): 行方案 反馈(Feedback):快速有效的反馈 反馈( ):快速有效的反馈 ): 勇气( ):勇于放弃和重构 勇气(Courage):勇于放弃和重构 ): 二、XP开发过程
24、及特点 开发过程及特点工作环境: 要求每个参加项目开发的人 工作环境:XP要求每个参加项目开发的人 都担任一个角色(项目经理、 都担任一个角色(项目经理、项目监督人 ),并履行相应的权利和义务 并履行相应的权利和义务。 等),并履行相应的权利和义务。 需求分析:客户被纳入开发队伍。 需求分析:客户被纳入开发队伍。 设计: 强调简单设计 强调简单设计( 设计:XP强调简单设计(simple design), ), 即用最简单的办法实现每个小需求。 即用最简单的办法实现每个小需求。 编程:成对编程( 编程:成对编程(pair programming)是 ) 极限编程的一大特色, 极限编程的一大特色
25、,即两个人一起使用同 一个屏幕,同一个键盘, 一个屏幕,同一个键盘,共同完成一段程序 的编码。 的编码。 35 二、XP开发过程及特点 开发过程及特点测试:在极限编程中, 测试:在极限编程中,测试是非常重 要的一个环节, 要的一个环节,它首先要求在开始写 程序之前先写好测试, 程序之前先写好测试,其目的是为了 提高软件的可测试性。 提高软件的可测试性。 发布: 要求按照开发计划 要求按照开发计划, 发布:XP要求按照开发计划,每经过 一个开发周期,软件就发布一次, 一个开发周期,软件就发布一次,而 不是像传统的开发方法那样, 不是像传统的开发方法那样,整个软 件开发完成后才发布。 件开发完成后
26、才发布。 36 三、极限编程的优缺点极限编程的优点 : (1)重视客户的参与; )重视客户的参与; (2)重视团队合作和沟通; )重视团队合作和沟通; (3)制定计划前做出合理预测; )制定计划前做出合理预测; (4)让编程人员参与软件功能的管理; )让编程人员参与软件功能的管理; (5)重视质量; )重视质量; (6)简单设计; )简单设计; 37 三、极限编程的优缺点(7)高频率的重新设计和重构; )高频率的重新设计和重构; (8)高频率及全面的测试; )高频率及全面的测试; (9)递增开发; )递增开发; (10)连续的过程评估; )连续的过程评估; (11)对过去的工作持续不断的检查。
27、 )对过去的工作持续不断的检查。 38 三、极限编程的优缺点极限编程的缺点 : (1)以代码为中心,忽略了设计; )以代码为中心,忽略了设计; (2)缺乏设计文档,局限于小规模项目; )缺乏设计文档,局限于小规模项目; (3)对已完成工作的检查步骤缺乏清晰的结 ) 构; (4)质量保证依赖于测试; )质量保证依赖于测试; (5)缺乏质量规划; )缺乏质量规划; (6)没有提供数据的收集和使用的指导; )没有提供数据的收集和使用的指导; 39 三、极限编程的优缺点(7)开发过程不详细; )开发过程不详细; (8)全新的管理手法带来的认同度问题; )全新的管理手法带来的认同度问题; (9)缺乏过渡
28、时的必要支持。 )缺乏过渡时的必要支持。 40 应用中需要注意的问题不同方法的目标对象和适用环境各不相同, 不同方法的目标对象和适用环境各不相同, 学习和运用流行的过程方法论是实施过程 改进的好办法,但在具体应用过程中, 改进的好办法,但在具体应用过程中,应 整合其最佳元素, 整合其最佳元素,设计出适合具体实际项 目的过程体系。 目的过程体系。 在软件工程实践中要充分把握好开发技能、 在软件工程实践中要充分把握好开发技能、 软件过程和组织管理各个要素的平衡, 软件过程和组织管理各个要素的平衡,不 能偏重某一方面,轻视另一方面; 能偏重某一方面,轻视另一方面; 41 应用中需要注意的问题首先从基
29、本实践入手, 首先从基本实践入手, 逐渐深入到扩展性实践, 逐渐深入到扩展性实践, 采取循序渐进、迂回反复(迭代) 采取循序渐进、迂回反复(迭代)的策略 42 软件复用与基于组件的软件工程 软件复用与基于组件的软件工程 43 软件重用的观念起源于制造业和土木工 程领域,通过配件组装汽车、 程领域,通过配件组装汽车、砖瓦搭建 房屋就是很好的例子, 房屋就是很好的例子,基于配件的产品 在市场上已取得了很大的成功。 在市场上已取得了很大的成功。 44 一、定义软件配件被叫做组件或构件, 软件配件被叫做组件或构件, 可重用的二进制代码即为组件 一个组件是为了服务特定用途, 一个组件是为了服务特定用途,
30、具有独立 功能的系统部件, 功能的系统部件, 比如:命令按钮, 比如:命令按钮,文本输入框等 组件就像模式一样强制开发人员采用已定 义好的过程, 义好的过程,将其插入到新软件系统中以 满足的需求。 满足的需求。 45 二、软件重用的好处 1. 提高软件生成率。 提高软件生成率。 2. 缩短开发周期 。 3. 降低软件开发和维护费用。 降低软件开发和维护费用。 4. 生产更加标准化的软件。 生产更加标准化的软件。 5. 提高软件开发质量。 提高软件开发质量。 6. 增强软件系统的互操作性。 增强软件系统的互操作性。 7. 减少软件开发人员数量。 减少软件开发人员数量。 8. 使开发人员能比较容易
31、的适应不同性质的 项目开发。 项目开发。 46 三、软件重用形式 1. 源代码模块或者类一级的重用。这是最基本 源代码模块或者类一级的重用。 的软件重用形式。 的软件重用形式。 2. 二进制形式的重用。如组件重用。 二进制形式的重用。如组件重用。 3. 组装式重用。 组装式重用。 例如,要建立一个门户站点应用, 例如,要建立一个门户站点应用,登陆用户既 可以查询天气情况,又可以查看股市行情, 可以查询天气情况,又可以查看股市行情,还 可以在线购物。 可以在线购物。这些功能由不同网络应用服务 供应商提供,通过这种组装式重用, 供应商提供,通过这种组装式重用,就可以非 常容易地把上述功能都集成到新
32、的门户站点中。 常容易地把上述功能都集成到新的门户站点中。 4. 分析级别重用。 分析级别重用。 5. 设计级别重用。 6. 软件文档重用。 设计级别重用。 软件文档重用。 47 四、流行的软件重用技术 库函数 模板 面向对象 设计模式 组件 框架 构架 48 1. 库函数库函数是很早的软件重用技术。 库函数是很早的软件重用技术。 很多编程语言为了增强自身的功能,都提 很多编程语言为了增强自身的功能, 供了大量的库函数。对于库函数的使用者, 供了大量的库函数。对于库函数的使用者, 他只要知道函数的名称,返回值的类型, 他只要知道函数的名称,返回值的类型 函 数参数和函数功能就可以对其进行调用。
33、 数参数和函数功能就可以对其进行调用。 49 2. 面向对象面向对象技术通过方法、消息、 面向对象技术通过方法、消息、类、继承、 继承、 封装、和实例等机制构造软件系统, 封装、和实例等机制构造软件系统,并为 软件重用提供强有力的支持。 软件重用提供强有力的支持。 面向对象方法已成为当今最有效、 面向对象方法已成为当今最有效、最先进 的软件开发方法。 的软件开发方法。 与函数库对应, 与函数库对应,很多面向对象语言为应用 程序开发者提供了易于使用的类库, 程序开发者提供了易于使用的类库,如 VC+中的 中的MFC。 中的 。 50 3. 模板模板相当于工业生产中所用的“模具” 模板相当于工业生
34、产中所用的“模具”。 有各种各样的模板(如文档模板, 有各种各样的模板(如文档模板,网页模 板等), ),利用这些模板可以比较快速地建 板等),利用这些模板可以比较快速地建 立对应的软件产品。 立对应的软件产品。 模板把不变的封装在内部, 模板把不变的封装在内部,对可能变化的 部分提供了通用接口, 部分提供了通用接口,由使用者来对这些 接口进行设定或实现。 接口进行设定或实现。 51 4. 设计模式设计模式作为重用设计信息的一种技术, 设计模式作为重用设计信息的一种技术, 在面向对象设计中越来越来流行。 在面向对象设计中越来越来流行。 设计模式描述了在我们周围不断重复发生 的问题, 的问题,该
35、问题的解决方案的核心和解决 方案实施的上下文。 方案实施的上下文。 设计模式命名一种技术并且描述它的成本 和收益, 和收益,共享一系列模式的开发者拥有共 同的语言来描述他们的设计。 同的语言来描述他们的设计。 52 5. 构架 1) 构架是与设计的同义理解,是系统原型 构架是与设计的同义理解, 或早期的实现。 或早期的实现。 2) 构架是高层次的系统整体组织。 构架是高层次的系统整体组织。 3) 构架是关于特定技术如何合作组成一个 特定系统的解释。 特定系统的解释。 53 6. 框架如果把软件的构建过程看成是传统的建筑过 程;框架的作用相当于为我们的房屋搭建的 架子” “架子”。 框架从重用意
36、义上说, 框架从重用意义上说,是一个介于构件和构 架之间的一个概念。构件, 架之间的一个概念。构件,框架和构架三者 的主要区别在于:对重用的支持程度的不同: 的主要区别在于:对重用的支持程度的不同: 1) 构件是基础,也是基于构件开发的最小 构件是基础, 单元。 单元。构件重用包括可重用构件的制作和利 用可重用构件构造新构件或系统。 用可重用构件构造新构件或系统。 54 2) 一个框架和构架包含多个构件。这些构件 一个框架和构架包含多个构件。 使用统一的框架(构架)接口, 使用统一的框架(构架)接口,使得构造一 个应用系统更为容易。 个应用系统更为容易。 3) 框架重用包括代码重用和分析设计重
37、用, 框架重用包括代码重用和分析设计重用, 一个应用系统可能需要若干个框架的支撑, 一个应用系统可能需要若干个框架的支撑, 从这个意义上来说,框架也是一个“构件” 从这个意义上来说,框架也是一个“构件” 的同时,框架又是一类特定领域的构架。 的同时,框架又是一类特定领域的构架。 4) 构架重用不仅包括代码重用和分析设计重 更重要的是抽象层次更高的系统级重用。 用,更重要的是抽象层次更高的系统级重用。 5) 框架和构架的重用层次更高,比构件更为 框架和构架的重用层次更高, 抽象灵活,但也更难学习和使用。 抽象灵活,但也更难学习和使用。 55 7. 组件 1) 组件应是抽象的系统特征单元,具有封
38、组件应是抽象的系统特征单元, 装性和信息隐蔽,其功能由它的接口定义。 装性和信息隐蔽,其功能由它的接口定义。 2) 组件可以是原子的,也可以是复合的。 组件可以是原子的,也可以是复合的。 因此它可以是函数,过程或对象类, 因此它可以是函数,过程或对象类,也可 以是更大规模的单元。 以是更大规模的单元。一个子系统是包含 其它构件的构件。 其它构件的构件。 3) 组件是可配置和共享的 这是基于构件开 组件是可配置和共享的,这是基于构件开 发的基石,且构件之间能相互提供服务。 发的基石,且构件之间能相互提供服务。 56 软件重用的程度取决于重用策略, 软件重用的程度取决于重用策略, 一套六维度的软件
39、重用方法, 一套六维度的软件重用方法,这些维度分别 是规划、改善、正规过程、管理支持、 是规划、改善、正规过程、管理支持、项目 相似性、对象技术、公共架构。 相似性、对象技术、公共架构。 实践的五个重用策略 基于高重用潜能的特定重用 基于低重用潜能的不协调重用 基于高重用潜能的不协调重用 缺乏管理下的系统重用 强化管理下的系统重用 57 基于组件的软件工程 58 定义基于组件的软件工程( 基于组件的软件工程(Component-based software engineering,简称 ,简称CBSE)或基 ) 于组件的开发( 于组件的开发(Component-Based Developmen
40、t,简称 ,简称CBD)是一种软件开 )是一种软件开 发范型。它是现今软件复用 软件复用理论实用化的 发范型。它是现今软件复用理论实用化的 的支持下, 研究热点, 组件对象模型的支持下 研究热点,在组件对象模型的支持下,通 过复用已有的构件 软件开发者可以“ 构件, 过复用已有的构件,软件开发者可以“即 插即用”地快速构造应用软件 应用软件。 插即用”地快速构造应用软件。这样不仅 可以节省时间和经费,提高工作效率, 可以节省时间和经费,提高工作效率,而 且可以产生更加规范、 且可以产生更加规范、更加可靠的应用软 件。 59 CBSE目的对软件开发所提供的支持, 对软件开发所提供的支持, 系统作
41、为组件集成体, 系统作为组件集成体, 组件是可重用实体, 组件是可重用实体, 通过定制和更换组件来实现维护和更新 不仅与开发和维护等方面相关, 不仅与开发和维护等方面相关, 而且与组件和系统的整个生命周期中包括组织、 而且与组件和系统的整个生命周期中包括组织、 市场、法律和其他因素在内的方面相关。 市场、法律和其他因素在内的方面相关。 60 组件模型(或者称为组件规范) 组件模型(或者称为组件规范) COM/DCOM,.NET,EJB(企业级 , , (企业级Java Beans)和CCM(CORBA组件模型)的组件 组件模型) ) ( 组件模型 接口都与类的接口有联系。 接口都与类的接口有联
42、系。 组件采用了面向对象原则的方法和数据封装的 原理。 原理。 组件在其生命周期中可以有以下几种存在方式: 组件在其生命周期中可以有以下几种存在方式: 组件规范详述(组件的特点和方法), ),组件接 组件规范详述(组件的特点和方法),组件接 规范的一个方面,是组件行为的定义), 口(规范的一个方面,是组件行为的定义), 组件的执行(组件规范的实现), ),组件的生成 组件的执行(组件规范的实现),组件的生成 组件执行的配置实例)和组件对象( (组件执行的配置实例)和组件对象(已生成 对象的实例)。 对象的实例)。 61 Component interfaces 62 A data collec
43、tor component 63 组件与对象的区别组件并不是OOP(面向对象编程)的扩展 (面向对象编程) 组件并不是 组件和对象之间的差别在于对象有声明, 组件和对象之间的差别在于对象有声明, 是实例的个体, 是实例的个体, 组件没有独立的声明,是配置个体。 组件没有独立的声明,是配置个体。 64 对CBD不同的理解 不同的理解学术界的研究者把组件看为定义良好的实体 常常较小, (常常较小,有容易理解的功能性和非功能性 的特点); 的特点); 工业界把组件视为一个系统的可重用部件, 工业界把组件视为一个系统的可重用部件,它 不必定义为具有清晰的接口和与组件类型高度 的一致性。一个组件可以是系
44、统无组织的部件, 的一致性。一个组件可以是系统无组织的部件, 但它的改动可能需要不少精力。 但它的改动可能需要不少精力。 鉴于组件越大, 鉴于组件越大,它们在被重用时可能表现出来 的性能就越好,这样的组件(或叫可重用实体) 的性能就越好,这样的组件(或叫可重用实体) 很重要。 很重要。 65 Elements of a component model 66 基于组件系统开发生命周期软件工程中建立的不同的生命周期模型可以在 CBD中被采用。这些模型将被修正以强化以组 件为中心的活动。 67 CBSE 过程 68 组件重用生命周期模型 Bailey and Basili为组件重用和重设计提 为组件
45、重用和重设计提 出了软件生命周期模型,五个策略: 出了软件生命周期模型,五个策略: (1) 分析现有程序,对可重用组件排序。 分析现有程序,对可重用组件排序。 (2) 重新设计,消除特定领域的问题。 重新设计,消除特定领域的问题。 (3) 将可重用组件保存在仓库中。 将可重用组件保存在仓库中。 (4) 以重用的方式构建独立状态组件并保存 在仓库中。 在仓库中。 (5) 利用组件开发新系统。 利用组件开发新系统。 69 Eduardo Santana de Almeida等人提出了 等人提出了 分布式CBD的渐进方法。 的渐进方法。 分布式 的渐进方法 基于两个阶段: 基于两个阶段: 第一阶段是
46、组合问题域的需求并用面向对 象的语言设计可用的组件, 象的语言设计可用的组件,这些组件保存 在仓库中; 在仓库中; 第二阶段是设计师根据需求从仓库中选择 适当的组件来构建软件。 适当的组件来构建软件。作者没有提出一 个足够清晰的过程模型, 个足够清晰的过程模型,而且也需要特殊 的工具支持。 的工具支持。 70 Luiz Fernando Capretz等人提出了一种软 等人提出了一种软 件生命周期可用于面向对象的CBD构建。 构建。 件生命周期可用于面向对象的 构建 主要的阶段:领域工程、系统分析、 主要的阶段:领域工程、系统分析、设计和 实现。 实现。 这个模型的主要问题是在设计阶段选择可重
47、 用组件,正常应该在分析阶段, 用组件,正常应该在分析阶段,进而分析师 能够评估成本、时间安排、 能够评估成本、时间安排、要求开发成果以 及组件整合。 及组件整合。 71 Ning的CBD过程模型包括的主要阶段: 的 过程模型包括的主要阶段: 过程模型包括的主要阶段 组件分析 架构设计 组件链接 组件生产 组件整合, 组件整合, 72 73 基于CBD的过程模型 的过程模型 基于面向对象的过程模型是唯一能够表示对现有 组件重用的过程模型, 组件重用的过程模型,对象过程模型经过修改 可以实现基于组件开发的重用。软件设计, 可以实现基于组件开发的重用。软件设计,构 建和测试阶段体现了现有类的重用。
48、 建和测试阶段体现了现有类的重用。 以下是一个CBD过程模型: 过程模型: 以下是一个 过程模型 主要阶段:沟通、计划、分析与选择、 主要阶段:沟通、计划、分析与选择、可发 与测试、评估。 与测试、评估。 74 通过与客户沟通获得基本的需求。初级用例在 通过与客户沟通获得基本的需求。 这个阶段开发出来。 这个阶段开发出来。 项目规格或提案文件在计划阶段完成。 项目规格或提案文件在计划阶段完成。 项目规格或提案文件包括可行性分析和风险评 并提供成本效益分析( 估,并提供成本效益分析(CBA)表。CBA ) 表用于分析项目是否对客户可行。 表用于分析项目是否对客户可行。 75 仓库的角色和重要性基
49、于可重用组件的软件开发可以提高效率, 基于可重用组件的软件开发可以提高效率, 仓库用于可重用组件的存储和管理, 仓库用于可重用组件的存储和管理, 好处:分类、搜索、修改、测试、实施、 好处:分类、搜索、修改、测试、实施、 版本控制、变更控制、最新和一致的文档。 版本控制、变更控制、最新和一致的文档。 可以从多维仓库(一个或多个仓库组成) 可以从多维仓库(一个或多个仓库组成) 中选择和管理组件, 中选择和管理组件, 多维仓库的好处在于基于领域的开发和分 类。 76 CBD过程模型的优越性 过程模型的优越性基于组件开发的优点:可重用性、互操作性、 基于组件开发的优点:可重用性、互操作性、可 升级性、低复杂性、时间效益、成本效益、 升级性、低复杂性、时间效益、成本效益、开发 效率、可靠性、高质量。 效率、可靠性、高质量。 用ASP开发一个基于 WEB 的Email 系统就是一 开发一个基于 应用的例子。 个CBD应用的例子。 应用的例子 协作数据对象的Windows NT服务器(CDONTS) 服务器( 协作数据对象的 服务器 ) 是微软开发的邮件系统, 是微软开发的邮件系统,这个组件能够用来开发 类似的应用系统。 类似的应用系统。 如微