软件开发过程模型与软件工程职业基础
22-23-软件开发过程模型与软件工程职业基础
软件生命周期模型
包含了软件从生产到报废的六个阶段。
需求工程→软件设计→软件实现→软件测试→软件交付→软件维护
软件生命周期模型只是界定了软件开发活动的不同阶段的顺序关系。
**软件过程模型:
软件过程模型是对软件生命周期模型更为详细和准确的描述,即进一步说明了各个阶段的任务、对象等信息。同一个软件生命周期可以存在不同的软件过程模型。
构建-修复模型(Build-Fix Model):
依靠个人分析和理解直接构建软件的第一个版本,并交付给用户使用,并随后修改使用过程中发现的缺陷,直到所有发现缺陷都修复完成,进入维护阶段。
缺点:无生命周期,无需求分析,质量低,可维护性低。
适用范围:质量要求和可维护性要求低的小规模开发。

**瀑布模型(Waterfall model)(文档驱动)**:
按照软件生命周期模型将软件开发活动组织为需求开发、软件设计 、软件实现、软件测试、软件交付、软件维护等基本活动,规定了自上而下相互衔接的开发次序。
优点:清晰的阶段划分。
缺点:文档期望高,用户参与度低,线性开发有局限,里程碑粒度过粗。
适用范围:需求稳定,技术成熟,复杂度适中的软件系统开发。

增量迭代模型(需求驱动):
先对项目前景和范围进行界定,将后续开发活动组织为多个迭代、并行的瀑布式开发活动。
优点:适用性好,并行开发缩短开发时间,渐进交互加强了用户反馈,开发风险低。
缺点:加入的构件不能破环已构造部分,需要完备的项目前景。
适用范围:成熟稳定领域的大规模软件系统开发。

**演化模型(需求驱动)**:
早期明确系统的核心需求,交付核心系统,依据用户反馈迭代并行的组织瀑布式开发来精化和增强系统。
优点:适用性好,并行开发缩短了开发时间,渐进交互加强了用户反馈,开发风险低。
缺点:早期无法确定项目范围,后期迭代易蜕变为构件-修复方式。
适用范围:不稳定领域的大规模软件系统开发。

原型模型(需求和风险共同驱动):
将需求开发展开为迭代的抛弃式原型开发,以解决新颖领域的需求不确定问题,得到清晰需求再进行瀑布式开发。
优点:加强用户交流,适用于新颖领域。
缺点:成本高,不舍得抛弃导致代码质量差。
适用范围:大量不确定的新颖领域。
演化式模型:即原型会成为产品的一部分;抛弃式模型:原型不会出现在产品中。

螺旋模型(风险驱动):
完全按照风险解决的方式来组织软件开发活动,是风险解决迭代和瀑布模型的综合。
解决风险的迭代:确定目标选择方案,评估方案发现风险,寻找风险解决方法,落实风险解决方法,计划下一个迭代
(定估巡逻机)
优点:降低风险,减少损失。
缺点:成本高,不舍得抛弃导致代码质量差,模型过于复杂,不利于管理。
适用范围:高风险的大规模软件系统开发。

统一过程RUP (Rational Unified Process) :
横轴以时间来组织,是过程展开的生命周期特征,体现软件开发过程的动态结构;纵轴以内容来组织,是自然的逻辑特征,体现软开发过程的静态结构。
软件生命周期分为,初始,细化,构造和交付。每个生命周期阶段都可以安排多次迭代。
基础思想:迭代开发,管理需求,基于组件的体系结构,可视化建模,验证质量,控制变更,RUP裁剪
(代管祖师质控RUP)
优点:吸收借鉴了传统的最佳实践方法,适用面广,有软件工具的支持。
缺点:没有考虑交付后的软件维护问题,RUP裁剪和配置工作困难。
适用范围:大规模软件和小规模软件都可。

敏捷过程(21)
不过度强调纪律,不过度强调计划,文档工具,重视个人能力及与用户的交互。
敏捷联盟所宣言的价值观:个体和互动高于流程和工具,工作的软件高于详尽的文档,客户合作高于合同谈判,响应变化高于遵循计划。
方法:极限编程:极限利用简单,有效的方法解决问题。
特点:方法众多,各有特点,无法确切界定优缺点。
适用范围:快速变化或时间压力大的项目。
软件能力成熟模型CMM
是对组织软件过程能力的描述,评价软件开发过程的成熟度,并提供提高软件质量的指导。
分为5个成熟级别:初始化,可重复级,已定义级,已管理级,优化级。
能力成熟度模型集成CMMI
CMMI成熟度模型是一种综合的过程改善模型,既支持阶段性过程改善也支持连续性过程改善,阶段式沿袭CMM的模型框架。