您的位置:首页 > 新闻中心 > 资讯详情

精准测试技术十年发展漫谈(上)


上篇

背景

精准测试技术,是这几年比较热的一个方向。从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/DC100%覆盖率)去挺进并获得成功。意味着在航空航天、智能工业等领域,中国开始有能力完成自己的高端白盒工具的替代。

2018年,在分布式系统的追溯上,星云全系统的用户标识和流量隔离技术诞生,这也是精准测试比较核心的技术。

2019年,开始做SABI 1.0(SouceCode Analyzer ByteCode Intrumentation,插装方式发生重大变革,跟我们见到的常规架构区别很大能够做到无损采集与分析数据,可靠性很高用户发流程也很简单

2020年,开始做整体轮次级项目级累计覆盖率,能够实现全自动的实时的跨版本的数据合并,解决覆盖率技术商用的重要障碍,以及嵌入系统的支持。

2021年,开始做SABI 2.0及高可用。

2022年,突破了多关键的领域,比如linux kernelDSP芯片安卓的Framework操作系统,因为以上的数据采集方式非常特殊,完成非常不容易。


可以说任何一项高端技术,都不能脱离一个渐进的过程,唯有量变才能真正实现质变。虽然充满了艰辛,但从学术理论到技术落地、到各大企业实际场景接连不断的好评,宣布了中国在这个领域中率先取得了令人惊喜的成果,不再受制于人。


四、 精准测试的专利技术

(星云)精准测试建立了非常完整的国家级专利簇保护机制。下面为大家讲解一下这些专利技术的特点。


一种基于测试用例与源码双向追溯的测试装置及方法 是星云精准测试最关键的发明专利,2014年申请2017年正式授权。这个专利当时引起了很大的争议,专利局认为这种东西非常底层,就像苹果因为重力而落地,通过水的势能来发电一样,专利局一通认为这个东西太常理化了。不过就像通过水的落差发电一样,需要有人能够进行系统的理论论证探索并且进行工业化的应用,才能真正的在转变为生产力,而用例和代码的追溯也正是通过工业级精准测试的应用才开始全面受到重视并开始大面的应用。


2018年获得授权的国家发明专利覆盖率可视化”(行业俗称代码染色)、回归测试用例选取等,都是在精准测试体系中比较关键的专利。比如 “回归测试用例选取”,在代码变化的情况下,到底应该选哪些用例进行回归?(星云)的这项目技术可以精准的挑出这些用例(都是基于代码和用例的关系),在新版本发布以后,看它代码路径变化的问题,整体回归效率提高3-5倍以上,并且大幅度降低因为回归时间有限而引起的质量风险。


其它的专利技术是在整个商用过程中,陆续发明的。比如:分布式系统或者集中式系统,很多人同时访问的场景。就是在分布式系统上,看一个用例在各个系统都怎么跑的,而且并发跑的时候不能受到干扰。那么就要有用户标签技术,然后做流量隔离。这个在分布式系统下也是一个重要的发明专利。就是指我们在分布式系统下,每个测试用例可能跑到每个分布系统里面,往哪个版本存?我们做了一套自动处理机制,这也是很关键的一套逻辑,属于精准测试的基础性专利。


一个完整的优秀软件体系,基本来说它需要8项发明专利进行全方位的保护。精准测试是中国拥有完全知识产权的理论体系。现在我们(星云)已经批准和申请超过16个,后续我们还在持续做全面的知识产权覆盖。


五、 精准测试的一分一合

对于精准测试不算太了解的人可能认为精准测试就是单纯的覆盖率工具或者白盒工具在中国改了个名字,但还是有重大区别。简单理解,它跟传统覆盖率有一个一分一合的变化。

一分”指的是:精准测试仅仅去统计(大范围的整体)代码覆盖率,而是要精确到用例级。比如回归用例选取、测试用例聚类分析、智能缺陷定位、开发测试的协同,所有的数据都可关联到用例级,精准测试的作用和范围就变得很大。大家看上面的雷达对比图,相当于给传统白盒测试做了一个全方位的包围。用例级就能有高精准度的测试分析,传统的白盒并没有这种测试分析。

一合指的是我们这个覆盖率已经不再是单元级的传统白盒测试主要针对单元级,工具很贵,号称壁垒极高无法突破,但实际上它的难度还不至于高不可攀。软件在单元情况下,一个单元跑,它的性能要求很低。星云精准测试跟传统测试的白盒的差别很大。以前白盒测只能用单元,现在我们精准测试可以把它用到系统,也就是功能测试阶段。星云可以在系统全速运转数据量非常大的时候实时采集数据,并确保对原有系统不要进行干扰。实际应用中,还是可以继续延用黑盒测试的操作方法,动态执行用例后,可以得到大大超于白盒单元测试的多种测试数据及其分析结果,用起来十分方便。


以,大家可以看到星云精准测试使传统测试模式发生了一个重大转变,实现了真正意义上的灰盒测试使测试左移实现了优雅的落地。但它并不是让我们的测试工程师马上就懂代码开发、懂脚本开发、懂单元测试,它是非常自然的去把用例跟代码进行追溯分析,因为星云有一套静态逻辑分析,可以把测试使用难度大大降低,没有开发经验的黑盒测试工程师能够用的非常如果肯下功夫甚至还可以逐步突破职业天花板,成为优秀的测试分析师


精准测试可以给黑盒充分赋能。以前测试和开发人员交流非常被动,如果开发说逻辑有5个,那就是5个,即便有第6个也很难被发现。有了精准测试整个黑盒子就打开了,测试模式发生一个很大的转变。它使测试实现精准数字化。我们在2015年的时候提出通过精准测试引领测试进入数字化,当时的主流观点测试是不可能数字化的,就像我们人去开汽车一样,想左拐就左拐,觉得该刹车就刹车,没什么数字化。但是有了精准测试以后,所有动作可以去关联代码,每项功能都可以被数字化度量,Debug和回归甚至变成了有趣地打怪升级的过程。所以,回过头来看,可以发现精准测试针对IT系统非常好的数字化、可量化、可评估、可考核、可度量很精确的一种技术方法


六、 精准测试体系

下面给大家介绍一下精准测试体系的具体情况。如上图所示,星云精准测试有这样的运行架构图。它首先会对源码进行一个编译和分析,把代码结构静态分析好后,将静态信息上传到后台对应项目版本中进行存储。再根据块的位置和类型信息进行插装,装点只有编号信息。代码插装好以后,放到被测系统里面直接动态去跑,测试人员用软件示波器点用例开始结束,就会自动把每个用例和代码的正向和反向追溯关系建立起来了。


正反向追溯有两个主体功能,一个是能够让测试整体量化,使之看到所有的测试过程测试工程师没有跑用例,就没有关联关系的数据;如果乱跑,我们分析一看功能完全不对,跑的功能和设计功能不应该聚类到一块但却聚类到一块,就认为是瞎跑的,跑的不对。什么都可以看得非常细致。另外,星云提供的测试智能分析的一些算法,测试用例最小级、回归用例选取测试用的聚类分析智能缺陷定位等,这些本来很理论化的技术,之前没人能够把它做出来。例如回归用例选取这技术,它底层数据提取特别难,需要花费大量的时间去研究如何去真正落地实现比如我们碰到的一些场景:给安卓的Framework代码插桩,然后拍张照片,照片渲染出来以后,整个安卓的驱动层代码到底怎么走?一瞬间就要驱动计算并且展示出来整体逻辑的运行情况,这个复杂度相当高。实现了这种技术,就可以用精准测试帮助手机厂商去节省CTS测试的时间。


精准测试在早期发展阶段,推广还是受到了很大的阻碍,其中一部人认为技术难度过高,因为国外的最顶级白盒工具也无法达到精准测试的技术要求,更像是理论研究而无法商用,还有一部分意见认为测试就是做功能黑盒人工测试,就应用使用基于传统的经验性的测试方法体系。现在这种观念已经在发生悄然转变。因为本质上,我们做测试就不应该忽视计算机的软件代码和功能间本质上的强关联性。



  • By 星云测试
  • 2022.8.12 
  • 星云测试  精准测试  
最新资讯