iSQE软件测试工具第三期直播演讲回顾
访问次数: 870 次   
发布时间: 2022-08-24

iSQE软件测试工具系列直播第三期深入浅出,精准测试面面观已于上周顺利开播,邀请到中国电子标准院李老师、**银行黄老师、星云测试赵明老师以及IREB敏捷工作组组长刘海英老师参与直播的圆桌论坛环节,共同交流探讨,详细内容可见圆桌论坛回顾文章。

直播的第一个环节由赵明老师为大家带来了精准测试的精彩演讲,以下是赵明老师演讲的文字版内容。

 

大家好,今天非常高兴收到iSQE的邀请,和**银行的黄老师、**标准化研究院李老师,还有iSQE的刘海英老师一起为大家分享精准测试这个主题。

精准测试这个主题,可能大部分人觉得是近几年比较热的一个方向。实际上,它诞生至今整整10年。我们从开始发起这个体系到现在已经整整10年的时间,10年磨一剑。因为精准测试比较特殊,中国的IT技术大部分是国外过来,所以火与不火其实在国外已经决定了。精准测试完全不一样,它不是从国外引入,是在中国慢慢发展,并且达到了今天的高度。

精准测试现在很多地方都讲,我今天的侧重点稍微有所不同,可能更多的讲一下精准测试技术的一些起源发展、商业内核以及行业的发展和应用情况。因为精准测试是我们中国自己的原创技术,我也会对整个专利体系这方面做一个介绍。

精准测试的定义

首先我们看一下精准测试定义,精准测试其实一句话概括,就是测试用例和代码追溯,这是它最本质的东西。精准测试的本质也决定了它抓住了测试的一个要点。

因为软件其实是两个东西,一个是我们看到的功能,即从界面上看到输入输出,通常我们测试是基于这个,另外(第二)还有背后的代码。我们可以这样来理解:一般传统的黑盒测试我们只会关注它的输入输出是否符合预期。

我们所说的传统的白盒测试,其实它并不管整体的功能,更多只是看每个单元是否满足需求。精准测试不太一样,它在功能测试整体运行的时候去整体分析功能和代码的关系。在这个基础上,我们给它下个定义,也就是在测试理论上来说是唯一一个也是第一个,同时关注功能点和代码相关逻辑这样一个方法论。

举个例子,很像物理界的量子纠缠理论,其实本身软件代码的运行逻辑和功能输出就是两个也是一个整体,像量子纠缠一样。如果这两个是一个整体,观测任何一个都观测不准。这个也就是我们黑盒测试以前遇到的问题,会发现黑盒测试永远有很多隐性问题。因为丧失了计算机最本质的代码的东西,精准测试就把这两个全部观测出来了。

观测以后,能够把测试变成一种可辅助分析的系统,软件测试本身来说并不具备辅助分析的能力,只有人脑能够去理解功能。有了精准测试以后,功能点可以对应上代码。代码是有很强的规范性和规律性的,功能点和代码的关系可以联合起来分析。精准测试提供给我们传统测试一个非常好的计算机辅助分析能力,也就是说我们有专业工具了。以前我们测试很难说有工具,大多是一些管理系统录入一些简单的信息,但是精准测试提供了一个强大支撑、具有智能的一个分析系统。

 

我们给精准测试起了一个英文的名字叫Threading Test,它并不是直译成 Accurate test,以前我们想直译,但实际上现在看还是Threading Test最契合。

最开始在2014年的国际软件测试大会上发布精准测试的时候,它就叫穿线测试,英文名字叫Threading Test,表达了精准测试的本质。Threading这个英文单词本身有两个含义,一个是穿线一个是线程,都从最本质说明了精准测试的技术内涵。精准测试建立用例和代码的关系,相当于把黑盒和白盒关联起来,做黑盒测试也能看到白盒数据,同时把开发和测试能够关联起来,测试一做完,开发的逻辑马上就能自动生成。比如做一个测试逻辑,代码上的逻辑立马就可以生成,所以它能够把开发测试关联起来。

另外一个层面,精准测试最本质就是线程测试,因为精准测试基于覆盖率白盒理论产生,它跟白盒最大的区别是它的覆盖率是线程级的,也就是说我们要追溯到用例这个级别。比如一个系统可能很多用例同时跑,最终用例级的数据就是在线程里面。我们拿到线程级的数据,就能拿到测试用例级别的这种覆盖率,也就是说它的覆盖率并不是一个系统的,是一个用例级别的,这样建立起用例和代码的规范。所以我们整体英文名字叫Threading Test,但这是我们中国自己命名的。

 

精准测试技术发展

给大家看一下精准测试10年来的主要发展。精准测试是从2012年开始发展,最开始的时候让团队建立一些基础理念,用例和代码追溯基本方向在2012年已经基本定下来了。

2013年第一个插装内核开始做,就是基于java的SASI(源码分析源码插装)。SASI是最标准的商业白盒工具的实现方式,没有任何可参照的技术体系必须自己实现和突破。

2014年的时候,用例和代码追溯、软件示波器、回归用例自动选取基本已经成型。2014年有个重大的转折点,就是在 iSQE大会上以“穿线测试”第一次发布产品。当时引起了行业上很大的关注,但那个时候毕竟产品还很弱小,包括理念接受度,那个时候都比较差。

2015年的时候开始做C++产品,就是C++的SASI(源码插装)相当于向国际最顶级的商用白盒测试工具进行挑战。因为这个领域大家知道白盒工具非常贵,价格也很高,中国人一直没能力做,2015年开始挑战这个技术领域。

2016年有第一个Commercial(商业产品)卖出去了,做出的产品真正有用户去买了。

2017年开始向白盒测试最顶级的覆盖率MC/DC(100%覆盖率)去挺进,意味着我们有资格去做汽车电子以及航空航天等领域覆盖率的东西。

2018年的时候有一个重大变革,在分布式系统的追溯上而言,有一个全系统的用户标识和流量隔离的技术,这也是目前精准测试比较核心的技术。

2019年的时候开始做SABI 1.0,插装方式发生重大变革,SABI就是SouceCode Analyzer ByteCode Intrumentation,跟我们见到的常规字节码插装区别很大。因为它能够做到无损的计算覆盖率数据,严格实现国际标准的覆盖率统计指标,而且它可靠性很高,用户发版流程也很简单。

2020年开始做这种整体的轮次级、项目级实时累计覆盖率,以及嵌入系统的支持。

2021年开始做SABI 2.0,还有高可用。高可用其实很重要,后面会给大家详细说明。

2022年的时候,基本上我们突破了很多关键的领域,就是linux kernel、DSP芯片,然后像安卓的Framework操作系统这样的一个精准测试,这个非常特种的系统,因为它的数据采集方式非常特殊,是很大的一个挑战。

 

精准测试有一个非常完整的专利簇保护。因为这个技术体系就是我们国内发起的,所以我们在整个研发以及推进的过程中,在算法研究以后,基本上都会同步申请国家的发明专利,目前总共申请了16项发明专利,已经有5个授权专利。

第一个是精准测试最关键的发明专利,一种基于测试用例与源码双向追溯的测试装置及方法, 2014年申请2017年拿到。但这个专利当时引起了很大的争议,专利局认为这种东西非常底层,就像苹果从苹果树上落地,是由重力引起一样,他们认为这个东西太常理化了,像水往下落就会发电。

我们的反驳理由是,水往下落会发电,也是有人研究它能发电。水往下落可能在几千年前就是这样子,古代人也看得到,但是也发不出电。最终我们还是拿到了这个专利。因为这个理论是我们最开始来把它产业化的,虽然说这个东西肯定是以前就存在,但其实并没有人提出,或者把它整个系统化做这样的阐述,尤其在测试理论上。

后面精准测试比较关键的,像我们行业叫代码染色,我们叫覆盖率可视化,这个专利也比较重要,然后是回归测试用例选取……为什么在国内一直叫精准测试?更多在讲我的代码都改了,这个回归到底应该选哪些用例?那么精准就精准到这:精准的挑出这些用例(都是基于代码和用例的关系),在新版本发布以后,看它代码路径变化的问题。整个这套理论就是基于这个专利,这个是在2015年申请,2018年拿到的。

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

以上是已经授权的5个专利,还有11个是在实审阶段。我们也咨询过专利律师,现在一般1个好的软件体系,如果它是个完整的技术体系,基本来说它需要有8项发明专利进行全方位的保护。现在我们已经在申请16个,后续我们还在做。这个体系肯定是需要有效的保护,精准测试是中国自己有知识产权的完全的理论体系。

 

很多人可能不太懂精准测试,认为精准测试就是覆盖率、白盒在中国改了个名字。其实精准测试还是有重大区别,否则中国的行业专家也不会随便去改名字。简单理解,它跟传统覆盖率有一个一分一合的变化。

“一分”指的是:我不再去统计(大范围的整体)代码覆盖率,而是要精确到用例级。

比如传统白盒测试,反正你往那一放就只看整体覆盖 ,但精准测试是要统计用例维度。有了用例维度这个数据以后,就可以做测试分析了,比如回归用例选取,做测试用例聚类分析做智能缺陷定位、做开发测试的协同,所有的东西到用例级,精准测试的作用和范围就变得很大。大家看上图右边,相当于给传统白盒测试做了一个全方位的包围,主要就是在于它是用例级的,用例级就能有测试分析,传统的白盒并没有这种测试分析。

从“一合”的角度来看,“一合”指的是:我们这个覆盖率已经不再是单元级的。做白盒测试单元级,相对来说,那些工具很贵,也号称无法突破,但它的难度还可以。软件在单元情况下,一个单元跑,它的性能要求很低,但是精准测试不是这样。精准测试在系统全速运转数据量非常大的时候来采集数据,又保证对原有系统不要进行干扰。所以精准测试跟传统测试的白盒的差别很大,以前白盒测只能用在单元,现在我们精准测试可以把它用到系统,整个作用就很大。用到系统相当于我们用黑盒测试的方法就可以用了。相当于把白盒测试工具提高为计算机辅助功能测试的产品,用起来比较方便。

 

大家看到(精准测试使传统)测试模式发生一个转变,精准测试是一种灰盒的测试模式。它的测试左移是非常优雅的。它并不是让我们的测试工程师马上就懂代码开发、懂脚本开发、懂单元测试,它是非常自然的去把用例跟代码分析起来。我们的测试工程师在懂业务的时候慢慢去学习看代码。现在精准测试非常成功的点在于让黑盒测试人员也就是没有开发经验的测试员能够用的非常好,如果肯努力,要懂自身所在行业的业务的话,可以用得非常好。这需要一段时间的过渡和学习,将来从功能上就知道代码上的条件,那些条件到底是这个功能上什么东西,然后慢慢可以看到这个条件分别来控制功能上的什么东西,这样一个过程的过渡非常自然,使得整个测试模式有了一个很大的转变。

有了精准测试以后,黑盒测试整体就有很多辅助的功能,让我们整个能力也有很大的扩充,因为一旦有了精准测试以后,精准测试就是武器。其实我们以前和开发人员交流非常被动,比如开发说我改了什么,他想说什么就说什么,他认为需要回归什么就回归什么,他告诉你逻辑有5个,那就是5个,即便有第6个也很难知道。但是有了精准测试以后把整个黑盒子就打开了。我们测试人员可以看到非常多的底下的东西,甚至是本质的东西。有了这些工具以后,测试效率就会变得很高,我们整个测试模式也会发生一个很大的转变。

另外目前而言,它提供了一种测试数字化唯一的方式,也就是说测试是不可能数字化,就像我们人去开汽车一样,没什么数字化,我想左拐就左拐,我觉得该刹车就刹车,没什么数字化。但是有了精准测试以后,当所有动作去关联代码以后,它就能数字化了,因此它也非常契合现在的主流,各行各业都做数字化。

我们在2015年的时候提出引领测试进入数字化,当时数字化这个词并不像现在被国家提及的这么厉害,我们很早就定义了这种数字化的方式,它是非常好的数字化、量化、可评估、可考核、可度量、很精确的一种方式。

 

如上图所示,精准测试有这样的运行的架构图,它首先会对源码进行一个编译和分析,会把代码结构静态全分析好,之后它会把代码都分成结构上的一些块,然后插装点再插进去,插装点在发数据的时候都是一些占的很少的块的数字编码,至于这块对应什么程序位置,我们结合静态数据后期就可以知道了。

这个代码插装好以后,放到被测系统里面去跑的时候,测试员拿着软件示波器点用例开始结束,就会把每个用例和代码的关系建立起来,建立用例和代码的正向和反向追溯。

有正反向追溯以后,它有两个主体功能,一个是能够让测试整体量化,比如看到所有的测试过程。很多企业还用这个作为考核工具。比如看每个测试工程师的人员贡献度,就在每个轮次里面这个人的覆盖率跑了很多用例,总体覆盖是多少,人和人之间区别是多少,看得非常细。整个测试质量的把控会变得非常的细化,而且这个过程是很可信的一组数据,没有办法去伪造。它跟我们常用的这种测试管理系统不一样,测试管理系统里面的数据随便填,想乱填也可以乱填,比如我没做测试却打勾,管理上很困难(去发现)。精准测试就是直接跑用例,你不跑,没有关联关系这个数据都没有了。如果乱跑,我们分析一看这功能完全不对的,跑的功能和那个功能不应该聚类到一块,但却聚类到一块,就认为是瞎跑的,跑的不对,什么都可以看得非常细致。另外,会提供一整套的测试智能分析的一些算法,包括测试用例的最小级、回归用例选取、测试用例的聚类分析、智能缺陷定位等。很多东西本来很理论化,这些在早期论文就很多,但是没人能够把它做出来,包括回归用例选取这技术,早期论文里也不少提及,但是没人商业化,因为它底层特别难,需要花费大量的时间去研究如何去真正落地实现。

所以2014年左右,我们刚发布精准测试的时候,大家对这个技术的态度两极分化。

  • 有些人认为这个理论非常好,但是根本做不出来,这是一种很强硬的理论派。我给大家举个例子,比如我们做的一些场景,给安卓的Framework代码插装,然后拍张照片,一瞬间照片渲染出来以后,整个安卓的驱动层代码到底怎么走,一瞬间马上就要驱动计算并且展示出来,这个复杂度相当高。所以2014年大家在做黑盒的时候,没人认为这个东西是可行的,普遍认为理论还不错但是做不出来。
  • 2014年左右还有一部分意见认为这个理论不好用、更不能用,测试就是做功能测试。现在基本上这种观点已经全面扭转过来了。因为本质上,计算机的软件和呈现的功能,本身就有很强的关联性。它本身就这种关系在,你可以分析出很多东西,这种到现在倒不是什么太大的问题,所以这是整个精准测试主要的运行模式。

 


由于时间有限不去讲精准测试的很多细节的东西,所以给大家讲一些内核上比较重要的部分。比如我们看到大部分公司实现精准测试,都是基于开源的一些工具来做,那开源工具存在的问题是什么?我们从12年开始创业,为什么不拿个开源的直接做,省了10年内核开发。但那样做肯定是不行的。像开源的工具,覆盖率的观测点必须在源码,这是肯定的,但是开源的工具分析和插装全部在字节码,这就产生一个脱节了。比如观测点在源码,但在整个插装全是字节码,因为字节码是有损耗的。比如我们在开源的工具,它能够看到你的条件覆盖的百分比,但它根本不知道每个条件真和假,因为在字节码阶段,它的条件和真正的源码上的条件已经发生了变化,已经无法搞得清上面和下边对应关系了。

这种情况像jacoco做了这么多年也没有突破,说明根本做不出来。大家知道做覆盖率,条件覆盖是非常必要的一个东西,那就说基于这种技术,它没有办法突破。它还有很多技术,源码和代码,这种差异会导致覆盖率的错误等都有这种情况。

我们精准测试推出的SABI和SASI是中国自己的技术。

SABI,SouceCode Analyzer ByteCode Intrumentation,就是说源码分析,字节码查看。就是我的观测点还是源码,但是我的分析也是在源码上直接分析的。插装是在字节码,依赖非常全面的静态分析基础上,经过校正后的数据往字节码插,而不是直接在字节码分析,往字节码插。这个就能够完整实现无损的插装,它的覆盖率100%精确。比如满足CDC的覆盖,就是按照国际规范,它不像开源工具会总是有不可弥补的缺陷这种情况。

SABI是大家非常喜欢的技术,也是刚才我提到在2019年左右研发出的技术。我们已经推到SABI 2.0技术,能看到条件非常真实的这种覆盖,包括分支值的覆盖。这样也有一个好处,传统的开源工具,它的字节码操作非常复杂。我感觉其实行业里也只是用,并没有人看得清里面的东西SABI会把所有的复杂运算在源码阶段全部算完,它会产生一个分块数据库,里面所有的装点在什么位置已经全部算好,对于插装来说就是一条指令。一个数据库可能几十兆上百兆,但其实它所有的插装动作就一条,所以它可靠性可以有非常好的保证,有问题可以排查,因为分析出来的分块数据库是明文的,甚至可以把里边一些装点自动去掉或者删掉或者改都可以,它很开放,它不是个黑盒。

还有一个大家接触比较少的SASI,这是传统商用白盒最基础的技术,有时候对源码进行分析,直接在源码插装。源码插装以后,代码经过高级语言、高级编译器的编译,直接生成最后发布包。这种是完全无损的标准技术,插装代码经过编译器编译后执行可靠性更高。

 

今天假设咱们观众都是对开源熟悉,或者听过大部分精准测试演讲时讲开源的技术,那商用和这种开源最大区别什么?

其实很多人反馈做jacoco做不下去,是因为jacoco缺了一个完整的静态分块的过程,那么静态分块的过程是非常有用的,大家看右边这个图你会看看它每个条件真假,条件组合真假,它把代码都切成逻辑块了,它直接在对应的位置上结果展示的非常清晰,它不像我们说的那种染色,一行一个颜色,它不是那样子的。

精准测试能够整个脱离我们的Git系统做代码可视化。我们有完整的静态分析,我们有Ll、L2、L3三级的这种可视化。对二级来说,不提供源码,因为已经分析出代码结构,它的条件我们都有,它的嵌套关系我们都可以表达,那么它整个也画出这个图,整个可视化的可以脱离源码。

另外一点大家可能并不是很清楚,其实在精准测试的时候,(系统内部)要进行非常复杂的一些计算,这些计算必须得有静态数据在,不可能在这个阶段去关联代码,关联到Git上。在Git上去拿到源码,然后再去算,一个是来不及,另外因为它也不是结构化的,根本达不到这个要求。比如我们做差异覆盖率,还得到让Git告诉你差异代码什么,其实在精准测试里,它已经分析了程序的控制流,有没有差异自己知道。它的运算完全脱离任何外部系统,精准测试自己就可以做到。像这种实时覆盖率的切换,这是非常关键的功能,后面会给大家讲。

现在的覆盖率绝对不是单版本的覆盖率,要投影到很多版本,一旦基线切换,它会把历史数据往新基线投,投影有一定的规则,完全依赖于程序的控制流以及对程序的分析,才能实现秒级的这种切换和投影。另外我们很多企业喜欢在这个代码块上做标记,告诉你这个代码干嘛的,那个代码干嘛,在分块上可以标记,因为它分好块以后这个数据就是一种结构化的。这里边会有嵌套的程序信息理解,这里边只是给大家一个简单的视图,它可以画出程序的控制理论图,像有深度的网状结构。在上面这种覆盖率看得非常清晰,这些都是基于分块,除了分块以外,还能表达这种嵌套的控制流的关系,这些数据都可以表达很清楚,这个是很重要的一个技术。

 

现在大家用的比较多是实时的覆盖率功能,因为它是在一个轮次里边,在多个版本之间自动的汇集覆盖率。当数据从程序里传出来以后,它只有跟用例的关联关系信息,它属于哪个版本、哪个轮次/计划/任务,都不知道。经过主server以后,会把这些数据实时往出吐,类似一个日志一样就实时往出吐日志,然后有个专门的server去实时往里合,比如这个数据应该属于什么轮次的,那一瞬间就合在轮次上,然后我想看这个轮次的覆盖率,只要一刷实时马上就可以看到。

另外它包含了一整套切基线的机制。这个机制也比较复杂,当一个新版本上线,一看数据属于新版本,它会自动把基线切新版本。切的过程中,它会把历史数据往新版本投,如果这个函数没有变,它就会把历史数据投到这边来;如果这个变了,整个清零形成一个新的轮次累计版本,我们的用户马上可以看到一个实时累计版本的状态。这个是做了比较复杂的一套系统,我们在很多时候感触也比较深,这个内核做的复杂度非常高。

 

我觉得行业上大家对精准测试还是有些误解,行业上来说,拿jacoco就开始做精准测试。其实精准测试要求是非常高的,我们有的系统是数亿行代码的大型系统插装,也就是说在对亿行代码插装的时候是不能有任何闪失的,不管它的功能、性能以及引起编译上的错误,都不允许。

实际上,我们做过很多大型的系统,包括数十个节点的分布式,还有数百个这种大型的服务,复杂性很高。像我们录的最快的处理速度就是在一个88核的机上,相当于每秒钟要处理140万组的覆盖率数据。当然这个也不是原始数据,是在应用端发出来初步合并以后的数据。每秒140万组合用例的关联,这个关联不能有时间差。因为一旦有时间差,你的数据属于上一个用例的,会引起分析上的错误。每秒计算量要1.4亿个字节每秒,就是要算的这么快!这些数据来了以后马上就算完,1.4亿字节这个数据马上就要算到主系统里面去,所以它的整个的实时覆盖的延迟也要求很严格。

另外在嵌入式系统里边要求也很高。精准测试可以分为5级,在最顶级里边,我们要支持到实时系统,以前我们叫准实时,现在基本上确定可以在实时系统做。比如我们在一些DSP芯片的控制上来说,我不会干扰它的时序。插装以后,它的时序能够保证正常,不会引起异常的逻辑。我们精准测试整套系统都是商用里边就是C++做的,像单节点128g内存可以支撑2000个子系统,这个数字很庞大。这种其实还是很难想象,我们以前买国外的白盒工具,一般就是单元测试,测几个函数。现在我们可以单节点处理2000个系统。这种系统的计算,它整个内核的能力非常强,刷覆盖率速度也很快。开源的,我看有些时候有人说速度很慢,而我们百万级代码行的,基本就是秒级。一刷,所有的覆盖全部算完,所以它的实时速度也很快。目前精准测试运行基本非常接近7*24小时。这个很关键,如果大家对覆盖率或者精准测试理解不深,大家会觉得这不就是一套测试用的系统,宕机就宕机。但实际上,精准测试就是软件测试界的Oracle,它不允许宕机。因为大家一旦用上以后会非常纠结这个数据,比如我突然间一个条件没了,我测试过了为什么没了?不管你量有多大,丢了肯定不行,因为丢了就会造成分析的误差,所以整个系统这种持续性以及稳定性非常关键。我们花了一两年的时间一直在专门优化,因为它的要求太高了。它即要进行系统级采集,又要响应用户的各种实时运算,它不是单系统采集,可能几百上千个系统同时在采集,它要求是非常高的,做的7×24应该来说也非常不容易。

 

我们认为把精准测试分成5级非常有必要,因为很多用户对精准测试的能力要求不是太理解,这个还是太专业,分级会好一点。

最初级T1级叫做“开源覆盖级”。啥都不干,就统计覆盖率拿架构稍微改一改就开始用了。它还是只有覆盖率的主要功能,包括差异覆盖,做一些简单的定制,这叫“开源覆盖级”。

T2级就是“开源精准级”。绝大部分公司如果是自己实现精准测试,就是在这个级别,因为它脱离不了开源的内核。这个级别基于 APM技术还真能做到精准测试一些比较主要的功能,比如可以实现用例和代码追溯。但因为内核无法突破,因为精准测试首先它提供的数据必须是很精准,它的基础数据上不能有错误,这就是前面我们说的开源没有办法来逾越和解决的问题。同时因为开源产品没有静态分析,精准测试额高级功能和性能都无法达到。

我们把 T3级定义成“商用白盒级”,这个领域几十年前就有,像国外的工具C++Test、TestBed、VectorCast等等。包括在汽车、航天一些领域用的工具,它其实能力还是很强的,但是它没有这种用例和代码这个能力,所以它就没有测试分析的功能。另外它的系统级的表现也不怎么样,更多是在单元这个级别做的还可以。但它是精准的,它的覆盖率是满足国际规范的,不会有什么问题,包括我们用它来做MC/DC的覆盖率一直做到航天航空,国外的工具也是认的。这都是非常专业的工具,但它跟T2级其实有一定交叉,目前看还是T2级更好,因为T2级最起码精准测试的概念。T3级现在来看,国外的产品目前可能也不是很方便采购或者定制,适配都有很大问题。

T4级就是很好的进入精准测试这个级别了,它的主要体现就是实时覆盖率能算了,轮次级、计划级、任务级、实时覆盖率能够自动算了。我们的一些算法就是在整个流量隔离或者分布式系统的这种用户标签、穿透上来说,是非常标准化的解决方案。各种标准协议一个用户标签打过去,各个层面全部穿透过去,可以拿到整体的用例和代码的全系统的这种关联关系。另外在用例选取上、回归选取等有些算法的优化,包括静态修正、动态修正等等,一些技术就比较完整了。整体对性能的干扰可以控制在5%以内,这个级别要求并不算太高,甚至5%-10%都可以,因为这个级别主要是PC级的应用,性能开销还好,因为我们server一般都比较强的,额外开销5%-10%问题不大。

T5级的“内核精准级”就比较复杂了,要能够采集操作系统内核、驱动程序、DSP的芯片等,而且这个时候的干扰要非常小,如果插装到操作系统上,很可能机器启动不了。这个级别一定要1%以内,尤其芯片级要求更高,因为芯片是有时序的。就像我们一些芯片有中断时序,比如几个中断,它一定要保证原有执行时序不能被打断。假设要一毫秒完成,那是绝对不能超过一毫秒。因为它不像民用系统,它就是慢一点也影响不太大。比如咱们银行的系统,本身业务可能1ms完成插装后变成两毫秒了,原来是一毫秒,它顶多是慢一点,不会影响业务结果。但是这种芯片级会影响业务结果,造成逻辑错误,这个是不行的,这是T5级的这个级别。

大家可以看清楚,精准测试整个行业发展就是这样。极少数公司处于T4级和T5级,绝大部分部分都是T2级T1级的一个水平,T3级更多是指国外的一些工具,因为国内并没有专门做“商业白盒”工具的公司。这样一个完整的分级,大家可以清晰的看到精准测试目前处于一个什么样的状态。

 

精准测试的效率提升是非常明显,甚至跟预想一模一样,这个图其实我们最开始是有点预估的性质,但实际上现在看来没多少误判。比如精准测试有很多的点可以改进效率,最大的改进点就是这个覆盖率它怎么上去的。上去的原因就在于其实我们原有的黑盒测试本身就有一个阶段(比如瓶颈期)是效率很低的。这个阶段假如没有精准测试,基本上可以认为是磨时间,也就是你不知道软件里面是什么,你在那猜用例逻辑,可能猜的很多都不对,比如一天可能猜了100个用例,也许只有2个是有用。但是有了精准测试以后,用精准测试结合分析用例,有目的地补充用例,一天做100个用例100个都是有效的,所以它并没有增加工作量,这个是最好的一点。

表面上来看,精准测试的引入,不管我们自研还是买商业工具,前期似乎整个工具还挺麻烦,分析覆盖率还要时间。但慢慢会发现分析覆盖率的效率会逐步快速提升,比如很多企业覆盖率很容易做到九十几。精准测试的提升是全方位的,包括我们开发测试的交互的效率和管理端的效率。因为精准测试管理简单很多,以前我们的管理一定要在现场盯着我们测试工程师看干不干活,干得怎么样。像疫情这种情况,用精准测试,就是系统让它去跑,跑不出假数据的,你一看就知道它在干什么,效率怎么样。精准测试可以让管理很简单,可以支持远程去进行管理,管理效率也会提高很多。另外在回归上是很大的改进。比如很模糊的一些东西,要人去投入大量时间分析,用计算机来分析速度会变得很快,所以整个效率会提升很高。

 

最后一点看精准测试的一个发展。我觉得精准测试的发展跟常见的自动化最不同的一点就是,精准测试最开始按照产品化来规划方向,它不是项目制的,像我们对自己要求也很高,整体都是产品化,做一个东西都要分析行业到底要怎么用,怎么用是所有客户通用的功能,是非常一个严格的产品化。

另外对客户的需求都是模型化,我们都是按模型化来设计,很多场景通过参数来区分,类似oracle这种软件的参数比较多,一般我们专业人员可以帮大家配好,对某个场景不需要变什么配置。

高性能、高可靠永远是追求的技术管理点。如果没有高性能、高可靠,其实做什么都是没用的,功能再强大,商用是会受到重大阻碍的。我们会认为精准测试是测试的核心业务,核心业务不能有任何错误,我们在这块投入很大。

我们一直很关注专利保护授权,我们对专利的保护不是不允许别人去用,仅仅是商业上的保护,我们白皮书里面都会写这些基础怎么做的。如果有能力去开源了,我们也会逐步开放和鼓励,有些公司是为了创新,更适合自己来(利用开源)做,这个也很正常。

目前,精准测试体系有完整的保护,大部分我们首创的核心技术都有保护。另外我们会按照自主可控内核的路线去发展,这其实很难,就像我们目前投入了10年的时间做精准测试,很大一部分来自于(拥有)自主可控内核的能力。因为这对企业非常重要,如果不是自主可控,比如拿开源直接用,会发现这东西倒是挺简单,但是企业任何(复杂一点的)需求变更都解决不了。比如任何优化、任何一个小的功能的扩展都做不出来,因为它内核本身就有问题,另外是看不懂。就像Linux一样,难在看不大懂它,因为它复杂度太高,没有全局观就不敢随意的去定制,自主可控很重要。

我个人认为,精准测试是在测试全面智能化之前的一个很好的过渡,但是我认为过渡期最起码需要几十年,那时AI才有可能成为主导。然后把人的工作全部省掉,包括覆盖率工具都没有用。但这是几十年以后的事情。在很长的一段时间内,我们会持续的发展精准测试,让精准测试成为整个测试行业提高效率的一个保障。

很多企业选择精准测试的目的很明确,有人认为精准测试是裁人用的,可以节省大量人力,但其实并不是这样的。现在主要问题是业务扩展太快,有限的人根本接不了那么多的项目。测试工作量随着项目的增加是指数级增加了,但是精准测试让指数级变成一个直线,这也是行业上比较认同的观点,增加10个项目,同步增加10倍人,而不是增加10个项目增加超过10倍的人。因为人是有限的,不可能全国有几千万人来从事软件测试,就算中国有几亿人从事软件测试还是有大量bug发现不了,因为软件是极度复杂的。所以必须得有一些好的产品和工具,我们一直在发展,包括产业园的一些合作、一些理论上的算法,逐步的让它能够商业化产品化。

以上就是我今天的分享内容,今天的分享关于行业背景比较多,接下来是圆桌论坛环节,有很多实际经验的专家给大家进行更多落地的内容输出。

 

演讲嘉宾

赵明

赵明是中国最早一批软件测试专业硕士,曾在三大检索及国内核心期刊发表数篇学术论文,师从国际著名软件测试科学家。深度关注和掌握软件白盒测试理论和工具底层技术。

精准测试技术理念的发明人和商用工具的总设计师,作为第一发明人申请了16项精准测试核心发明专利,完整的构建了精准测试的发明专利簇。精通软件测试核心理论算法,精通多种语言编译器核心技术,代码分析和插装技术,精通计算机程序底层开发(图形,存储,二进制分析)技术,精通各种软件测试理论算法。带队完成了中国第一个完全自主可控商用白盒测试内核的研发,完成了超高性能白盒测试内核的研发,将白盒测试的应用领域从单元级向系统级和达到实时性要求嵌入式系统进行了扩展和应用,设计并研发了WINGS单元测试用例自动生成系统,能够面对非常复杂的软件系统完成全自动的生成100%语法正确的可直接运行的单元测试用例,产品性能远超国际上同类产品。

 

资料获取

演讲PPT分享:点击:链接 获取演讲PPT(百度网盘提取码:iSQE)

演讲视频回放:想了解更多精彩内容,欢迎点击:链接 查看直播回放

返回