- 一、开发模型的由来
- 二、软件的生命周期
- 三、瀑布模型(Waterfall Model)
- 四、螺线模型(Spiral Model)
- 五、增量模型(Incremental Model)
- 六、迭代模型(Rational UnifiedProcess)
- 七、敏捷模型(Fig. Agile Model)
- 八、scrum
- 敏捷模型中的测试人员
一、开发模型的由来
随着软件工程学科的发展,人们对计算机软件的认识逐渐深入。软件工作的范围不仅仅局限在程序编写,而是扩展到整个软件生命周期,如软件基本概念的形成、需求分析、设计、实现、测试、安装部署、运行维护,直到软件被更新和替换新的版本。
软件工程还包括很多技术性的管理工作,如过程管理、产品管理、资源管理和质量管理,这些方面也渐渐的建立起标准和规范。
二、软件的生命周期
软件的生命周期是指从软件产品的设想开始到软件不再使用而结束的时间。
如果把软件看成是有生命的事物,那么软件的生命周期可以分为六个阶段,即 需求分析、计划、设计、编码、测试、运行维护。
三、瀑布模型(Waterfall Model)
瀑布模型在软件工程中占有重要地位,是其它所有模型的基础框架。
瀑布模型的每一阶段都只执行一次,因此是线性顺序进行的软件开发模式。
优点:
- 强调开发的阶段性
- 强调早期计划以及需求调查
- 强调产品测试
缺点:
- 依赖于早期进行的唯一一次需求调查,不能适应需求的变化
- 由于单一的流程,开发中的经验教训不能反馈应用于产品本身
- 风险往往到后期的测试阶段才能显露,因此失去及早纠正的机会
瀑布模型的一个最大缺陷在于,可以运行的产品很迟才能被看到。
这会给项目带来很大的风险,尤其是在集成的时候。因为如果需求引入的一个缺陷要到测试阶段甚至更后的阶段才能发现,通常会导致前面阶段的工作大面积返工,业界流行的说法是:“集成之日就是爆炸之日”。
尽管瀑布模型存在很大的缺陷,但是目前很多软件企业还是沿用了瀑布模型的线性思想,在这个基础上做出了自己的修改。例如在细化了各个阶段,在某些重点关注的阶段之间掺入了迭代的思想。
对于测试环节来说,测试阶段处于软件实现之后,这意味着必须在代码完成后有足够的时间预留给测试,否则将导致测试不充分,从而把缺陷直接遗留给用户。
四、螺线模型(Spiral Model)
一般在软件开发初期,需求还不是很明确的时候,采用渐进式的开发模式。螺旋模型就是渐进式开发模型的代表之一。
这对于那些规模庞大、复杂度高、风险大的项目尤其适合。这种迭代开发的模式给软件测试带来了新的要求,它不允许有一段独立的测试时间和阶段,测试必须跟着开发的迭代而迭代。因此,回归测试的重要性就不言而喻了。
原理:
其实就是在瀑布模型的基础上,每一步骤后面都加上风险分析。
优点:
- 强调严格的全过程的风险把控。
- 强调各个开发阶段的质量。
- 提供机会,探讨项目是否正确的继续下去。
缺点:
- 引入非常严格的风险识别、风险分析和风险控制,这对风险管理的技能水平提出了很高的要求。
- 提高了人员、资金和时间的投入。
五、增量模型(Incremental Model)
增量开发能显著降低项目风险,结合软件持续构建机制,构成了当今流行的软件工程最佳实施之一。
例如:
用户有一个需求,功能包含 a、b、c。
增量模型就是,开发完 a,我就直接上线提供给用户去使用;开发完 c 我就直接上线提供给用户使用;开发完 b 我就直接上线提供给用户使用。
六、迭代模型(Rational UnifiedProcess)
迭代模型经常和增量模型混为一谈,其实两者是有区别的。
增量是逐块建造的概念,例如画一幅人物画,增量先画出人头部,再画身体,再画手脚…
而迭代模型是反复求精的概念,同样是画人物画,迭代是先画出整体轮廓,再勾勒出基本雏形,再细化、着色。
例如:
对于用户的需求,先开发一个基础版本(包含了 a、b、c),但是 a、b、c 的功能比较简陋。接下来我会继续在基础版本上对 a、b、c 功能进行迭代优化。
七、敏捷模型(Fig. Agile Model)
2001年,以Kent Beck、Alistair Cockbum、Ward Cunningham、Martin Fowler等人为首的“轻量”过程派聚集在犹他州的Snowbird,决定把“敏捷”(Agile)作为新的过程家族的名称。
在会议上,他们提出了《敏捷宣言》: 我们通过身体力行和帮助他人来揭示更好的软件开发方式。经由这项工怍,我们形成了如下价值观。
个体与交互重于过程和工具
可用的软件重于完备的文档
客户协作重于合同谈判
响应变化重于遵循计划
在每对比对中,后者并非全无价值,但我们更加看重前者
《敏捷宣言》提出:
轻流程,强调人与人之间面对面的高效沟通;
轻文档,重产出可用的软件;
与客户友好的交流;
用户提出需求再过两天,用户又需要替换一个功能。
从中我们可以知道敏捷模型的一个特点:轻流程,轻文档,重目标,重产出。
敏捷开发有很多种,其中 scrum 是比较流行的一种。
八、scrum
scrum 里面的三个角色和五个会议
scrum 由 product owner(产品经理)、scrum master(项目经理)、team(研发团队)组成。
- 其中 product owner 负责整理 user story(用户故事),定义其商业价值,对其进行排序,制定发布计划,对产品负责。
- scrum master 负责召开各种会议,协调项目,为研发团队服务。
- 研发团队由不同技能的成员组成,通过紧密协同,完成每一次迭代的目标,交付产品。
迭代开发
与瀑布不同,scrum 将产品的开发分解为若干个小 sprint(迭代),其周期从 1 周到 4 周不等,但不会超过 4 周。参与的团队成员一般是 5 到 9 人。每期迭代要完成的 user story 是固定的。每次迭代会产生一定的交付。
scrum 的基本流程
产品负责人负责整理用户需求 user story,形成需求代办列表 product backlog。
发布计划会议:product owner 负责讲解 user story,对其进行估算和排序,发布计划会议的产出就是制定出这一期迭代要完成的 story 列表,sprint backlog。
迭代计划会议:项目团队对每一个 story 进行任务分解,分解的标准是完成该 story 的所有任务,每个任务都有明确的负责人,并完成工时的初步估计。
每日例会:每天 scrum master 召集站立会议,团队成员回答昨天做了什么今天计划做什么,有什么问题。目的为了及时了解项目角度,预知风险,规避风险。
演示会议:迭代结束之后,召开演示会议,相关人员都受邀参加,团队代表向大家展示本次迭代取得的成果。期间大家的反馈记录下来,由 product owner 整理,形成新的 story。
回顾会议:项目团队对本期迭代进行总结,发现不足,制定改进计划,下一次迭代继续改进,以此达到持续进步的效果。
整个流程示例图如下…
敏捷模型中的测试人员
在敏捷模型开发中,测试人员如何做好自己本身的任务呢?
挑战1:轻文档
挑战2:快速迭代
- 测试工作的核心内容是没有改变的,就是不断的找 Bug,只要调整好自己的心态,一切以敏捷的原则为主。
- 测试人员不能依赖文档,测试用例的作用减弱,更多的采用思维导图、探索性测试(强调自由度,设计和执行同步,根据测试结果不断调整测试计划)、自动化测试。
- 敏捷讲究合作,在敏捷项目组中,测试人员应该更主动点,多向开发人员了解需求、讨论设计、一起研究 Bug 出现的原因。