1、2024/8/11周日1第第2章章 软件过程软件过程主讲:罗铁清2024/8/11周日软件工程2第第2章章 软件过程软件过程软件工程过程是为了获得高质量软件所需软件工程过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。各项任务的工作步骤。ISO9000把过程定义为把过程定义为“把输入转化为输把输入转化为输出的一组彼此相关的资源和活动出的一组彼此相关的资源和活动”。过程定义了运用方法的顺序、应该交付的过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需文档资料、为保证软件质量和协调变化所需采取的管理措
2、施以及标志软件开发各个阶段采取的管理措施以及标志软件开发各个阶段任务完成的里程碑。任务完成的里程碑。2024/8/11周日软件工程32.1 软件生命周期的基本任务软件生命周期的基本任务 软件生命周期由软件定义、软件开发和运行维护软件生命周期由软件定义、软件开发和运行维护3个阶段组成。个阶段组成。1、软件定义时期、软件定义时期(1)基本任务:基本任务:确定软件开发工程的总体目标;确定软件开发工程的总体目标;研究该项目的可行性;研究该项目的可行性;分析确定客户对软件产品的需求;分析确定客户对软件产品的需求;估算完成该项目所需的资源和成本,并且制定工程进度估算完成该项目所需的资源和成本,并且制定工程
3、进度表。表。2024/8/11周日软件工程42.1 软件生命周期的基本任务软件生命周期的基本任务1、软件定义时期、软件定义时期(2)进一步细分为以下几个阶段:进一步细分为以下几个阶段:问题定义:问题定义:可行性分析:可行性分析:需求分析:按该阶段应该完成的工作包括需求获取和需需求分析:按该阶段应该完成的工作包括需求获取和需求分析两个部分。求分析两个部分。2024/8/11周日软件工程52.1 软件生命周期的基本任务软件生命周期的基本任务2、软件开发时期、软件开发时期进一步细分为以下几个阶段:进一步细分为以下几个阶段:总体设计总体设计(又称为结构设计又称为结构设计):详细设计:详细设计:编码和单
4、元测试。编码和单元测试。综合测试;综合测试;系统设计系统设计系统实现系统实现2024/8/11周日软件工程62.1 软件生命周期的基本任务软件生命周期的基本任务3、运行维护时期、运行维护时期(1)基本任务:基本任务:通过对已交付的软件做必要的修改,使软件持久地满足客通过对已交付的软件做必要的修改,使软件持久地满足客户的需求。户的需求。2024/8/11周日软件工程7(2)进一步细分:进一步细分:改改正正性性维护。软件件交交付付使使用用后后,必必然然会会有有一一部部分分隐藏藏的的错误被被带到到运运行行阶段段来来,在在某某些些特特定定的的使使用用环境境下下就就会会暴暴露露出出来来。为了了识别和和纠
5、正正软件件错误、改改正正软件件性性能能上上的的缺缺陷陷、排排除除实施施中中的的误使用,使用,应进行的行的诊断和改正断和改正错误的的过程,就叫做改正性程,就叫做改正性维护。适适应性性维护。随随着着计算算机机的的飞速速发展展,外外部部环境境(新新的的硬硬、软件件配配置置)或或数数据据环境境(数数据据库、数数据据格格式式、数数据据输入入输出出方方式式、数数据据存存储介介质)可可能能发生生变化化,为了了使使软件件适适应这种种变化化,而而去去修改修改软件的件的过程就叫做适程就叫做适应性性维护。完完善善性性维护。在在软件件的的使使用用过程程中中,用用户往往往往会会对软件件提提出出新新的的功功能能与与性性能
6、能要要求求。为了了满足足这些些要要求求,需需要要修修改改或或再再开开发软件件,以以扩充充软件件功功能能、增增强软件件性性能能、改改进加加工工效效率率、提提高高软件件的的可可维护性。性。这种情况下种情况下进行的行的维护活活动叫做完善性叫做完善性维护。2.1 软件生命周期的基本任务软件生命周期的基本任务2024/8/11周日软件工程8 使用结构化范型和使用面向对象范型开发软件,它使用结构化范型和使用面向对象范型开发软件,它们在软件生命周期各阶段中使用的概念及应完成的任务们在软件生命周期各阶段中使用的概念及应完成的任务性质显著不同。性质显著不同。2.1 软件生命周期的基本任务软件生命周期的基本任务下
7、面扼要介绍软件生命周期每个阶段的基本任务:下面扼要介绍软件生命周期每个阶段的基本任务:问题定义问题定义可行性研究可行性研究需求分析需求分析总体设计总体设计详细设计详细设计编码和单元测试编码和单元测试综合测试综合测试软件维护软件维护1、必须回答的关键问题是:、必须回答的关键问题是:“要解决的问题要解决的问题是什么是什么?”2、通过对客户的访问调查,系统分析员扼要、通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模地写出关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这的书面报告,经过讨论和必要的修改之后这份报告应该得到客户的确认。份报告应该得到客户的确
8、认。1、要回答的关键问题是:、要回答的关键问题是:“对于上一个阶对于上一个阶段所确定的问题有行得通的解决办法吗段所确定的问题有行得通的解决办法吗?”2、不是具体解决问题,而是研究问题的范、不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可围,探索这个问题是否值得去解,是否有可行的解决办法。行的解决办法。3、目的是用最小的代价在尽可能短的时间、目的是用最小的代价在尽可能短的时间内确定问题是否能够解决。内确定问题是否能够解决。1、不是确定系统怎样完成它的工作,而仅仅是、不是确定系统怎样完成它的工作,而仅仅是确定系统必须完成哪些工作,也就是对目标系统确定系统必须完成哪些工作,也
9、就是对目标系统提出完整、准确、清晰、具体的要求。提出完整、准确、清晰、具体的要求。2、用正式的文档准确地记录对目标系统的需求,、用正式的文档准确地记录对目标系统的需求,这份文档通常称为规格说明(这份文档通常称为规格说明(specification)。)。1、应该设计出实现目标系统的几种可能的方、应该设计出实现目标系统的几种可能的方案。通常至少应该设计出低成本、中等成本和案。通常至少应该设计出低成本、中等成本和高成本等高成本等3种方案,推荐一个最佳方案。种方案,推荐一个最佳方案。2、设计程序的体系结构,也就是确定程序由、设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系。哪些模块组
10、成以及模块间的关系。1、回答关键问题:、回答关键问题:“应该怎样具体地实现这个系统呢应该怎样具体地实现这个系统呢?”2、不是编写程序,而是设计出程序的详细规格说明。、不是编写程序,而是设计出程序的详细规格说明。3、这个阶段将详细地设计每个模块,确定实现模块功能、这个阶段将详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。所需要的算法和数据结构。把详细设计的结果翻译把详细设计的结果翻译成用选定的语言书写的成用选定的语言书写的程序,并且仔细测试编程序,并且仔细测试编写出的每一个模块。写出的每一个模块。1、关键任务是通过各种类型的测试、关键任务是通过各种类型的测试(及相应的调试及相应的调试
11、)使软件达到预使软件达到预定的要求。定的要求。2、最基本的测试是集成测试和验收测试。、最基本的测试是集成测试和验收测试。3、应该用正式的文档资料把测试计划、详细测试方案以及实际、应该用正式的文档资料把测试计划、详细测试方案以及实际测试结果保存下来,作为软件配置的一个组成部分。测试结果保存下来,作为软件配置的一个组成部分。1、维护阶段的关键任务是,通过各种必要的维、维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。护活动使系统持久地满足用户的需要。2、有、有4类维护活动:改正性维护、适应性维护、类维护活动:改正性维护、适应性维护、完善性维护、预防性维护。完善性维护、预防性维
12、护。2024/8/11周日软件工程92.2 瀑布模型瀑布模型 软件过程是为了获得高质量软件所需要完成的一第系软件过程是为了获得高质量软件所需要完成的一第系列任务的框架,它规定了完成各项任务的工作步骤。列任务的框架,它规定了完成各项任务的工作步骤。软件任务集合包括一组软件工程任务、里程碑和应该软件任务集合包括一组软件工程任务、里程碑和应该交付的产品交付的产品(软件配置成分软件配置成分)。通常使用生命周期模型简洁地描述软件过程。生命周通常使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,也称为过程模
13、型。行顺序,也称为过程模型。2024/8/11周日软件工程10 是软件工程中应用最广泛的是软件工程中应用最广泛的过程模型。过程模型。按照传统的瀑布模型开发软按照传统的瀑布模型开发软件,有下述几个特点:件,有下述几个特点:阶段间具有顺序性和依赖性;阶段间具有顺序性和依赖性;推迟实现的观点;推迟实现的观点;质量保证的观点。质量保证的观点。2.2 瀑布模型瀑布模型需求分析需求分析验证验证规格说明规格说明验证验证设计设计验证验证编码编码验证验证综合测试综合测试维护维护传统瀑布模型传统瀑布模型2024/8/11周日软件工程11需求分析需求分析验证验证规格说明规格说明验证验证设计设计验证验证编码编码验证验
14、证综合测试综合测试维护维护实际的瀑布模型实际的瀑布模型变化的需求变化的需求验证验证2.2 瀑布模型瀑布模型2024/8/11周日软件工程122.2 瀑布模型瀑布模型瀑布模型的优缺点瀑布模型的优缺点1、优点:、优点:可强迫开发人员采用规范的方法;可强迫开发人员采用规范的方法;严格地规定了每个阶段必须提交的文档;严格地规定了每个阶段必须提交的文档;每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。2、缺点:、缺点:在可运行的软件产品交付给用户之前,用户只能通过文档来了解在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品是什么样
15、的;产品是什么样的;开发人员与用户之间缺乏有效的沟通,很可能导致最终开发出的开发人员与用户之间缺乏有效的沟通,很可能导致最终开发出的软件产品不能真正满足用户的需要。软件产品不能真正满足用户的需要。2024/8/11周日软件工程13快速原型快速原型验证验证规格说明规格说明验证验证设计设计验证验证编码编码验证验证综合测试综合测试维护维护快速原型模型快速原型模型变化的需求变化的需求验证验证2.3 快速原型模型快速原型模型 所谓快速原型是所谓快速原型是快速建立起来的可以快速建立起来的可以在计算机上运行的程在计算机上运行的程序,它所能完成的功序,它所能完成的功能往往是最终产品能能往往是最终产品能完成的功
16、能的一个子完成的功能的一个子集。集。2024/8/11周日软件工程14快速原型模型的优点:快速原型模型的优点:通常能满足用户的真实需求;通常能满足用户的真实需求;软件产品的开发基本上是线性顺序进行的。软件产品的开发基本上是线性顺序进行的。每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。为什么通常是线性顺序的呢?为什么通常是线性顺序的呢?原型系统已经通过与用户交互而得到验证;原型系统已经通过与用户交互而得到验证;通过建立原型,开发人员已经较全面了解系统的需求。通过建立原型,开发人员已经较全面了解系统的需求。3.3 快速原型模型快速原
17、型模型2024/8/11周日软件工程153.4 增量模型增量模型模型如下图:模型如下图:需求分析需求分析验证验证规格说明规格说明验证验证概要设计概要设计验证验证针对每个构件,完成详细针对每个构件,完成详细设计、编码和集成,经测设计、编码和集成,经测试后交付给用户试后交付给用户维护维护图图 2.4 增量模型增量模型2024/8/11周日软件工程162.4 增量模型增量模型 使用增量模型开发软件时,把软件产品作为一系列使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功
18、能。个相互作用的模块构成,并且能够完成特定的功能。增量模型的优点:增量模型的优点:能在较短的时间内向用户提交可以完成部分工作能在较短的时间内向用户提交可以完成部分工作的产品;的产品;逐步增加产品功能可以使用户有较充裕的时间学逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。客户组织带来的冲击。2024/8/11周日软件工程172.4 增量模型增量模型增量模型的困难:增量模型的困难:把每个新的增量构件集成到现有软件体系结构中把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产
19、品;时,必须不破坏原来已经开发出的产品;除非开发人员有足够的技术能力协调好这一明显除非开发人员有足够的技术能力协调好这一明显的矛盾,否则用增量模型开发出的产品可能并不令的矛盾,否则用增量模型开发出的产品可能并不令人满意。人满意。2024/8/11周日软件工程182.5 螺旋模型螺旋模型 软件项目风险软件项目风险是指在软件生命周期中所遇到的所有的预是指在软件生命周期中所遇到的所有的预算、进度和控制等各方面的问题,以及由这些问题而产生的算、进度和控制等各方面的问题,以及由这些问题而产生的对软件项目的影响。对软件项目的影响。构建原型是一种能使用某些类型的风险降至最低的方法。构建原型是一种能使用某些类
20、型的风险降至最低的方法。螺旋模型的基本思想是:使用原型及其他方法来尽量降螺旋模型的基本思想是:使用原型及其他方法来尽量降低风险。它是在每个阶段之前都增加了风险分析过程的快速低风险。它是在每个阶段之前都增加了风险分析过程的快速原型模型。如图原型模型。如图1.71.7和和1.81.8所示。所示。2024/8/11周日软件工程192024/8/11周日软件工程202.5 螺旋模型螺旋模型螺旋模型的优点:螺旋模型的优点:有利于已有软件的重用;有利于已有软件的重用;有助于把软件质量作为软件开发的一个重要目标;有助于把软件质量作为软件开发的一个重要目标;减少了过多测试或测试不足所带来的风险;减少了过多测试
21、或测试不足所带来的风险;在维护和开发之间并没有本质区别。在维护和开发之间并没有本质区别。利用螺旋模型开发软件的要求:利用螺旋模型开发软件的要求:软件开发人员具有丰富的风险评估经验和这方面的软件开发人员具有丰富的风险评估经验和这方面的专门知识。专门知识。2024/8/11周日软件工程212.6 喷泉模型喷泉模型使用面向对象方法学开发软件时使用面向对象方法学开发软件时,工作重点应该放在生命工作重点应该放在生命周期中的周期中的分析阶段分析阶段。这种方法在开发的早期阶段定义。这种方法在开发的早期阶段定义了一系列面向对象问题的对象,并且在整个开发过程了一系列面向对象问题的对象,并且在整个开发过程不断充实
22、和扩充这些对象。不断充实和扩充这些对象。“喷泉喷泉”这个词形象地表明了面向对象软件开发这个词形象地表明了面向对象软件开发过程迭代和无缝的特征。过程迭代和无缝的特征。事实上,用面向对象方法学开发软件时,在分析、事实上,用面向对象方法学开发软件时,在分析、设计和编码等项开发活动之间并不存在明显的边界。设计和编码等项开发活动之间并不存在明显的边界。如下图,一个圆圈内的向下箭头代表该阶段内的如下图,一个圆圈内的向下箭头代表该阶段内的迭代或求精。迭代或求精。图中用较小的圆圈代表维护,这形象地表示采用图中用较小的圆圈代表维护,这形象地表示采用了面向对象方法学之后维护时间缩短了。了面向对象方法学之后维护时间
23、缩短了。面向对象范型本身要求经常对软件开发活面向对象范型本身要求经常对软件开发活动进行迭代或求精。动进行迭代或求精。2024/8/11周日软件工程222.6 喷泉模型喷泉模型图2.6喷泉模型图进一步开发维护运行状态集成和测试阶段编码阶段面向对象设计阶段面向对象分析阶段陈述需求阶段2024/8/11周日软件工程232.7 Rational统一过程统一过程统一过程(RationalUnifiedProcess,RUP)是由Rational软件公司(现已被IBM并购)推出的一个软件开发过程框架。所谓软件开发过程框架是指团队可能根据具体的项目组或软件开发企业的不同需求,能够定义、配置、定制和实施一致的
24、软件开发过程。2024/8/11周日软件工程242.7.1 最佳实践最佳实践RUP的“最佳实践”描述了一个指导开发团队达成目标的迭代和递增式的软件开发过程,而不强制规定软件项目的“计划-构建-集成”之类活动顺序。6条最佳实践:1、迭代式开发 传统的顺序式开发方法是不可能完成用户需求的大型复杂系统工程的开发工作。在整个软件开发过程中客户的需求会经常发生变化,需要有一种能够通过一系列细化、若干个渐进的反复过程而得出有效解决方案的迭代式方法。2024/8/11周日软件工程252.7.1 最佳实践最佳实践2、管理需求3、使用基于组件的架构4、可视化建模2024/8/11周日软件工程262.7.1 最佳
25、实践最佳实践5、验证软件质量软件质量评估不是一种事后的行为或由单独小组进行的孤立活动,而是内建在贯穿于整个开发过程的、由全体成员参与的所有活动中。6、控制软件变更2024/8/11周日软件工程272.7.2 RUP的十大要素的十大要素关键就是需要了解软件过程中一些必要元素,并且遵循某些原则来定制软件过程来满足项目的特定需求。1、前景:制定前景、前景:制定前景清晰的前景是开发一个满足干系人需求清晰的前景是开发一个满足干系人需求的产品的关键。的产品的关键。前景(vision)给更详细的技术需求提供了一个高层的、有时候是合同式的基础。2024/8/11周日软件工程282.7.2 RUP的十大要素的十
26、大要素1、前景:制定前景、前景:制定前景前景的内容将回答以下问题:前景的内容将回答以下问题:关键术语是什么?(词汇表)我们尝试解决的问题是什么?(问题陈述)干系人是谁?用户是谁?他们的需求是什么?产品的特性是什么?功能性需求是什么?(用例)非功能性需求是什么?设计约束是什么?2024/8/11周日软件工程292.7.2 RUP的十大要素的十大要素2、计划:按计划管理、计划:按计划管理产品的质量是和产品的计划息息相关的:在RUP中,软件开发计划(softwaredevelopmentplan,SDP)综合了管理项目所需的各种信息。是其他各分计划的基础和指导。注意:SDP必须在整个项目中被必须在整
27、个项目中被维护和更新维护和更新。计划并不重要,重要的是实施计划。计划并不重要,重要的是实施计划。2024/8/11周日软件工程302.7.2 RUP的十大要素的十大要素3、风险:降低风险并跟踪相关问题、风险:降低风险并跟踪相关问题RUP的要点之一是在项目早期就标识并处的要点之一是在项目早期就标识并处理最大的风险理最大的风险。4、业务案例:检验业务案例、业务案例:检验业务案例主要用于为实现项目的前景而制定经济计主要用于为实现项目的前景而制定经济计划,提供项目的合理依据,为项目树立一划,提供项目的合理依据,为项目树立一个有说服力的论点。个有说服力的论点。2024/8/11周日软件工程312.7.2
28、 RUP的十大要素的十大要素5、架构:设计组件架构、架构:设计组件架构软件系统的架构是指一个系统关键部件的组织或结构,组件之间通过接口交互,而组件是由一些更小的组件和接口组成的。6、原型:增量地构建和测试产品、原型:增量地构建和测试产品RUP是为了尽早排除问题和解决风险和问题而构建、测试和评估产品的可执行版本的一种迭代方法。2024/8/11周日软件工程322.7.2 RUP的十大要素的十大要素7、评估:定期评估结果、评估:定期评估结果关键是既关注过程问题又关注产品问题。关键是既关注过程问题又关注产品问题。越早发现问题就减少越多的问题。越早发现问题就减少越多的问题。8、变更请求:管理并控制变更
29、、变更请求:管理并控制变更重要的是:变更的提出和管理过程始终保重要的是:变更的提出和管理过程始终保持一致。持一致。2024/8/11周日软件工程332.7.2 RUP的十大要素的十大要素9、用户支持:部署可用的产品、用户支持:部署可用的产品10、过程:采用适合项目的过程、过程:采用适合项目的过程必须应用常理和经验来配置流程和工具,必须应用常理和经验来配置流程和工具,以满足组织和项目的需要。以满足组织和项目的需要。2024/8/11周日软件工程342.7.3 RUP生命周期生命周期(1)核心工作流核心工作流RUP中有中有9个核心工作流,如下图个核心工作流,如下图2024/8/11周日软件工程35
30、2.7.3 RUP生命周期生命周期(2)工作阶段工作阶段软件生命周期被分解为周期,每一个周期工软件生命周期被分解为周期,每一个周期工作在产品新的一代上。作在产品新的一代上。RationalUnifiedProcess将周期又划分为四个连续的阶段。将周期又划分为四个连续的阶段。初始阶段初始阶段精化阶段精化阶段构建阶段构建阶段移交阶段移交阶段建立业务模型,定义最终产建立业务模型,定义最终产品视图,并且确定项目的范品视图,并且确定项目的范围围设计并确定系统的体系结构,设计并确定系统的体系结构,制定项目计划,确定资源需制定项目计划,确定资源需求。求。开发出所有构件和应用程序,开发出所有构件和应用程序,
31、把它们集成为客户需要的产把它们集成为客户需要的产品,并且详尽地测试所有功品,并且详尽地测试所有功能。能。把开发出的产品提交给用户把开发出的产品提交给用户使用使用2024/8/11周日软件工程362.7.3 RUP生命周期生命周期(3)RUP迭代式开发迭代式开发RUP强调采用强调采用迭代迭代和和渐增渐增的方式来开发的方式来开发软件,整个项目开发过程由多个迭代过程软件,整个项目开发过程由多个迭代过程组成。在每次迭代中组成。在每次迭代中只考虑只考虑系统的系统的一部分一部分需求,针对这部分需求进行分析、设计、需求,针对这部分需求进行分析、设计、实现、测试、部署等工作,每次迭代都是实现、测试、部署等工作
32、,每次迭代都是在系统在系统已完成已完成部分的部分的基础上基础上进行的,每次进行的,每次给系统给系统增加一些新增加一些新的的功能功能,如此循环往复,如此循环往复地进行下去,直到完成最终项目。地进行下去,直到完成最终项目。2024/8/11周日软件工程372.8 敏捷过程与极限编程敏捷过程与极限编程2.8.1敏捷过程概述敏捷过程概述敏捷开发运动正式开始的标志是敏捷开发运动正式开始的标志是2001年年2月的月的“敏捷宣言敏捷宣言”(AgileManifesto),),这项宣言是由这项宣言是由17位当时称之为位当时称之为“轻量级方轻量级方法学家法学家”所编写签署的,他们的价值观是:所编写签署的,他们的
33、价值观是:个人与交互重于开发过程与工具;可用的个人与交互重于开发过程与工具;可用的软件重于复杂的文档;寻求客户的合作重软件重于复杂的文档;寻求客户的合作重于对合同的谈判;对变化的响应重于始终于对合同的谈判;对变化的响应重于始终遵循固定的计划。遵循固定的计划。2024/8/11周日软件工程382.8.1 敏捷过程概述敏捷过程概述目的是建立起一个项目团队全员参与到目的是建立起一个项目团队全员参与到软件开发中,包括设定软件开发流程的管软件开发中,包括设定软件开发流程的管理人员,只有这样软件开发流程才有可接理人员,只有这样软件开发流程才有可接受性。同时敏捷开发要求研发人员独立自受性。同时敏捷开发要求研
34、发人员独立自主在技术上进行决策,因为他们是最了解主在技术上进行决策,因为他们是最了解什么技术是需要和不需要的。再者,敏捷什么技术是需要和不需要的。再者,敏捷开发特别重视项目团队中的信息交流,有开发特别重视项目团队中的信息交流,有调查显示:调查显示:“项目失败的原因最终都可追项目失败的原因最终都可追溯到信息没有及时准确地传递到应该接受溯到信息没有及时准确地传递到应该接受它的人。它的人。”2024/8/11周日软件工程392.8.1 敏捷过程概述敏捷过程概述敏捷方法主要有两个特点,这也是其区别于敏捷方法主要有两个特点,这也是其区别于其他方法,尤其是重型方法的最主要特征其他方法,尤其是重型方法的最主
35、要特征:(1)敏捷开发方法是)敏捷开发方法是“适应性适应性”(Adaptive)而而非非“预设性预设性”(Predictive)。一般方法在不可预测的环境下,很难适应变化,一般方法在不可预测的环境下,很难适应变化,甚至是拒绝变化。与之相反的敏捷方法则是欢迎甚至是拒绝变化。与之相反的敏捷方法则是欢迎变化,目的就是成为适应变化的过程,甚至能允变化,目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。所以称之为适应性方法。许改变自身来适应变化。所以称之为适应性方法。2024/8/11周日软件工程402.8.1 敏捷过程概述敏捷过程概述敏捷方法主要有两个特点,这也是其区别于敏捷方法主要有两个特点
36、,这也是其区别于其他方法,尤其是重型方法的最主要特征其他方法,尤其是重型方法的最主要特征:(2)敏捷开发方法是)敏捷开发方法是“面向人面向人”(peopleoriented)而非而非“面向过程面向过程”(processoriented)。MatinFlower认为:认为:“在敏捷开发过程中,人是在敏捷开发过程中,人是第一位的,过程是第二位的。所以就个人来说,第一位的,过程是第二位的。所以就个人来说,应该可以从各种不同的过程中找到真正适合自己应该可以从各种不同的过程中找到真正适合自己的过程。的过程。”2024/8/11周日软件工程412.8.1 敏捷过程概述敏捷过程概述敏捷的价值观如下:敏捷的价
37、值观如下:“个体和交互个体和交互”胜过胜过“过程和工具过程和工具”“可以工作的软件可以工作的软件”胜过胜过“面面俱到的文面面俱到的文档档”“客户合作客户合作”胜过胜过 “合同谈判合同谈判”“响应变化响应变化”胜过胜过 “遵循计划遵循计划”另外还有另外还有12个原则:个原则:2024/8/11周日软件工程422.8.1 敏捷过程概述敏捷过程概述对敏捷开发的误解对敏捷开发的误解:误解一:敏捷对人的要求很高误解一:敏捷对人的要求很高 误解二:敏捷没有文档,也不做设计误解二:敏捷没有文档,也不做设计 误解三:敏捷好,其他方法不好误解三:敏捷好,其他方法不好 误解四:敏捷就是误解四:敏捷就是XPXP(极
38、限编程),就是(极限编程),就是Scrum Scrum XP和Scrum只是众多敏捷方法中的两种,还有很多其他的敏捷方法。误解五:敏捷很好,因此我要制定标准,误解五:敏捷很好,因此我要制定标准,所有项目都要遵循着个标准所有项目都要遵循着个标准 2024/8/11周日软件工程432.8.2 极限编程极限编程极限编程(极限编程(ExtremeProgramming,简称简称XP)是敏捷过程中最负盛名的一个,其名中“极限”二字的含义是指把好的开发实践运用到极致。2024/8/11周日软件工程442.8.2 极限编程极限编程极限编程是由极限编程是由KentBeck在在1996年提出的,年提出的,是一个
39、轻量级的、灵巧的是一个轻量级的、灵巧的软件软件开发方法;同时它开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价也是一个非常严谨和周密的方法。它的基础和价值观是值观是交流交流、朴素朴素、反馈反馈和和勇气勇气;即,任何一个;即,任何一个软件项目都可以从四个方面入手进行改善:加强软件项目都可以从四个方面入手进行改善:加强交流;从简单做起;寻求反馈;勇于实事求是。交流;从简单做起;寻求反馈;勇于实事求是。XP是一种近螺旋式的开发方法,它将复杂的开发是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其
40、它一系列的方法,开发积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。地调整开发过程。2024/8/11周日软件工程452.8.2 极限编程极限编程“Extreme”(极限)是指,对比传统的(极限)是指,对比传统的项目开发方式,项目开发方式,XP强调把它列出的每个方强调把它列出的每个方法和思想做到极限、做到最好;其它法和思想做到极限、做到最好;其它XP所所不提倡的,则一概忽略(如开发前期的整不提倡的,则一概忽略(如开发前
41、期的整体设计等)。一个严格实施体设计等)。一个严格实施XP的项目,其的项目,其开发过程应该是平稳的、高效的和快速的,开发过程应该是平稳的、高效的和快速的,能够做到一周能够做到一周40小时工作制而不拖延项目小时工作制而不拖延项目进度。进度。2024/8/11周日软件工程462.8.2 极限编程极限编程1.极限编程的有效实践极限编程的有效实践客户作为开发团队的成员客户作为开发团队的成员使用用户素材使用用户素材短交付周期短交付周期验收测试验收测试结对编程结对编程测试驱动开发测试驱动开发集体所有集体所有持续集成持续集成2024/8/11周日软件工程472.8.2 极限编程极限编程1.极限编程的有效实践
42、极限编程的有效实践可持续的开发速度可持续的开发速度开放的工作空间开放的工作空间及时调整计划及时调整计划简单的设计简单的设计重构重构2024/8/11周日软件工程482.8.2 极限编程极限编程1.极限编程的有效实践极限编程的有效实践使用隐喻使用隐喻在软件领域中,隐喻并非简单地用一个名词对软件事物进行类比,在软件领域中,隐喻并非简单地用一个名词对软件事物进行类比,它还包含了对类比事物之间的体验与分析,不仅要找出两者之间的类同它还包含了对类比事物之间的体验与分析,不仅要找出两者之间的类同之处,还要借助人们对隐喻事物的现有理解,通过我们已经熟悉的活动,之处,还要借助人们对隐喻事物的现有理解,通过我们
43、已经熟悉的活动,将软件开发过程联系起来,从而帮助我们更好地认知软件问题域。因此,将软件开发过程联系起来,从而帮助我们更好地认知软件问题域。因此,软件隐喻的本质是一种认知隐喻。我们可以通过在日常生活中无意识获软件隐喻的本质是一种认知隐喻。我们可以通过在日常生活中无意识获得的基本隐喻系统,在软件开发过程中,受到关联性的启发和影响,使得的基本隐喻系统,在软件开发过程中,受到关联性的启发和影响,使得主观经验和感觉经验相互匹配,然后通过概念融合而形成具有启示意得主观经验和感觉经验相互匹配,然后通过概念融合而形成具有启示意义和指导意义的软件隐喻。这正是软件隐喻的工作机制。义和指导意义的软件隐喻。这正是软件
44、隐喻的工作机制。在软件开发过程中,我们会碰到种类繁多的软件隐喻,例如臭虫在软件开发过程中,我们会碰到种类繁多的软件隐喻,例如臭虫(bug)、菜单()、菜单(menu)、视窗()、视窗(windows);架构();架构(architecture)、)、服务(服务(service)、对象()、对象(object);黑盒();黑盒(blackbox)与白盒()与白盒(whitebox);瀑布();瀑布(waterfall)软件模型、迭代()软件模型、迭代(iterative)软件模型)软件模型这这些软件隐喻无一不是从日常生活或其他科学领域中借鉴而来,根据我们些软件隐喻无一不是从日常生活或其他科学领域
45、中借鉴而来,根据我们原有的认知,实现一种类比的定义,并逐步发展为软件领域的固有概念。原有的认知,实现一种类比的定义,并逐步发展为软件领域的固有概念。2024/8/11周日软件工程492.8.2 极限编程极限编程2.极限编程的整体开发过程极限编程的整体开发过程用户故事用户故事测试用例测试用例架构试探架构试探制定交付制定交付计划计划迭代开发迭代开发验收测试验收测试小交付小交付难点试探难点试探需求需求新用户故事新用户故事隐喻隐喻交付计划交付计划最新版本最新版本用户认可用户认可不确定的估计不确定的估计确定的估计确定的估计下一次迭代下一次迭代差错差错图图2.10 极限编程的整体开发过程极限编程的整体开发
46、过程2024/8/11周日软件工程502.8.2 极限编程极限编程3.极限编程的迭代过程极限编程的迭代过程制定迭代制定迭代计划计划图图2.11 极限编程的迭代过程极限编程的迭代过程站立会议站立会议结对编程结对编程最新版本最新版本小交付小交付交流与讨交流与讨论论验收测试验收测试用户认可用户认可测试用例测试用例差错差错未完成的任务未完成的任务用户故事用户故事交付计划交付计划项目效率项目效率轮换结对编程人员轮换结对编程人员持续地优化设计持续地优化设计“类类-责任责任-协作协作”卡卡新用户故事新用户故事共享的信息共享的信息任务分配任务分配下一个任务下一个任务新功能新功能新项目速率新项目速率2024/8
47、/11周日软件工程512.9 能力成熟度模型能力成熟度模型能力成熟度模型的基本思想是,因为问题是由我们管理软件过程的方法不当引起的,所以新软件技术的运用并不会自动提高生产率和软件质量。能力成熟度模型有助于软件开发组织建立一个有规律的、成熟的软件过程。改进后的过程将开发出质量更好的软件,使更多的软件项目免受时间和费用超支之苦。2024/8/11周日软件工程522.9 能力成熟度模型能力成熟度模型软件过程包括各种活动、技术和工具,因此,它实际上既包括了软件生产的技术方面又包括了管理方面。CMM策略力图改进软件过程的管理,而在技术方面的改进是其必然的结果。必须记住,CMM是以增量方式逐步引入变化的。
48、CMM明确地定义了5个不同的成熟度等级,一个软件开发组织可用一系列小的改良性步骤向更高的成熟度等级迈进。2024/8/11周日软件工程532.9.1 能力成熟度模型的结构能力成熟度模型的结构能力成熟度模型包括以下的组成成分。成熟度等级成熟度等级(Maturity Levels)(Maturity Levels)过程能力过程能力(Process Capability)(Process Capability)关键过程域关键过程域(Key Process Areas,KPA)(Key Process Areas,KPA)目标目标(Goals)(Goals)公共特性公共特性(common featur
49、es)(common features)关键实践关键实践(key practices)(key practices)2024/8/11周日软件工程542.9.1 能力成熟度模型的结构能力成熟度模型的结构下图所示描绘了下图所示描绘了CMM的结构的结构2024/8/11周日软件工程552.9.2 能力成熟度等级能力成熟度等级CMM通过定义能力成熟度的五个等级,引导软件开发组织不断识别出其软件过程的缺陷,并指出应该做哪些改进,但是,它并不提供做这些改进的具体措施。能力成熟度的五个等级从低到高是:初始级初始级、可重复级可重复级、已定义级已定义级、已管理级已管理级和优化级优化级。下面介绍能力成熟度的这五
50、个等级。2024/8/11周日软件工程562.9.2 能力成熟度等级能力成熟度等级1.初始级软件过程的特征是无序的,有时甚至是混乱的。几乎没有什么过程是经过定义的,项目能否成功完全取决于个人能力。2.可重复级 建立了基本的项目管理过程,以追踪成本、进度和功能性。必要的过程规范已经建立起来了,使得可以重复以前类似项目所取得的成功。2024/8/11周日软件工程572.9.2 能力成熟度等级能力成熟度等级3.已定义级 用于管理和工程活动的软件过程已经文档化和标准化,并且已经集成到整个组织的软件过程中。所有项目都使用文档化的、组织批准的过程来开发和维护软件。这一级包含了第2级的所有特征。4.已管理级