能力成熟度模型
CMM
初始级
项目完成依靠个人的努力和英雄式核心任务的作用
可重复级
建立了基本的项目管理过程和实践来跟踪项目费用,进度
已定义级
管理和工程两方面的软件过程已经文档化,标准化
优化级
通过过程质量反馈和来自新观念,新技术的反馈不断地改进软件过程
CMMI
阶段性
CMM的2.0版本,CMM只适用与软件,但是CMMI适用不限于软件
初始级
过程不可预测,且缺乏控制(靠运气,随时可能崩)
已管理级(已重复级)
过程为项目服务(每个项目有自己的管理流程,但各干各的)
已定义级
过程为组织服务(全公司用统一标准流程,经验共享)
定量管理级
过程已度量和控制(用数据量化管理,能预测趋势)
优化级
过程可优化和改进(主动找到薄弱环节,持续进步)
连续性
CL0未完成的
这个过程域根本就没做的,过程域未执行或未得到CL1中定义的所有目标
CL1已执行的
其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标,这个过程的基本工作能完成,但缺乏系统管理。比如比如代码写了、测试跑了),但没有计划、没有跟踪、没有记录。
CL2已管理的
其共性目标是集中于已管理的过程的制度化。这个过程的执行有计划、有跟踪、有控制。
CL3已定义级的
其共性目标集中于已定义的过程的制度化,这个过程的执行遵循组织的标准流程,而非项目自创。
CL4定量管理
其共性目标集中于可定量管理的过程的制度化,这个过程的执行用量化数据来管理,而不是凭感觉。
CL5优化的
使用量化(统计学)手段改变和优化过程域,这个过程持续主动改进,而不是被动响应问题。
区别:阶段式(Staged):像考驾照,必须一级一级往上考,不能跳级。针对的是项目的整体<br>连续式(Continuous):像点外卖,你可以只点自己爱吃的菜,不用点全套餐。针对的是单个过程域,比如需求管理领域,配置管理领域是分开评判的
软件过程模型
瀑布模型
概念:将软件生命周期中的各个活动规定为依据线性顺序链接的若干阶段的模型。<font color="#e74f4c">以文档为驱动,适合软件需求很明确的软件项目的开发</font>
优点:容易理解,成本低,强调开发的阶段性早期计划及需求调查和产品测试
缺点:客户必须能完整的正确的表达需求,难以评估项目进度状态。需求或者设计的错误到了项目后期才能被发现,会导致延期,超出预算等问题
增量模型
概念:将需求分段为一系列产品,每一个产品都可以分别开发,也算是广义的演化模型,只不过增量模型针对的是新增功能,演化模型针对修改原来的功能
优点:第一个可交付的版本成本和时间很少
缺点:若没有对用户的变更要求进行规划,那么一些增量可能重新开发或者重新发布
演化模型
原型模型
在需求不明确或用户难以表达清楚需求时,先快速构建一个可运行的“雏形”(原型),让用户直观地试用和体验,然后根据用户反馈反复修改完善,直到最终形成满意的软件产品。
螺旋桨模型
概念:针对于大项目,开发一个原型达不到要求,螺旋桨模型将瀑布模型和原型模型结合起来,加入两种模型均忽略的风险分析,
1.制定计划,确定软件目标,选定实施方案,明确开发的限制条件
2.风险分析,对所选方案进行分析,识别风险,消除风险
3.实施工程,实施软件开发,验证阶段性产品
4.用户评估,评价开发工作,提出修正建议,建立下一个周期的开发计划
喷泉模型
以用户需求为动力,以对象为驱动的模型,适用于面向对象的开发方面,它强调各个开发阶段(分析、设计、编码、测试)之间的重叠和反复迭代
优点:各个阶段没有分界线,开发人员同步进行,提高开发效率
缺点:由于是同步进行,需要大量开发人员,不利于管理,
基于构件的开发模型
利用预先包装的构件来构造应用系统,构件可以是组织内部开发的构件也可以是商品化成品软件构件,本质上是演化模型,不同之处在于采用预先打包的软件构建开发应用系统
形式化方法
用数学公式写需求,用逻辑推理证明软件没有Bug。
统一过程模型
核心特点
用例驱动:整个开发由用例(Use Case) 驱动,需求、设计、测试都围绕用例展开,
以架构为中心:早期就确立系统架构(核心组件、接口、技术选型),后续迭代在此基础上扩展
迭代并增量:每个阶段都包含多次迭代,每次迭代都产生可运行的版本,功能逐步增加
四个阶段
起始阶段:评估项目风险(技术、资源、时间)。建立初步的项目计划和预算。初步用例模型、项目计划、风险评估报告
精化阶段:详细的用例模型、架构文档、可执行的架构原型、修正后的项目计划。
构建阶段:可运行的产品版本(Beta版)、测试报告、用户文档。
移交阶段:正式交付的产品、培训材料、维护文档。
敏捷方法
让用户尽可能早的,交付有价值的软件
极限编程
它的基础和价值观是交流、朴素、反馈和勇气;是一种软件开发方法,旨在提高软件质量和对不断变化的客户需求的响应能力<br>极限编程十二个最佳实践包括:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40个小时、现场客户和编码标准
水晶法
每一个不同的项目都需要一套不同的策略、约定和方法论,认为人对软件质量有重要的影响,因此随着项目质量和开发人员素质的提高,项目和过程的质量也随之提高。通过更好的交流和经常性的交互,软件的生产力得到提高
并列争球法
安排多个小组并行开发,提高开发效率。按需求的优先级开发,进行迭代
自适应软件开发
关注于软件系统的快速创建和演化,软件从来没有一个完成的时期,只有两个新版本之间的稳定时期,适应性开发方法就是在快速应用的基础上发展起来的开发方法
敏捷统一过程