软件开发过程模型综述
1. 软件过程
- 软件过程的基本活动:软件描述、软件设计与实现、软件有效性验证、软件进化(软件过程描述还包括:产品、角色、前置条件与后置条件)
2. 软件过程模型(software process model)
2.1瀑布模型:
主要阶段直接映射基本的活动开发活动:
需求分析预定
系统和软件设计
实现与单元测试
集成与系统测试
运行与维护
主要优点:顺序性和依赖性:前结束,后开始;前输出,为后输入。
推迟实现的观点:前阶段工作必须做扎实,方可开展后续工作
质量保证的观点:必须完成规定文档;对文档进行评审,以便尽早发现问题。
缺点:不适应需求变化;最后才能看见系统,风险高
总结:瀑布模型适用于在系统开发中不太可能发生重大变化的多数情况。
2.2增量式开发:
先完成一个系统子集的开发,再按同样的步骤增加功能(系统子集),如此递增下去直至满足全部系统要求。
主要优点:
降低了适应用户需求变更的成本;
在开发过程中更容易得到用户对于已做的开发工作的反馈意见
是更快地交付和部署有用的软件到客户方变成了可能,虽然不是全部功能都包括
缺点;
过程不可见,管理者需要经常交付文档来把握进度
伴随着新的增量的添加,系统结构在逐渐退化
总结:可以进化式地开发一个系统,并展示给客户,征求客户意见,而不是实际的交付给用户在客户的环境里面部署运行
2.3面向复用的软件工程
主要步骤:
组件分析
需求修改
使用复用的系统设计
开发与集成
3种类型的软件组件可能用于面向复用的过程;
通过标准服务开发的Web服务,可用于远程调用
对象的集合,作为一个包和组件框架
独立的软件系统,通过配置在特定的环境下使用,
总结:面向复用的模型明显的优势是它减少了需要开发的软件数量,从而降低了软件开发成本,同时也降低了开发中的风险。通常也可以是软件快速的交付。
2.3原型模型
原型是一个软件系统的初级版本,用于展示概念,验证设计方案,发现存在的问题,寻找可能的解决方案
主要优点;
通过快速开发工具时间构造出可运行的“样品”;
通过运行原型可更好地解决开发中的不确定性因素;
原型的最终结局: 被抛弃;作为最终版本发布
缺点;
原型的快速开发往往忽略了非功能方面的因素,如性能、健壮性和可靠性等
缺乏必要的开发文档,不利于后期维护。
2.4螺旋模型特点
主要优点;
将风险分析与处理引入软件开发中,有利于减低软件的开发风险,适合于大型软件开发
缺点;
螺旋模型强调风险分析,并作出相关反应是不容易的。往往内部的大规模开发
软件开发人员应该擅长寻找可能的风险,否则将带来更大的风险
在大型软件开发中对变更的应对策略
系统原型:借助工作系统明确系统要求,避免不必要变更。
增量交付:将系统分解为更多个子系统增量式发布给用户,避免容忍变更
系统重建;根据代码对开发好的系统尽心优化 - 统一软件开发过程
2.1 RUP的核心工作流
商业建模 需求分析 实施 测试 部署 配置 和变更管理 项目 管理 环境
2.2 RUP的四个阶段
初始阶段: 构思未来系统的概貌、确定项目 的必要性 可行性
细化阶段;进一步分析问题领域,捕获系统大部分的功能需求,建立系统框架,找出项目实施时遇到的风险和应对措施。
构造阶段:完成所有需求、分析设计
交付阶段
2.2 特点
面向对象
Use Case驱动
以体系结构为中心
迭代式、增量式的开发过程
以增量控制和风险管理为目标
与UML配套
实用性强
3. 敏捷开发
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态
***:
1个体和交互胜过过程和工具
2. 可工作的软件胜过面面俱到的文档
3. 客户协作胜过合同谈判
4. 响应变化胜过遵循计划
基本原则;
我们最重要的目标,是通过持续不断地及早交付有价值的软件使客户满意。
欣然面对需求变化,即使在开发后期也一样。善于掌控变化,帮助客户获得竞争优势。
经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
业务人员和开发人员必须相互合作,项目中的每一天都不例外。
激发个体的斗志,以他们为核心搭建项目。提供他们所需的环境和支持,相信他们能够达成目标。
不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
可工作的软件是进度的首要度量标准。
敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续
对技术精益求精,对设计不断完善,将提高敏捷能力。
以简洁为本,极力减少不必要工作量。
最好的架构、需求和设计出自于自组织的团队。
团队定期地反思如何能提高成效,并依此调整团队的行为
极限编程
如:迭代式开发,结对编程、测试驱动开发等。适用于小团队开发
敏捷项目管理;Scrum
团队组成:产品负责人 Scrum主管 开发团队
实施过程:产品规划 冲刺循环 反思会