前言:
这段时间接触精准测试概念,主要推的就是星云测试,上次iSQE听了一下介绍。结合极客时间上的专栏和书本网站的学习,觉得没有什么新奇的啊,不就是覆盖率问题吗,刚刚看了“项目实施DevOps时,我们是如何做测试的 - 异步社区”,再把这几个内容融汇贯通,放到一起,在“云物移大智”的大背景下来思考,感觉这几个内容的兴起和应用是有一定的关联,是当前的时势需要。下面结合文章的内容,把这些相关的概念和背景梳理一下。
一、敏捷、DevOPS对测试的挑战
图片来自“项目实施DevOps时,我们是如何做测试的 - 异步社区”,标题根据本人理解编辑。
二、软件产品测试的特点和精准测试的作用
从一开始,测试工作特别是软件测试,就存在两个方面的问题:如何解决测试的可视性。实体物品检测概括来说,两个方面,一是要保证零部件材料和加工质量,二是保证组装成品的特性,都要满足要求。对软件,由于软件组成的材质是一行行代码和二进制符号,直观的可视性其实没有;整个系统组装成品的特性和使用方式易变,直观可视性同样不好。实际上,整个软件测试一直在解决这个问题,白盒测试视图用静态分析审查方法解决材质问题、用单元测试和动态覆盖率解决零件加工问题;黑盒测试尝试解决成品的特性和使用方式验证问题。有些问题,黑盒操作半天,白盒方式读两行代码轻松解决,有些问题,代码调用绕来绕去,但是黑盒方式简单操作即可。但是两者如何结合起来保证质量始终是个大难题,现在还需要面对DevOPS带来的新挑战。
新形势下,除了从软件产品和业务团队整体维度考虑测试左移和测试右移之外,一种思路是,从测试技术本身触发,解决测试可视化问题,精准测试应运而生。其概念核心就是:借助一定的技术手段、通过算法的辅助对软件测试过程进行可视化、分析以及优化的过程。
传统软件测试的一些主要问题:1、测试的维护成本日益升高;2、测试过程的低效。不断重复运行一堆用例,但产品的免疫力却越来越强,发现Bug的能力下降,测试工作的边际收益差;3、缺乏有效的回归测试用例选取机制。产品不断迭代,时间紧,但是不能可视化,影响域分析无法有效开展,产品质量防护墙如何定,只能靠经验(拍脑袋)。4、测试结果可信度不高。其实现在业界的测试用例粒度就很可笑,举我们开展第三方测试的例子:一个嵌入式设备,大业务功能只有两个用例,反而一个配置界面搞了数十个用例,反复测试界面异常输入数据。5、白盒和黑盒的关联始终无法解决。到底哪些代码覆盖了哪些特性,哪些测试是确实对用户有意义,没有办法判断。
如何能够解决企业面临的测试方法瓶颈问题以及团队管理不便的问题?基于这样的困境,精准测试的理念给出了完美的解决方案。精准测试主要将测试过程变得可视、智能、可信和精准。
- 精准:通过测试示波器技术,精准记录黑盒测试用例对应的代码逻辑,实现测试用例到代码逻辑的精准记录和双向追溯;精准的代码级的缺陷定位和崩溃分析;精准的测试充分度分析。
- 可视:关联代码的覆盖率计算可视化技术;条件及其组合执行的可视化;实时的程序运行指标图形输出;人工交互式的代码控制流程图、函数调用图。
- 智能:智能的回归测试用例选取算法;基于测试用例执行剖面的用例聚类算法;动、静态信息的高危测试漏洞检出算法;多版本测试数据的自动聚合。
- 可信:所有测试数据均是在测试执行过程中由软件自动分析并录入的底层代码运行数据,数据没有办法伪造和篡改,真实记录测试现场的情况,并基于这些可信的数据给出可信的测试结果。
精准测试的核心组件包含的软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。精准测试系统的本质是一套强大的计算机测试辅助分析系统,它的关键技术是测试用例和代码的双向追溯技术,通过该项技术,很多高级测试算法得以应用同时将测试和开发进行非常紧密的连接。精准测试系统并没有取代人工设计用例、执行用例的过程,但是通过对该过程深入到代码层的分析,可以相当大的程度改进人工测试所产生的各种问题。
上图来自星云测试。该公司应该是目前市面上真正有工具产品的,16年原来推出时是叫穿线测试,现在才全面改称精准测试。 17年我们试用过,但因为我们95%业务是第三方测试,其实对我们用处不大。
(注: 穿线测试理念 ThreadingTest(2014.6.6) 侧重于系统级白盒测试技术,测试用例和代码逻辑的双向追溯技术,测试示波器技术,覆盖率可视化技术。
在线精准云测试(2015.8.6):在穿线测试的技术上增强了回归测试用例的自动选取技术,代码安全特性,全面的测试管理特性,集合程序动态和静态参数的指标化系统。)
三、 个人对精准测试目前的理解
目前还没有真正去学习,只是简单看了些这方面的白皮书和介绍,初步理解是精准测试的理念很好,后面应该会跟踪:
1、精准测试最有价值的我觉得是双向追溯给回归测试用例选取带来的好处,精准测试甚至被定义为“基于源代码变更分析的回归测试方法”,这完全顺应互联网产品频繁迭代、强调客户价值的趋势。快和价值带来敏捷,这个大趋势决定精准测试的价值;
2、精准测试的基础仍然是传统测试。传统黑盒测试人员基于云平台的大数据化的智能分析技术,一定程度上解决了黑盒测试对白盒代码可视化方面的问题,方便画出业务特性、测试用例、测试数据、具体代码之间的关联图谱。解决需求到任务到用例到代码的测试设计过程和反向的点-线-面覆盖追踪问题。
但目前精准测试实际更多还是停留在概念层面,可以根据其基本思想,对照自己项目实际情况,DevOPS团队自行做整体架构设计,并辅助开发一些工具来达成目的。好像腾讯的TMQ就在这样操作。当然,我个人觉得,基础还是传统测试、质量团队协作(测试左移、测试右移)。
附:精准测试定义(from星云精准测试技术白皮书V1.0、腾讯电脑管家精准测试白皮书V1.0)
广义的:
A:采用专业的测试软件,对软件测试执行全过程的原生数据进行自劢采集、存储、运算、可视化并依靠一系列的分析算法对软件测试的效率、质量进行改进和优化的软件测试分析系统。(星云精准测试技术白皮书V1.0)
B:贯穿于软件研发过程,通过准确、精细的质量控制方法,以最小的成本将质量风险降至最低的一种测试思想。(腾讯电脑管家精准测试白皮书V1.0)
狭义的:基于源代码变更分析的回归测试方法(星云精准测试技术白皮书V1.0、腾讯电脑管家精准测试白皮书V1.0)