测试(2)-概念篇
什么是需求
在多数软件公司,会有两部分需求,⼀部分是⽤⼾需求,⼀部分是软件需求。
⽤⼾需求
⽤⼾需求:可以简单理解为甲⽅提出的需求,如果没有甲⽅,那么就是终端⽤⼾使⽤产品时必须要完成的任务。该需求⼀般⽐较简略,通常是⼀句话。
⽤⼾的需求是五花⼋⻔,往往只是⼀句话
⽐如:实现⼀个声控灯,实现⼀个软件的登录功能
软件需求
或者叫功能需求,该需求会详细描述开发⼈员必须实现的软件功能。软件需求是测试⼈员进⾏测试⼯作的基本依据。
⽤⼾需求和软件需求有什么不同呢?看看下⾯的案例
⼥朋友饿了的例⼦
⽤⼾需求:
⼥朋友说, 我饿了, 这是⼀个⽤⼾需求. 很简略.
软件需求:
需要你和她反复的沟通了解更加详细具体的需求, 来制定解决⽅案.
⽐如你问她, “想吃啥?”, 她说, “随便”
“吃⽶饭炒菜?”, “不想吃”; “那你想吃啥?”, “随便”
“吃油泼⾯?”, “不想吃”; “那你想吃啥?”, “随便”
…
最终理解清楚⽤⼾需求之后, 知道⼥朋友想吃的是你做的红烧⾁, 那么再去研究⾁怎么买, 怎么做等等的具体步骤, 是软件需求.
注意:⽤⼾的需求不能直接作为开发和测试的依据。针对⽤⼾的需求,产品经理需要进⾏需求分析(技术可⾏性、市场可⾏性、成本投⼊和收益占⽐等)后才可转变为软件需求。
开发模型
什么是“模型“
随着软件⼯程学科的发展,⼈们对计算机软件的认识逐渐深⼊。软件⼯作的范围不仅仅局限在程序编写,⽽是扩展到了整个软件⽣命周期,如软件基本概念的形成、需求分析、设计、实现、测试、安装部署、运⾏维护,直到软件被更新和替换新的版本。软件⼯程还包括很多技术性的管理⼯作,例如过程管理、产品管理、资源管理和质量管理,在这些⽅⾯也逐步地建⽴起了标准或规范。
软件的⽣命周期
认识具体的开发模型之前先了解软件的⽣命周期。
什么是⽣命周期?
⽣命周期指的是从⽣命的开始到⽣命结束的⼀段时间。以⼈为例,⼈类的⽣命周期是从⽣命孕育的开始,中间会经历幼年,童年,少年,⻘年,⽼年,最终直⾄死亡。
⽽软件/产品的⽣命周期也是如此,需求的开始是软件⽣命的起点,中间会经历需求的计划、设计,程序开发,程序测试等阶段,直⾄软件不再进⾏维护便到了⽣命的重点。
因此,我们就得到了软件(开发)的⽣命周期:
需求分析⸺计划⸺设计⸺编码⸺测试⸺运⾏维护
常⻅开发模型
瀑布模型
瀑布模型在软件⼯程中占有重要地位,是所有其他模型的基础框架。瀑布模型的每⼀个阶段都只执⾏⼀次,因此是线性顺序进⾏的软件开发模式。
瀑布模型的⼀个最⼤缺陷在于,可以运⾏的产品很迟才能被看到。这会给项⽬带来很⼤的⻛险,尤其是集成的⻛险。因为如果在需求引⼊的⼀个缺陷要到测试阶段甚⾄更后的阶段才发现,通常会导致前⾯阶段的⼯作⼤⾯积返⼯,业界流⾏的说法是:“集成之⽇就是爆炸之⽇”。尽管瀑布模型存在很⼤的缺陷,例如,在前期阶段未发现的错误会传递并扩散到后⾯的阶段,⽽在后⾯阶段发现这些错误时,可能已经很难回头再修正,从⽽导致项⽬的失败。但是⽬前很多软件企业还是沿⽤了瀑布模型的线性思想,在这个基础上做出⾃⼰的修改。例如细化了各个阶段,在某些重点关注的阶段之间掺⼊迭代的思想。在瀑布模型中,测试阶段处于软件实现后,这意味着必须在代码完成后有⾜够的时间预留给测试活动,否则将导致测试不充分,从⽽把缺陷直接遗留给⽤⼾
瀑布模型优缺点总结:
优点:
强调开发的阶段性;
• 线性结构,每个阶段只执⾏⼀次
• 是其他模型的基础框架
缺点:
• 测试后置
◦ 前⾯各阶段遗留的⻛险推迟到测试阶段才被发现,导致项⽬⼤⾯积返⼯,失去了及早修复的机会
◦ 必须留有⾜够的时间给测试活动,否则导致测试不充分,将缺陷直接暴露给⽤⼾(产品质量差)
• 周期太⻓,产品很迟才能被看到和使⽤,可能会导致需求/功能过时
瀑布模型存在很严重的项⽬⻛险,那瀑布模型就不能够被采⽤了吗?
瀑布模型的适⽤场景:需求固定的⼩项⽬
然⽽企业中存在许多些规模庞⼤、复杂度⾼、⻛险⼤的项⽬,这种情况下可以哪种模型呢?
螺旋模型
⼀般在软件开发初期阶段需求不是很明确时,采⽤渐进式的开发模式。螺旋模型是渐进式开发模型的代表之⼀。
这对于那些规模庞⼤、复杂度⾼、⻛险⼤的项⽬尤其适合。这种迭代开发的模式给软件测试带来了新的要求,它不允许有⼀段独⽴的测试时间和阶段,测试必须跟随开发的迭代⽽迭代。因此,回归测试的重要性就不⾔⽽喻了。
优点:
• 强调严格的全过程⻛险管理。
• 强调各开发阶段的质量。
• 增加⻛险分析和原型
缺点:
• 项⽬中可能存在的⻛险性与⻛险管理⼈员的技能⽔平有直接关系
• 需求⼈员、资⾦、时间的增加和投⼊,可能会导致项⽬的成本太⾼
适⽤场景:规模庞⼤、复杂度⾼、⻛险⼤的项⽬。
增量模型、迭代模型
增量开发能显著降低项⽬⻛险,结合软件持续构建机制,构成了当今流⾏的软件⼯程最佳实践之⼀。
增量开发模型,⿎励⽤⼾反馈,在每个迭代过程中,促使开发⼩组以⼀种循环的、可预测的⽅式驱动产品 的开发。因此,在这种开发模式下,每⼀次的迭代都意味着可能有需求的更改、构建出新的可执⾏软件 版本,意味着测试需要频繁进⾏,测试⼈员需要与开发⼈员更加紧密地协作。
与此类似的有⼀个迭代开发,增量开发和迭代开发往往容易被⼈,但是其实两者是有区别的。增量是逐块建造的概念,迭代是反复求精的概念
适⽤场景:⼤型项⽬,需求不明确