《3 软件过程模型.pdf》由会员分享,可在线阅读,更多相关《3 软件过程模型.pdf(61页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件工程王忠杰2012年8月29日软件工程第二章 软件开发过程管理3软件过程模型3软件过程模型主要内容*开放源码过程*统一过程模型(RUP)*其他过程模型 形式化过程 软件复用过程 敏捷过程模型 3.1软件过程软件过程 3.2典型软件过程模型典型软件过程模型 瀑布模型 增量过程模型 增量模型 快速应用程序开发(RAD)演化过程模型 螺旋模型 原型模型 3.3各类过程模型的对比各类过程模型的对比软件工程3.1软件过程3软件过程模型软件过程 软件过程定义以下内容:软件过程定义以下内容:人员与分工 所执行的活动 活动的细节和步骤 软件过程通过以下方式组织和管理软件生命周期:软件过程通过以下方式组织和
2、管理软件生命周期:定义软件生产过程中的活动 定义这些活动的顺序及其关系 软件过程的目的:软件过程的目的:标准化(可模仿)、可预见性(降低风险)、提高开发效率、得到高质量产品 提升制定时间和预算计划的能力3软件过程模型软件开发需要过程吗?写了再改写了再改(CodeandFix),不挺好吗?,不挺好吗?不需要太多其他准备或相关知识,无需文档,无需规划,无需质量保障,上来就写代码;也许就能写出来,写不出来就改,也许能改好。适用场合:适用场合:“只用一次”的程序“看过了就扔”的原型 一些不实用的演示程序 但是要开发一个复杂的软件,这个方法的缺点就太大了,现实中基本上毫无用处。但是要开发一个复杂的软件,
3、这个方法的缺点就太大了,现实中基本上毫无用处。From 现代软件工程讲义现代软件工程讲义(part 4)3软件过程模型构造一所房子相同的目标不同的活动与过程3软件过程模型黑盒过程与白盒过程 存在的问题:存在的问题:要求开发之前需求被充分理解 与客户的交互只在开始(需求)和最后(发布)类似于产品制造过程 而实际情况完全不是这样ProductProcess Informal Requirements3软件过程模型黑盒过程与白盒过程 优点:优点:通过改进可见性来减少风险 在开发过程中,通过不断地获得顾客的回馈允许变更类似于服务过程ProductProcess Informal Requirement
4、s feedback3软件过程模型问题空间需求模型设计模型实现模型部署与运行模型需求建模语言设计建模语言编程语言部署与运行配置语言验证/确认软件(解)空间需求分析方法系统设计方法程序设计方法部署与维护方法软件过程的典型阶段 Dream(提出设想提出设想)Investigation(深入调研深入调研)SoftwareSpecification(需求规格说明需求规格说明)SoftwareDesign(软件设计软件设计)SoftwareImplementation(软件实现软件实现)SoftwareDeployment(软件部署软件部署)SoftwareValidation(软件验证软件验证)Sof
5、twareEvolution(软件演化软件演化)软件工程3.2典型的软件过程模型3软件过程模型典型的软件过程模型 瀑布模型瀑布模型(Waterfall)增量过程模型增量过程模型(Incrementalprocessmodel)增量模型(Incremental)快速应用程序开发(RAD)演化过程模型演化过程模型(Evolutionary model)螺旋模型(Spiral)原型模型(Prototype)开源过程模型开源过程模型(Opensource)统一过程模型统一过程模型(RUP)敏捷过程模型敏捷过程模型(Agile)其他过程模型其他过程模型 形式化过程(Formal model)基于复用的软
6、件过程3软件过程模型3.2.1瀑布模型计划计划运行维护运行维护定义阶段开发阶段运行、维护阶段定义阶段开发阶段运行、维护阶段需求分析需求分析设计设计编码编码测试测试 上一个阶段结束,下一个阶段才能开始;每个阶段均有里程碑和提交物;上一阶段的输出是下一阶段的输入;每个阶段均需要进行V&V;侧重于文档与产出物;1970年,WinstonRoyce3软件过程模型瀑布模型 也叫做鲑鱼模型也叫做鲑鱼模型(Salmonmodel):向前一阶段回溯,很难。:向前一阶段回溯,很难。3软件过程模型瀑布模型 优点优点追求效率追求效率 简单、易懂、易用、快速;为项目提供了按阶段划分的检查点,项目管理比较容易;每个阶段
7、必须提供文档,而且要求每个阶段的所有产品必须进行正式、严格的技术审查。缺点缺点过于理想化过于理想化 在开发早期,用户难以清楚地确定所有需求,需求的错误很难在开发后期纠正,因此难以快速响应用户需求变更;开发人员与用户之间缺乏有效的沟通,开发人员的工作几乎完全依赖规格说明文档,容易导致不能满足客户需求。客户必须在项目接近尾声的时候才能得到可执行的程序,对系统中存在的重大缺陷,如果在评审之前没有被发现,将可能会造成重大损失。3软件过程模型瀑布模型 瀑布模型太理想化,太单纯,已不再适合现代的软件开发模式,在大型系统开发中已经很少使用;瀑布模型太理想化,太单纯,已不再适合现代的软件开发模式,在大型系统开
8、发中已经很少使用;适用场合:适用场合:软件项目较小,各模块间接口定义非常清晰;需求在项目开始之前已经被全面的了解,产品的定义非常稳定;需求在开发中不太可能发生重大改变;使用的技术非常成熟,团队成员都很熟悉这些技术 负责各个步骤的子团队分属不同的机构或不同的地理位置,不可能做到频繁的交流 外部环境的不可控因素很少。3软件过程模型3.2.2增量过程模型 在很多情况下,由于初始需求的不明确,开发过程不宜采用瀑布模型;在很多情况下,由于初始需求的不明确,开发过程不宜采用瀑布模型;因此,无须等到所有需求都出来才进行开发,只要某个需求的核心部分出来,即可进行开发;因此,无须等到所有需求都出来才进行开发,只
9、要某个需求的核心部分出来,即可进行开发;另外,可能迫切需要为用户迅速提供一套功能有限的软件产品,然后在后续版本中再细化和扩展功能。另外,可能迫切需要为用户迅速提供一套功能有限的软件产品,然后在后续版本中再细化和扩展功能。在这种情况下,需要选用在这种情况下,需要选用增量方式的软件过程模型增量方式的软件过程模型。增量模型 RAD模型3软件过程模型(1)增量模型第1个增量交付第1个增量第2个增量交付第2个增量第n个增量交付第n个增量沟通策划建模(分析、设计)构建(编码、测试)部署(交付、反馈)软件功能和特征项目时间3软件过程模型(1)增量模型 软件被作为一系列的增量来设计、实现、集成和测试,每一个增
10、量是由多种相互作用的模块所形成的提供功能的代码片段构成。软件被作为一系列的增量来设计、实现、集成和测试,每一个增量是由多种相互作用的模块所形成的提供功能的代码片段构成。本质:以迭代的方式运用瀑布模型本质:以迭代的方式运用瀑布模型 第一个增量往往是核心产品:满足了基本的需求,但是缺少附加的特性;客户使用上一个增量的提交物并进行自己评价,制定下一个增量计划,说明需要增加的特性和功能;重复上述过程,直到最终产品产生为止。3软件过程模型(1)增量模型 举例举例1:开发一个类似于:开发一个类似于Word的字处理软件的字处理软件 增量1:提供基本的文件管理、编辑和文档生成功能;增量2:提供高级的文档编辑功
11、能;增量3:实现拼写和语法检查功能;增量4:完成高级的页面排版功能;举例举例2:开发一个教务管理系统:开发一个教务管理系统 增量1:提供基本的学籍管理和成绩管理功能;增量2:提供选课功能;增量3:提供查询教室使用情况的功能;增量4:提供课表生成、上课名单生成、成绩录入等功能。3软件过程模型(1)增量模型 优点:优点:在时间要求较高的情况下交付产品:在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品,对客户起到“镇静剂”的作用;人员分配灵活:如果找不到足够的开发人员,可采用增量模型:早期的增量由少量人员实现,如果客户反响较好,则在下一个增量中投入更多的人力;逐步增
12、加产品功能可以使用户有较充裕的时间来学习和适应新产品,避免全新软件可能带来的冲击;因为具有较高优先权的模块被首先交付,而后面的增量也不断被集成进来,这使得最重要的功能肯定接受了最多的测试,从而使得项目总体性失败的风险比较低。3软件过程模型(1)增量模型 困难:困难:每个附加的增量并入现有的软件时,必须不破坏原来已构造好的东西。同时,加入新增量时应简单、方便 该类软件的体系结构应当是开放的;仍然无法处理需求发生变更的情况;管理人员须有足够的技术能力来协调好各增量之间的关系。3软件过程模型(2)RAD模型建模建模业务建模数据建模流程建模建模建模业务建模数据建模流程建模构建构建构件复用代码自动生成测
13、试构建构建构件复用代码自动生成测试建模建模业务建模数据建模流程建模建模建模业务建模数据建模流程建模构建构建构件复用代码自动生成测试构建构建构件复用代码自动生成测试建模建模业务建模数据建模流程建模建模建模业务建模数据建模流程建模构建构建构件复用代码自动生成测试构建构建构件复用代码自动生成测试Team#1Team#2Team#n部署部署集成交付反馈部署部署集成交付反馈沟通沟通沟通沟通策划策划策划策划6090天3软件过程模型(2)RAD模型 快速应用开发快速应用开发RAD(RapidApplicationDevelopment)侧重于短开发周期(一般为6090天)的增量过程模型,是瀑布模型的高速变体
14、,通过基于构件的构建方法实现快速开发;多个团队并行进行开发,但启动时间有先后,先启动团队的提交物将作为后启动团队的输入;缺点:缺点:需要大量的人力资源来创建多个相对独立的RAD团队;如果没有在短时间内为急速完成整个系统做好准备,RAD项目将会失败;如果系统不能被合理的模块化,RAD将会带来很多问题;技术风险很高的情况下(采用很多新技术、软件需与其他已有软件建立集成、等等),不宜采用RAD。3软件过程模型3.2.3演化过程模型 软件系统会随着时间的推移而发生变化,软件系统会随着时间的推移而发生变化,在开发过程中,需求经常发生变化在开发过程中,需求经常发生变化,直接导致产品难以实现;,直接导致产品
15、难以实现;严格的交付时间使得开发团队不可能圆满完成软件产品严格的交付时间使得开发团队不可能圆满完成软件产品,但是必须交付功能有限的版本以应对竞争或压力;,但是必须交付功能有限的版本以应对竞争或压力;很好的理解和核心产品与系统需求,但很好的理解和核心产品与系统需求,但对其他扩展的细节问题却没有定义。对其他扩展的细节问题却没有定义。在上述情况下,需要一种在上述情况下,需要一种专门应对不断演变的软件过程模型专门应对不断演变的软件过程模型,即,即“演化过程模型演化过程模型”。本质:本质:循环、反复、不断调整当前系统以适应需求变化;循环、反复、不断调整当前系统以适应需求变化;包括两种形态:包括两种形态:
16、快速原型法 螺旋模型3软件过程模型(1)快速原型法原型需求原型设计原型系统实现原型系统测试系统需求提交系统待修改列表待修改列表待修改列表顾客评审修订原型快速策划快速策划建模快速设计建模快速设计构建原型构建原型部署交付及反馈部署交付及反馈沟通沟通3软件过程模型快速原型法的步骤Step1:双方通过沟通,明确已知的需求,并大致勾画出以后再进一步定义的东西。:双方通过沟通,明确已知的需求,并大致勾画出以后再进一步定义的东西。Step2:迅速策划一个原型开发迭代并进行建模,主要集中于那些最终用户所能够看到的方面,如人机接口布局或者输出显示格式等;:迅速策划一个原型开发迭代并进行建模,主要集中于那些最终用
17、户所能够看到的方面,如人机接口布局或者输出显示格式等;Step3:快速设计产生原型,对原型进行部署,由客户和用户进行评价;:快速设计产生原型,对原型进行部署,由客户和用户进行评价;Step4:根据反馈,进一步细化需求并调整原型;:根据反馈,进一步细化需求并调整原型;Step5:原型系统不断调整以逼近用户需求。:原型系统不断调整以逼近用户需求。3软件过程模型“原型”的类型 Throwawayprototyping(抛弃式原型抛弃式原型)最初的原型在完成并得到用户认可之后,将不会作为交付给用户的最终系统的一部分,而是被抛弃,其目的只是为了收集与验证需求;该类原型可能是不可执行的(例如,只包含用户界
18、面);Evolutionaryprototyping(演化式原型演化式原型)最初构造的原型将具备较高的质量,包含了系统的核心功能,然后通过收集需求对其进行不断的改善和精化;该类原型是可执行的,将成为最终系统的一部分;3软件过程模型快速原型法的优缺点 优点:优点:提高和改善客户/用户的参与程度,最大程度的响应用户需求的变化;缺点:缺点:为了尽快完成原型,开发者没有考虑整体软件的质量和长期的可维护性,系统结构通常较差;可能混淆原型系统与最终系统,原型系统在完全满足用户需求之后可能会被直接交付给客户使用;额外的开发费用。3软件过程模型(2)螺旋式过程模型Barry Boehm,19883软件过程模型
19、(2)螺旋式过程模型 螺旋模型沿着螺线旋转,在四个象限内表达四个方面的活动:螺旋模型沿着螺线旋转,在四个象限内表达四个方面的活动:制定计划:确定软件目标,选定实施方案,弄清项目开发的限制;风险分析:分析所选方案,考虑如何识别和消除风险;实施工程:实施软件开发;客户评估:评价开发工作,提出修正建议。举例:举例:第1圈:开发出产品的规格说明;第2圈:开发产品的原型系统;第3n圈:不断的迭代,开发不同的软件版本;根据每圈交付后用户的反馈来调整预算、进度、需要迭代的次数;3软件过程模型(2)螺旋式过程模型 出发点:出发点:开发过程中及时识别和分析风险,并采取适当措施以消除或减少风险来的危害。开发过程中
20、及时识别和分析风险,并采取适当措施以消除或减少风险来的危害。优点:优点:结合了原型的迭代性质与瀑布模型的系统性和可控性,是一种结合了原型的迭代性质与瀑布模型的系统性和可控性,是一种风险驱动型的过程模型风险驱动型的过程模型:采用循环的方式逐步加深系统定义和实现的深度,同时更好的理解、应对和降低风险;确定一系列里程碑,确保各方都得到可行的系统解决方案;始终保持可操作性,直到软件生命周期的结束;由风险驱动,支持现有软件的复用。缺陷:缺陷:适用于大规模软件项目,特别是内部项目,周期长、成本高;软件开发人员应该擅长寻找可能的风险,准确的分析风险,否则将会带来更大的风险。3软件过程模型总结:演化过程模型的
21、缺点 演化过程模型的目的:演化过程模型的目的:需求的变更频繁,要求在非常短的期限内实现,以充分满足客户/用户要求、及时投入市场;存在的问题:存在的问题:由于构建产品所需的周期数据不确定,给项目管理带来困难;演化速度太快,项目陷入混乱;演化速度太慢,影响生产率;为追求软件的高质量而牺牲了开发速度、灵活性和可扩展性;3软件过程模型3.2.4*开源过程模型管理配置管理配置管理配置管理配置下载和安装下载和安装下载和安装下载和安装终端用户的使用终端用户的使用终端用户的使用终端用户的使用开发开源代码开发开源代码开发开源代码开发开源代码发布需求并加以设计发布需求并加以设计发布需求并加以设计发布需求并加以设计
22、阅读、分析重新设计阅读、分析重新设计阅读、分析重新设计阅读、分析重新设计交流经验交流经验交流经验交流经验3软件过程模型3.2.5*统一过程模型(RUP)3软件过程模型统一过程模型(RUP)RUP(RationalUnifiedProcess)由由Rational公司最先提出,是一种面向对象公司最先提出,是一种面向对象(OO)的软件开发方法论;的软件开发方法论;Inception(起始起始)Elaboration(细化细化)Construction(构建构建)Transition(转换转换/交付交付)Development cycle Objective MilestoneDevelopment
23、 cycle Architecture MilestoneInitial Operational Capability MilestoneProduct Releasetime3软件过程模型RUP的四个技术阶段 起始起始(Inception)通过沟通与策划,定义项目范围、识别业务需求、提出大致的架构、制定开发计划,使用UseCase(用例)描述主要特征功能;细化细化(Elaboration)扩展体系结构及用例,从五个角度来构建软件模型,并建立一个baseline(基线);评审与修订项目计划;构建构建(Construction)将体系结构模型作为输入,完善上一阶段的分析和设计模型;开发或获取软构
24、件,并对每个构件实施单元测试;构件组装和集成测试;转换与交付转换与交付(Transition)软件被提交给用户进行测试,接收用户反馈报告并进行变更;创建必要的支持信息(如用户手册、安装步骤、FAQ等);3软件过程模型3.2.6敏捷过程模型(agileprocessmodel)开发过程中的开发过程中的“变化变化”是无处不在的,也是不可避免的;是无处不在的,也是不可避免的;在实际项目中,很难预测需求和系统何时以及如何发生变化;在实际项目中,很难预测需求和系统何时以及如何发生变化;对开发者来说,将变化的意识贯穿在每一项开发活动中;对开发者来说,将变化的意识贯穿在每一项开发活动中;2001年,年,17
25、位编程大师共同发布敏捷软件开发宣言:位编程大师共同发布敏捷软件开发宣言:“人”以及“人与人的互动”胜于“过程”和”工具”Individualsandinteractionsoverprocessesandtools 可运行的软件 胜于 面面俱到的文档 Workingsoftwareovercomprehensivedocumentation 客户合作 胜于 合同谈判Customercollaborationovercontractnegotiation 响应变化 胜于 遵循计划Respondingtochangeoverfollowingaplan3软件过程模型敏捷宣言背后遵循的原则:小步快跑
26、,及时反馈产品设计开发过程中最重要的是:通过及早并频繁地交付有价值的软件来赢得客户的满意。产品设计开发过程中最重要的是:通过及早并频繁地交付有价值的软件来赢得客户的满意。要欢迎改变需求,即使是在开发的后期。敏捷过程中的要欢迎改变需求,即使是在开发的后期。敏捷过程中的“变变”,是为了让客户保持竞争优势。,是为了让客户保持竞争优势。交付要频繁,交付的软件要可运行。交付周期从数周到数月不等,但间隔的时间要尽量短。交付要频繁,交付的软件要可运行。交付周期从数周到数月不等,但间隔的时间要尽量短。在整个项目过程中,开发人员必须每天都与业务人员一起工作。在整个项目过程中,开发人员必须每天都与业务人员一起工作
27、。项目组所选的人要积极。然后,给予他们工作所需要的环境、支持和信任。项目组所选的人要积极。然后,给予他们工作所需要的环境、支持和信任。面对面交谈是开发团队内部和开发团队间传递信息最有效率和效果的方法。面对面交谈是开发团队内部和开发团队间传递信息最有效率和效果的方法。可运行的软件是衡量进度的首要指标。可运行的软件是衡量进度的首要指标。敏捷过程提倡可持续的开发。出资人、开发者和用户应始终保持稳定的步调敏捷过程提倡可持续的开发。出资人、开发者和用户应始终保持稳定的步调(迭代周期迭代周期)。对技术的精益求精以及对设计的不断完善,将会提高敏捷性。对技术的精益求精以及对设计的不断完善,将会提高敏捷性。尽量
28、去掉不必要做的工作尽量去掉不必要做的工作“简洁简洁”的艺术。的艺术。最佳的架构、需求和设计产生于自组织的团队。最佳的架构、需求和设计产生于自组织的团队。团队要定期反思团队要定期反思“如何能变得更有效率如何能变得更有效率”,然后对自己的行为进行相应的优化和调整。,然后对自己的行为进行相应的优化和调整。不强调文档,转向强调可不强调文档,转向强调可运行的软件片段;运行的软件片段;开发者与顾客之间的频繁开发者与顾客之间的频繁沟通;沟通;快速开发,快速反馈,快速开发,快速反馈,快速修改;快速修改;连续不断的短周期迭代;连续不断的短周期迭代;3软件过程模型敏捷过程模型3软件过程模型敏捷过程模型的典型代表:
29、Scrum Scrum 一个敏捷开发框架:增量/迭代的开发过程。整个开发过程由若干个短的迭代周期组成,一个短的迭代周期称为一个Sprint,每个Sprint的建议长度是2到4周。使用产品Backlog来管理需求,是一个按照商业价值排序的需求列表,列表条目的体现形式通常为用户故事。总是先开发对客户具有较高价值的需求。在Sprint中,Scrum团队从产品Backlog中挑选最高优先级的需求进行开发。挑选的需求在Sprint计划会议上经过讨论、分析和估算得到相应的任务列表(backlog)。在每个迭代结束时,Scrum团队将递交潜在可交付的产品增量。3软件过程模型敏捷过程模型的典型代表:Scrum
30、3软件过程模型敏捷过程模型的典型代表:Scrum 三个角色:三个角色:产品负责人(ProductOwner):确定产品的功能,负责维护产品Backlog、deadline、priority、ROI;验收结果;ScrumMaster:团队leader,保证开发过程按计划进行;组织每日站会、Sprint计划会议、Sprint评审会议和Sprint回顾会议;通过外在/内在协调,确保团队资源完全可被利用并且全部是高产出的;Scrum团队:在每个Sprint中将产品Backlog中的条目转化成为潜在可交付的功能增量;规模在59人;具备交付产品增量所需要的各种技能;六个时间箱:六个时间箱:Sprint(冲
31、刺):代表一个24周的迭代;发布计划会议(ReleasePlanningMeeting)ProductBacklog Sprint计划会议(SprintPlanningMeeting)SprintBacklog 每日站会(DailyScrumMeeting)Sprint评审会(SprintReviewMeeting)Sprint回顾会议(SprintRetrospectiveMeeting)SprintBurndown ChartReleaseBurndown Chart3软件过程模型为何“敏捷”?最初的软件最初的软件(196070年代年代)的顾客都是大型研究机构、军方等,他们需要软件系统来搞
32、科学计算、军方项目、登月项目等,这些系统相当庞大,对准确度要求相当高。的顾客都是大型研究机构、军方等,他们需要软件系统来搞科学计算、军方项目、登月项目等,这些系统相当庞大,对准确度要求相当高。198090年代中,软件进入了桌面软件的时代,开发的周期明显缩短,各种新的方法开始进入实用阶段。但是软件发布的媒介还是年代中,软件进入了桌面软件的时代,开发的周期明显缩短,各种新的方法开始进入实用阶段。但是软件发布的媒介还是CD、DVD,做好一个发布需要较大的经济投入,不能频繁更新版本。,做好一个发布需要较大的经济投入,不能频繁更新版本。互联网时代,大部分的服务是通过网络服务器端实现,在客户端有各种方便的
33、推送互联网时代,大部分的服务是通过网络服务器端实现,在客户端有各种方便的推送(push)渠道。渠道。由于网络的转播速度和广度,知识的获取更加容易,很多软件服务可以由一个小团队来实现。同时技术更新的速度在加快,那种一个大型团队用一个固定技术开发23年再发布的时代已经过去了。用户需求的变化也在加快,开发流程必须跟上这些快速变化的节奏。From 现代软件工程讲义3软件过程模型3.2.7*形式化过程模型 使用严格的数学形式来刻画每一阶段的产物使用严格的数学形式来刻画每一阶段的产物(需求、设计、程序、测试需求、设计、程序、测试);应用一系列形式化方法在各阶段的产物之间进行自动应用一系列形式化方法在各阶段
34、的产物之间进行自动/半自动的转换。半自动的转换。需求定义形式化描述形式化转换1形式化转换2形式化转换n系统测试3软件过程模型形式化过程模型 优点:优点:应用数学分析方法,歧义性、不完整性、不一致性等问题更容易被发现和改正,目的是“提供无缺陷的软件”。缺陷:缺陷:形式化数学方法难以理解,可视性太差,对开发人员技能要求较高;构造形式化模型是一件非常耗时的工作,成本也很高;软件系统中的某些方面难以用形式化模型表达出来(如用户界面);应用场合:应用场合:对可靠性和安全性要求较高的一些关键系统,在真正被投入使用之前,需要严格保证100%的正确。传统的方法靠人去验证,难以奏效。太过于理想化,因此仅停留在理
35、论研究中,实践中很少使用3软件过程模型3.2.8*面向复用的软件过程 该过程模型的主要思想是该过程模型的主要思想是复用复用(reuse);针对一个新的软件系统,不是完全从一无所有开始入手,而是通过使用已有的软件单元针对一个新的软件系统,不是完全从一无所有开始入手,而是通过使用已有的软件单元(称为称为“软构件软构件”)来构造系统;来构造系统;主要过程:主要过程:需求分析;体系结构设计;构件获取(购买、重新开发);构件修改与测试;构件组装;集成测试;软件工程3.3各种过程模型的比较3软件过程模型一句话归纳各类过程模型 瀑布模型:将全部需求以整体方式向前推进,无迭代;瀑布模型:将全部需求以整体方式向
36、前推进,无迭代;基本模型基本模型 增量模型:将需求分成多份,串行推进,无迭代;增量模型:将需求分成多份,串行推进,无迭代;串行的瀑布串行的瀑布 RAD模型:将需求分成多份,并行推进,无迭代;模型:将需求分成多份,并行推进,无迭代;并行的瀑布并行的瀑布 原型模型:迭代;原型模型:迭代;基本模型基本模型 螺旋模型:按瀑布阶段划分,各阶段分别迭代螺旋模型:按瀑布阶段划分,各阶段分别迭代(原型原型+风险分析风险分析);原型原型+瀑布瀑布 敏捷模型:将需求分成尽量小的碎片,以碎片为单位进行高速迭代。敏捷模型:将需求分成尽量小的碎片,以碎片为单位进行高速迭代。达到极致的螺旋达到极致的螺旋3软件过程模型各类
37、过程模型敏捷方法的大部分招数都和这类用户无关,用户关心的是:把可靠性提高到 99.99%,不要让微小的错误把系统搞崩溃!用敏捷方法,商业用户未必受得了两周一次更新的频率。用敏捷的方法开发登月火箭控制程序,前N 批宇航员都挂了。用错方式的后果开发底层正则表达式解析模块开发底层正则表达式解析模块;科学计算科学计算;复杂系统的核心组件复杂系统的核心组件开发下一版本的办公软件开发下一版本的办公软件;给商业用户开发软件给商业用户开发软件写一个微博网站写一个微博网站;实际的例子实际的例子精益求精崇尚秩序,按时交付鼓励变化,行业充满变数公司文化资深专家以中层技术人员为主有资深程序员带队人员经验不多较多不多团
38、队人员数量固定的需求,需求可以建模不经常变化经常变化需求变化有极高的可靠性和质量要求必须有较高可靠性不高,容忍经常出错产品可靠性要求形式化的开发方法形式化的开发方法(Formal Method)计划驱动计划驱动(Plan-driven)敏捷敏捷(Agile)客观因素客观因素最适用方式最适用方式From 现代软件工程讲义3软件过程模型各种过程模型的比较 针对本次课程所讲授的软件过程模型,通过对比分析,找出这些过程模型之间的异同,并分析各自的优缺点;针对本次课程所讲授的软件过程模型,通过对比分析,找出这些过程模型之间的异同,并分析各自的优缺点;分别用若干个简短的词来描述每一种软件过程模型的核心特征
39、;分别用若干个简短的词来描述每一种软件过程模型的核心特征;考虑以下维度:考虑以下维度:时间效率、成本、所需人力资源、开发质量、顾客满意度、需求扩展、需求变更、风险、与顾客交互程度、适用软件项目的规模、适用deadline紧急程度、项目管理的方便程度、等等。3软件过程模型一个案例(来自于网络,原始出处不详)某个老师某个老师T想要考察一个同学想要考察一个同学S的学习情况和技术水平,于是交给该学生一个任务的学习情况和技术水平,于是交给该学生一个任务 T:我有一个朋友想要一个图象浏览软件,能够查看多种格式的图象,包括BMP、TIFF、JPG、PNG,并且能够支持一般的放大、缩小、漫游。你能做这样一个软
40、件吗?S:就是类似ACDSEE这样的软件吗?T:差不多,不过不需要那么强大的功能,我这个朋友计算机是外行,最好能做的比较方便,傻瓜型的,例如象ACDSEE自动翻页这种功能还是要的。S:我以前学过BMP和JPG的图象格式解析,我想没有问题。T:好的,给你30天时间,下周你再来一趟,跟我讲一下你的工作进度。这位同学非常明白老师的意图,回去后想了一下,并列出了一个清单。这位同学非常明白老师的意图,回去后想了一下,并列出了一个清单。3软件过程模型一 功能:一 功能:1.读取、显示、另存四种格式图片读取、显示、另存四种格式图片(BMP、TIFF、JPG、PNG)2.放大、缩小、漫游放大、缩小、漫游3.列
41、出当前目录下所有四种格式图片文件名列出当前目录下所有四种格式图片文件名4.PAGEUP(PAGEDOWN)自动调出当前目录上一张自动调出当前目录上一张(下一张下一张)图片二 其它说明:图片二 其它说明:1.界面尽量简介,容易操作界面尽量简介,容易操作2.不要图片预览和打印三 开发工具:不要图片预览和打印三 开发工具:VC 6四 开发环境:普通四 开发环境:普通PC机;机;Window2000/xp五 工作量:五 工作量:1.研究一下四种图片的格式研究一下四种图片的格式2.设计一个解析器类,解析这四种格式设计一个解析器类,解析这四种格式3.设计一个文档类,实现读取、另存和目录浏览功能设计一个文档
42、类,实现读取、另存和目录浏览功能4.设计一个视图类,实现显示、缩放、漫游功能设计一个视图类,实现显示、缩放、漫游功能工作清单3软件过程模型 一切顺利,学生一切顺利,学生S按期交付了软件,经过一两周的试用、修改、完善后,三方都比较满意,该软件在老师的朋友那里成为一个得心应手的工具。按期交付了软件,经过一两周的试用、修改、完善后,三方都比较满意,该软件在老师的朋友那里成为一个得心应手的工具。Waterfall ModelClassic Life Cycle ModelLinear Sequential Model理想情况13软件过程模型实际情况2 一周后,学生去见老师,并提交了工作清单,他发现老师
43、的这位朋友一周后,学生去见老师,并提交了工作清单,他发现老师的这位朋友C和老师在一起。和老师在一起。S:这是工作清单,我已经研究清楚了四种文件的格式,可以写代码了。T:很好,不过我这位朋友有一些新想法,你不妨听听。C:你好!我新买了一个扫描仪,你的程序可不可以直接扫描图片进来。S:你可以自己扫描呀,买扫描仪的时候一般都会送正版软件的。C:是的,可是我一直不太会用,你知道我计算机水平不高,学一些新东西很累,也没有时间,如果你能直接链接扫描仪,我只要学会你的软件就行了,我愿意多支付一些费用。还有,我想建一个图片库,你知道,我工作时需要上百个图片,经常找不到,最好还带模糊查询。S:.!3软件过程模型
44、实际情况2(续)C:还有一些,现在一时想不起来,我想起来的话会再跟你联系,时间上可以长一些。S:.!T:要不这样吧,你先做一个样子出来给C看看,一边做,一边改。C:这样最好,看见一个基本样子我就知道我想要什么了。事情就这样定下来了,事情就这样定下来了,S愤怒的撕掉了自己的工作清单,回去后花愤怒的撕掉了自己的工作清单,回去后花1天时间用天时间用Delphi做了个样子,只能读做了个样子,只能读BMP和和JPG文件,做了些菜单和工具栏,用文件,做了些菜单和工具栏,用Access建了一个图片库。建了一个图片库。就这个就这个“假假”的程序,的程序,S和和C讨论了一天,讨论了一天,S又修改了几次,又讨论了
45、几次,一周后,这个又修改了几次,又讨论了几次,一周后,这个“假假”的程序表面看起来和真的一模一样。的程序表面看起来和真的一模一样。3软件过程模型Prototyping Model实际情况2(续)于是于是S打算用打算用VC重写这个程序,但是他很快发现继续用重写这个程序,但是他很快发现继续用Delphi写更方便,因为至少界面不用重做了,于是写更方便,因为至少界面不用重做了,于是,两个月后,这个事情终于结束了。,两个月后,这个事情终于结束了。listentocustomerbuild/revisemock-upcustomertest-drivesmock-up3软件过程模型实际情况3 正象上一种情
46、况一样,用户提出了很多新要求,但是麻烦还不止这些。正象上一种情况一样,用户提出了很多新要求,但是麻烦还不止这些。一天,老师一天,老师T匆匆忙忙的找到匆匆忙忙的找到S:T:我的研究生正在做的“海量多媒体数据库管理技术”项目需要一个对图象管理的模块,主要是数据库对象和图象文件之间的转换、显示和一些编辑操作,时间很紧,你目前在做的代码可否直接利用一下?S:恐怕有难度,我不清楚.T:最好能够模块化强一些,你做的东西两边都能用,我这边比较急,一周后就要,我可以给你增加一个人一起做。S:可是 T:没有关系,就这样决定了,这是一次锻炼机会。我再帮你找一个这方面的专家,你可以请教他。下周这个时间我会再来。S感
47、觉头脑里面感觉头脑里面“海量海量”、“JPG”、”编辑编辑“、”图片库图片库“、”一周时间一周时间“等等交织在一起,剪不清,理还乱。于是他准备去请教一下专家等等交织在一起,剪不清,理还乱。于是他准备去请教一下专家E。3软件过程模型实际情况3(续)E听了听了S说的情况,帮他画了两个图。说的情况,帮他画了两个图。用例模型:用于说清两个用户到底要什么 领域模型:分析业务模型图中的名次和动词3软件过程模型实际情况3(续)E要求要求S自己再画这样几张图:对于用例模型中的每一个用例,使用类图中的类说明业务中数据对象自己再画这样几张图:对于用例模型中的每一个用例,使用类图中的类说明业务中数据对象(类对象类对
48、象)之间的关联关系。之间的关联关系。S试着这样做了,能快根据自己画的试着这样做了,能快根据自己画的8张图进行了模块设计:张图进行了模块设计:1.图片文件类模块和图片库类模块 2.图片格式解析器父类模块;5个图片解析子类模块(4个文件格式和一个数据库格式)3.图片扫描管理器模块 4.图片编辑器模块 5.图片显示器模块 S发现在网上有很多现成的图片扫描管理控件和图片编辑控件,完全满足要求,他自己花了一天一夜的时间编写了图片文件类模块和图片格式解析器父类,以及数据库解析子类,剩下的几天,他和老师新来的同学一起完成了剩余的模块。发现在网上有很多现成的图片扫描管理控件和图片编辑控件,完全满足要求,他自己
49、花了一天一夜的时间编写了图片文件类模块和图片格式解析器父类,以及数据库解析子类,剩下的几天,他和老师新来的同学一起完成了剩余的模块。3软件过程模型RAD Process&Reuse-based Process实际情况3(续)一周过去了,他将图片文件类模块、图片格式解析器父类模块、数据库解析子类,以及自己封装的图片编辑器交给了自己的老师,而由于每一个模块都是相对独立的,即使开始的用户要求他修改图片显示、图片库、扫描,也不会影响他现在的工作代码。一周过去了,他将图片文件类模块、图片格式解析器父类模块、数据库解析子类,以及自己封装的图片编辑器交给了自己的老师,而由于每一个模块都是相对独立的,即使开始
50、的用户要求他修改图片显示、图片库、扫描,也不会影响他现在的工作代码。businessmodelingdatamodelingprocessmodelingapplicationgenerationtesting&turnoverb u s in e s sm o delin gd a tam o delin gp rocessm o delin gap p lica tio ng e n e ratio ntesting&tu rno v e rb u s in essm od e lin gd a t am od e lin gp roc e s sm od e lin gap plicat