大家好,我是阿萨。最近几年大家都在说测试左移。今天我们就聊聊测试左移的话题。
一. 之前交付的痛点
我们先来看看如下图片:
先看最左边的柱状图,L0,L1的很少部分测试在版本转测试前完成。剩余大量L3的测试工作遗留到上线前才测试。测试周期就会变长,尤其是遇到阻塞性问题的时候。更让质量反馈周期变得无法控制。随着项目需求量的增加,快速得到质量反馈就会更加难了。因为前期的测试不足,大量验证工作积攒到后期,交付压力不言而喻。
二. 未来的测试模型
针对以上问题,DevOps,持续集成,持续交付,持续部署肯定是不希望以上情况发生的。在DevOps里肯定期望更多的测试越早做越好。因此需要对测试进行分类,根据组件依赖关系和运行时间关系对测试进行分类。对别人依赖越小的,级别越低,就可以越早开始测试。让级别越低的做更多的测试。
三. 定义测试分类
比如用搭建幼儿园模型的积木打个比方。
1. L0,可能是独立的函数或者方法,不依赖任何其他对象。类似搭积木时最小块。
2. L1就是调用函数方法的组件。用几个积木搭建好幼儿园的大门,一堵墙等组件。
3. L2是几个组件合并成的功能。用大门和墙组建好幼儿园的围墙,教室,操持等功能区域。
4. L3是具有客户价值的可交付特性。用几个功能区域搭建成一个幼儿园模型。
通过在不同时间完成不同类别的测试,提早暴露风险。快速反馈软件质量。
四. 测试左移的基本原则
这里的测试左移除了测试级别分类,还列举了一些基本原则:
1. 级别越低,越需要写更多的单元测试和验证。
2.所有测试脚本一旦开始写,就需要在任何地方都可以运行。甚至包括生产环境。
3. 设计产品时就需要考虑其可测试性。
4.测试代码也是产品代码库里的资产。必须保证测试代码可靠性。所以测试代码要求也需要和生产环境代码要求一致。
5. 测试基础架构也是一种共享服务。可运行的测试脚本也是产品代码的一部分,运行产品代码就需要运行测试代码。同时它需要在任何地方可运行,所以是共享服务。
6.谁写的代码,谁就有义务去测试自己所写代码。所以L2之前的测试都是开发去完成的。
五. 测试左移的目的
通过上图的管道我们能更直观明白测试左移的含义。L0和L1执行更多 单元测试的验证,L2验证功能或者模块。L3仅验证客户可用的特性即可。左移的目标是 通过提前在管道中执行测试任务,将质量反馈从上游就开始。通过测试和流程改进的结合,大大减少了运行测试所花的时间,以及对后续产品的影响。 最重要的是,它可确保将更改合并到 主干之前,大部分测试也已完成 。 转测试前可能只需要验证客户关心的主业务流程即可。大大减少了测试所需要的时间。
六.总结
测试左移,就是对测试进行分层。尽早介入测试,越早越好。这样在后期只需要验证主流程即可。