精准测试技术十年发展漫谈
一、 背景
精准测试技术,是这几年比较热的一个方向。从2012年这个体系开始诞生,到现在整整历经了10年的时间。中国从国外引进了很多技术,火与不火其实在国外已经决定了。本土成长起来的精准测试路线独树一帜,它不是从国外引入,是在中国的大环境下慢慢发展起来的。从寂寂无名,到软件质量技术从业者的热情被一点点的调动起来,再到被认可及至推广,中间翻越过万重山。本文作者星云测试平台设计师、创始合伙人赵明先生站在另一个维度,以星云为例侧重讲了精准测试技术的起源发展、商业内核以及行业的展望。
二、 精准测试的定义
精准测试一句话概括就是:测试用例和代码之间的追溯,这是它最本质的东西。精准测试的本质决定了它抓住了测试的一个核心要点。
大家知道,软件主要有两个方面:一个是我们看到的功能,即从界面上看到输入输出(通常我们测试是基于这个);另外还有背后的代码。在功能测试整体动态运行的时候,功能和代码必然存在着追溯关系。这种相互追溯,很像物理界的量子纠缠理论。就是说,软件代码运行逻辑和功能输出,是两个也同时是一个整体,像量子纠缠一样。当把两个量子视为一个整体,只观测任何一个都观测不全面。这个也就是我们黑盒测试以前遇到的问题,它存在很多隐性问题,因为它没办法观察计算机最本质的东西--代码的同步变动。精准测试就把这两个全部观测、捕捉并回放出来了。
最早星云在2014年的国际软件测试大会上首先发布精准测试的时候,就叫穿线测试,英文名字叫Threading Test,并没有直译成Accurate test,现在看还是Threading Test最契合。首先,精准测试建立起了用例和代码的关系,相当于把黑盒和白盒关联起来,做黑盒测试时获取到白盒数据。即完成一个测试逻辑,代码上的逻辑立马同步生成,准确地把开发测试关联起来,这里使用了Threading的穿线的含义。另外一个层面,精准测试最本质就是线程覆盖测试。它跟白盒最大的区别是覆盖率是线程级的,也就是说我们要追溯到用例这个级别。比如一个系统可能很多用例同时跑,最终用例级的数据就是在线程里面。我们拿到线程级的数据,就能拿到测试用例级别的这种覆盖率。这里体现了Threading线程的含义。所以我们整体英文名字叫Threading Test,这是我们中国自己命名的。
三、 精准测试技术发展
精准测试是从2012年开始发展的。最开始的时候(星云)团队建立一些基础理念,主要建立用例和代码相互追溯的基本技术方向和框架。
2013年,星云开始做第一个源码插装内核,即基于JAVA的SASI(源码插装)。
2014年,用例和代码追溯、软件示波器、回归用例自动选取基本已经成型。这年有个重大的事项:在iSQE大会上以“穿线测试”第一次发布产品。当时引起了行业上很大的关注。
2015年,开始做C++的SASI(源码插装)相当于向国际最顶级的白盒测试工具进行挑战并闯关突破了这个技术领域。
2016年,做出的产品开始正式商用,开始有用户采购了。
2017年,向白盒测试最顶级的覆盖率MC/DC(100%覆盖率)去挺进并获得成功。意味着在航空航天、智能工业等领域,中国开始有能力完成自己的高端白盒工具的替代。
2018年,在分布式系统的追溯上,星云全系统的用户标识和流量隔离技术诞生,这也是精准测试比较核心的技术。
2019年,开始做SABI 1.0(SouceCode Analyzer ByteCode Intrumentation),插装方式发生重大变革,跟我们见到的常规架构区别很大。能够做到无损采集与分析数据,可靠性很高,用户发版流程也很简单。
2020年,开始做整体轮次级项目级累计覆盖率,能够实现全自动的实时的跨版本的数据合并,解决覆盖率技术商用的重要障碍,以及嵌入系统的支持。
2021年,开始做SABI 2.0及高可用。
2022年,突破了更多关键的领域,比如linux kernel、DSP芯片、安卓的Framework操作系统等,因为以上的数据采集方式非常特殊,完成非常不容易。
可以说任何一项高端技术,都不能脱离一个渐进的过程,唯有量变才能真正实现质变。虽然充满了艰辛,但从学术理论到技术落地、到各大企业实际场景接连不断的好评,宣布了中国在这个领域中率先取得了令人惊喜的成果,不再受制于人。
四、 精准测试的专利技术
(星云)精准测试建立了一套非常完整的国家级专利簇保护机制。下面为大家讲解一下这些专利技术的特点。
一种基于测试用例与源码双向追溯的测试装置及方法,是星云精准测试最关键的发明专利,2014年申请2017年正式授权。这个专利当时引起了很大的争议,专利局认为这种东西非常底层,就像苹果因为重力而落地,通过水的势能来发电一样,专利局一通认为这个东西太常理化了。不过就像通过水的落差发电一样,需要有人能够进行系统的理论论证探索并且进行工业化的应用,才能真正的在转变为生产力,而用例和代码的追溯也正是通过工业级精准测试的应用才开始全面受到重视并开始大面的应用。
2018年获得授权的国家发明专利“覆盖率可视化”(行业俗称代码染色)、回归测试用例选取等,都是在精准测试体系中比较关键的专利。比如“回归测试用例选取”,在代码变化的情况下,到底应该选哪些用例进行回归?(星云)的这项目技术可以精准的挑出这些用例(都是基于代码和用例的关系),在新版本发布以后,看它代码路径变化的问题,整体回归效率提高3-5倍以上,并且大幅度降低因为回归时间有限而引起的质量风险。
其它的专利技术是在整个商用过程中,陆续发明的。比如:分布式系统或者集中式系统,很多人同时访问的场景。就是在分布式系统上,看一个用例在各个系统都怎么跑的,而且并发跑的时候不能受到干扰。那么就要有用户标签技术,然后做流量隔离。这个在分布式系统下也是一个重要的发明专利。就是指我们在分布式系统下,每个测试用例可能跑到每个分布系统里面,往哪个版本存?我们做了一套自动处理机制,这也是很关键的一套逻辑,属于精准测试的基础性专利。
一个完整的优秀软件体系,基本来说它需要有8项发明专利进行全方位的保护。精准测试是中国拥有完全知识产权的理论体系。现在我们(星云)已经批准和申请超过16个,后续我们还在持续做全面的知识产权覆盖。
五、 精准测试的一分一合
对于精准测试不算太了解的人可能认为精准测试就是单纯的覆盖率工具或者白盒工具在中国改了个名字,但还是有重大区别。简单理解,它跟传统覆盖率有一个一分一合的变化。
“一分”指的是:精准测试不仅仅去统计(大范围的整体)代码覆盖率,而是要精确到用例级。比如回归用例选取、测试用例聚类分析、智能缺陷定位、开发测试的协同,所有的数据都可关联到用例级,精准测试的作用和范围就变得很大。大家看上面的雷达对比图,相当于给传统白盒测试做了一个全方位的包围。用例级就能有高精准度的测试分析,传统的白盒并没有这种测试分析。
“一合”指的是:我们这个覆盖率已经不再是单元级的。传统白盒测试主要针对单元级,工具很贵,号称壁垒极高无法突破,但实际上它的难度还不至于高不可攀。软件在单元情况下,一个单元跑,它的性能要求很低。星云精准测试跟传统测试的白盒的差别很大。以前白盒测只能用在单元,现在我们精准测试可以把它用到系统<