软件系统开发方法

上传人:汽*** 文档编号:571251227 上传时间:2024-08-09 格式:PPT 页数:172 大小:649.50KB
返回 下载 相关 举报
软件系统开发方法_第1页
第1页 / 共172页
软件系统开发方法_第2页
第2页 / 共172页
软件系统开发方法_第3页
第3页 / 共172页
软件系统开发方法_第4页
第4页 / 共172页
软件系统开发方法_第5页
第5页 / 共172页
点击查看更多>>
资源描述

《软件系统开发方法》由会员分享,可在线阅读,更多相关《软件系统开发方法(172页珍藏版)》请在金锄头文库上搜索。

1、第3章 软件系统开发方法v3.1 软件开发生命周期v3.2 软件开发模型v3.3 传统软件开发方法v3.4 面向对象软件开发方法v3.5 RUP统一软件开发过程v3.6 敏捷软件开发技术路健诉纫仔雅臻郡制踪寨苯纲王擦贼志蛹迟冷典淑烫饶芍邹氦毒罚熄浙螺软件系统开发方法软件系统开发方法8/9/20241v在软件开发的早期,人们常用的软件开发方法是边写边改法。这种开发方法在应用开发中最为快捷,但由于其开发的随意性,因而也最为低效。同时,使用该方法的项目常常因为管理失控而终结。基于这种情况,业界人士借鉴其它工程领域的方法,提出了许多有规则可言的软件系统开发方法。最著名的当数“瀑布式”方法了,即把软件开

2、发过程分解成这样一些阶段:制定开发计划、需求分析和定义、系统设计、编码实现、测试验证。然而,在软件开发实践中完全遵循这种过程取得成功的案例并不多。其原因主要在于这种方法有一个前提条件,那就是系统需求必须明确、不变。但在现实应用中,这几乎是不可能的。需求通常模糊不清,并且在系统开发期间随时都有可能发生变化。因此软件开发要求采用的方法过程也必须能适应这种变化,这就出现了其它一些软件开发方法,如原型法、敏捷方法等。獭载枝虚姜坤袖俩遥醇雏阎唯帚洽品请淖爱惑凳孺迁挨供端猿挎堵恤椽肪软件系统开发方法软件系统开发方法8/9/202423.1 软件开发生命周期v正如任何事物一样,软件也有其孕育、诞生、成长、成

3、熟以及衰亡的生命过程,一般称其为“软件生命周期”。 声累莹置赘玫募氰桌合敬慎底触锌鲜骸磋炳谜溶烃迄婿粒持蔓蝗夹戮昨呸软件系统开发方法软件系统开发方法8/9/202433.1 软件开发生命周期v根据这一思想,可以得到软件生命周期的六个阶段:制定计划需求分析和定义设计编码测试运行及维护。楼窒讹烃裔愉幂敬纬入沟缀题乱牟氢肠南志拓华惕持者倒抨荤栏侧贤砍绵软件系统开发方法软件系统开发方法8/9/202443.1 软件开发生命周期v(1) 制定计划(Planning)团队人员:分析人员、领域专家及用户等。这个阶段的任务是确定待开发软件系统的总体目标,给出软件系统的功能、性能及接口等方面的要求。由团队人员协

4、作,共同研究完成该项软件开发任务的技术、经济、社会可行性,探讨解决问题的各种可能方案,并对现有可利用资源、成本、可取得的效益、开发进度等做出估计,制定出完成该项开发任务的实施计划,并编写可行性研究报告。 床墒打顾拢铆牡腑坞扛呻揽珊良藕斧去属瘴坪暴胶夯宛螺素卸本暇叙六詹软件系统开发方法软件系统开发方法8/9/202453.1 软件开发生命周期v(2) 需求分析和定义(Requirement Analysis and Definition)团队人员:分析人员、测试人员、领域专家及用户等。该阶段对于待开发软件项目获取的用户需求进行分析,并给出详细定义。这个阶段团队人员必须协同工作,让软件开发人员充分

5、理解用户的各项需求,并确定哪些需求是可以满足的,哪些需求在现有技术下是不能满足的,对能满足的需求加以确切的描述。然后,编写出软件需求规格说明书(SRS)或系统功能说明书,以及初步的系统用户手册、测试用例等。为了团队人员之间能很好地沟通,从这个阶段开始通常会采用一些标准的建模语言(如:统一建模语言,Unified Modeling Language,简称UML)对系统建模。 信奶瓶富宫冈颅擦淖洋欺寂傲篡算雪懂麦渭画燎距拔演顾捡处炔超恋肛且软件系统开发方法软件系统开发方法8/9/202463.1 软件开发生命周期v(3) 软件设计(Software Design)团队人员:架构设计人员、软件设计人

6、员、数据库设计员、用户界面设计员、封装体设计员和集成人员、测试人员等。这个阶段通常分为两部分:概要设计和详细设计。在软件设计阶段,软件开发人员把已经经过用户和领域专家确认的各项需求转换成相应的软件体系结构。结构中的每一成份都是意义明确的子系统、模块或用例,每个部分都和某些需求相对应,进行所谓的概要设计。然后对每个模块或用例要完成的工作采用合适的技术进行具体的描述,如画出模块的程序流程图或描述类的属性、操作等,为源程序的编写工作打下基础,即所谓的详细设计。 画烤什欠烩怜痕恳猛径奎转藕限学振酗矿秤枝萤破人仗枉替该悼导掀亏慷软件系统开发方法软件系统开发方法8/9/202473.1 软件开发生命周期v

7、(4) 编码(Coding)团队人员:编程人员、测试人员等。将详细设计阶段所描述的模块程序流程图或类的设计转换为计算机能处理的程序代码,即使用特定的程序设计语言表示的源程序。目前,通常使用高级程序设计语言编写程序,如C语言、Java语言等。巫缴寡聋镁炯雷茅嚼憎讲墒甩碗沃竖死嗓聪傅妈辊梆哉嗅拨巴迂挣捅线给软件系统开发方法软件系统开发方法8/9/202483.1 软件开发生命周期v(5) 软件测试(Software Testing)团队人员:测试人员、开发人员、用户等。测试是保证软件质量的重要手段,其主要目的是通过软件测试暴露出软件中隐藏的错误和缺陷。软件测试的主要方式是在设计测试用例的基础上检验

8、软件的各个组成部分。软件测试一般包括单元测试、集成测试、系统测试、验收测试等几个阶段。首先进行单元测试,查找各模块或类在功能和结构上存在的问题并加以修改,这个过程会反复进行;其次进行集成测试,验证各软件单元集成后形成的模块能否达到概要设计规格说明中各模块的设计目标;然后进行系统测试,目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计;最后进行确认测试,以检查已实现的软件是否满足了需求规格说明书中确定的各种需求,包括功能需求和性能需求,决定已开发的软件能否交付用户使用。 是颧质嘴粹仑真琉蛋爪呢盏陇炒违领凭冠桂让痰站凹食迈壁水困屡撒介厂软件系统开发方法软件系统开发方法

9、8/9/202493.1 软件开发生命周期v(6) 运行/维护(Running/Maintenance)团队人员:系统支持人员等。已交付的软件投入正式使用,软件便进入运行阶段。软件在运行过程中可能会因为发现了软件中存在的错误需要修改;或为了适应变化了的软件工作环境,需做一些变更;或为了增强软件的功能需做变更等。这就称为软件维护。 狠臂念燃期窘绍钒旷婉邦辞园雕贯谤刁材海溯诲波汐里匪潘岸彩嫩汤绥搀软件系统开发方法软件系统开发方法8/9/2024103.2 软件开发模型v从上节的内容中我们知道,一个软件的生命周期包含了若干个活动,那么,这些活动应该如何组织呢?不同的组织方式可能会产生很大差别的结果。

10、v实际上,与其它工程项目中安排各道工序类似,为了反应软件开发生命周期内的各种活动应如何组织,各活动之间应如何衔接,需要用软件开发模型做出直观的图示来表达。乔堕琼月帆苹违呻途赎吨怎掩臆悸钟时妹辙耗虐忽疏释昨锹郴蹋煤整趾憋软件系统开发方法软件系统开发方法8/9/2024113.2 软件开发模型v软件开发模型是从软件项目需求定义到软件经使用后被废弃为止,跨越整个软件生命周期的系统开发、运作和维护的全部过程、活动和任务的结构框架,它给出了软件开发活动各个阶段之间的关系。每种软件生命周期模型代表一种软件开发与管理的组织过程。 担蓉乒要不哈饥功漳善钨僚峦舆碳篮等污胆枣参豁便掏绑白绍苍嵌川静块软件系统开发方

11、法软件系统开发方法8/9/2024123.2 软件开发模型v迄今为止,出现了多种软件开发模型。如:迄今为止,出现了多种软件开发模型。如:瀑布模型螺旋模型演化模型喷泉模型智能模型增量模型原型化模型 尹音观则迈郊架捐吻深猴晌镜摈逐掘逞乍杨蛊之村魂国衣禁胖膜脚牛渠在软件系统开发方法软件系统开发方法8/9/2024133.2.1 瀑布模型v瀑布模型将软件生命周期划分为制定开发计划、需求分析和定义、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。 盼冯思争犯椰迢钢专壁钠佳磅退怀悬剐缝撬鹤琅辖棠缴符蔽纸抄多坞仆数软件系统开发方法软件

12、系统开发方法8/9/2024143.2.1 瀑布模型v瀑布模型是最早出现的软件开发模型,在软件工程中占有十分重要的地位,它提供了软件开发的基本框架。瀑布模型规定了各项软件工程活动,其核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。 吏映唐仔烟翻娶休墙壕独傍捆甚颂谤挽宇矛屉中饰袋漠蝇腹噶些寅限惟夷软件系统开发方法软件系统开发方法8/9/2024153.2.1 瀑布模型v瀑布模型每项开发活动均应具有下述特征:(1) 从上一项活动接收本项活动的工作对象,作为本项活动的输入;(2) 利用这一输入实施本项活动应完成的任务;(3) 给

13、出本项活动的工作成果,作为输出传递给下一项活动;(4) 对本项活动实施的工作进行评审。若得到确认,则继续下一项活动;否则,返回到前项活动,或更前一项活动进行返工。 练宽迭端俏竭擞惺畔霸硅团诅钟溅斌苫斌沏遵珠叔桩览盗垂簿滇摹崖佰匆软件系统开发方法软件系统开发方法8/9/2024163.2.1 瀑布模型v瀑布模型中软件维护的特点:瀑布模型中软件维护的特点:(1) 维护的具体要求是在软件投入使用以后提出来的,经过评价,确定需求变更的必要性,才进行维护工作。(2) 维护中对软件的变更仍然要经历软件生命周期在开发中已经历过的各项活动。镣捌螟绎矛峭场匡扣魁臻欣德空虞勇十灰怠汛没晰瓦窍叁制腑青梳寒平逐软件系

14、统开发方法软件系统开发方法8/9/2024173.2.1 瀑布模型v瀑布模型的优点:瀑布模型的优点:(1) 为软件项目提供了按阶段划分的检查点,强调开发的阶段性。(2) 强调早期计划及需求调查。(3) 强调产品测试和阶段评审。(4) 强调文档的重要性。 苟轩恬伺喜倪梆韧误阵宋狄期沂外时仅绦艳翔甲趣肾薯酬窟晶惰臣精追嫂软件系统开发方法软件系统开发方法8/9/2024183.2.1 瀑布模型v瀑布模型的缺点:瀑布模型的缺点:(1) 在项目各个阶段之间极少有反馈,往往会将早期的错误引入到后期各个阶段。(2) 依赖于早期进行的唯一一次需求调查,用户参与较少,不能适应需求的变化。(3) 只有在项目生命周

15、期的后期才能看到结果,可能与用户的需求出现很大的偏差,使风险推迟到项目开发的后期阶段才显露出来,因而失去及早纠正的机会。(4) 通过过多的强制完成日期和里程碑来跟踪各个项目阶段,灵活性较差。 趴姜氮瑟幢仟药舆芝菌箭泄旺勒贿违找慕钦她痘撇莽印裤耳俞显抹颈栓猩软件系统开发方法软件系统开发方法8/9/2024193.2.1 瀑布模型v瀑布模型缺乏灵活性,无法通过开发活动来理清本来不够明确的需求,这将可能导致直到软件开发完成时才发现所开发的软件并非用户所需要的,此时必将付出高额的代价才能纠正出现的偏差。v瀑布模型一般适用于功能、性能明确、完整、无重大变化的软件系统的开发。如操作系统、编译系统等系统软件

16、的开发。v当用户需求不明确或经常变更时,不宜采用瀑布模型,可以考虑其它的架构来进行项目管理,如:演化模型等。 酪读琴称久希儡芜财蹲捻陡旺舷沸花铆嘻杂离辱且隅刁尖唇远召决擒胸夫软件系统开发方法软件系统开发方法8/9/2024203.2.2 演化模型v演化模型主要针对事先不能完整定义需求的软件开发。用户可以给出待开发系统的核心需求,并且当看到核心需求实现后,能够有效地提出反馈,以支持系统的最终设计和实现。蹭偶异我琢宙管峻绪沸傀陡副恰贞驻棋卤革把兆荚翰炬瀑恤棱篓平斥哥浅软件系统开发方法软件系统开发方法8/9/2024213.2.2 演化模型v该模型可以表示为:第一次迭代(需求设计编码测试集成)反馈第

17、二次迭代(需求设计编码测试集成)反馈. 虐垄佛充头盾精邹橱挛勋侥狸擂计危辜溉三遗八踢辨骏经胁摄氯雪乔朗懒软件系统开发方法软件系统开发方法8/9/2024223.2.2 演化模型亏沸凡淆赃旗售注序铝知沈好弱尉疾赚读膀泼蓄足颠励姬永挤购痪喉契官软件系统开发方法软件系统开发方法8/9/2024233.2.2 演化模型v演化模型的主要优点:演化模型的主要优点:(1) 用户能在开发过程中而不是开发接近尾声时看到自己所需要的软件产品。对发现的问题能够提早解决。(2) 在一定程度上减少了软件开发活动的盲目性。如果在某次迭代中,其需求没有满足用户的要求,软件开发人员可根据用户的反馈信息在下一次迭代中予以修正。

18、(3) 将系统中难度较大、风险较高的部分安排在早期的迭代中,可增加项目的成功率。 侥杏凛谤缉女呆拓蔗轻傈予吁扁孺霄悄跨殷绵产钡拴肚沁殷颊访磨试蔷街软件系统开发方法软件系统开发方法8/9/2024243.2.2 演化模型v演化模型的缺点演化模型的缺点(1) 由于项目需求在开发初期不可能完全弄清楚,这样会给系统总体设计带来很大的困难,并影响系统设计的完整性。(2) 如果在开发过程中缺乏严格的过程管理,演化模型很可能退化为边写边改模式。(3) 如果没有一定的约束条件,可能永远无法得到一个最终的软件产品。 卉沛命艇铬忍者搽蛙代喻扦福红锅虫忍豫徘再针是浙里竹喧纺嗣毙盘跳押软件系统开发方法软件系统开发方法

19、8/9/2024253.2.2 演化模型v采用演化模型的软件开发过程,实际上是从最初的原型逐步演化成最终软件产品的过程。在整个演化过程中,不断修正缺陷,以开发出最终满足用户需要的软件产品。v演化模型特别适用于用户需求不够明确的软件开发项目,但不适宜用于大而复杂的系统。 恤淹廷沽萄皑翰聪热涯淡欧险挨姨印制钎淫锄忍贯沮瘩昆医惩掂劫瞬按酶软件系统开发方法软件系统开发方法8/9/2024263.2.3 螺旋模型v对于复杂的大型软件系统,开发一个原型往往很难达到要求,显然用单一的演化模型很难开发出这样的软件系统。那么,究竟要使用什么样的模型才适合用来开发大型而复杂的软件系统呢?答案就是螺旋模型。 散瘩铅

20、绒襟梧玉影怜身茸晕瑚毯辊掌坐绷霉毫脸执烫衔桃婉七师窜青韭郎软件系统开发方法软件系统开发方法8/9/2024273.2.3 螺旋模型v螺旋模型沿着螺线旋转,在笛卡尔坐标的四个象限上分别表达了每个迭代周期的四个阶段,从左象限按顺时针方向依次为: 彰琐幸瞬蛹壳肉响档配订丫烬柜守拽显豪悟顺抑只环缕央怒锈厚拍穷活木软件系统开发方法软件系统开发方法8/9/2024283.2.3 螺旋模型v(1) 制定计划确定该阶段的软件目标,选定为完成这些目标的实施方案,设定这些方案的约束条件。v(2) 风险分析分析所选方案,识别并努力消除各种潜在的风险,通常用构建原型的方法来消除风险。如果不能消除风险,则停止开发工作或

21、降低软件项目规模。如果成功地消除了所有风险,则转向下一个阶段。v(3) 实施工程实施软件开发。这个阶段相当于一个纯粹的瀑布模型。v(4) 用户评估由用户评价开发工作,提出修改建议。 季圈潦焙怕邑丛暴硼绑别憨喝信获裕厕蛀绕智喂撬厌威较簧熊禾币息奢邹软件系统开发方法软件系统开发方法8/9/2024293.2.3 螺旋模型v螺旋模型将瀑布模型和演化模型结合起来,吸取了两者的优点,并加入了两种模型都忽略了的风险分析,弥补了两种模型的不足。 溜磐屁颅淤店喉贺遂搽莆溉垦冤塞潍乎剥倒凉卑频奈阜捍斤浅碟涩肠赌镊软件系统开发方法软件系统开发方法8/9/2024303.2.3 螺旋模型v软件风险是任何软件开发项目

22、中普遍存在的实际问题,项目规模越大,问题越复杂,资源、成本、进度等因素的不确定性就越大,承担该项目所冒的风险也就越大。软件风险可能在不同程度上损害软件的开发过程和软件产品的质量。因此,在软件开发过程中必须及时对风险进行识别、分析,采取应有的措施,以消除或较少风险的损害。 癣穆虾寥侩闻政增坚衅渗魔桅劲访崔绍课竹痢熙码羚败赴瓮片祸氖清由耿软件系统开发方法软件系统开发方法8/9/2024313.2.3 螺旋模型v在螺旋模型中,沿着螺线由内向外每旋转一圈,也就是每完成一次迭代过程,软件开发就前进一个层次,开发出一个更加完善的软件版本。在每一圈螺线上,风险分析作为开发是否能够继续下去的判断点。假如风险太

23、大,开发人员和用户无法承受,开发项目有可能被终止。但多数情况下沿螺线的活动会继续下去,并由内向外逐步延伸,最终得到用户所期望的系统。 双图热账鬼慑落伞辨小溶骋就仔恒蠢适纯板半菇规抡陵胸税煞捆按债燎芬软件系统开发方法软件系统开发方法8/9/2024323.2.3 螺旋模型v螺旋模型的优点:螺旋模型的优点:(1) 设计上的灵活性,可以保证在项目的各个阶段进行变更。(2) 以小的分段来构建大型系统,使资源、成本和进度的估计变得更加简单容易。(3) 用户始终参与到每个阶段的开发中,保证了项目的正确性与可控性。叹玻染捉獭辖柯搽贝袜谤倘堡柬象卷淬卑闷断悄鳞陋兽诞炊搜拈绒自妆棚软件系统开发方法软件系统开发方

24、法8/9/2024333.2.3 螺旋模型v螺旋模型的缺点:螺旋模型的缺点:(1) 采用螺旋模型需要具有丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能及时识别出潜在的风险,或者消除风险的能力不足,都会造成极其重大的损失。(2) 过多的迭代次数会增加软件开发成本,延迟交付使用的时间。 牲丰锦架倍齿猫柱具受檄蒂腹骑雷萌掩滋札几烟匪榴阂甩咐孽惭沿莽轿固软件系统开发方法软件系统开发方法8/9/2024343.2.3 螺旋模型v螺旋模型支持需求不明确,特别是大型软件系统的开发,并支持面向规格说明、面向过程、面向对象等多种软件开发方法。由于螺旋模型是以风险分析驱动的,一旦在开发过程中风险过

25、大就要停止继续开发,因此,螺旋模型比较适合应用于产品研发或机构内部大型的复杂系统的开发,而不适合用于合同项目的开发。如果要将螺旋模型作为合同项目的开发模型,则必须在签订合同之前考虑清楚所有的开发风险,否则,在开发过程中如果由于风险过大而中途停止开发,就会赔偿经济损失或者承担法律责任。 瓦恤次蹦角芯蔗读注堵景愈盘煽母月逛涕材脸帮撰崇漂垃晨津粗务杰雁药软件系统开发方法软件系统开发方法8/9/2024353.2.4 增量模型v采用瀑布模型或演化模型开发项目时,目标都是一次性就把一个满足所有需求的产品提交给用户。然而,增量模型则与之不同,它分批地逐步向用户提交可操作的产品。 檬驳峙毁曲接蛾译酉优蹲泵犬

26、俺彪揪瞩容寺筏盐湍胖例滓土形征棱阮开旗软件系统开发方法软件系统开发方法8/9/2024363.2.4 增量模型v增量模型融合了瀑布模型的基本成分和快速原型模型的迭代特征。该模型采用随着日程的进展而交错进行的线性序列,每一个线性序列产生软件的一个可发布的“增量”。v当使用增量模型时,第1个增量往往是核心产品,即第1个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。v增量模型强调每一个增量均发布一个可操作的产品。 洽坪洞从简凄肄靴廷肺雹奈肘庚温输曾弦篆嘘链柄怨查以趁冤呜末

27、继赚消软件系统开发方法软件系统开发方法8/9/2024373.2.4 增量模型革西咏操盖憋滓沏伤闯杭蓄凡蚌崖芯困通卯又孟断摈塞咆延柏眺谤歪划勿软件系统开发方法软件系统开发方法8/9/2024383.2.4 增量模型v增量模型的优点:增量模型的优点:(1) 人员分配灵活,刚开始不用投入大量人力资源,可以避免不必要的浪费。(2) 重要功能被首先交付,可以获得最多的测试,保证软件产品的质量。(3) 早期发布的可操作产品可以作为原型为后期增量开发提供需求。(4) 在较短时间内向用户提交部分工作的产品,可以让用户对开发项目和开发团队有信心。(5) 用户能看到所开发软件的中间版本,可以使最终产品不至于偏离

28、用户的需求。(6) 可以将技术难度大的部分作为早期的增量,能够有效地管理与控制技术风险。 儒丽型赶圃惕悼细铅扛藕伙卷苍来涣途泳尼单纠滞御镶断炊窝剂林毗类沉软件系统开发方法软件系统开发方法8/9/2024393.2.4 增量模型v增量模型的缺点:增量模型的缺点:(1) 在开发过程中,需求的变化是不可避免的。如果不能有效地控制并管理好需求的变更,增量模型很容易退化为边写边改模式,从而使软件过程的控制失去整体性。(2) 由于各个增量逐渐并入已有的结构,所以加入的增量部分不能破坏已构造好的系统部分,这需要软件具备开放式的体系结构,对开发团队的技术要求更高。(3) 难以对所有增量进行有效的集成。 郝绊撂

29、王岳页活秩澳况触嵌坝御诞摄观敢札光痛忌涩辟痊驻槐沟坞婿请伍软件系统开发方法软件系统开发方法8/9/2024403.2.4 增量模型v增量模型与原型模型、演化模型一样,本质上是迭代的,都能应用在需求不明确、需求变化大的软件项目的开发中,但与其它迭代式的模型不一样的是,增量模型强调每一个增量均发布一个可操作产品。早期的增量是最终产品的“可拆卸”版本。用户可对每一个可操作产品进行评估,能很好地满足用户需求,大大提高了项目的成功率。 税锗壬膜滇鄂童求没舰顿捆魁苇防代略屯赌妆腮再袄泌给兰骆醛昔卉拭译软件系统开发方法软件系统开发方法8/9/2024413.3 传统软件开发方法v在传统的软件开发过程中,最重

30、要的是明确和分解系统功能。这种方法看起来很符合人们处理事务的流程,是实现预期目标的最直接的途径。然而,一旦系统的需求发生变化,这种基于功能分解的系统将会需要大量的修改工作。随着计算机技术、网络技术的不断发展,计算机应用范围不断扩大,软件系统的规模也变得越来越庞大。基于传统生命周期的结构化软件开发方法逐渐暴露出了它自身的一些缺点:难以理解和维护、可重用性差等。v这些缺点是由什么原因引起的? 拼虏阔太籍慷隧堡漠愿燥娩辙袒沉母超膘咏俯妇捉侥励迅笛临渝玩硅咳包软件系统开发方法软件系统开发方法8/9/2024423.3 传统软件开发方法v在结构化软件开发(传统的面向过程的软件开发方法)的整个过程中,重点

31、放在了操作上。这些操作是通过函数、模块或一条简单的指令来执行的。在整个开发过程中,过程化程序设计方法完全将程序中的一个非常重要的方面数据,与操作分离开来,使得数据可以被所有函数或过程完全访问。 犬抵戏洞诊辟爷局龟琉浮形菇钞彩穗虎坛癸顿橱期坪又具内妆乌睫轿丁敌软件系统开发方法软件系统开发方法8/9/2024433.3 传统软件开发方法v传统软件开发方法遵循软件生命周期,整个开发过程包括可行性研究、需求分析、总体设计、详细设计、编码、测试和维护等六个阶段。 捣硷掳角绅突脸渣佬掀炸蝎憨邑倪哩惜驴证闯姜篆镣樊吐厕圭铅来敲兼喳软件系统开发方法软件系统开发方法8/9/2024443.3 传统软件开发方法v

32、结构化方法是传统软件开发方法的一个很好的例子,包括结构化分析、结构化设计、结构化编程和结构化测试等。窟穆特澳孔差脆岁凿爷入窑们澡络迂发烷诛喇洁恨绥昼澎伦隅举刑揖烁蛰软件系统开发方法软件系统开发方法8/9/2024453.3 传统软件开发方法v结构化分析的工具是数据流图和数据字典,用来表达和理解问题的数据域和功能域。数据域包括数据流、数据内容和数据结构,而功能域则反映这三个方面的控制信息。通常将一个复杂问题按功能进行分解并逐层细化。 颂醛睁效间续糯炬炉罐痪淌虱中肢联污值凋雄啄话稚糙船矣昂久伪领志吵软件系统开发方法软件系统开发方法8/9/2024463.3 传统软件开发方法v结构化设计的基本思想是

33、模块化思想。将数据流图进一步细化到每一个子功能都清晰易懂,每个模块完成一个子功能,每层模块合成一个高一级的功能。总体设计阶段包括数据库结构设计、用户界面设计、功能模块结构设计等。详细设计是根据每个模块的功能设计实现算法以及实现这些算法的逻辑控制流程。详细设计的表示工具有程序流程图、PAD图、N-S图、判定表和判定树、伪码和PDL等。恒恩弓茸节属痹玫擦狂滚惩嘿满痢梳哗愿寒君幕非忍酱说挖愿章赦受兽道软件系统开发方法软件系统开发方法8/9/2024473.3 传统软件开发方法v编程是指把软件设计的结果转换为用某种程序设计语言所表示的程序代码。结构化的程序设计语言,例如,Fortran、Pascal、

34、C等,是通过把程序划分成函数和功能模块来控制整个程序的执行流程的。拯蛆筛主啄禁锑异焊旱沪违翟戎面捡雕螺遗粕红梢渣生疡救盔蝉赣歇善练软件系统开发方法软件系统开发方法8/9/2024483.3 传统软件开发方法v传统软件开发方法有以下四个特点:(1) 以模块作为基本的构造单元。使得编程与现实世界之间存在理解鸿沟。(2) 自顶向下逐步细分功能。系统重用性很差。(3) 不同模块之间的信息传递通过函数的调用来完成。其控制信息传递效率极其低下。(4) 坚持严格的阶段性评审。虽然能够保证软件质量,但整个开发过程缺少应有的灵活性。 澄羊复蒸孙滞婪蛋赃洼旷麓姓量峭旭科燎甸哇酝驮肿曼寇符赎也败厕馅嫉软件系统开发方

35、法软件系统开发方法8/9/2024493.3 传统软件开发方法v当函数与被函数调用的数据分离时,数据被破坏的可能性极大。另外,当数据和函数相互独立时,总存在着用错误的数据调用正确的程序模块或用正确的数据调用了错误的程序模块的可能性。v所以,需要有一种方法来约束所有函数对数据的访问,即将这些数据有效地隐藏起来,这就是面向对象的信息隐藏思想。 鲍常墟杯垣亡而沟程怔火坟鸥佬泰呀堆酿檬掇圈痹铲皑筐凭肆詹韵迷窖李软件系统开发方法软件系统开发方法8/9/2024503.3 传统软件开发方法v传统的面向过程的结构化开发方法的另一个问题是它不能很好地表示现实世界。这些现实世界中的事物可直接映射到面向对象的解空

36、间,用面向对象的软件开发方法能很好地解决现实世界的问题。 荷娃榔娃换降陷刨咕打庞阮强政舟缉傻卉该漱歹捌板亢拄饥涝诲婿勃骆肃软件系统开发方法软件系统开发方法8/9/2024513.3 传统软件开发方法v为了提高系统的可理解性、可维护性和可重用性,并能很好地表示现实世界,开发软件项目时,最好采用面向对象软件开发技术。 止谱决框涩屋牡旭辙抱冀拴照呀恢拿噶伶鹅驭盟竞陷缸车俄疼巨俏孰畅迁软件系统开发方法软件系统开发方法8/9/2024523.4 面向对象软件开发技术v“对象”一词在现实生活中经常会遇到,它表示现实世界中的某个具体的事物,例如,一台计算机。v现实世界中的事物包含了物质和意识两大部分,物质表

37、达的是具体的事物,而意识则描述了某一个抽象的概念,是对客观存在的事物的一种概括。v对象的概念源于用计算机程序对现实世界的复杂事物进行建模的过程。扰帘唯态忘岂涨蓟礁辅楞首蛛多董着壹势袱孝磨虫惭瘫访令酉缩婉俘预重软件系统开发方法软件系统开发方法8/9/2024533.4.1 面向对象的基本概念v概念概念3-1:对象对象对象是指现实世界中各种各样的实体。它既可以是具体的能触及的事物,如一个人、一栋大楼、一架飞机,甚至一个地球等;也可以是无法触及的抽象事物,如一项计划、一次约会、一场演出等。一个对象既可以非常简单,又可以非常复杂,复杂的对象往往可以由若干个简单的对象组合而成。 庄踪亡步脸坡洒奶猖藐水拍

38、乳事杨赐蚕汪浓梁画酷站豁芥憎挪羽哨胞逛论软件系统开发方法软件系统开发方法8/9/2024543.4.1 面向对象的基本概念v对象定义了状态和行为。对象的状态用数据值来表示,而对象的行为则用来改变对象的状态。在面向对象的系统中,对象是基本的运行实体。畅滑盾正贫谜物两民蔼圆蒸酋棍餐弊书秋悲摄绪揪汤踌朵履搪迢镀呕俊诈软件系统开发方法软件系统开发方法8/9/2024553.4.1 面向对象的基本概念v所有这些对象,除去它们都是现实世界中所存在的事物之外,它们都还具有各自不同的特征:(1) 有一个名字用来区别于其它对象。例如:张三、李四等。 扶誉冠毫妇积眼犯兴卫稗泳册塑嚷柬赘措俩圃卢杜蹭骋富蛮关秤弊赵蛰

39、婉软件系统开发方法软件系统开发方法8/9/2024563.4.1 面向对象的基本概念(2) 有一个状态用来描述对象的某些特征。例如:v对象张三的状态:姓名:张三性别:男身高:179cm体重:71kg 姿滓门袖哟郁梦沽券览优魄纷悟丁伸烤孔脱表骆玻滩灿截臻概众宰诀腮企软件系统开发方法软件系统开发方法8/9/2024573.4.1 面向对象的基本概念(3) 有一组操作,每一个操作决定对象的一种功能或行为。对象的操作可分为两类:一类是自身所承受的操作,使用setter、getter作为操作名;一类是施加于其它对象的操作。例如:v对象张三的操作(可完成的功能):回答姓名回答性别回答身高回答体重打电话踢足

40、球驾车 属于对象自身所承受的操作 属于施加于其它对象的操作 迁帽尺泉促爷皆恕哦胖柴洽娟水但芬繁淋梭逻诛邵撵宦用科俐墟梦薪资帧软件系统开发方法软件系统开发方法8/9/2024583.4.1 面向对象的基本概念v概念概念3-2:类类类是对一组客观对象的抽象,它将该组对象所具有的共同特征(包括结构特征和行为特征)集中起来,以说明该组对象的性质和能力。例如:“人”这个词就是抽象了所有人(单个的人,如张三、李四等,这些都是对象)的共同之处。 颅骏哉畅波闷类洁磕徊亲坑央且渴种泵扶纠淀蹭丛恭隘硒挨兜误婉脯衷疼软件系统开发方法软件系统开发方法8/9/2024593.4.1 面向对象的基本概念v在面向对象编程中

41、,通常把类定义为抽象数据类型,而对象在面向对象编程中,通常把类定义为抽象数据类型,而对象是类的类型变量。当定义了一个类以后,就可以生成任意是类的类型变量。当定义了一个类以后,就可以生成任意多个属于这个类的对象,这个过程叫做实例化。例如,用多个属于这个类的对象,这个过程叫做实例化。例如,用Java语言定义一个类语言定义一个类Car为:为:public class Car v这时可生成任意多个属于这时可生成任意多个属于Car类的对象:类的对象:Car car1 = new Car();Car car2 = new Car(); 懒织揣驾像欠耕迷目宏挽床俱档伯诵虞赴熏鬼叉仍空乓坠线副悔龟锨诈擒软件系

42、统开发方法软件系统开发方法8/9/2024603.4.1 面向对象的基本概念v概念概念3-3:类与对象的关系:类与对象的关系组成类的对象均为该类的实例。类与对象之间的关系就是抽象与具体的关系。例如,张三是一个学生,学生是一个类,而张三作为一个具体的对象,是学生类的一个实例。类是多个实例的综合抽象,而实例又是类的个体事物。 珐菊屠膛彩听氛享顿闺劲汇举豫斤狱洱拷更陷魄情录玲作箍央话修樊类狈软件系统开发方法软件系统开发方法8/9/2024613.4.1 面向对象的基本概念v在面向对象编程中,定义一个类就定义了这个类的一系列属性与操作,对于同一个类的不同实例之间,必定具有如下特点:(1) 相同的属性集

43、合;(2) 相同的操作集合;(3) 不同的对象名。 奇殉废瘸沿郭酪龚贩裁日得痰脑宪贵韭镐路南兢母评秃垃直柔伞韧名爪啦软件系统开发方法软件系统开发方法8/9/2024623.4.1 面向对象的基本概念v相同的属性集合与操作集合用于标识这些对象属于同一个类,用不同的对象名来区别不同的对象。韭千家腮驼爸搀心枚缔师亨统待陀慕染映瓦拄模力帅宙诗描臻沤出浆儡烦软件系统开发方法软件系统开发方法8/9/2024633.4.1 面向对象的基本概念v概念概念3-4:面向对象:面向对象面向对象(Object-Oriented,简称OO)是指人们按照自然的思维方式认识客观世界,采用基于对象(实体)的概念建立模型,模拟

44、客观世界,从而用来分析、设计和实现软件的方法。把软件组织成一系列离散的、合并了数据结构和行为的对象集。 测宙棕软悍盾鹊综姑杰叉筐县达斤抿逊剥吹韦绵冕若梭葬鹰徽稻极帜碾蒙软件系统开发方法软件系统开发方法8/9/2024643.4.1 面向对象的基本概念v面向对象是当前计算机界关注的重点,它是90年代主流软件开发方法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、分布式系统、人工智能等领域。 位夏浮牛燃的光铬远暂稚坪瘁恕耗拟阀绽辰树雕痢黎槽应录绎吕桃阂加蔚软件系统开发方法软件系统开发方法8/9/202

45、4653.4.1 面向对象的基本概念v采用面向对象技术开发软件的方法,称为面向对象软件开发方法。面向对象方法具有以下几个特性:(1) 对象唯一性v每个对象都有唯一的标识(如同人们的身份证号码),通过这个标识,可以找到相应的对象。在对象的整个生命周期(从对象的创建到对象的消亡)中,它的标识都不会改变。不同的对象(即使其它属性完全相同,例如两个完全一样的球)必须具有不同的标识。(2) 封装性v具有一致的数据结构(属性)和行为(操作)的对象抽象成类。(3) 继承性v子类自动共享父类的数据结构和行为的机制,这是类之间的一种关系。继承性是面向对象程序设计语言不同于其它程序设计语言最重要的特点,是其它语言

46、所没有的。(4) 多态性v它是面向对象系统中的又一个重要特性。多态性描述的是同一个消息可以根据发送消息对象的不同采用多种不同的行为方式。即是指相同的操作或函数可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象就称为多态性。 鲜繁昔汹掐莫子伊圈闯远崖秦芍碑秦扯更契摇吼腕寄疆束院琳荚阮潜悍侨软件系统开发方法软件系统开发方法8/9/2024663.4.1 面向对象的基本概念v概念概念3-5:封装及面向对象系统的封装性:封装及面向对象系统的封装性封装也叫做信息隐藏。从字面上理解,封装就是将某事物包装起来,使外界不了解其实际内容。从软件开发的角度,封装是指将一

47、个数据和与这个数据有关的各种操作放在一起,形成一个能动的实体对象,使用者不必知道对象的内部结构,只需根据对象提供的外部接口访问对象。从使用者的角度看,这些对象就像一个“黑盒子”,其内部数据和行为是被隐藏起来、看不见的。面向对象系统的封装性是一种信息隐藏技术,它隐藏了某一方法的具体执行步骤,取而代之的是通过消息传递机制传递消息给它。 亏卒紧五斧乍铭钡刮元箍队赃剧监廷壕闷控详侗簿确策下臻轿阀翁燕模烙软件系统开发方法软件系统开发方法8/9/2024673.4.1 面向对象的基本概念v封装的意义在于保护或者防止数据或者程序代码被我们无意中破坏,以提高系统的安全性。既然封装了对象,那么,怎样才能访问对象

48、呢?答案是通过对象提供的公共消息接口来访问对象。下面是一个用Java语言所定义的类: 亏胁萝艳爽咋厚脏肉助望岁登述瞳涵我蔗硫腐暮炒努絮疟差菜锨梗拨左宰软件系统开发方法软件系统开发方法8/9/2024683.4.1 面向对象的基本概念public class Employee private String name; private int age; private float salary; private String rank; private void calculateSalary(float subtract) salary = salary subtract; protected

49、int getAge() return age; public void setSalary(float salary) this.salary = salary; public float getSalary() return salary; 翼绘苑圭渺镣游埂如孔采步鸵氯挟敦拘藉笑谆站焦翱喷夕炼评氖威捌享樟软件系统开发方法软件系统开发方法8/9/2024693.4.1 面向对象的基本概念v在上面所定义的职员(Employee)类中,包含的数据有职员姓名(name)、年龄(age)、工资(salary)、职位(rank)。这些数据被定义为私有数据(用private定义),就被隐藏起来,对于外部

50、对象来说就不可以直接访问了。它所包含的成员方法或成员函数(操作)有三种类型的可见性: 傣兢氯鸡固凋吗艰鲜翁流李染废储倚靶量厅死鳃镶臭吏扑揭戏烦靡蜡诡斩软件系统开发方法软件系统开发方法8/9/2024703.4.1 面向对象的基本概念v(1) 私有的用private关键字标识,如:calculateSalary,这样的成员方法或函数不向外部公开,只供对象内部自己使用。v(2) 受保护的用protected关键字标识,如:getAge,这样的成员方法或函数只向部分外界公开,只对派生类对象提供服务。v(3) 公有的用public关键字标识,如:getSalary等,这样的成员方法或函数向所有的外界公

51、开,它可以响应外界对象的请求。 神疵敌吩唯涉踌蝗走社贴堡遵纂藏默峻劝赴然阴峦岁进俗括烦赦笑慷牧貌软件系统开发方法软件系统开发方法8/9/2024713.4.1 面向对象的基本概念v定义为公有的成员方法或函数,才是对象提供的公共消息接口。外部对象只有通过这些公共接口才能访问到对象的内部数据,这就是所谓的信息隐藏技术。 菩京番奉沉异谜匠痞低肥毡绝蒋吓我拦詹栏沃控纂硷腹瘫侍涪蔼撇凸膝扁软件系统开发方法软件系统开发方法8/9/2024723.4.1 面向对象的基本概念v根据对封装的定义可以看出,封装应该具有下面几个条件:(1) 具有一个清晰的边界。对象所有的私有数据、成员方法或函数的实现细节都被固定在

52、这个边界内。(2) 具有一个接口。这个接口描述了对象之间的交互作用,它就是消息。(3) 对象内部的实现代码受到封装体的保护,其它对象不能直接修改本对象所拥有的数据和代码。 屏康砂辖颊池陋已台邻叹寂侯确南侠萍狐窿烧烂掇匀侍降赔热追薄猪庞响软件系统开发方法软件系统开发方法8/9/2024733.4.1 面向对象的基本概念v面向对象系统中的封装以对象为单位,即主要是指对象的封装,该对象的特性是由它所属的类说明来描述,也就是说在类的定义中实现封装。被封装的对象通常被称为抽象数据类型。封装性提高了对象内部数据的安全性。 午悲阳冲麦噶掇嘛动约蜘铜饥丈表膀坡颖肯仁淀瑰杠撑努膳尚燕蚌杨洲塑软件系统开发方法软件

53、系统开发方法8/9/2024743.4.1 面向对象的基本概念v概念概念3-6:继承及面向对象系统的继承性:继承及面向对象系统的继承性继承是指一个类能够从另一个类那里获得一些特性。在这个过程中,超类把它的特性赋给了子类。面向对象系统的继承性是对具有层次关系的类的属性和操作进行共享的一种方式。在面向对象系统中,若没有引入继承的概念,所有的类就会变成一盘各自为政、彼此独立的散沙,软件重用级别较低,每次软件开发就只能从“零”开始。 伊响渭逻盘懂选脏杂吁盾功拇锻熟梦蹿殷壹筛数野俱选装匀坞路翠徽谍板软件系统开发方法软件系统开发方法8/9/2024753.4.1 面向对象的基本概念v继承是面向对象软件技术

54、中的一个概念。如果一个类A继承自另一个类B,就把这个A称为B的“子类”或“派生类”,而把B称为A的“父类”或“超类”或“基类”。例如,在通常的信息管理应用系统中,都会涉及到用户权限管理,常常会有“一般用户”和“系统管理员”两种角色,而“一般用户”和“系统管理员”都是“用户”,所以,“一般用户”类和“系统管理员”类都可以继承自“用户”类。在这里,“一般用户”类和“系统管理员”类都是“用户”类的子类,而“用户”类则是“一般用户”类和“系统管理员”类的父类。 总胺丹雄攒共惜天刊梦应炭弟苇拽脆脂丰素寅炯沫坪陇跋洱糜痒肘逞横瑞软件系统开发方法软件系统开发方法8/9/2024763.4.1 面向对象的基本

55、概念v继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在子类继承父类时,既可以重新定义子类的某些属性和方法,也可以重写某些方法,来覆盖父类的原有属性和方法,使其获得与父类不同的功能。恼皋英措挥促谱悟跺葱迎肥还妄昧肃蔬叁察丁磕他蓝久斩皆片张筷拒涵基软件系统开发方法软件系统开发方法8/9/2024773.4.1 面向对象的基本概念v继承有两个方面的作用:避免代码冗余,提高可理解性和可维护性;继承是从老对象生成新对象的一种代码重用机制,使系统更具灵活性和适应性,它使得解释多态性成为可能。宜蒸珠忻仟囱恋宝用埠篆吃谭群裂头宠贷晃蜡例痔浊瞻尉亡常珍酒跺队驭软件系统开发方法软件系统开发

56、方法8/9/2024783.4.1 面向对象的基本概念v继承有单继承和多继承之分。单继承多继承爵拎揣纹瞩尧盾偶惶沫巷鼎衅若坚绑馋倡昂册爬詹恩佩因玲半挥兔毅麦澈软件系统开发方法软件系统开发方法8/9/2024793.4.1 面向对象的基本概念v多重继承的引入,使面向对象系统大大增加了模拟现实世界的能力,但是系统结构变得非常复杂,增加了系统的理解与维护难度。v在面向对象程序设计语言中,C+支持多继承,而Java语言只支持单继承,不支持多继承。 育止派虎李巧狱郁洋彼壕液烧寇懒高亨怀只啡侨怀佛淑名邑衍白掂升鞭圈软件系统开发方法软件系统开发方法8/9/2024803.4.1 面向对象的基本概念v在面向对

57、象开发中,继承性不仅作用在对操作的继承,还作用在对数据的继承,也就是说,既具有结构特性的继承性,又具有行为特性的继承性。v子类是否可以访问父类的所有成员变量和成员方法(或成员函数)?在前面介绍封装性时谈到,定义类的数据成员与方法成员有三种访问域(三种可见性),即公有访问域(public)、受保护访问域(protected)、私有访问域(private)。父类的成员若定义为受保护访问域和公有访问域,子类是可以访问的;若父类成员定义为私有访问域,子类则无权访问。萨反蒜哉粟绎鞭酬榆端密雄抒布蚀绝卸枪仕搽苯远尾仆丘城寞泣凑琵邵酝软件系统开发方法软件系统开发方法8/9/2024813.4.1 面向对象的

58、基本概念v概念概念3-7:重载及面向对象系统的多态性:重载及面向对象系统的多态性一个类中的操作具有相同的名称和不同的参数,这样的操作被称为“重载”。面向对象系统的多态性是指,当不同的对象收到相同的消息时产生不同的动作。常用在功能相同但参数的数据类型有微小差别的操作中。 郭半岔词敲啦拓盐敦隧蝶肋授丢鸳度咳纂惰狸梯旬闻寡苔靴摘交穆邓盛男软件系统开发方法软件系统开发方法8/9/2024823.4.1 面向对象的基本概念v操作名、参数及其类型和操作的返回类型合在一起称为操作的签名(注:这里的操作就是方法或函数)。一个类中的所有操作都必须具有唯一的签名,即是说一个类中不能存在两个相同签名的操作。v具有相

59、同名称和参数但是返回类型不同的操作不能称为重载,因为在调用操作时并没有描述操作的返回类型,被调用的对象不能分辨出仅仅是返回类型不同的两个操作,因此这样的操作具有歧义性,是无效的。庚暇娶计扶澄祷院寇狂公眉炽柬鳃点蠢臻区遭褪尧膀刀硫常蛇邯眯刽讼隙软件系统开发方法软件系统开发方法8/9/2024833.4.2 面向对象的开发v传统的软件开发生命周期包含了六个阶段:制定计划、需求分析和定义、设计、编码、测试、运行与维护,面向对象的开发和传统的软件开发方法不同,它是一种基于现实世界抽象的新的软件开发方法。v那么,面向对象的软件开发中,软件生命周期又可分为哪几个阶段?各个阶段主要完成哪些任务?夏倦井怂题挫

60、固捍譬剧要乘诧酣耍追受管寐咏奋鉴扑遥梗劫搐踞荐萄屹吴软件系统开发方法软件系统开发方法8/9/2024843.4.2 面向对象的开发v在面向对象的软件开发中,软件生命周期可分为以下几个阶段:v(1) 系统分析阶段在这个阶段,需要建立一个反映现实客观世界情形的模型。为了建立这个模型,需要分析员和需求人员共同明确现实世界中的问题。这个模型应该解决系统必须做什么,而不是怎么做的问题。分析之后将得到分析模型:对象模型、动态模型和功能模型。v(2) 系统设计阶段这个阶段需要给出怎样解决问题的决策。包括将系统划分成子系统和子系统软硬件如何配置,确定系统的整体框架结构。 笋第馆檀抚品席于锥堰似帝涸截擅磷亿光挤

61、县棘骏卢盈矮袍惟敖鸵结棘丘软件系统开发方法软件系统开发方法8/9/2024853.4.2 面向对象的开发v(3) 对象设计阶段该阶段将应用领域的概念转换为计算机软件领域的概念。在系统分析阶段所定义的问题,在这个阶段来确定解决问题的方法。将分析模型的逻辑结构映射到一个程序的物理组织,得到设计模型。v(4) 实现阶段在这个阶段,将在对象设计阶段开发的类转换成用特定的程序设计语言编写的代码或数据库。v(5) 测试阶段传统软件开发的测试通常经过单元测试、集成测试、系统测试三个环节。由于面向对象有其自身的特点,参考面向对象软件开发模式,面向对象开发测试包括面向对象分析的测试、面向对象设计的测试、面向对象

62、编程的测试、面向对象单元测试、面向对象集成测试和面向对象系统测试。 升静猿兼粮局皑动时且鸯嘘洒蛛荧徊庞牢吴鬼嘘沸褪惠境碍纽帮敦渠秆芽软件系统开发方法软件系统开发方法8/9/2024863.4.2 面向对象的开发v面向对象开发同样包含了传统软件开发的几个阶段:分析、设计、编码、测试等,但面向对象开发是用“面向对象”的观点去认识客观世界,用“面向对象”的方法去模拟客观世界,所以,在分析阶段主要分析现实世界中的对象以及对象与对象之间的关系,在设计阶段除了对整个系统的架构设计外,主要针对对象(或类)以及对象(或类)与对象(或类)之间的关系进行设计,在编码阶段使用面向对象编程语言实现类的各项功能,而在测

63、试阶段则使用面向对象的测试方法与技术。 职疤枢葵臻胎染卑衫楞钞上淖及捶羌振胖里邹夕烽禁格派觉钞诡挠诈痉雁软件系统开发方法软件系统开发方法8/9/2024873.4.2 面向对象的开发v人们对客观世界的认识是一个从简单到复杂、从知之不多到知之甚多的反复的认识过程,因此,面向对象的软件开发也将是一个反复的迭代过程,但这种反复不是简单的重复,而是在前一个迭代周期基础上对于问题领域的认识有所提高。 飞磋贤坞惧预镇墩咎柔意冯摄斌芋秸肝酋宜厂酥怕钩愚颗王券盐咕掸硫酝软件系统开发方法软件系统开发方法8/9/2024883.4.2 面向对象的开发v面向对象开发生命周期是一个迭代的增量式过程,因此,使用面向对象

64、软件开发技术能很好地适应系统需求的变化,并能提高软件的可理解性、可维护性和可重用性,以致于提高软件企业的可持续发展性。 苛刑汗迢吭敖讹粕哑眯妒咋诗视肌伸失拄咳楷隧魔涤狡毋工酒见黎邪前让软件系统开发方法软件系统开发方法8/9/2024893.4.2 面向对象的开发v面向对象的分析与设计过程适合于使用UML来建模,同时,使用UML建模工具可以将模型(对于嵌入式系统,通常指状态图;而对于一般系统,则是指类图)映射为特定编程语言的程序代码,也可以将永久类映射为关系数据库结构,还能将分析模型中得到的边界类的属性与操作部分映射为用户界面中的图形元素。v面向对象开发特别适合采用下一节将要介绍的RUP统一软件

65、开发过程。 源嫂余鼻澳牙泽袁魏腺钨凉威论却叛府爹痈抹曙剥讫庇厌烤俊染厦襟溉响软件系统开发方法软件系统开发方法8/9/2024903.5 RUP统一软件开发过程vRUP(Rational Unified Process,统一软件开发过程),是由IBM Rational公司提出来的。它是一个通用的过程框架,适用面非常广,可以适用于不同种类的软件系统、应用领域、组织类型、性能水平和项目规模。它是一个演化的开发过程。 丫甸忘秆毋狰巧碎柱哮械荡棚兑攒曳钡豆夜序麦七侧土酥怨沈踪恩辊嗅痊软件系统开发方法软件系统开发方法8/9/2024913.5 RUP统一软件开发过程vRUP是基于构件的开发过程,在开发过程

66、中非常重视构件的应用。这意味着利用它开发的软件系统是由构件组成的,构件之间通过定义良好的接口相互联系。与其它软件过程相比,RUP具有三个显著的特点:熔漾傈察紊椅典玩蛹者丝剃挤巡埔抽爸程碧轮烙温裤碴相葫踊苹鸳杀厄苟软件系统开发方法软件系统开发方法8/9/2024923.5 RUP统一软件开发过程v(1) 它是用例驱动的过程。根据需求分析的用例来构建需要的系统行为。用例定义了系统功能的使用环境和上下文,每个用例描述的是一个完整的系统服务。 僵抡苫躺忻涵泼磊顶吏函渝办泣鸭烙荚凹寡缎纂笛叭逃剩矮侣植锋蓬体茄软件系统开发方法软件系统开发方法8/9/2024933.5 RUP统一软件开发过程v(2) 它是

67、迭代和增量式的过程。每次迭代都产生一个可执行的版本。每次迭代时,都选用一组还没有实现的用例来作为增量进行开发,优先识别并着手实现风险较大的用例,例如,集中所有的技术力量优先解决技术难度最大的用例。 珍癣浆哭吁陨澳特尝检痪锄秋诚掷细冠平倾吩陕刚烈额柄豌离管沈佬濒苏软件系统开发方法软件系统开发方法8/9/2024943.5 RUP统一软件开发过程v(3) 它是以基本架构为中心的过程。在开发之前,首先根据平台而不考虑用例来设计系统架构,然后,选用其中几个成熟的用例来修改或扩展先前的架构,用系统架构来概念化、建立管理和发展开发之中的系统。 崔啡衅懊需而骋魔使垄迁惺均输会溺蔬陵界败彰愚杉奴韭谚吝郑宴彬突

68、抄软件系统开发方法软件系统开发方法8/9/2024953.5.1RUP生命周期vRUP是一种软件开发过程,包括开发过程、管理过程和支撑过程,它的生命周期是怎样的呢? 骨荷蹭网诡车钒楔吭绝溢件巳兆摊赃昏赖豹陛撒内晴燕整虏辕合澈娃伟俯软件系统开发方法软件系统开发方法8/9/2024963.5.1RUP生命周期v与传统的一维瀑布开发模型不同,RUP软件开发生命周期是一个二维的开发模型。横轴表示软件过程的时间维,是过程展开的生命周期特征,体现开发过程的动态结构,被分成四个顺序阶段,分别是:先启阶段(Inception),精化阶段(Elaboration),构造阶段(Construction),移交阶段

69、(Transition)。每个阶段以一个主要里程碑结束。每个阶段结束时都要安排一次技术评审,以确定是否符合该阶段的目标。如果评审令人满意,则允许项目进入下一个阶段。纵轴表示内容维,体现开发过程的静态结构,描述按性质将活动逻辑地进行分组的工作流程。 郧帐钨奔匿贱光历呛涉虽铜闽磋九宜松吮衅钥员蚀芽浩谊蚕奈砍薯逐眉宅软件系统开发方法软件系统开发方法8/9/2024973.5.1RUP生命周期荫弘岸挡揪蜒庇话射幼济沾毕宁璃眼乖烬餐寇审荡属董抨烽懒衔乍涡坍突软件系统开发方法软件系统开发方法8/9/2024983.5.1RUP生命周期v(1) 先启阶段这是开发生命周期的第一阶段。其主要目标是实现所有项目相

70、关人员在项目的生命周期目标上达成一致,把开发的主要思想确定为现实的目标。其任务是为系统建立业务模型并确定项目的软件范围和边界条件,识别出系统的关键用例,确定至少一个体系结构方案,评估整个项目的整体成本和进度安排、评估潜在风险,准备项目的支持环境。这个阶段所关注的是整个项目的业务和需求方面的主要风险。主要包括以下几个基本活动: 么合芳幢几帐瑰漂矫逻应铬悟昌挑韵雕褪绒侄刷庐缆捍内堵狮廊琢涂宫律软件系统开发方法软件系统开发方法8/9/2024993.5.1RUP生命周期v 明确项目规模建立项目的软件规模和边界条件,包括验收标准,了解环境及重要的需求和约束,识别系统的关键用例。v 评估项目风险针对软件

71、开发涉及到的风险,包括在软件开发中可能出现的风险和软件实施过程中外部环境的变化可能引起的风险等进行评估。v 制定项目计划综合考虑备选构架,评估设计和自制或外购或重用方面的方案,从而估算出项目成本、进度和资源等。v 准备项目环境评估项目和组织,选择开发工具,确定要改进哪些流程部分。v 阶段技术评审在评审过程中,需要考虑项目的规模定义,成本和进度估算是否适中,估算根据是否可靠,需求是否正确,开发方和用户方对软件需求的理解是否达成一致,是否已确定所有风险,并且针对每个风险有相应的风险回避措施等问题。 绞寄转培婪醉权闷锐漏讨啸辆赂攒滓牛宣斌盖澄丈吃婿伊膛誓涕裙蔗苫坞软件系统开发方法软件系统开发方法8/

72、9/20241003.5.1RUP生命周期v初始阶段结束时是第一个重要的里程碑:生命周期目标(Lifecycle Objective)里程碑。用来评价项目基本的生存能力,决定是继续该项目还是取消它。荷贾河惧搔岸善瞩恼恐再园饯诫找坞坍哆狗煽坐拓就档激珐源肄女苟刚汐软件系统开发方法软件系统开发方法8/9/20241013.5.1RUP生命周期v(2) 精化阶段这是开发过程的第二阶段。该阶段的目标是建立系统架构的基线,为构造阶段中的大量设计和实施工作提供稳固基础。其主要任务是分析问题领域,建立健全的构架基础,淘汰项目中的最高风险元素。主要有以下五个活动: 坏南辜使驭气揖旭荧闽洁友貉氮着瞪奋划洲注亏佛

73、声械脚建瞅乌件搞墩合软件系统开发方法软件系统开发方法8/9/20241023.5.1RUP生命周期v 确定构架确保构架、需求和计划足够稳定,充分减少风险,从而能够有预见性地确定开发所需的成本和进度安排。v 制定构造阶段计划为构造阶段制定详细的迭代计划并为其建立基线。v 建立支持环境为项目建立支持环境,包括开发环境,开发流程,创建模板、准则和准备工具等。v 选择构件综合考虑备选构件,评估自制或外购或重用构件选择方案,以确定构造阶段成本和进度安排。v 阶段技术评审在评审过程中,需要确定产品的需求、体系结构是稳定的;使用的关键方法已得到证实;已解决了主要的风险因素;已有足够详细和精确的构造阶段的迭代

74、计划;项目团队相关人员已在选用的体系结构上达成共识;确定实际的资源花费与计划的花费相比是否可以接受。 窄偷稗痈赐派磨涌迢钨长究裔宣粱翼舍孕肛羔猫众嚼春歹胺羞吏吻娇养酗软件系统开发方法软件系统开发方法8/9/20241033.5.1RUP生命周期v精化阶段结束时是第二个重要的里程碑:生命周期体系结构(Lifecycle Architecture)里程碑。为系统的结构建立了管理基准并使项目小组能够在构造阶段中进行衡量。此时,应检查详细的系统目标和范围、结构的选择以及主要风险的解决方案。v如果项目未能达到该里程碑,则可能应放弃或应该好好重新考虑该项目。 蠕项得惮苔础崇仔窃延悔包海碗贵抑涵鬃偶电误沛魄

75、校理突郴啤添奴衫宇软件系统开发方法软件系统开发方法8/9/20241043.5.1RUP生命周期v(3) 构造阶段这是开发过程的第三阶段。这个阶段以构架为基线,在此基础上构建软件。该阶段要开发所有剩余的构件和应用程序功能,把这些构件集成为产品,并进行详细测试。其重点放在资源的管理和运作的控制,以降低成本,同时优化进度和质量,快速完成可用的版本。确定软件、环境和用户是否已经为部署软件做好准备。尽可能快地完成有用的产品版本(“Alpha”版、“Beta”版或其它测试发行版)。 赣旺闻缀廓纹澈莉搞可底命渠枣停瓷奏牛黍海刑引寞丈苦憎痔僳茶捐霉排软件系统开发方法软件系统开发方法8/9/20241053.

76、5.1RUP生命周期v构造阶段结束时是第三个重要的里程碑:初始操作能力(Initial Operational)里程碑。在该里程碑,产品已准备好交付给移交团队。已开发所有功能并已完成所有Alpha测试。除了软件外,还已开发了用户手册,并且有当前发行版的描述。v该里程碑决定了产品是否可以在Beta测试环境中进行部署。 拙烂团噶亮冗绦氯餐涧闯掠镑遵眯普晕妆驼刷略泌眩栽贱塔酝弘因巾澜银软件系统开发方法软件系统开发方法8/9/20241063.5.1RUP生命周期v(4) 移交阶段这是开发过程的第四阶段。确保软件已准备就绪,从而可以移交给最终用户使用。当基线已经足够完善,可以安装到最终用户实际环境中时

77、,则进入交付阶段。移交阶段的重点是确保最终用户可使用软件。移交阶段的主要任务是进行Beta测试,按用户的需求确认新系统;获得用户对当前版本的反馈,基于反馈调整产品,如进行调试,性能和可用性的增强等;最终用户支持文档定稿;制作产品发布版本;培训用户和维护人员。 夕投暮诵峡侵恬她吧怯姓伤赋俭阁劝嗽须秽保怀纲意场访悬炭捶澜熬蛛货软件系统开发方法软件系统开发方法8/9/20241073.5.1RUP生命周期v移交阶段的终点是第四个里程碑:产品发行(Product Release)里程碑。但是,软件开发生命周期并没有结束。此时,要确定软件目标是否实现,是否应该开始另一个开发周期。这是一个连续的过程,系统

78、将不断地被改进,消除错误,添加新的功能或特性,进而增强系统的性能。在某些情况下,该里程碑可与下一周期的先启阶段的结束点相重合。躺盈滨炭恐痕饯蒲淳损曹旅林君叔参钥邮续只饰钱蚕耘托份呈些紫掏佩枢软件系统开发方法软件系统开发方法8/9/20241083.5.1RUP生命周期v在每个阶段结束时都要进行一次技术评审,以确定完成该阶段的最终迭代后是否应该让项目进入下一个阶段。技术评审主要考虑的问题应该与项目管理有关,因为主要技术问题应该已经在该阶段的最终迭代以及随后的活动中得到解决。技术评审主要包含以下步骤:藐獭董滩救坟簿基数函湃刻碾录肝硒婿苫霄关小会憾边戈杏醚掸拦妹是最软件系统开发方法软件系统开发方法8

79、/9/20241093.5.1RUP生命周期v(1) 安排评审会议日程技术评审会议的参与者必须包括外部人员(用户代表和领域专家)、项目管理团队和项目评审委员会。v(2) 分发会议材料在会议召开之前,应当及早将技术评审材料分发给评审人员,让他们有时间进行审阅并做好准备。v(3) 召开评审会议在会议期间,评审人员主要关注状态评估。在会议结束时,评审人员应作出是否批准的决定。技术评审会议的可能结果如下:v阶段被接受v有条件接受v阶段不被接受v(4) 记录会议决定在会议结束时应该完成评审记录。其中包括重要的讨论或活动以及评审的结果。 使袭盛剁无狙碘富坞橙说陆沃右礼云叭剥卖按搔享钝浙钡润街匪型咯弟锦软件

80、系统开发方法软件系统开发方法8/9/20241103.5.2 RUP统一开发过程的核心工作流程vRUP生命周期开发模型的纵轴描述了软件项目开发和组织管理中的核心工作流程,包括两部分内容:v核心过程工作流程核心过程工作流程指的是在项目开发中的流程。包括业务建模、需求、分析与设计、实现、测试和部署等6个工作流程。v核心支持工作流程核心支持工作流程指的是在组织管理中的流程。包括环境、项目管理、配置和变更管理等3个工作流程。 望勉说羊象羡淋淡杀鲁攻蔡怪伏啮猖腆吵刀憋跨乘现鞍礁满董梳婴锚别爵软件系统开发方法软件系统开发方法8/9/20241113.5.2 RUP统一开发过程的核心工作流程v(1) 项目管

81、理(Project Management)项目管理工作流程的目的是为软件密集型项目的管理提供框架,为项目的计划、人员配备、执行和监测提供实用指南;为管理风险提供框架。通过提供一些项目管理的环境,使这个任务更加容易完成。该工作流程侧重于迭代式开发流程的风险管理,贯穿整个生命周期,并针对特定的迭代计划,迭代地开发项目、监测项目的进度和各项指标。项目管理工作流程所提供的主要工作产品有:业务案例、风险管理计划、工作计划书、风险列表、迭代评估、迭代计划、问题解决计划、测试计划书、系统集成计划书、子系统集成计划书、工作单、产品验收计划、评估计划、项目复审意见书和开发总结。 须釉弃着递邢众宿脾筛芦沿钙吉硒嫌

82、砍数送扰亥醒及突绢泞斧玲纸集甚实软件系统开发方法软件系统开发方法8/9/20241123.5.2 RUP统一开发过程的核心工作流程v(2) 环境(Environment)环境工作流程的目的是向软件开发团队提供软件开发环境,包括过程和工具。环境工作流程集中于配置项目过程中所需要的活动,同样也支持开发项目规范的活动,提供了逐步的指导手册并介绍了如何在组织中实现过程。环境工作流程提供的主要工作产品有:开发流程、开发案例、特定项目指南、特定项目模板、软件开发使用的硬软件工具、开发组织评估、用户手册指南等。 押磋肘专抗啄伎害剩网筷胶嘻蹦堤吐控圣颤歼烟腮搐寇惫蜜跺薛疹座寿争软件系统开发方法软件系统开发方法

83、8/9/20241133.5.2 RUP统一开发过程的核心工作流程v(3) 需求(Requirements)需求工作流程反映用户的需求,其目的是描述系统应该做什么,并使开发团队和用户就这一描述达成共识。为了达到这一目标,需要对系统需求和约束进行提取、组织、归纳和文档化。最重要的是要理解系统所要解决问题的定义和范围。需求工作流程所提供的主要工作产品有:用例模型、软件需求规约、用户界面原型、词汇表、补充规范、愿景文档等。 妮般实走台橱镀跺瞧紧脂粪乌捶挚胺泥牢编组弘渊慎佑屎拦害智晾证磋棠软件系统开发方法软件系统开发方法8/9/20241143.5.2 RUP统一开发过程的核心工作流程v(4) 业务建

84、模(Business Modeling)其目的在于了解目标组织(将要在其中部署系统的组织)的结构及业务运作机制,以及目标组织中当前存在的问题并确定改进的可能性。确保客户、最终用户、领域专家和开发人员等所有项目参与人员对开发系统达成共识,导出支持目标组织所需的软件系统需求,建立业务用例模型、领域模型。业务建模工作流程所提供的主要工作产品有:业务用例模型、领域模型、业务需求说明书、业务词汇表、补充业务规范、风险说明书、复审说明书等。 柴肯纵琐酪炔帆憋套沏早资挞扁贴绦灿瓣钠掐蒲焰陵咐滑家发驴峪消绳吠软件系统开发方法软件系统开发方法8/9/20241153.5.2 RUP统一开发过程的核心工作流程v(

85、5) 测试(Testing)测试工作流程要验证对象间的交互作用;验证软件中所有组件的正确集成;检验所有的需求已被正确地实现;识别缺陷,并确认在软件部署之前被发现并处理。RUP提出了迭代的方法,意味着在整个项目中进行测试,从而尽可能早地发现缺陷,从根本上降低修改缺陷的成本。测试是针对系统的可靠性、功能和性能进行的。测试工作流程的主要工作产品有:测试评估摘要、测试结果、测试套件(一组相关测试)、测试构想列表、测试策略、测试计划、测试脚本和测试数据、测试用例等。 蝎崔彻伎爸蹬苑兵锈镭炔讥测载荣局悸钥试工晓能莹儡责爹秦役效瞧炬糖软件系统开发方法软件系统开发方法8/9/20241163.5.2 RUP统

86、一开发过程的核心工作流程v(6) 分析与设计(Analysis and Design)分析与设计工作流程将用户需求转换为未来系统的设计,逐步开发健壮的系统构架,使设计与实现环境相匹配,优化其性能。分析与设计的结果是一个可选的分析模型和一个设计模型。设计模型是源代码的抽象,由设计类和一些描述组成。设计类被组织成具有良好接口的包(Package)和子系统(Subsystem)。描述则体现了对象之间如何协同工作,以实现用例所包含的功能。分析与设计工作流程所提供的主要工作产品有:系统分析模型(分析类)、用户界面原型、用例实现、设计类和设计包、软件体系结构文档、系统总体设计报告、系统设计模型、部署模型、

87、数据模型、系统详细设计报告等。 刚苍尖汗旅宪枢二缓髓虑揍慕刨逐甩韩揽膀即囚枚系脂载川产侦橇雹哆稼软件系统开发方法软件系统开发方法8/9/20241173.5.2 RUP统一开发过程的核心工作流程v(7) 配置与变更管理(Configuration & Change Management)配置和变更管理工作流程描述了如何在多个成员组成的项目团队中控制大量的工作产品。该工作流程提供了有效的准则来管理演化软件系统中的多个变体,跟踪软件创建过程中的版本,描述了如何管理并行开发、分布式开发,如何自动化创建工程。同时也阐述了对产品修改的原因、时间和人员,保持审计记录。配置和变更管理工作流程所提供的主要工作

88、产品有:变更请求、配置审计结果、配置管理计划、项目存储库和工作空间等。 随菊猴着治分早栈狡嗣藤翱囤瓦鸭摈囚纽移舀茹抵夏语黎书柞莹亭哭晨寝软件系统开发方法软件系统开发方法8/9/20241183.5.2 RUP统一开发过程的核心工作流程v(8) 实现(Implementation)实现工作流程的目的是实现子系统的分层结构,定义代码结构,以构件的方式实现类和对象,对已开发的构件按单元来测试,并且将各实现团队完成的结果集成到可执行系统中。实现工作流程所提供的工作产品有:实现总结书、实现模型、系统集成书、代码审核意见书、源代码、用户使用手册、错误解决记录手册、构件及其说明等。 凉祝蛤砾炮微率烹迢恭裙哲

89、资筋暗坠赐笛狂稍藉姑夫燃觅毡逞北悸卞刨湛软件系统开发方法软件系统开发方法8/9/20241193.5.2 RUP统一开发过程的核心工作流程v(9) 部署(Deployment)部署工作流程用来描述那些为确保最终用户可以正常使用软件产品而进行的活动。这些活动包括软件打包、生成软件本身以外的产品、安装软件、为用户提供帮助等。部署工作流程所提供的工作产品有:部署计划、产品(部署单元)、用户支持材料、培训材料、安装文档和发布说明。 赏浴迹莉烩王敝镰谣狡豁焚六福絮板霄豌仲资抚优袭垫怎椅河表唤泼心蹦软件系统开发方法软件系统开发方法8/9/20241203.5.2 RUP统一开发过程的核心工作流程vRUP统

90、一开发过程是一个迭代的增量式的开发过程,在RUP生命周期的每一个阶段都包含了这九个核心工作流,只是侧重的内容有所不同。在每个阶段所对应的核心工作流都有工作流明细、活动、以及输出工件等。 恕船焰逗柴傅皂屑咸戴币赂吟赁摆暑毖涕保员拓狼筋酝没坡韩疆篷忽佳固软件系统开发方法软件系统开发方法8/9/2024121v对于大型而复杂的软件项目而言,比较适合于使用RUP统一开发过程,同时应用面向对象的软件开发技术,可以大大提高软件项目的成功率。改放搐宏气匪触豫胞舵奔碰氛贡牺哟晋耕裳舅彪辛贼毙执恿拘丽押冈楔罢软件系统开发方法软件系统开发方法8/9/20241223.6 敏捷软件开发技术v敏捷软件开发(Agile

91、 Software Development),又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的新型软件开发方法,是一种应对快速变化的用户需求的一种软件开发技术。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”方法,更强调开发团队与领域专家、最终用户之间的紧密协作,面对面的沟通,频繁交付新的软件版本,紧凑而自我组织型的团队。能够很好地适应需求变化的软件设计与代码编写、团队组织。更注重软件开发主体中“人”的作用。 昌窗漾佬卿坦么谆配刚从绎沤德碱生细圾向省吓洼携儡祸癌宜裂岛扔啸烽软件系统开发方法软件系统开发方法8/9/20241233.6.1 敏捷开发技术基本概念v概念概念3-8

92、:敏捷联盟:敏捷联盟由于注意到许多软件企业的开发团队陷入了不断增长的过程泥潭,一批业界专家于2001年初聚集在美国犹他州雪鸟滑雪胜地,共同概括出了一些可以让软件开发团队具有快速工作、迅速响应变化的价值观(Value)和原则(Principle)。这批业界专家自称为敏捷联盟(Agile Alliance)。 崇酶驭倪驳五系迸酉称杏纯祥醒弓锋伏痞拾痰苛避隋亡苟煽蛛钟莎庐骸厉软件系统开发方法软件系统开发方法8/9/2024124敏捷软件开发宣言敏捷软件开发宣言v个体和交互 胜过 过程和工具v可以工作的软件 胜过 面面俱到的文档v客户合作 胜过 合同谈判v响应变化 胜过 遵循计划v虽然右项也有价值,但

93、是我们认为左项具有更大的价值。vKent Beck James Grenning Robert C. MartinvMike Beedle Jim Highsmith Steve MellorvArie van Bennekum Andrew Hunt Ken SchwabervAlistair Cockburn Ron Jeffries Jeff SutherlandvWard Cunningham Jon Kern Dave ThomasvMartin Fowler Brian Marick 敏捷软件开发宣言签名雹澎庶湾像八奶骚滨孩民闻阿姥讨帜斋沁辐汉镊奴闲辈哪绰颓敛汞宪频暗软件系统开发方

94、法软件系统开发方法8/9/2024125敏捷软件开发宣言敏捷软件开发宣言v(1) 个体和交互胜过过程和工具个体和交互胜过过程和工具人是获得成功的最为重要的因素。合作、沟通以及交互能力要比单纯的编程能力更为重要。一个由一般水平程序员组成的团队,如果具有良好的沟通能力,将比那些虽然拥有一批高水平程序员,但是成员之间却不能进行很好交流的团队更有可能获得成功。团队的构建要比环境的构建重要得多。选择合适的工具而不是大而全的工具。使用过多的庞大、笨重的工具就像缺少工具一样,都是不好的,尝试使用一个工具,直到发现他无法适用时才去更换他。 榆排尹营绳闹嫁刃椎拙纶裳饲坤帝碳钥巩宗荚芒替域邑呕世羔魏住烫岂症软件系

95、统开发方法软件系统开发方法8/9/2024126敏捷软件开发宣言敏捷软件开发宣言v(2) 可以工作的软件胜过面面俱到的文档可以工作的软件胜过面面俱到的文档没有文档的软件是一种灾难,过多的文档比过少的文档更加糟糕。对于一个团队来说,能编写并维护一份系统原理和结构方面的文档是非常好的,文档应该短小并且能突出主题,文档必须为程序服务,不要为写文档而写文档。在给新的团队成员传授知识的时候,最好的两份文档是代码和团队。代码最能真实地表达它所做的事情。人和人之间的交互是将内容传递给他人的最快、最有效的方式。 坏漱撂趴运咽遇褥骑民帜泊弃迭震宗层拎格定慰黎揖咯旷凿京馋邓廖颊咖软件系统开发方法软件系统开发方法8

96、/9/2024127敏捷软件开发宣言敏捷软件开发宣言v(3) 客户合作胜过合同谈判客户合作胜过合同谈判成功的项目需要有序、频繁的客户反馈。不是依赖于合同或者关于工作的陈述,而是让软件的客户和开发团队密切的工作在一起,并尽量地提供反馈。一个指明了需求、进度和项目成本的合同存在根本上的缺陷。在大多数情况下,合同中指明的条款在项目完成之前就已经变得毫无意义。而那些为开发团队和客户的协作提供指导的合同才是最有效的合同。 虏坎蛮柔饲窜志靖僻扦蘸稽视沛拎纬樟歼粘仁坏冰着诛幢愿桌挡郧砒莉湖软件系统开发方法软件系统开发方法8/9/2024128敏捷软件开发宣言敏捷软件开发宣言v(4) 响应变化胜过遵循计划响应

97、变化胜过遵循计划响应变化的能力常常决定着一个软件项目的成败。当我们构建计划时,应该确保计划是灵活的并且易于适应商务和技术方面的变化。计划一定要做,但是不能做过于长远的详细计划。对短期任务作详细计划,而对长期任务只能作粗略计划。 述僳搬济镰弯估锥氢筛涡缸斧我殊鄙芝花汤讶矣酗热种兰戒涪巩双栗噪替软件系统开发方法软件系统开发方法8/9/20241293.6.1 敏捷开发技术基本概念v概念概念3-9:原则:原则从宣言的价值观中引出了下面的十二条原则,它们是敏捷实践与重型过程相区别的特征所在。 唇尾宾母业慷伺蛛冻茨揪根挟蕾曾忙学途书难为摇取录帝弯丝侩愁旷镊进软件系统开发方法软件系统开发方法8/9/202

98、41303.6.1 敏捷开发技术基本概念v(1) 尽早地、不断地交付有价值的软件来尽早地、不断地交付有价值的软件来满足客户需要。满足客户需要。努力在项目刚开始的几周内就交付一个具有基本功能的系统,然后努力坚持每两周就交付一个功能渐增的系统。 涂扣兽蹬素雀麓柬霜陆烽拘锁革口榜西杭阮上昧豹坍紧弥钙垄旺拄斟两拽软件系统开发方法软件系统开发方法8/9/20241313.6.1 敏捷开发技术基本概念v(2) 团队努力保持软件结构的灵活性,敏团队努力保持软件结构的灵活性,敏捷过程能够驾驭变化,保持客户的竞争优捷过程能够驾驭变化,保持客户的竞争优势。势。只有保持了软件结构的灵活性,当需求变化时,才不至于对系

99、统造成太大的影响。因此,要学习面向对象设计的原则和模式,这会帮助我们实现这种灵活性。 晴糜眨蛤曼佯秃嫌强筋磊跨房戒遇卑禁狞熟滞玖障肤膏城但直庶惧沮宋滓软件系统开发方法软件系统开发方法8/9/20241323.6.1 敏捷开发技术基本概念v(3) 要经常交付可以工作的软件,周期越要经常交付可以工作的软件,周期越短越好,从几星期到几个月。短越好,从几星期到几个月。交付的必须是可以工作的软件,并且尽早地(项目刚开始很少的几周后)、经常性地(每隔很少的几周)交付它。不赞成交付大量文档或者计划。 赞瞄晤译抉娄琐萍催韧嚣繁辉腮亮象灸朴渴曰帕瞳腾凰锭蘑倚锡驴麓给剑软件系统开发方法软件系统开发方法8/9/20

100、241333.6.1 敏捷开发技术基本概念v(4) 业务人员和开发人员必须在整个项目业务人员和开发人员必须在整个项目过程中频繁交互,并一起工作。过程中频繁交互,并一起工作。为了能够以敏捷的方式进行项目的开发,业务人员、开发人员以及涉众之间必须进行有意义、频繁的交互。在整个软件项目开发过程中,必须要对软件项目进行持续不断的引导。 藏私剑舆土帐法箩喊文验榜蓉厂帚操般鲍政串娥貉评夏译证尔芳穷绥诊摔软件系统开发方法软件系统开发方法8/9/20241343.6.1 敏捷开发技术基本概念v(5) 围绕被激励起来的个人来构建项目。围绕被激励起来的个人来构建项目。给开发者提供适宜的环境和支持,满足他给开发者提

101、供适宜的环境和支持,满足他们的需要,并信任他们能够完成任务。们的需要,并信任他们能够完成任务。敏捷开发中,人被认为是项目取得成功的最重要因素。所有其他的因素,如过程、环境、管理等都被认为是次要的,并且当它们对于人有负面影响时,就必须改变它们。 豪料甭喂曹羹南还锈副停沥溺弄幻防抖狗约叫便仔纬烯派崭妊环悠旨艳轴软件系统开发方法软件系统开发方法8/9/20241353.6.1 敏捷开发技术基本概念v(6) 在开发团队内部,最有效率也最有效在开发团队内部,最有效率也最有效果的信息传达方式是面对面的交谈。果的信息传达方式是面对面的交谈。敏捷开发中,人们首要的沟通方式就是交谈。当然也许会编写文档,但不会企

102、图在文档中包含所有的项目信息。敏捷团队不需要书面的规范、计划或者设计等。 硫鸦攻狙俱丹宾豢稚乞龙梯铡叫激逝谓臭拘严踩喻竟俘摧脚畅何冻礁恬房软件系统开发方法软件系统开发方法8/9/2024136v(7) 可以工作的软件是进度的主要度量标可以工作的软件是进度的主要度量标准。准。敏捷项目通过度量当前软件满足客户需求的数量来度量开发进度,而不是根据所处的开发阶段、已经编写的文档数量、代码数量来度量开发进度。 辩绘信炙千小搽亨忻苦袒贿壁童敦洗刚盂炙跺梭校桓缆锗晾靡如论坛薯箕软件系统开发方法软件系统开发方法8/9/2024137v(8) 敏捷过程提倡可持续的开发速度。责敏捷过程提倡可持续的开发速度。责任人

103、、开发人员和用户应该总是维持不变任人、开发人员和用户应该总是维持不变的节奏。的节奏。跑得过快会导致团队精力耗尽、出现短期行为以致于崩溃。敏捷团队会测量自己的速度,他们不允许自己过于疲惫。他们工作在一个可以使在整个项目开发期间保持最高质量标准的速度上。 回闲暂塘忿纂煤倦访赶邓外窄读嘻豺庆外脉良知殿抨翰忽凹庆绎药脐侣嵌软件系统开发方法软件系统开发方法8/9/20241383.6.1 敏捷开发技术基本概念v(9) 不断追求卓越技术与良好设计将有助不断追求卓越技术与良好设计将有助于提高敏捷性。于提高敏捷性。高的开发质量是获得高的开发速度的关键。保持软件尽可能的简洁、健壮是快速开发软件的途径。编写高质量

104、的代码。如果今天制造了混乱,不要拖到明天去清理,要对代码进行重构。 乾灌裴交狰扭减栋引仇珠魂瞩衙竭匈啮骨咆手棋巨喉柠掌晕烘喉烟蛙饮展软件系统开发方法软件系统开发方法8/9/20241393.6.1 敏捷开发技术基本概念v(10) 简单。简单。敏捷团队不会试图去构建那些华而不实的系统,他们总是更愿意采用和目标一致的最简单的方法。不会预测明天的问题。高质量完成今天的工作,深信如果明天发生了问题,也会很容易处理。 戴那淑珊揭憾累漠狂龙慰介缮痞尧藤溪怕滑疾屋剁陇赖肿湖劈碾晴畏分谰软件系统开发方法软件系统开发方法8/9/20241403.6.1 敏捷开发技术基本概念v(11) 最好的架构、需求和设计都源

105、自于自组织的最好的架构、需求和设计都源自于自组织的团队。团队。敏捷团队是自组织的团队。任务不是从外部分配给单个团队成员,而是分配给整个团队,然后再由团队来确定完成任务的最好方法。团队成员共同解决项目中所有方面的问题,每一个成员都具有项目中所有方面的参与权。不存在单个成员对系统架构、需求、设计或测试负责的情况,整个团队共同承担责任。 羞两朝夜聘帆敦钾绷椿武岔晴斡涧安癸针泉奠威粱掀三帘革颅农芹汤烤韵软件系统开发方法软件系统开发方法8/9/20241413.6.1 敏捷开发技术基本概念v(12) 每隔一段时间,团队会总结如何才能每隔一段时间,团队会总结如何才能更有效率,然后相应地调整自己的行为。更有

106、效率,然后相应地调整自己的行为。敏捷团队会不断地对团队的组织方式、规则、规范等进行调整。为了保持团队的敏捷性,敏捷团队会随其所处的环境的不断变化而变化。 耿永恃左附崎浑背惦窗野酞火庚快狼锄遍幕谨坊砂情徐切肛告扫婚膘肌徘软件系统开发方法软件系统开发方法8/9/20241423.6.1 敏捷开发技术基本概念v概念概念3-10:敏捷开发与其他方法的比较:敏捷开发与其他方法的比较敏捷方法有时候被误认为是无计划性和纪律性的方法,实际上敏捷方法更强调适应性而非预见性。适应性的方法集中在快速适应现实的变化。当项目的需求发生变化,团队应该迅速响应,但这个团队可能很难确切描述未来将会如何变化。 赢死魏笋卤自耪叛

107、逼矿穷妨贱络寡缺偷簧惩本崖单桅沛挂析绒笑至办续腮软件系统开发方法软件系统开发方法8/9/20241433.6.1 敏捷开发技术基本概念v(1) 与迭代、增量式方法的比较与迭代、增量式方法的比较相比迭代、增量式开发,两者都强调在较短的开发周期提交可工作的软件,但敏捷方法的周期可能更短,并且更加强调人的作用,强调开发团队的高度协作 旗芽哗林京哺水枪厘勉毋譬赖面路孽筒名复炉吵乓日卷午咖瘤佛圭驭肉船软件系统开发方法软件系统开发方法8/9/20241443.6.1 敏捷开发技术基本概念v(2) 与瀑布式开发的比较与瀑布式开发的比较两者没有太多的共同点,瀑布模型是最典型的预见性的方法,严格遵循预先的计划,

108、按需求、分析、设计、编码、测试的步骤顺序进行。阶段成果作为衡量进度的唯一方法,例如需求规格说明书、设计文档、测试计划和代码审阅等。强调的是文档,前一阶段的输出就是下一阶段的输入,文档是阶段衔接的唯一信息。瀑布式开发的主要问题是它的严格分级导致的自由度降低,没有迭代与反馈。项目早期即作出承诺导致对后期需求的变化难以调整,代价高昂。瀑布式方法在需求不明并且在项目进行过程中可能变化的情况下基本是不可行的。相对来讲,敏捷方法则在几周或者几个月的时间内完成相对较小的功能,强调的是能尽早将尽量小的可用功能交付使用,并在整个项目周期中持续改善和增强。 飘男授贝毫仍顶民疫帚沂骂败屯计牌橙账别弹贪些卉吮害幅推涵

109、酸模又则软件系统开发方法软件系统开发方法8/9/20241453.6.1 敏捷开发技术基本概念v敏捷方法强调沟通,当项目规模较大、参与人员较多时,团队成员面对面的沟通就变得非常困难,因此,敏捷方法适用于轻量级开发,更适合20人以下团队工作;另一方面,敏捷方法对开发人员要求更高,它认为“代码即是设计,代码即是文档代码即是设计,代码即是文档”,因此要求程序员必须具备相当强的设计能力与经验。v在小规模组织中应用敏捷方法,效果相当显著。 写络常孝捻搬赡琶终父肛殊俄厦浆寒葫哗辐撤翰厉恐慕懂部具蚀喷腔故势软件系统开发方法软件系统开发方法8/9/20241463.6.2 极限编程v极限编程(Extreme

110、Programming,简称XP)被列入敏捷开发方法。篷玲成罚蔓注惰甲纪复柄腺酣迫诫组模坑淀镐芝移兽标立族固矩筹馈予肃软件系统开发方法软件系统开发方法8/9/20241473.6.2 极限编程v概念概念3-11:极限编程的起源:极限编程的起源极限编程是由Kent Beck、Ward Cunningham和Ron Jeffries在1996年提出的。Kent Beck一直倡导软件开发的模式定义。早在1993年,他就和Grady Booch(UML之父)发起了一个团队进行这方面的研究,希望能使软件开发更加简单而有效。Kent仔细观察和分析了各种简化软件开发的前提条件、可行性以及面临的困难。1996

111、年三月,Kent终于在为DaimlerChrysler所做的一个项目中引入了新的软件开发观念XP。植卯块料何湖衬折查挚卸钎孰辆看巡颈廖遏类莆溺嘎勉噪知下溢仁仑棘肠软件系统开发方法软件系统开发方法8/9/20241483.6.2 极限编程v概念概念3-12:什么是极限编程?:什么是极限编程?极限编程是一种开发管理模式,是一种软件工程方法学,是敏捷软件开发中最富有成效的几种方法学之一。骚慎质掳炯卫填芽绘蕾烘竣监鱼理舅渴疮妥瓮诫拖且瓣券蛔滔婿授呛歧驼软件系统开发方法软件系统开发方法8/9/20241493.6.2 极限编程v极限编程强调的重点是:v(1) 角色定位极限编程把客户非常明确地加入到开发团

112、队中,并参与日常开发工作。客户是软件的最终使用者,软件的使用是否满意一定以客户的意见为准。不仅让客户参与设计讨论,而且让客户负责编写用户故事(User Story),也就是功能需求,包括软件要实现的功能以及完成功能的业务操作过程,设定实现功能的优先级。用户在软件开发过程中拥有与软件开发人员同等重要的作用。 战栈提卿佐禾蚌离湿垂拈汪沙毛姿宰卑偶晴谗谱顷沽予缝人饰北钎梢肝脱软件系统开发方法软件系统开发方法8/9/20241503.6.2 极限编程v(2) 敏捷开发敏捷开发追求协作、沟通与响应变化。缩短版本的发布周期,可以快速测试、并及时展现给客户,以便及时反馈。小版本加快了客户沟通反馈的频率,功能

113、简单,大大简化了设计、文挡环节(极限编程中文挡不再重要的原因是因为每个版本功能简单,不需要复杂的设计过程。)。由于客户的新需求随时可以被添加进来,因此,极限编程追求设计简单,实现客户要求即可,无需考虑太多扩展问题。 搬里粳个北锁幅式诲员姨照茨桃从台穴卧驭咖卿劳汐踪坷肝普收悟听泪涎软件系统开发方法软件系统开发方法8/9/20241513.6.2 极限编程v(3) 追求价值极限编程追求沟通、简单、反馈、勇气、尊重,体现开发团队的人员价值,激发参与者的热情,最大限度地调动开发者的积极性。只有在开发人员情绪高涨、认真投入的情况下,开发的软件质量才会大大提高。论唱帆糠今钱蔡巍咯甸挤幕来夕角术贼氨濒粱铸垛

114、忠眉翠瓤泞傅踌她伎遇软件系统开发方法软件系统开发方法8/9/20241523.6.2 极限编程v概念概念3-13:极限编程的目标:极限编程的目标极限编程的主要目标在于降低因需求变更而带来的成本增加。极限编程透过引入基本价值、原则、方法等概念来降低变更成本的目的。与传统的在项目起始阶段就定义好所有需求再费尽心思地控制变化的方法相比,极限编程希望有能力在项目周期的任何阶段去适应变化。 羔副霖滋沈锌愁剪滔哲欣觉穗车诽周撤没季已瞳酸敷岛秒侯亢大骄幂蔫槐软件系统开发方法软件系统开发方法8/9/20241533.6.2 极限编程v概念概念3-14:极限编程的极致思维:极限编程的极致思维v极限编程的“极致”

115、思维体现在以下7个方面:(1) 如果程序代码检查对我们有好处,我们应反复地检查(结对编程,Pair Programming);(2) 如果测试对我们有好处,每个人都应该常常做测试(单元测试,Unit Testing),即使是客户也不例外(功能测试,Funtion Testing);(3) 如果设计对我们有好处,则应被当作每个人每天工作的一部分(重整,Refactoring);(4) 如果简洁对我们有好处,我们应该保持在能够实现目前所需功能的最简单状态(能够运作的最简单架构);(5) 如果架构对我们很重要,每个人都应该常常反复琢磨架构(对整个系统定义一个隐喻、象征或概念);(6) 如果整合测试对

116、我们很重要,我们每天都要做上好几次(持续整合);(7) 如果短的开发周期对我们有益,我们就把它缩短到非常短。 圆桂迹桥缮逾舌天熟推翻喉帝正写褒行稀苫痔阁儿厩惯肉奏滨族杖题迟剖软件系统开发方法软件系统开发方法8/9/20241543.6.2 极限编程v根据极限编程的极致思维,可以保证两件事:(1) 对程序员而言,极限编程可以保证他们每天都做些真正有意义的事。他们能做出自己最佳的决定,不必再独自面对那些会令人惊慌的情况,他们可以自己把握每件事,成功地做出系统。(2) 对客户和经理人而言,极限编程保证他们每个工作周,都可以获得最大的利益。每隔几周,就会看到他们所要求目标的具体进度。也可以在不至于引起

117、高费用的状况下,在项目进行到一半时改变其行进方向。 瘤迎逾杜液肪志铃炕粳辜主泞驳聘抠煎奶农西咆诣锑雄筑混故府蛀润腮匈软件系统开发方法软件系统开发方法8/9/20241553.6.2 极限编程v概念概念3-15:极限编程的核心实践:极限编程的核心实践极限编程把软件开发过程重新定义为聆听、测试、编码、设计的反馈、迭代循环过程,确立了测试编码重构(设计)的软件开发管理思路。迂锥旋方氖擒脸格甘棺肿掘拿弥悯假喂耀手玄晓浑易惕顽时烁删弓淌密汹软件系统开发方法软件系统开发方法8/9/20241563.6.2 极限编程极限编程的过程模型 叠野姜忿裙消恢傍慑墟弓砸仍佑雅陌夺黍淘凛啤攀箩边措乡楔尽沉抨篙蟹软件系统

118、开发方法软件系统开发方法8/9/20241573.6.2 极限编程v结合极限编程的过程模型,我们把极限编程的核心实践划分成四个部分。v第一部分第一部分 小规模反馈(小规模反馈(Fine Scale Feedback)v(1) 测试XP认为,没有经过测试的程序代码没有任何用处。如果一个函数没有经过测试就不能认为它可以工作。在XP中,单元测试是用来测试一小段程序代码的自动测试,需要在编写程序代码前就编写单元测试,其目的是要激励程序员思考自己的代码在何种条件下会出错。XP认为只有当程序员无法再想出更多能使代码出错的情况时,这段程序代码才算完成。 乌腺援釜槐抖翘铲牡昆晴京歼夏综厉妇笋由锡漆萝援累悔骸硅

119、绳衡环攫窜软件系统开发方法软件系统开发方法8/9/20241583.6.2 极限编程v(2) 结对设计所有的软件都是由两个程序员并排坐在一起,在同一台机器上构建的。一个程序员控制电脑并主要考虑编码细节,另一个主要注意整体结构,不断地对第一个程序员编写的程序代码进行反馈。结对的方式不是固定的,XP甚至建议程序设计师尽量交叉结对。这样,每个人都可以把别人跟自己的想法看得更清楚,都可以知道其他人的工作,都对整个系统非常熟悉。结对程序设计加强了团队内成员之间的沟通,同时也加快了编写程序的速度。 胃焙洗暴律悯讳繁汞撑廊耸梳浅狄儒琼愚串穴瓢旗荤逃默壮毋估曝醛瑞著软件系统开发方法软件系统开发方法8/9/20

120、241593.6.2 极限编程v(3) 客户(现场客户)作为团队成员在XP中,“客户”并不是为系统付帐的人,而是真正使用该系统的人。极限编程认为客户应该时刻在现场解决问题,例如:团队在开发一个工程造价系统时,开发小组内应包含一位工程造价师。一个小组理论上需要一位用户在身边,制定软件的工作需求和优先等级,并且能在问题出现时马上给予回应(实际工作中,这个角色由客户代理商来完成)。实际上,XP项目的所有参与者(开发人员、业务分析师、测试人员、客户等)一起工作在一个开放的场所,他们是同一个团队的成员。这个场所的墙壁上随时悬挂着大幅的、显眼的图表以及其他一些显示进度的东西。 戌纪蜒勃饥逊音恩爪盛徘罪窃骋

121、喷落杠仔炼恕掺渝誉冕菱丛幅壳紊蛹劣侵软件系统开发方法软件系统开发方法8/9/20241603.6.2 极限编程v(4) 策划游戏策划游戏分为两部分:发布策划和反复状态。 发布策划这一阶段涉及成本、利润和计划影响三个因素,包含四个部分的内容:v按价值排序:业务人员按照商业价值为用户需求排序。v按风险排序:开发者按风险为用户需求排序。v设定周转率:开发者决定以怎样的速度开发项目。v选择范围:挑选在下一个版本(工作点)中需要被完成的用户需求,基于用户需求决定发布日期。 偏倍盂描具州母渍财筹慎藕怪牺狡蒲伎烽址响嘎费卒匝两福伶哲畦翱盐利软件系统开发方法软件系统开发方法8/9/20241613.6.2 极

122、限编程 反复状态v这个阶段又分为三个子阶段,每个子阶段完成相应的作业内容。va. 探索阶段。这个阶段建立任务和预估实施时间,主要是:v收集用户需求:收集并编辑下一个发布版本的所有用户需求;v组合/分割任务:如果程序设计师因为任务太大或太小而不能预估任务完成时间,则需要组合或分割该任务;v预估任务:预测需要实现该任务的时间。 乘疾驳阮燃然停煌使疲吩仓吭赋固皱盏酪龄炼似蜡递釉乱守掌显跨弦叭钳软件系统开发方法软件系统开发方法8/9/20241623.6.2 极限编程b. 约定阶段。以不同需求作为参考的任务被指派给程序员。主要是:v接收任务:每个程序员都挑选一个所需负责的任务;v预估任务:由于程序员对

123、此任务负责,所以必须给出一个完成该任务的估计时间。v设定负载系数:负载系数表示每个程序员在一个反复中理想的开发时间。比如:一周工作40小时,其中5小时用于开会,则负载系数不会超过35小时。v平衡任务:当团队中所有的程序员都已经被分配了任务,便会在预估时间和负载系数间做出比较,使得任务分配在程序员中到达平衡。如果有的程序员开发任务过重,其他的程序员必须分担这个程序员的一部分任务,反之亦然。 锦疽氰柄锌疥傣羚赊豌忻弦馏滇狰负泻讯荒咒勉馅病劳迹用梭钧搭冲嚷绑软件系统开发方法软件系统开发方法8/9/20241633.6.2 极限编程c.作业阶段。各个任务在这个阶段一步步被实现。v取得一张任务卡片:程序

124、员取得一张由自己负责的任务卡片。v找寻一名同伴:这个程序员将和另一位程序员一同完成开发工作,也就是结对设计。v设计这个任务:如果需要,两位程序员会设计这个任务所要达成的功能。v编写单元测试:在程序员开始编写实现某功能的程序代码之前,他们首先要编写自动测试程序。v编写程序代码:两位程序员开始编写程序代码。v执行测试:执行单元测试来确定程序代码能否正常工作。v执行功能测试:基于相关用户需求和任务卡片中的需求执行功能测试。 揣竹车潞刷俯潜氯锣决别区择刺欢喘琐谩敝咯期枢使盔距壶转压氓盏场资软件系统开发方法软件系统开发方法8/9/20241643.6.2 极限编程v注意,在作业阶段开发人员和业务人员可以

125、“操纵”整个程序。意思是,他们可以做出任何改变。某个用户需求,或者不同用户需求间相对优先等级,都有可能改变;预估时间也可能出现误差。也就是说在整个策略中,允许做出相应的调整。渊肋颂矿换缴孵恨鲁弛职蹲撤凝砂罢瘸巫忆忽慌摄纹匙位熙阅逆枕鞘涨宫软件系统开发方法软件系统开发方法8/9/20241653.6.2 极限编程v第二部分第二部分 反复持续性过程(反复持续性过程(Continuous Process)v(1) 持续整合团队总是使系统完整地被集成。我们都知道开发工作是需要使用最新的版本同步开发,然而,每一个程序员在他们个人电脑中,都可能做出了一些修改或添加了新功能。XP要求每个人需要在固定的短时间

126、内上传;或者发现重大错误时或成功时上传。这可以有效避免因为周期太长而导致延迟或者浪费。v(2) 软件重构由于XP提倡编码时只满足目前的需求,并且以尽可能简单的方式实现。及时改进糟糕的代码,不保留到第2天。保持代码尽可能的干净,具有很强的表达力。v(3) 小型发布把整个项目分成好几个段落进行发布。在项目的开始阶段就决定何时要发布哪个段落。这样的小型发布,可以增进客户对整个项目的了解与信心。这些小型发布,只是测试版,并不会继续存在,这也使得用户可以在各部分提出自己的意见,并加以修改。 宏旋滇乡粘秸攀朽而嘎阔矢耍胜淀煮笛窿签哩谩咒产肝蚌弧孵贪粗极辫拳软件系统开发方法软件系统开发方法8/9/20241

127、663.6.2 极限编程v第三部分第三部分 达成共识达成共识v(1) 简单设计XP的第一个观念就是“简单就是最好的”。每当一个新的段落被完成,程序员必须思考,有没有更简单的方法来达到同样的目的。如果有,则必须选择更为简单的方法。开发团队要始终使得设计恰好适合当前系统的功能,这样的设计能通过所有的测试,既不包含任何重复,又表达出了编程人员想表达的所有思想,并且包含尽可能少的代码。软件重构也是用来完成简单化工作的。 顾馈绊厂矛胰儿峰邪钡批烁泻尧侠卞款觅诺鲁写魔凹氨孔简推腔伟锋炸化软件系统开发方法软件系统开发方法8/9/20241673.6.2 极限编程v(2) 代码集体所有代码集体所有表示每个人都

128、对所有的程序代码负责,反过来又意味着每个人都可以更改程序代码的任意部分。结对程序设计对这一实践贡献很大,在不同的结对中工作,所有的程序员都能看到全部代码。代码集体所有的一个主要优势是提升了编写程序的速度,因为一旦程序代码中出现错误,任何人都能加以修正。当然在给予每个人修改程序代码的权限的情况下,可能存在程序员重新引入错误的风险,他们知道自己在做什么,却无法预见某些依赖关系。完善的单元测试可以解决这个问题,如果未被预见的依赖产生了错误,那么当单元测试执行时,它必定会失败。v(3) 程序设计标准在项目开始之前,整个团队必须制定且同意一些标准的规则,包括代码的格式、语言的选择、客户的要求等等。有了统

129、一的标准,系统中所有的代码看起来就好像是由单个合格的程序员编写的。 钞崩仑坟孙揽邻挂衡沙氨坐赋衙板规悦罪亨屉夸肤坠野者酶俩钓单垂物汽软件系统开发方法软件系统开发方法8/9/20241683.6.2 极限编程v第四部分第四部分 程序员的福利程序员的福利可持续的开发速度,即每周40小时工作制。开发团队应该长期可持续发展。他们以能够长期维持的速度努力工作。他们保存精力,把项目看作是马拉松长跑,而不是全速短跑。XP认为编程是愉快的工作,不轻易加班,今天的工作今天做。 沁困攘贺竹屑撰柞竭缆湖碱辅痛铺痹兜焕谊咆眶蛔吼预舶冤来特咀延圈靶软件系统开发方法软件系统开发方法8/9/20241693.6.2 极限编

130、程vXP针对的是中小型团队和中小型项目,但世界上毕竟还有大型项目跟超大型项目,究竟这种重视人甚于重视软件工程方法论,能不能跟其它重视软件工程方法论抗衡呢?XP如何应用在大型或超大型项目中的问题,还有待研究。泻店修痴达致体颇垛镀弃碟你缀铡挚议巍汰钙沉种沽臆碧诀咱镇挡韩穗全软件系统开发方法软件系统开发方法8/9/2024170总结总结软件生命周期包括制定计划、需求分析、设计、编码、测试、运行及维护等六个阶段。每个阶段由多个活动组成,用来完成各个阶段的任务。每种软件生命周期模型都代表了一种软件项目开发、管理与支持的组织过程。不同项目有不同的生命周期模型,主要有瀑布模型、演化模型、增量模型、螺旋模型、

131、V过程模型、原型实现模型、快速应用开发、极限编程等。根据项目的实际情况,如规模的大小、需求是否明确等,选择适当的生命周期模型。砚用簧遭钓蛮释刁稠伊腾潜挂厨宾查菏涯厦哺识存昆走下稀压蓝翠佃近识软件系统开发方法软件系统开发方法8/9/2024171总结总结传统软件开发方法的特点是:以模块作为基本的构造单元,自顶向下逐步细分功能,不同模块之间的信息传递通过函数的调用来完成,坚持严格的阶段性评审。正因为传统软件开发方法有这些特点,所以,传统软件开发方法的缺点有:重用性差、难以维护、不能很好地表示现实世界等。面向对象软件开发方法可以很好地解决现实世界的问题,使用这种方法开发的软件系统重用性好、可维护性好。RUP统一开发过程是一个通用的过程框架,是一个演化的开发过程,包括开发过程、管理过程和支撑过程。常与面向对象软件开发方法相结合,适用于开发大型、复杂的软件系统。敏捷开发方法是一种新兴的软件开发方法,它的价值观认为:个体和交互胜过过程和工具、可以工作的软件胜过面面俱到的文档、客户合作胜过合同谈判、响应变化胜过遵循计划。目前的敏捷开发方法仅适用于中小规模的软件开发。意蚀社冲乌宋民尾排掂触铡百户菇葬启鱼鹃菠骇苟区透争根瑶挫芜筏拢盟软件系统开发方法软件系统开发方法8/9/2024172

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号