每个模型都有组合方式|测试金字塔的思考与总结
1.测试金字塔
Mike Cohn 在他的著作《Succeeding with Agile》一书中提出了测试金字塔这一概念。根据 Mike Cohn 的测试金字塔,你的测试组合应该由以下三层组成(自下往上分别是):单元测试、服务测试、用户界面测试。最下层是单元测试,单元测试是自动化测试策略稳固的根基,因此也是金字塔结构的最底层;最上层是用户界面,通常用户界面是脆弱的,测试和修改的经济成本和时间成本较高;中间服务层是为了过渡用户界面和程序单元而设计的,认为所有应用程序都由各种服务组成,服务是指实现某一具体功能的程序集合,服务通过对输入进行响应而体现。通过对服务进行测试,而不是对用户界面进行测试,可以极大缩短时间和成本。
测试金字塔告诉我们在建立你自己的测试组合时,测试金字塔本身是一条很好的经验法则。Cohn 测试金字塔中提到的两件事:
编写不同粒度的测试。
层次越高,编写的测试应该越少。
为了维持金字塔形状,一个正常、快速、可维护的测试组合应该是这样的:写许多小而快的单元测试;适当写一些更粗粒度的服务相关的测试,对某些业务可以理解为编写适当的接口测试;写很少高层次的端到端测试。
2.对测试金字塔的反思
按照Cohn 在测试金字塔模型中提到的观点,在开发过程中,应该编写和开发更多小而快的单元测试,以更快更高效完成质量反馈,应该很少端到端的UI测试。
但实际上在大部分公司,开发同学还是不太愿意写更多的单元测试,更多的进行UI层的测试呢?难道说测试金字塔模型有问题的?
要搞明白这个问题,我们先要思考一下,在软件测试的过程中测试是希望达成什么样的目标?在保障过程中是在保障那一部分内容?
在ISO25000标准中,测试质量被分为内部质量和外部质量,外部质量就是我们常说的用户体验,是用户使用过程中的用户体验,是否好用,是否易用,是否可靠等等。内部质量更多的是内建质量,关注的是产品安全性、可测性、可重用性、可维护性以及可移植性等等。在用户量较小的C端产品或者业务复杂的产品中,测试的过程更多的关注于用户体验属性,而在于用户量大的产品更多关注于产品的内建质量。
比如:在创业团队中,一般更多的关注于用户体验,在保障产品质量的过程中一般会有更多的资源投入到UI层面的测试和质量保障。测试的模型大概率是冰淇淋模型
在云和大数据、人工智能的团队中,因为对安全性、可测性、可重用性、可维护性以及可移植性等方面的要求很高,测试资源会更多的向单元测试和接口测试层面倾斜。
3.测试金字塔是分层测试的一类最佳实践
按照以上分析,测试金字塔模型的也是有一定适用范围的,对于用户体验要求更高的产品或者业务更复杂产品,测试金字塔模型匹配度较低;而对于内建质量要求更高的产品,比如云、大数据、人工智能等产品,更适合使用金字塔模型构建我们的测试策略或者测试组合。
这也很好的解释了,金字塔模型既然得到了那么多人的认可,为什么在真正落地的时候,大部分团队还是按照冰激凌模式执行。不管是金字塔模型还是冰激凌模型,其实都是都是一种测试组合或者策略。
如同所示净化谁的装置,也是通过不同的组合得到干净的水质,纱布过滤较大的浮尘和杂物,小卵石和石英砂净化泥沙,活性炭进行杀菌消毒,蓬松棉在此过滤细粒度的杂物,确保得到更干净的水。
其实测试金字塔模型是分层测试策略,是通过按照单元测试、接口测试、UI测试按照不同的目标要求,总结出来的一套最佳分层测试实践。对于每一个层次所达成的目标也是在一定范围之内的,比如单元测试主要解决单功能或者函数的正确性,接口测试确保各种异常输入输出的正确性,UI测试主要保障产品符合用户需求,满足用户心理预期,可以给用户提供良好的使用体验。
通过金字塔模型进行组合测试,最大程度保障测试能够被快速执行,快速反馈,进而降低质量保障的总成本。