在持续测试的实践之下,自动化测试对于连续测试至关重要。持续测试依靠自动化测试完成一组用户故事或者应用需求的检查活动,同时为交付流水线提供质量门禁。因此,自动化测试是持续测试的一个必要条件。
2.1 分层自动化测试
目前,自动化测试相关技能已经普及。任何一个测试工程师的职位招聘描述,多多少少都有一些自动化测试的要求,从这里可以看出,自动化测试已经变成测试工程师的标配技能。
自动化测试最主要的目的就是通过一些工具或者代码把之前只有人工能完成的流程交给计算机来完成。自动化测试技术是在软件系统复杂度不断提升、软件工程规模不断扩大,而人工测试效率低下的背景下催生的。自动化测试就是通过测试工具、测试框架和测试代码,按照测试工程师制订的测试计划对软件产品进行的测试。自动化测试只是一种测试手段,并不是一种新的测试类型。从这里可以看出,自动化测试将重复劳动交给计算机来完成,是一种减轻测试工作量的好办法。
自动化测试可以替代大量重复的手工测试,提高测试效率。通过为系统建立不同抽象层次的自动化测试,为粒度较细的自动化测试弥补“测试技术的间隙”,从 “可测性”与“质量风险”的角度出发分别采纳不同的分层策略,明确测试重点,令各层的测试价值最大化。“通过提高软件的可测试性,增强现有测试实践,降低质量风险,逐步改进测试策略”是测试的中心思想。一个系统的可测试性包括可控制性、可观察性、简单性、稳定性和信息化。
质量风险指当前软件项目导致问题的可能性与影响的严重程度大小,因此在质量保障方面,也流行从技术风险防控能力方面进行思考的方法。它要求从系统的高可用性、业务稳定性与安全性等方面考虑,不断持续投入,同时要具备防御与处理硬件故障、代码问题、流量异常等常规技术风险的能力,还需要对一些小概率事件具备防控能力。这里的小概率事件包含数据被误删除、网络光缆被挖断、自然灾害导致个别机房不可用等。
在工业生产领域存在一个海因里希(Heinrich)法则,即美国著名安全工程师海因里希提出的300∶29∶1法则。在机械生产过程中,在1000起事故隐患中,每发生330起意外事件,有300起未造成人员伤害,29起造成人员轻伤,1起导致重伤或死亡,如图2-1所示。
图2-1 海因里希法则
海因里希法则说明任何可能引起技术风险的问题都应尽早解决,而不应该在变成严重事故之前忽略它的存在。因此在自动化测试中,通过测试分层提前发现各种可能的技术风险点并解决。同时,通过弥补层级的间隙,提高风险防控的严密性。
自动化分层测试模型也在不断发展和进步。图2-2左侧是经典的分层测试模型,通常称为金字塔模型。在金字塔模型中,每一种颜色的面积代表测试的投入,所以在单元测试中投入最多,其次是接口自动化测试,界面自动化测试中投入最少。单元测试中的投入是“越早地开始测试,修复缺陷的成本越低”这条理念直接的落地。金字塔模型是一个理想模型,对开发工程师、测试工程师的个人能力要求很高。
图2-2 分层模型的发展
因此,随着自动化测试的不断探索,测试工程师在接口自动化测试方面的投入越来越多,开发工程师在单元自动化测试上的投入越来越少,逐渐形成了图2-2中间所示的橄榄球模型。该模型中,项目在单元自动化测试上的投入相对较少,在接口自动化测试上的投入较多,在界面自动化测试上的投入相对较少。界面自动化测试上的投入较少是因为界面自动化测试的投入产出比较小。
随着自动化测试程度的不断提高,智能化测试技术不断进步,自动化测试不再以人工投入的多少来衡量效果,而由平台、算法完成测试脚本的撰写、测试数据的设计、测试执行及测试结果的收集分析,自动化测试模型会演变成图2-2右侧的模型。也就是单元自动化测试、接口自动化测试和界面自动化测试中的投入相同,而且都很少,但这是自动化测试的发展趋势,当前技术成熟度距离该模型还有较大的差距。