第2章 过程模型
2.1 通用过程模型
1.线性过程流、迭代过程流、演化过程流、并行过程流
2.过程模式描述了软件工程工作中遇到的过程相关的问题、明确了问题环境并给出了针对该问题的一种或几种可证明的解决方案。
2.2 过程评估与改进
1.用于过程改进的CMMI标准评估方法:启动、诊断、建立、执行和学习
2.initial/managed/defined/quantitatively managed/optimizing
2.3 惯用过程模型
2.3.1 瀑布模型
1.瀑布模型,又称为经典生命周期,它提出了一个系统的、顺序的软件开发方法,从用户需求规格说明开始,通过计划、建模、构件和部署的过程,最终提供一个完整的软件并提供持续的技术支持。
2.V模型,在编码结束之后向上进行测试。
3.瀑布模型存在的问题:(1)实际的项目很少遵守瀑布模型提出的顺序。虽然线性模型可以加入迭代,但是它是用间接的方式实现的,结果是,随着项目的推进,变更可能造成混乱。(2)客户通常难以清楚地描述所有的需求。而瀑布模型却需要客户明确需求,因此很难适应在许多项目开始阶段必然存在的不确定性。(3)客户必须要有耐心,因为只有在项目接近尾声的时候,他们才能得到可执行的程序。对于系统中存在的重大缺陷,如果在可执行程序评审之前没有被发现,将可能造成惨重损失。
2.3.2 增量过程模型
1.运用增量模型的时候,第一个增量往往是核心产品,并根据评价结果指定下一个增量计划。
2.增量过程模型的好处:(1)适用于在项目既定的商业期限之前的可用人员配置。早期的增量可以由少量的开放人员完成,如果核心产品的口碑不错,可以为下一个增量投入更多的人力。(2)可以规避技术风险。
3.增量过程模型的问题:专注于每个增量的操作产品的交付,容易忽略早期的增量。
2.3.3 RAD快速应用开发
1.
2.RAD的优点:使开发团队能够在很短的时间内创建一个“功能齐全的系统”。
3.RAD的缺点:(1)对于大型的可扩展的项目,RAD需要足够的人力资源来创建数量正确的RAD团队。(2)如果系统不能正确地进行模块划分,那么用于构建RAD所需的组件将会是有问题的。(3)对于高性能,RAD不是一个好的方法。(4)在技术风险高的情况下,RAD可能不合适。
2.3.4 演化过程模型
1.演化模型是迭代的过程模型。
2.演化模型——原型开发和螺旋开发
3.当需求很模糊的时候,原型开发模型可帮助软件开发人员和利益相关者更好地理解究竟需要做什么。
4.原型开发的好处:作为一种机制, 帮助开发人员和客户更好地了解在需求模糊时要构建的内容。
5.原型开发的缺点:(1)客户总是要求开发人员将原型作为工作产品, 从而使软件开发管理得到停歇。(2)开发人员通常会做出实现上的妥协, 以便使原型快速工作。最后, 不太理想的选择现在已经成为系统的一个组成部分。
6.螺旋模型结合原型的迭代性质和瀑布模型的系统性和可控性特点。它具有快速开发越来越完善版本的潜力。
7.螺旋模型的优点:把原型作为降低风险的机制,更重要的是,开发人员可以在产品演进的任何阶段使用原型方法。
8.螺旋模型的缺点:(1)很难让用户相信演化的方法是可控的。(2)如果存在较大的风险没有被发现和管理,肯定会发生问题。
2.3.5 协同模型
1.协同开发模型是当重用是开放目标时应用的过程。
2.4 专用过程模型
1.基于构件的开发
2.形式化方法模型
3.面向方面的软件开发AOSD,为定义、说明、设计和构建方面提供过程和方法
2.5 统一过程(UP)
1.用例驱动,以架构为核心,迭代并且增量的软件过程。
2.UP的起始阶段(inception)包括沟通和策划,细化阶段(elaboration)包括策划和建模,构建阶段(construction)包括构建,转换(translation)阶段包括构建活动的后期阶段和部署,生成阶段(production)于软件增量一致。
3.从管理视角和工程视角来看一个软件生命周期。管理视角——阶段和里程碑,发展周期。工程视角——迭代。
2.6 工作流和模型
1.边界类,控制类和实体类。
第三章 敏捷开发
1.敏捷宣言——敏捷开发的价值观:(1)个人和这些个人之间的交流胜过了开发过程和工具(2)可运行的软件胜过了宽泛的文档(3)客户合作胜过了合同谈判(4)对变更的良好响应胜过了按部就班地遵循计划。
2.什么是敏捷:(1)有效地响应变化(2)鼓励能够使沟通更便利的团队结构和协作态度。(3)强调可运行软件的快速交付而不那么看重中间产品(4)将客户作为开发团队的成员以消除一直普遍存在于多数软件项目中的“区分你我”的态度(5)意识到在不确定的世界里计划是有局限性的,项目计划必须是可灵活调整的。
3.敏捷开发:(1)由客户所需内容的描述来驱动(2)认识到计划是短暂的(3)迭代开发软件,重点在构建活动(4)提供多个软件增量(5)根据更改的发生而调整。
4.敏捷过程中人的因素:团队成员需要具备基本能力、共同目标、精诚合作、决策能力、模糊问题解决能力、相互信任和尊重、自组织。
极限编程
1.极限编程XP是最广泛使用的敏捷开发。
2.重构是以不改变代码外部行为而改进其内部结构的方法来修改软件系统的过程。实质上,重构就是在编程完成之后改进代码设计。
3.极限编程过程:策划Planning(故事,分配和定级),设计Design(KIS,CRC,鼓励重构,Spike),编码Coding(单元测试,结对编程),测试Testing(每天单元测试,客户验收测试)
其他敏捷过程模型
1.ASD自适应软件开发
2.Scrum
3.动态系统开发方法
4.Crystral
5.FDD特征驱动开发
6.敏捷建模