《02第二章:软件过程报告优秀PPT.ppt》由会员分享,可在线阅读,更多相关《02第二章:软件过程报告优秀PPT.ppt(139页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件工程过程是为了获得高质量软件所须要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。本章讲解并描述在软件生命周期全过程中应当完成的基本任务,并介绍各种常用的过程模型。其次章:软件过程n2.1软件生命周期的基本任务n2.2瀑布模型n2.3快速原型模型n2.4增量模型n2.5螺旋模型n2.6喷泉模型n2.7Rational统一过程n2.8灵敏过程与极限编程n2.9实力成熟度模型其次章:软件过程n1.软件定义:确定软件开发工程必需完成的总目标;确定工程的可行性;导出实现工程目标应当接受的策略及系统必需完成的功能;估计完成该项工程须要的资源和成本,并且制订工程进度表。这个时期的工作通常又称为
2、系统分析,由系统分析员负责完成。软件定义时期通常进一步划分为3个阶段,即问题定义、可行性探讨和需求分析。软件生命周期:n2.软件开发:具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:概要设计、具体设计、编码和单元测试、综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。软件生命周期:n3.运行维护:当软件在运用过程中发觉错误时应当加以改正;当环境变更时应当修改软件以适应新的环境;当用户有新要求时应当刚好改进软件以满足用户的新须要。通常对维护时期不再进一步划分阶段,但是每一次维护活动本质上都是一次压缩和简化了的定义和开发过程。软件生命周期:通过调研,系统分析员应当提
3、出关于问题性质、工程目标和工程规模的书面报告,并且须要得到客户对这份报告的确认。2.1.1问题定义n确定上一个阶段的问题是否有行得通的解决方法n用最小的代价在尽可能短的时间内确定问题是否能够解决。2.1.2可行性探讨n解决“目标系统必需做什么”这个问题可行性探讨的基本目的是用较小的成本在较短的时间内确定是否存在可行的解法,因此很多微小环节被忽视了。然而在最终的系统中却不能遗漏任何一个微小的微小环节n是用正式文档精确地记录对目标系统的需求,该文档通常称为规格说明书(specification)。2.1.3需求分析n概括地回答“怎样实现目标系统?”概要设计又称为初步设计、逻辑设计、高层设计或总体设
4、计。n设计几种可能的方案n举荐最佳方案n制定具体支配n模块化2.1.4概要设计n将抽象概括的方式具体化n“应当怎样具体地实现这个系统”n设计出程序的具体规格说明n具体设计也称为模块设计、物理设计或低层设计。在这个阶段将具体地设计每个模块,确定实现模块功能所须要的算法和数据结构。2.1.5具体设计n这个阶段的关键任务是写出正确的,简洁理解、简洁维护的程序模块n程序员应当依据目标系统的性质和实际环境,选取一种适当的高级程序设计语言(必要时用汇编语言),把具体设计的结果翻译成用选定的语言书写的程序,并且细致测试编写出的每一个模块。2.1.6编码和单元测试n这个阶段的关键任务是通过各种类型的测试(及相
5、应的调试)使软件达到预定的要求。最基本的测试是集成测试集成测试和验验收测试收测试。必要时还可以再通过现场测试或平行运行等方法对目标系统进一步测试检验。2.1.7综合测试n集成测试是依据设计的软件结构,把经集成测试是依据设计的软件结构,把经过单元测试检验的模块按某种选定的策过单元测试检验的模块按某种选定的策略装配起来,在装配过程中对程序进行略装配起来,在装配过程中对程序进行必要的测试。必要的测试。n验收测试则是依据规格说明书的规定验收测试则是依据规格说明书的规定(通常在需求分析阶段确定),由用户(通常在需求分析阶段确定),由用户(或在用户主动参与下)对目标系统进(或在用户主动参与下)对目标系统进
6、行验收。行验收。2.1.7综合测试n通过各种必要的维护活动使系统许久地满足用户的须要。n改正性维护:也就是诊断和改正在运用过程中发觉的软件错误n适应性维护:即修改软件以适应环境的变更2.1.8软件维护n完善性维护:即依据用户的要求改进或扩充软件使它更完善n预防性维护:即修改软件为将来的维护活动预先做准备。2.1.8软件维护n事实上每一项维护活动都应当经过提出维护要求(或报告问题),分析维护要求,提出维护方案,审批维护方案,确定维护支配,修改软件设计,修改程序,测试程序,复查验收等一系列步骤。因此,实质上是阅历了一次压缩和简化了的软件定义和开发的全过程。每一项维护活动都应当精确地记录下来,作为正
7、式的文档资料加以保存。2.1.8软件维护n2.1软件生命周期的基本任务n2.2瀑布模型n2.3快速原型模型n2.4增量模型n2.5螺旋模型n2.6喷泉模型n2.7Rational统一过程n2.8灵敏过程与极限编程n2.9实力成熟度模型其次章:软件过程n在20世纪80年头之前,瀑布模型(waterfallmodel)始终是唯一被广泛接受的生命周期模型,现在它照旧是软件工程中应用最广泛的过程模型。图2.1所示为传统的瀑布模型。2.2瀑布模型2.2瀑布模型图2.1传统的瀑布模型n1.阶段间具有依次性和依靠性n必需等前一阶段的工作完成之后,才能起先后一阶段的工作;前一阶段的输出文档就是后一阶段的输入文
8、档。n2.推迟实现的观点n实践表明,对于规模较大的软件项目来说,往往编码起先得越早最终完成开发工作所须要的时间反而越长。传统的瀑布模型的特点n3.质量保证的观点n每个阶段都必需完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。每个阶段结束前都要对所完成的文档进行评审,以便尽早发觉问题,改正错误。传统的瀑布模型的特点n传统的瀑布模型过于志向化了。事实上,人在工作过程中不行能不犯错误。因此,实际的瀑布模型是带“反馈环”的,如图2.2所示(图中实线箭头表示开发过程,虚线箭头表示维护过程)。当在后面阶段发觉前面阶段的错误时,须要沿图中左侧的反馈线返回前面的阶段,修正前面阶段的产品之后再回来接
9、着完成后面阶段的任务。2.2瀑布模型2.2瀑布模型图2.2加入迭代过程的瀑布模型n可强迫开发人员接受规范的方法n严格地规定了每个阶段必需提交的文档n要求每个阶段交出的全部产品都必需经过质量保证小组的细致验证瀑布模型的优点n瀑布模型是由文档驱动的”:在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品是什么样的。很可能最终开发出的软件产品不能真正满足用户的须要。瀑布模型的缺点n(1)用户的需求特殊清晰全面,且在开发过程中没有或很少变更n(2)开发人员对软件的应用领域很熟悉n(3)用户的运用环境特殊稳定n(4)开发工作对用户参与的要求很低瀑布模型的适用范围n2.1软件生命周期的基本任务n2
10、.2瀑布模型n2.3快速原型模型n2.4增量模型n2.5螺旋模型n2.6喷泉模型n2.7Rational统一过程n2.8灵敏过程与极限编程n2.9实力成熟度模型其次章:软件过程n快速原型(rapidprototype)是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。如图2.3所示(图中实线箭头表示开发过程,虚线箭头表示维护过程)2.3快速原型模型2.3快速原型模型图2.3快速模型原型优点:快速原型模型是不带反馈环的,软件产品的开发基本上是按线性依次进行的。原型系统已经通过与用户交互而得到验证,据此产生的规格说明文档正确地描述了用户需求。开发人员通
11、过建立原型系统已经学到了很多东西,在设计和编码阶段发生错误的可能性也比较小。2.3快速原型模型n快速原型的本质是“快速”。开发人员应当尽可能快地建立出原型系统,以加速软件开发过程,节约软件开发成本。原型的用途是获知用户的真正需求,一旦需求确定了,原型将被抛弃。n当快速原型的某个部分是利用软件工具由计算机自动生成的时候,可以把这部分用到最终的软件产品中。2.3快速原型模型n(1)对所开发的领域比较熟悉而且有快速的原型开发工具n(2)项目招投标时,可以以原型模型作为软件的开发模型n(3)进行产品移植或升级时,或对已有产品原型进行客户化工作时,原型模型是特殊适合的2.3快速原型模型的适用范围n2.1
12、软件生命周期的基本任务n2.2瀑布模型n2.3快速原型模型n2.4增量模型n2.5螺旋模型n2.6喷泉模型n2.7Rational统一过程n2.8灵敏过程与极限编程n2.9实力成熟度模型其次章:软件过程n增量模型也称为渐增模型,如图2.4所示。运用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。2.4增量模型2.4增量模型图2.4增量模型n增量模型分批地逐步向用户提交产品,每次提交一个满足用户需求子集的可运行的产品。整个软件产品被分解成很多个增量构件,开发人员一个构件接一个构件地向用户提交产品。每次用户都得到
13、一个满足部分需求的可运行的产品,直到最终一次得到满足全部需求的完整产品。2.4增量模型n难点:把每个新的增量构件集成到现有软件体系结构中时,必需不破坏原来已经开发出的产品。此外,必需把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必需简洁、便利。2.4增量模型n从某种意义上说,增量模型本身是自相冲突的。它一方面要求开发人员把软件看做一个整体,另一方面又要求开发人员把软件看做构件序列,每个构件本质上都独立于另一个构件。除非开发人员有足够的技术实力协调好这一明显的冲突,否则用增量模型开发出的产品可能并不令人满足。2.4增量模型n(1)进行已有产品升级或新版本开发,增量模型
14、是特殊适合的;n(2)对完成期限严格要求的产品,可以运用增量模型;n(3)对所开发的领域比较熟悉而且已有原型系统,增量模型也是特殊适合的。2.4增量模型的适用范围n2.1软件生命周期的基本任务n2.2瀑布模型n2.3快速原型模型n2.4增量模型n2.5螺旋模型n2.6喷泉模型n2.7Rational统一过程n2.8灵敏过程与极限编程n2.9实力成熟度模型其次章软件过程n运用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看做在每个阶段之前都增加了风险分析过程的快速原型模型,如图2.5所示。图中带箭头的点画线的长度代表当前累计的开发费用,螺线旋过的角度值代表开发进度。基本思想2.
15、5螺旋模型图2.5螺旋模型n设计上的灵敏性,可以在项目的各个阶段进行变更;n以小的分段来构建大型系统,使成本计算变得简洁简洁;n客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性;n随着项目推动,客户始终驾驭项目的最新信息,从而能够和管理层有效地交互。优点n(1)接受螺旋模型须要具有相当丰富的风险评估阅历和特地学问,在风险较大的项目开发中,假如未能够刚好标识风险,势必造成重大损失;n(2)过多的迭代次数会增加开发成本,延迟提交时间。缺点n螺旋模型主要适用于内部开发的大规模软件项目。假如进行风险分析的费用接近整个项目的经费预算,则风险分析是不行行的。事实上,项目越大,风险也越大
16、,因此,进行风险分析的必要性也越大。n螺旋模型的主要优势在于,它是风险驱动的,但是,这也可能是它的一个弱点。2.5螺旋模型n2.1软件生命周期的基本任务n2.2瀑布模型n2.3快速原型模型n2.4增量模型n2.5螺旋模型n2.6喷泉模型n2.7Rational统一过程n2.8灵敏过程与极限编程n2.9实力成熟度模型其次章:软件过程n迭代是软件开发过程中普遍存在的一种内在属性。阅历表明,软件过程各个阶段之间的迭代或一个阶段内各个工作步骤之间的迭代,在面对对象范型中比在结构化范型中更常见。图2.6所示的喷泉模型是典型的面对对象生命周期模型。“喷泉”这个词体现了面对对象软件开发过程迭代和无缝的特性。
17、2.6喷泉模型2.6喷泉模型图2.6喷泉模型n为避开运用喷泉模型开发软件时开发过程过分无序,应当把一个线性过程(例如,快速原型模型或螺旋模型中的中心垂线)作为总目标。但是,同时也应当记住,面对对象范型本身要求常常对开发活动进行迭代或求精。2.6喷泉模型n喷泉模型不像瀑布模型那样,须要分析活动结束后才起先设计活动,设计活动结束后才起先编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。优点n其优点是可以提高软件项目开发效率,节约开发时间,适应于面对对象的软件开发过程。n可以从任何一个阶段(圆圈)转到其它一个阶段。即,在整个过程中补漏、拾遗、纠错的切入点大大增多,受到的阶段性的限制
18、较少。优点n由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中须要大量的开发人员,因此不利于项目的管理。n喷泉模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的状况。缺点n2.1软件生命周期的基本任务n2.2瀑布模型n2.3快速原型模型n2.4增量模型n2.5螺旋模型n2.6喷泉模型n2.7Rational统一过程n2.8灵敏过程与极限编程n2.9实力成熟度模型其次章:软件过程nRational统一过程(rationalunifiedprocess,RUP)是由Rational软件公司(已被IBM并购)推出的一个软件开发过程框架。所谓软件开发过程框架是指团
19、队可以依据具体的项目组或软件开发企业的不同需求,能够定义、配置、定制和实施一样的软件开发过程。2.7Rational统一过程n1.用于成功开发软件的一组基本观念和原则。n2.一套关于可重用方法内容和过程构建的框架。n3.基础的方法和过程定义语言。RUP核心元素2.7.1最佳实践1.迭代式开发:迭代式开发允许在每次迭代过程中需求发生变更,这种开发方法通过一系列细化来加深对问题的理解,因此能更简洁地容纳需求的变更。也可以把软件开发过程看做是一个风险管理过程,迭代式开发通过接受可验证的方法来削减风险。图2.7迭代式开发2.管理需求:在开发软件的过程中,客户需求将不断地发生变更,因此,确定系统的需求是
20、一个连续的过程。RUP描述了如何提取、组织系统的功能性需求和约束条件并把它们文档化。RUP接受用例分析来捕获需求,并由它们驱动设计和实现。2.7.1最佳实践3.运用基于组件的架构:所谓组件就是功能清晰的模块或子系统。系统可以由已经存在的、由第三方开发商供应的组件构成,因此组件使软件重用成为可能。RUP供应了运用现有的或新开发的组件定义架构的系统化方法,从而有助于降低软件开发的困难性,提高软件重用率。2.7.1最佳实践4.可视化建模:RUP与可视化的统一建模语言(UnifiedModelingLanguage,UML)紧密地联系在一起,在开发过程中建立起软件系统的可视化模型,可以帮助人们提高管理
21、软件困难性的实力。2.7.1最佳实践5.验证软件质量:某些软件不受用户欢迎的一个重要缘由,是其质量低下。在软件投入运行后再去查找和修改出现的问题,比在开发的早期阶段就进行这项工作须要花费更多的人力和时间。在RUP中,软件质量评估不再是一种事后的行为或由单独小组进行的孤立活动,而是内建在贯穿于整个开发过程的、由全体成员参与的全部活动中。2.7.1最佳实践6.限制软件变更:在变更是不行避开的环境中,必需具有管理变更的实力,才能确保每个修改都是可接受的而且能被跟踪的。RUP描述了如何限制、跟踪和监控修改,以确保迭代开发的成功。2.7.1最佳实践n(1)前景:制定前景n有一个清晰的前景是开发一个满足项
22、目干系人(stakeholder)需求的产品的关键。前景(vision)给更具体的技术需求供应了一个高层的、有时候是合同式的基础。n前景的内容将回答以下问题:n关键术语是什么?(词汇表)2.7.2RUP的十大要素我们要尝试解决什么问题?(问题声明)谁是项目干系人?谁是用户?他们的须要是什么?产品的特性是什么?功能性需求是什么?(用例)非功能性需求是什么?设计约束是什么?2.7.2RUP的十大要素n(2)支配:按支配管理n在RUP中,软件开发支配(softwaredevelopmentplan,SDP)综合了管理项目所需的各种信息,或许会包括一些在先启阶段开发的单独的内容。SDP必需在整个项目中
23、被维护和更新。2.7.2RUP的十大要素n(3)风险:降低风险并跟踪相关问题nRUP的要点之一是在项目早期就标识并处理最大的风险。项目组标识的每一个风险都应当有一个相应的缓解或解决支配。风险列表应当既作为项目活动的支配工具,又作为组织迭代的基础。2.7.2RUP的十大要素n(4)业务案例:检验业务案例n业务案例主要用于为实现项目前景而制定经济支配。一旦制定之后,业务案例就用来对项目供应的投资收益率(ROI)进行精确的评估。n业务案例的描述不应深挖问题的微小环节,而应就为什么须要该产品树立一个有劝服力的论点。2.7.2RUP的十大要素n(5)架构:设计组件架构n在RUP中,软件系统的架构是指一个
24、系统关键部件的组织或结构,组件之间通过接口交互,而组件是由一些更小的组件和接口组成的。架构由软件架构文档通过多个视图表示,每个视图都描述了某一组项目干系人所关切的系统的某个方面2.7.2RUP的十大要素n(6)原型:增量地构建和测试产品nRUP是为了尽早解除问题和解决风险和问题而构建、测试和评估产品的可执行版本的一种迭代方法。递增地构造和测试系统的组件,这是实施和测试规程及原则通过迭代证明价值的“要素”。2.7.2RUP的十大要素n(7)评估:定期评估结果n顾名思义,RUP的迭代评估审查了迭代的结果。评估得出了迭代满足需求规范的程度,同时还包括学到的教训和实施的过程改进。依据项目的规模、风险以
25、及迭代的特点,评估可以是对演示及其结果的一条简洁的记录,也可能是一个完整的、正式的测试评审记录。2.7.2RUP的十大要素n(8)变更恳求:管理并限制变更nRUP的配置和变更管理流程的要点是当变更发生时管理和限制项目的规模,并且贯穿整个生命周期。在RUP中,变更恳求通常用于记录和跟踪缺陷和增加功能的要求,或者对产品提出的任何其他类型的变更恳求。2.7.2RUP的十大要素n(9)用户支持:部署可用的产品n在RUP中,部署流程的要点是包装和交付产品,同时交付有助于最终用户学习、运用和维护产品的全部必要的材料。项目组至少要给用户供应一个用户指南(或许是通过联机帮助的方式供应),可能还有一个安装指南和
26、版本发布说明。2.7.2RUP的十大要素n(10)过程:接受适合项目的过程n选择适合正开发的产品类型的流程是特殊必要的。即使在选定一个流程后,也不能盲目遵循这个流程必需应用常理和阅历来配置流程和工具,以满足组织和项目的须要。2.7.2RUP的十大要素2.7.3RUP生命周期图2.8方法内容定义与方法内容在流程中的应用n业务建模:深化了解运用目标系统的机构及其商业运作,评估目标系统对运用它的机构的影响。n需求:捕获客户的需求,并且使开发人员和用户达成对需求描述的共识。n分析与设计:把需求分析的结果转化成分析模型与设计模型。(1)核心流程n实现:把设计模型转换成实现结果(形式化地定义代码结构;用构
27、件实现类和对象;对开发出的构件进行单元测试;把不同实现人员开发出的模块集成为可执行的系统)。n测试:检查各个子系统的交互与集成,验证全部需求是否都被正确地实现了,识别、确认缺陷并确保在软件部署之前消退缺陷。(1)核心流程n部署:成功地生成目标系统的可运行的版本,并把软件移交给最终用户。n配置与变更管理:跟踪并维护在软件开发过程中产生的全部制品的完整性和一样性。n项目管理:供应项目管理框架,为软件开发项目制定支配、人员配备、执行和监控等方面的好用准则,并为风险管理供应框架。(1)核心流程n环境:向软件开发机构供应软件开发环境,包括过程管理和工具支持。(1)核心流程n先启阶段:建立业务模型,定义最
28、终产品视图,并且确定项目的范围。n精化阶段:设计并确定系统的体系结构,制定项目支配,确定资源需求。n构建阶段:开发出全部构件和应用程序,把它们集成为客户须要的产品,并且详尽地测试全部功能。n移交阶段:把开发出的产品提交给用户运用。(2)工作阶段(2)工作阶段图2.9项目的阶段和里程碑nRUP强调接受迭代和渐增的方式来开发软件,整个项目开发过程由多个迭代过程组成。n事实上,RUP重复一系列组成软件生命周期的循环。n每个阶段又进一步细分为一次或多次迭代过程。(3)RUP迭代式开发n2.1软件生命周期的基本任务n2.2瀑布模型n2.3快速原型模型n2.4增量模型n2.5螺旋模型n2.6喷泉模型n2.
29、7Rational统一过程n2.8灵敏过程与极限编程n2.9实力成熟度模型其次章:软件过程(1)“个体和交互”赛过“过程和工具”优秀的团队成员是软件开发项目获得成功的最重要因素,但不好的过程和工具也会使最优秀的团队成员无法发挥作用。团队成员的合作、沟通以及交互实力要比单纯的软件编程实力更为重要2.8.1灵敏过程概述(2)“可以运用的软件”赛过“四平八稳的文档”软件开发的主要目标是向用户供应可以运用的软件而不是文档,但是,完全没有文档的软件也是一种灾难。开发人员应当把主要精力放在创建可运用的软件上面,仅当迫切须要并且具有重大意义时,才进行文档编制工作,而且所编织的内部文档应当尽量简明扼要和主题突
30、出。2.8.1灵敏过程概述(3)“客户合作”赛过“合同谈判”客户通常不行能做到一次性地把他们的需求完整精确地表述在合同中。能够满足客户不断变更的需求的切实可行的途径是:开发团队与客户亲密协作。因此,能指导开发团队与客户协同工作的合同才是最好的合同。2.8.1灵敏过程概述(4)“响应变更”赛过“遵循支配”软件开发过程总会有变更,这是客观存在的现实。一个软件过程必需反映现实,因此,软件过程应当有足够的实力刚好响应变更。然而没有支配的项目也会因陷入混乱而失败,关键是支配必需有足够的灵敏性和可塑性,在形势发生变更时能快速调整,以适应业务、技术等方面的变更。2.8.1灵敏过程概述1.最重要的是通过尽早和
31、持续地交付有价值的软件以满足客户须要。2.即使在开发后期也欢迎需求的变更。灵敏过程驾驭变更带给客户竞争优势。3.常常交付可以运用的软件,间隔可以从几星期到几个月,时间尺度越短越好。4.业务人员和开发人员应当在整个项目过程中每天都在一起工作。“灵敏宣言”的原则5.运用主动的开发人员进行项目,给他们供应所需环境和支持,并信任他们能够完成任务。6.在开发小组中最有效率和效果的信息传达方式是面对面的交谈。7.可以运用的软件是度量进度的主要标准。8.灵敏过程提倡的是持续开发过程。投资“灵敏宣言”的原则人、开发人员和用户应当维持一个长期稳定的步调。9.持续地追求卓越的技术与良好的设计会增加灵敏性。10.简
32、洁(尽可能削减工作量)是最重要的。11.最好的架构、需求和设计都来自于自组织的团队。“灵敏宣言”的原则12.团队要定期总结如何提高效率,然后相应地调整自己的行为。依据上述价值观提出的软件过程统称为灵敏过程,其中应用比较广泛的是极限编程和Scrum。“灵敏宣言”的原则n极限编程(extremeprogramming)是灵敏过程中最负盛名的一个,其名称中“极限”二字的含义是指把好的开发实践运用到极致。目前,极限编程已经成为一个典型的开发方法,广泛应用于需求模糊且常常变更的场合。2.8.2 极限编程极限编程客户作为开发团队的成员运用用户素材短交付周期验收测试结对编程测试驱动开发集体全部1极限编程的有
33、效实践极限编程的有效实践持续集成可持续的开发速度开放的工作空间刚好调整支配简洁的设计重构运用隐喻1极限编程的有效实践极限编程的有效实践必需至少有一名客户代表在项目的整个开发周期中与开发人员在一起紧密地协作工作,客户代表负责确定需求、回答开发人员的问题并且设计功能验收测试方案。客户作为开发团队的成员所谓用户素材就是正在进行的关于需求的谈话内容的助记符。依据用户素材可以合理地支配实现该项需求的时间。运用用户素材每两周完成一次的迭代过程实现了用户的一些需求,交付出目标系统的一个可工作的版本。通过向有关的用户演示迭代生成的系统,获得他们的反馈看法。短交付周期通过执行由客户制定的验收测试来捕获用户素材的
34、微小环节。验收测试结对编程就是由两名开发人员在同一台计算机上共同编写解决同一个问题的程序代码,通常一个人编码,另一个人对代码进行审查与测试,以保证代码的正确性与可读性。结对编程是加强开发人员相互沟通与评审的一种方式。结对编程极限编程强调“测试先行”。在编码之前应当首先设计好测试方案,然后再编程,直至全部测试都获得通过之后才可以结束工作。测试驱动开发极限编程强调程序代码属于整个开发小组集体全部,小组每个成员都有更改代码的权利,每个成员都对全部代码的质量负责。集体全部极限编程主见在一天之内多次集成系统,而且随着需求的变更,应当不断地进行回来测试。持续集成开发人员以能够长期维持的速度努力工作。XP(
35、extremeprogramming)规定开发人员每周工作时间不超过40h,连续加班不行以超过两周,以免降低生产率。可持续的开发速度XP项目的全体参与者(开发人员、客户等)一起在一个开放的场所中工作,项目组成员在这个场所中自由地沟通和探讨。开放的工作空间支配应当是灵敏的、按部就班的。制订出项目支配之后,必需依据项目进展状况刚好进行调整,没有一成不变的支配。刚好调整支配开发人员应当使设计与支配要在本次迭代过程中完成的用户素材完全匹配,设计时不须要考虑将来的用户素材。在一次次的迭代过程中,项目组成员不断变更系统设计,使之相对于正在实现的用户素材而言始终处于最优状态。简洁的设计所谓代码重构就是在不变
36、更系统行为的前提下,重新调整和优化系统的内部结构,以降低困难性、消退冗余、增加灵敏性和提高性能。应当留意的是,在开发过程中不要过分依靠重构,特殊是不能轻视设计,对于大中型系统而言,假如推迟设计或者干脆不做设计,将造成一场灾难。重构可以将隐喻看做是把整个系统联系在一起的全局视图,它描述系统如何运作,以及用何种方式把新功能加入到系统中。运用隐喻n首先,项目组针对客户代表提出的“用户故事”n然后,项目组在隐喻和用户故事的基础上,依据客户设定的优先级制订交付支配n最终,起先多个迭代过程,在迭代期内产生的新用户故事不在本次迭代内解决,以保证本次开发过程不受干扰。2极限编程的整体开发过程2极限编程的整体开
37、发过程图2.10极限编程的整体开发过程3极限编程的迭代过程极限编程的迭代过程图2.11极限编程的迭代过程以极限编程为杰出代表的灵敏过程,可以快速、灵敏地响应变更和不确定的需求,同时照旧能够保持可持续的开发速度。上述这些特点使得灵敏过程能够较好地适应商业竞争环境下对项目提出的有限资源和有限开发时间的约束。3极限编程的迭代过程极限编程的迭代过程n2.1软件生命周期的基本任务n2.2瀑布模型n2.3快速原型模型n2.4增量模型n2.5螺旋模型n2.6喷泉模型n2.7Rational统一过程n2.8灵敏过程与极限编程n2.9实力成熟度模型其次章:软件过程n实力成熟度模型(capabilitymatur
38、itymodel,CMM)并不是一个软件生命周期模型,而是改进软件过程的一种策略,它与实际运用的过程模型无关。1986年美国卡内基梅隆高校软件工程探讨所首次提出实力成熟度模型(CMM),不过在当时它被称为过程成熟度模型。2.9实力成熟度模型n问题是由管理软件过程的方法不当引起的,所以新软件技术的运用并不会自动提高生产率和软件质量。实力成熟度模型有助于软件开发组织建立一个有规律的、成熟的软件过程。改进后的过程将开发出质量更好的软件,使更多的软件项目免受时间和费用超支之苦。基本思想n1.成熟度等级(maturitylevels):一个成熟度等级是在朝着实现成熟软件过程进化途中的一个妥当定义的平台。
39、5个成熟度等级构成了CMM的顶层结构。n2.过程实力(processcapability):软件过程实力描述,通过遵循软件过程能实现预期结果的程度。2.9.1实力成熟度模型的结构n3.关键过程域(keyprocessareas,KPA):每个成熟度等级由若干关键过程域组成。每个关键过程域都标识出一串相关的活动,当把这些活动都完成时所达到的一组目标,对建立该过程成熟度等级是至关重要的。2.9.1实力成熟度模型的结构n4.目标(goals):目标概括了关键过程域中的关键实践,并可用于确定一个组织或项目是否已有效地实施了该关键过程域。n5.公共特性(commonfeatures):CMM把关键实践分
40、别归入下列5个公共特性之中:执行约定、执行实力、执行的活动、测量和分析以及验证明施。2.9.1实力成熟度模型的结构n6.关键实践(keypractices):每个关键过程域都用若干关键实践描述,实施关键实践有助于实现相应的关键过程域的目标。2.9.1实力成熟度模型的结构2.9.1实力成熟度模型的结构图2.12CMM结构n1初始级n软件过程的特征是无序的,有时甚至是混乱的。几乎没有什么过程是经过定义的,项目能否成功完全取决于个人实力。n处于这个最低成熟度等级的组织,基本上没有健全的软件工程管理制度。每件事情都以特殊的方法来做。2.9.2实力成熟度等级n2可重复级n建立了基本的项目管理过程,以追踪
41、成本、进度和功能性。必要的过程规范已经建立起来了,使得可以重复以前类似项目所取得的成功。2.9.2实力成熟度等级n3已定义级n用于管理和工程活动的软件过程已经文档化和标准化,并且已经集成到整个组织的软件过程中。全部项目都运用文档化的、组织批准的过程来开发和维护软件。这一级包含了第2级的全部特征。2.9.2实力成熟度等级n4已管理级已管理级n 已收集了软件过程和产品质量的具体已收集了软件过程和产品质量的具体度量数据,运用这些具体的度量数据,度量数据,运用这些具体的度量数据,能够定量地理解和限制软件过程和产品。能够定量地理解和限制软件过程和产品。这一级包含了第这一级包含了第3级的全部特征。级的全部
42、特征。2.9.2实力成熟度等级n5优化级优化级n 通过定量的反馈能够实现持续的过通过定量的反馈能够实现持续的过程改进,这些反馈是从过程及对新想法程改进,这些反馈是从过程及对新想法和技术的测试中获得的。这一级包含了和技术的测试中获得的。这一级包含了第第4级的全部特征。级的全部特征。2.9.2实力成熟度等级n实力成熟度模型并不具体描述全部与软件开发和维护有关的过程,但是,有一些过程是确定过程实力的关键因素,这就是CMM所称的关键过程域。关键过程域是达到一个成熟度等级的必要条件。n除第1级成熟度之外,每个成熟度等级都指明白为改进其软件过程,软件开发组织应当重视的区域,同时也指明白为达到某个成熟度等级
43、所必需解决的问题。2.9.3关键过程域(a)软件配置管理。(b)软件质量保证。(c)软件子合同管理。(d)软件项目跟踪和监督软件。(e)项目支配。(f)需求管理。1成熟度第2级(a)同事复审。(b)组间协作。(c)软件产品工程。(d)集成的软件管理。(e)培训支配。(f)组织过程定义。(g)组织过程焦点。2成熟度第3级(a)软件质量管理。(b)定量的过程管理。3成熟度第4级(a)过程变更管理。(b)技术变更管理。(c)错误预防。4成熟度第5级CMM的用途主要有两个:软件开发组织用它来改进开发和维护软件的过程;政府或商业企业用它来评价与一个特定的软件公司签订软件项目合同的风险。2.9.4应用CM
44、Mn软件过程是为了获得高质量软件产品所须要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程必需科学、合理,才能开发出高质量的软件产品。n依据在软件生命周期全过程中应完成的任务的性质,在概念上可以把软件生命周期划分成问题定义、可行性探讨、小结需求分析、概要设计、具体设计、编码和单元测试、综合测试以及维护8个阶段。实际从事软件开发工作时,软件规模、种类、开发环境、运用的技术方法等因素,都影响阶段的划分,因此,一个科学、有效的软件过程应当定义一组适合于所担当的项目特点的任务集合。小结n生命周期模型(即软件过程模型)规定了把生命周期划分成的阶段及各个阶段的执行依次。本章介绍了5类典型的
45、软件生命周期模型。瀑布模型历史悠久、广为人知,它的优势在于它是规范的、文档驱动的方法。这种模型的问题是,最终交付的产品可能不是用户真正须要的。小结n快速原型模型正是为了克服瀑布模型的缺点而提出来的。它通过快速构建起一个可运行的原型系统,让用户试用原型并收集用户反馈看法的方法,获得用户的真实需求。n增量模型具有能在软件开发的早期阶段使投资获得明显回报和易于维护的优点。但是,要求软件具有开放结构是运用这种模型时固有的困难。小结n风险驱动的螺旋模型适用于大规模的内部开发项目,但是,只有在开发人员具有风险分析和解除风险的阅历及特地学问时,运用这种模型才会获得成功。n当运用面对对象范型开发软件时,软件生
46、命周期必需是循环的。也就是说,软件过程必需支持反馈和迭代。喷泉模型是一种典型的适合于面对对象范型的过程模型。小结n实力成熟度模型(CMM),是改进软件过程的一种策略。它的基本思想是,因为问题是管理软件过程的方法不恰当引起的,所以运用新软件技术并不会自动提高软件生产率和软件质量,应当下大力气改进对软件过程的管理。CMM以增量方式逐步引入变更,它明确地定义了5个不同的成熟度等级,一个软件开发组织可用一系列小的改良性步骤迈入更高的成熟度等级。小结n每个软件开发组织都应当选择适合于本组织及所要开发的软件特点的软件生命周期模型。这样的模型应当把各种生命周期模型的合适特性有机地结合起来,以便尽量削减它们的
47、缺点,充分利用它们的优点。小结n1什么是软件过程?它与软件工程方法学有何关系?n2假设你要开发一个软件,它的功能是把73624.9385这个数开平方,所得到的结果应当精确到小数点后4位。一旦实现并测试完之后,该产品将被抛弃。你准备选用哪种软件生命周期模型?请说明你做出这样选择的理由。习题n3假设你要为一家生产和销售长筒靴的公司开发一个软件,该产品将监控该公司的存货:跟踪从购买橡胶起先,到靴子生产,发货给各个连锁店,直至卖给顾客的全过程。你在为这个项目选择生命周期模型时运用什么准则?n4列出在开发上一题所述软件产品的过程中可能遇到的风险。你准备怎样解除这些风险?习题n5你为靴类连锁店开发的存货监控软件(见第3题)很受用户欢迎,你所在的软件开发公司确定把它重新写成一个通用软件包,以卖给各种生产并通过自己的连锁店销售产品的公司。因此,这个新产品必需是可移植的,并且应当能够很简洁地适应新的运行环境(硬件或操作系统),满足不同用户的需求。你在选择生命周期模型时运用的准则与在第3题中运用的准则有哪些不同?习题