上QQ阅读APP看书,第一时间看更新
3.3 测试金字塔
传统的软件测试流程一般是先在软件开发过程中进行少量的单元测试,然后在整个软件开发结束阶段,集中进行大量的测试,包括集成测试和端到端测试。随着软件项目越来越复杂,大量的错误往往只有到了项目后期端到端测试时才能够被发现,项目进度和项目风险难以控制。错误发现得越晚,错误修复成本越高。错误的延迟解决必然导致整个项目成本的急剧增加。
为此需要改变测试方法,在各种测试之间找到正确的平衡,把时间用在正确的测试活动中,尽可能避免上述问题,这就是测试金字塔。
测试金字塔的概念来自Mike Cohn,在Succeeding With Agile一书中有详细描述,其核心观念是底层单元测试应多于依赖UI的高层端到端测试,如图3-2所示。
图3-2 测试金字塔
在测试金字塔中,从上往下,成本越来越低,效率越来越高,更贴近技术实现;从下往上,则成本越来越高,效率越来越低,但更接近真实业务需求。测试金字塔理论强调建立一个合理的测试组合,尽可能使用大量低成本的单元测试,辅之以少量高成本但更接近业务的UI端到端测试。
Martin Fowler在他的博客中对测试金字塔进行了如下的解释:
“特别地,我始终认为高层测试只是测试防护体系的第二防线。如果一个高层测试失败了,不仅仅表明功能代码中存在缺陷,还意味着单元测试的欠缺。因此,无论何时修复失败的端到端测试,都应该同时添加相应的单元测试。”
通常在一个测试组合中,Google测试团队建议采用70/20/10划分:70%单元测试,20%集成测试和10%端到端测试。实际比例在各个团队中会有不同,但一般来说,会保留金字塔的形状,而尽量避免相反的倒金字塔模式。