基本概念敏捷方法
敏捷方法,或敏捷开发(模式),是一种针对需求会快速变化的项目的开发方法(模式),项目主要是指软件工程1。
敏捷方法的主要内容是,所有跟当前产品开发有关的人员——商业人员、程序员、测试员、分析师等等——组成一个团队共同决定产品开发的走向,这是一种面向产品的开发模式2。
ScrumScrum是敏捷方法的一种,是一种迭代式增量软件开发方法,在1990年代由Ken Schwaber和Jeff Sutherland开发,通过提供一套简单而严格的规则和对规则外的情况的灵活适应完成项目的开发过程。除了Scrum外,比较知名的敏捷方法还有XP极限编程、Crystal、DSDM、FDD等,这里不再一一介绍。
自动化金字塔自动化金字塔是对一种自动化测试过程的金字塔形策略结构的称呼。
在软件产品的测试上,为了能够达到高效率、高质量、反馈性好、解放人力的效果,需要引入自动化测试技术。为了对自动化测试的测试层次提供引导方向,人们总结出了自动化金字塔结构的测试层次。
自动化金字塔的结构原始结构:三层结构最初的金字塔结构被迈克科恩在2009年的著作Succeeding with Agile: Software Development using Scrum (《Scrum敏捷软件开发》)中提到,在这本书中,自动化测试金字塔被定义为一种三层的金字塔形结构,如下图所示3。
在最初的三层金字塔中,最下层是单元测试,单元测试是自动化测试策略稳固的根基,因此也是金字塔结构的最底层;最上层是用户界面,通常用户界面是脆弱的,测试和修改的经济成本和时间成本较高;中间服务层是为了过渡用户界面和程序单元而设计的,认为所有应用程序都由各种服务组成,服务是指实现某一具体功能的程序集合,服务通过对输入进行响应而体现。通过对服务进行测试,而不是对用户界面进行测试,可以极大缩短时间和成本。
需要说明的一点是,有的地方在最底层之上增加了一层组件层(Component),一般可以认为单元层和组件层在同一层。
补充:三层加帽结构在Lisa Grispin的Agile Testing(《敏捷测试》)一书中,对自动化金字塔原始的三层结构进行了补充,增加了手工测试的“帽子”结构,如下图所示2。
在这种结构中,认为无论自动化测试的效果有多好,总是需要一些人工测试的成分,如探索式测试或用户满意度测试等,所以以云状结构添加了人工测试在金字塔的顶端。
替换:探索式测试替代人工测试随着敏捷测试的不断推进,有一种说法认为可以将云状结构内容从人工测试换为探索式测试(Exploratory Test),这里不再附图,主体结构形式和三层加帽结构一致。
自动化金字塔的反模式自动化金字塔的解读对自动化测试金字塔结构的解读可以分为以下几个方面:
越下层投入应当越多,这是金字塔结构主要提出的观点,认为单元测试的稳定性和投入保证了产品质量;
越下层效率会越高,因为软件的漏洞最终是落在具体的程序代码上的,所以底层的测试效率是最容易发现和修改错误(BUG)的;
越下层成本会越低,因为低层代码测试进行的最早,此时发现错误修改起来较为容易,牵连的其他内容也很少,越向上再发现问题往往需要修改的代码量会成倍增多,所以说下层测试和修改的各项成本都是相对低的;
越下层实现专业性要求越高,虽然底层的直接修改是容易的,但是这是基于拥有一个经验丰富的程序员或测试员的前提下,高度的专业性意味着人才的需求和人力成本的提高。
反模式在很多团队中都缺乏稳定的单元测试人员,或单元测试人员的经验不足,这导致发展一个稳定的单元测试根基并不是一件容易实现的事情,于是有人提出了金字塔结构的反模式。
如2012年Alister Scott提出的蛋筒冰激凌模式,就是将金字塔中用户界面和单元两个结构所占比重进行了对调,并且极大增加了手工调试的比重。这反映出了团队在自动化测试能力上的欠缺和投入不足。这种模式是缺乏完善产品质量保证监督体系的团队常采用的模式,从用户的需求入手,回溯到单元实现上。这样的后果是产品质量得不到保证,且代码的可读性、可维护性、可修改性差。
此外还有纸杯蛋糕模式等,在此不做介绍。