软件开发流程
软件
- 与计算机系统操作有关的计算机程序、可能有的文件、文档及数据。
软件开发流程的演变
瀑布模型
- 软件开发的各项获得严格按照线性方式进行
- 当前活动接受上一项活动的工作结果
- 当前活动的工作结果需要进行验证
优点
- 开发的各个阶段比较清晰
- 强调早期计划及需求调查
- 适合需求稳定的产品开发
缺点
- 由于开发模型是线性的,增加了开发的风险
- 早起的错误可能要等到开发后期的阶段才能发现
V 模型
- V 模型是瀑布模型的一种改进
- V 模型标明了测试过程中的不同阶段
优点
- 既有底层测试又有高层测试
- 将开发阶段清除的表现出来,便于控制开发的过程
缺点
- 容易让人误解为测试是在开发完成之后的一个阶段
- 由于它的顺序性,当编码完成之后,正式进入测试时,这时发现的一些 bug 可能不容易找到其根源,并且代码修改起来很困难
- 如果需求变更较大,导致要重复变更需求、设计、编码、测试,返工量大
W 模型
- W 模型明确表示出了测试与开发的并行关系
- W 模型中测试伴随着整个软件开发周期,并且测试的对象不仅仅是程序,需求和设计同样要测试
优点
- 将测试贯穿到整个软件的生命周期中,且除了代码要测试,需求、设计等都要测试
- 更早的介入到软件开发中,能尽早的发现缺陷进行修复
- 测试与开发独立起来,并与开发并行
缺点
- 无法支持迭代的开发模型
- 对于有些项目,开发过程中根本没有文档产生,故 W 模型无法使用
- 对于需求和设计的测试技术要求很高,实践起来很困难
H 模型
- 软件开发中需求、设计、编码等活动被分阶段执行,但是实践中,他们并不是完全串行的,它们之间更多是交叉进行的,更多的是迭代执行
- 把测试活动完全独立出来,形成一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来
优点
- 软件测试完全独立,贯穿整个生命周期,且与其他流程并发进行
- 软件测试活动可以尽早准备,尽早执行,具有很强的灵活性
缺点
- 测试就绪点分析困难
- 对于整个项目组的人员要求非常高
敏捷模型
XP
SCRUM
- 增量迭代
- 小步快跑
DevOps
- 生命周期
** 持续开发
** 持续测试
** 持续集成
** 持续部署
** 持续监控
- DevOps 对发布的影响
** 减少变更范围
** 加强发布协调
** 自动化 - CI/CD
** 持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就以为着每天可能会发生多次集成,每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,根据测试结果,我们可以确定新代码和原有代码能否正确的集成在一起。
** 持续交付(Continuous delivery),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以发布的状况,它的目标在于让软件的构建、测试与发布变得更快以及更频繁,这种方式可以减少软件开发的成本与实际按,减少风险。 - CD 与 DevOps 的关系
** DevOps 的范围更广,是软件交付过程所设计的多个团队之间的合作,并且将软件交付的过程自动化
** 持续交付是一种自动化交付的手段,关注点在于将不同的过程集中起来,并且更快、更频繁的执行这些过程
** DevOps 可以是持续交付下的一个产物,持续交付的成果直接汇入 DevOps 模型