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

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


下篇

一、 商用精准测试的无损技术

再从内核能力的角度上,给大家讲一下开源白盒覆盖率工具和商用精准测试之间的对比。

现在我们很多单位在基于开源工具来做精准测试,是好事,但也存在问题。我们星云从2012年开始创业,为什么不拿个开源的直接做?还可以10年内核开发,但我可以斩钉截铁地跟大家讲:要完整实现精准测试那样做肯定是不行的。

开源工具的困难点根源在于:它的分析和插桩全部在字节码上,但实际覆盖率的观测点在源码上。这就产生一个严重的信息脱节因为字节码是有损耗的开源工具能够看到你的条件覆盖百分比,但根本不知道每个条件真和假,由于字节码阶段,它的条件和真正的源码上条件已经发生了变化,已经没人能搞得清上面和下边对应关系了。比如Jacoco这样的开源工具做了这么多年也没有突破这个底层的根本性问题,这种差异会导致覆盖率不可弥补的缺陷和错误。大家知道:做覆盖率条件覆盖是非常必要的一个指标,开源工具突围了很多年,也没有成功。另外,它的码操作非常复杂,行业里直接拿来试,但没有人能完整、清晰地阐述它的内部情况。

星云精准测试SABI(字节码插装)SASI(源码插装),可以实现真正的无损测试技术。

SABI,SouceCode Analyzer ByteCode Intrumentation,即源码分析字节插装。就是在源码上直接分析观测点也还源码上。这个就能够完整实现无损的插桩,覆盖率100%精确规范。SABI是依赖非常全面的源码静态分析后,经过校正后的数据往字节码插,而不是直接在字节码分析,往字节码插。SABI字节码技术可以满足国际规范的CDC的覆盖要求。

SABI是大家非常认可并欢迎的技术方法,2019年左右研发出来,解决了金融领域无侵入式插装的诉求。目前SABI 2.0技术,能看到具体条件确定性的真假覆盖,而不是仅仅是一个覆盖百分比,包括分支覆盖。它把所有的复杂运算在源码阶段全部算完,比如它会产生一个分块数据库,里面所有的装点在什么位置已经全部算好,对于插装来说就是一条指令。一个分块数据库可能几十兆上百兆,但所有的插装动作就一条,所以它可靠性可以有非常好的保证。因分析出来的分块数据库是明文的,有问题可以直接核查,甚至可以把里边一些装点自动去掉或删改都可以,很开放,不是个黑盒,使用安全和可靠度高

SASI(源码插装),是传统白盒最基础的技术,直接在源码插装,主要应用在对于覆盖率标准要求更高的领域。源码插装以后,经过高级语言、高级编译器的编译,直接生成最后发布包。这种是完全无损的,可以随时反查插装点,不会引起语法错误、功能错误,可靠性更高。


二、 商用精准和开源精准的区别

商用系统级精准测试有前置精准的静态分过程图中你会看到它每个条件真假、条件组合真假。它把代码都切成逻辑块了,直接在对应的位置上展示结果。开源产品缺了一个完整的静态分析过程,后续很难深入做下去。这种代码染色,一行一个颜色,需要测试人员对代码的理解能力要求高,无形中进一步推高了使用成本。

商用系统级精准测试能够整个脱离Git系统做代码可视化我们有完整的静态分析,有Ll、L2、L3三级不同的可视化表达。L2级主要应用在代码管控非常严格的场景下。它不提供源码阅读权限,但我们可以根据分析出来的代码结构,看到整体条件、嵌套关系等,对于黑盒测试人员的信息是足够的。

商用系统级精准测试系统内部有非常复杂的计算,这些计算是以静态代码分析做依据不在这个阶段去关联代码关联到Git上。在Git上去拿源码,然后再去算,一个是来不及,另外因为它不是结构化的,根本达不到实际使用要求开源产品做差异覆盖率时,需要让Git告诉你差异代码什么。而商用精准测试,早已经完成了静态分析,对于程序的控制流有没有差异很清楚。它的运算完全脱离任何外部系统,像这种实时覆盖率切换的关键的功能,在实际场景的使用频率很高。

实际应用中,对覆盖率的信息要求绝对不仅仅是单版本的,而是需要投影到很多版本。商用精准测试一旦基线切换,它会把历史数据往基线自动进行投影,并且整个过程对用户都是透明的,不需要人工 干预。因前面已经做过程序控制流分析等工作它的投影能实现秒级的计算和切换。这些也是基于开源产品研发精准测试无法突破的技术瓶颈。

另外,很多企业级客户喜欢在代码块上做标记,告诉你不同的代码在做哪些功能。商用精准测试也满足了这一需求。它可以在分块上做详细标记,这个数据是一种结构化的,里边会有嵌套的程序信息理解。它可以画出程序的控制流程图,像有深度的网状结构,覆盖率看得非常清晰,这些都是基于分块信息。

在商用精准测试的使用场景里,大家用的比较多还有实时覆盖率功能即:在一个发版轮次中,多个版本之间自动汇集覆盖率。当数据从程序里传出来以后,它只有跟用例的关联关系信息,它属于哪个版本、哪个轮次/计划/任务,起初都是不知道的。经过星云主server以后,会把这些数据实时往外吐,随后有专门的server去实时往里合,一瞬间就合在轮次上。如果想看这个轮次的覆盖率,只要一刷实时马上就可以看到。

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

行业上大家对商用精准测试还是有些误解,拿开源Jacoco来比对是不恰当的。因为产品能够达到大规模商用化,要求是非常高的。我们(星云)可以对数亿行代码的大型高复杂度的系统插装,也就是说在对亿行代码插装的时候是不能有任何闪失,功能、性能以及引起编译上的错误,都是绝对不允许发生的。

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

嵌入式系统场景中,要支持到实时系统。以前星云可以完成准时,现在完全可以在实时系统做。比如在一些DSP芯片的控制上,不会干扰它的时序。插装以后,时序能够保证正常,不会引起异常的逻辑。我们的精准测试整套系统都是C++做的单节点128g内存可以支撑2000个系统。这种量级在以前是很难想象的(白盒工具一般主要用在单元测试阶段,测一些函数)。这种大型系统的计算,对整个内核能力要求非常高,刷覆盖率速度要很快。开源的产品速度很慢,根本够不到实际的生产场景要求。星云百万级代码行的基本就是秒级一刷所有的覆盖全部算完,实时速度很快。目前星云精准测试运行绝大多数场景下,可以达到7*24小时不间断运行与计算。这个很关键!如果大家对覆盖率或者精准测试理解不深,大家会觉得这不就是一套测试用的系统么,宕机就宕机。但实际上,商用精准测试就应该是软件测试界的Oracle它不允许宕机因为大家一旦用上以后会非常纠结这个数据,比如我突然间一个条件没了,我测试过了为什么没了不管你量有多大,丢了肯定不行,因为丢了就会造成分析的误差,所以整个系统这种持续性以及稳定性非常关键。我们(星云)花了一两年的时间一直在专门优化,因为它的要求太高了。商用精准测试要在系统级采集,用户的系统通常有很多,单系统采集的情况不多,可能几百上千个系统同时在采集,它要求非常高,能够做到7×24持续不间断,就需要很多技术做支撑。


三、 精准测试技术成熟度五级划分

目前,按技术实现情况,可以把精准测试分成5级。

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

一般用在高校教学、普通应用层级的覆盖率统计,需要谨慎考虑用于企业质量体系建设指标。

T2级就是开源精准级”。这个级别主要基于 APM技术+开源,做到精准测试一些基础功能,比如可以实现用例和代码追溯。由于前面我们讲的开源内核的能力限制,对于很多场景,没有有效的方案去解决。我们看过很多企业在这方面遇到了一些很大的实际困难,投入很多研发时间和精力,但最后都翻越不过去,浪费了不少宝贵的热情和投入。

一般用在互联网公司内部创新、对于覆盖率指标精确度要求不高、以及企业对升级到精准测试的内部运行初步评估等场景,起到了对精准测试技术拓荒与导引作用。

T3级“商用白盒级测试”。这个领域几十年前就有,比如国外工具C++Test、TestBed、VectorCast等,应用在汽车、航天一些领域用的工具。这些商用工具的单元测试能力强,用它来做航天航空上要求的MC/DC的覆盖率,不会有什么问题。但它受限在单元测试这个环节,不针对系统级应用。也就是说,黑盒工程师基本是用不起来的。这些工具大多没有用例和代码的追溯,在测试分析方面的能力比较弱。从用户的角度看,一个是价格非常高,另外在国产化替代的大背景下既方便采购、各种适配都有很大问题。

主要用在对单元测试要求高、代码量相对较小、质量要求极高、仍采用传统瀑布开发模型的企业。常见的场景在航天军工类的嵌入式系统等。

T4级“商用系统级精准测试”。它的技术体系非常完整,要求较高。比如:(1)在满足白盒测试要求的同时,需可以对接黑盒测试,整个采集过程可在系统级进行;(2)内存和CPU的附加开销,必须控制在5%以内;(3)企业用户可以根据自身需要,定制系统级别的覆盖维度和业务模型;(4)支持轮次级实时覆盖率和跨版本覆盖率累积技术,实现白盒探索性测试的要求;(5)对微服务系统做全方位支持;(6)对流量隔离(穿透)技术需要提供强大的支持,以便更好的在微服务系统中实现全程精准测试;(7)在回归测试智能选取上,需要给出推荐值,并可进行公共底层模块引起的全量推荐修正等。

T4商用系统级测试里,可以计算实时覆盖率,轮次级、计划级、任务级、实时覆盖率能够自动生成并查阅。T4级在整个流量隔离或者分布式系统的用户标签、穿透等方面,有非常标准化的解决方案。各种标准协议一个用户标签打过去,各个层面全部穿透过去,可以拿到整体的用例和代码间全系统的这种关联关系。另外在用例选取、回归选取等有些算法的优化,包括静态修正、动态修正等,技术方案都很完整。另外,商用精准测试的server一般都比较强,整体对性能的干扰可以控制在5%以内,因为这个级别主要是PC级的应用,性能开销要求不是最主要的问题。2016年以来,星云测试在这个级别做了最深入的研究,并在银行、证券、保险、智能工业(通信)、智能汽车、国家电力、电信运营、航空航天、军工等领域的多家企业实现了圆满落地。

T5级是“商用内核级精准测试”。它能够执行对于Android Framework级代码的覆盖率统计、Linux操作系统内核进程和相关驱动的覆盖率统计、DSP芯片中无操作系统状态下裸C/C++代码的覆盖率统计等,对系统的干扰非常小。因为如果插装到操作系统上,很可能机器启动不了。这个级别对性能的影响度一定要控制在1%以内,芯片与嵌入式板子等要求更高,因为他们是有时序的我们一些芯片有中断时序,比如几个中断它一定要保证原有执行时序不能被打断假设要0.1毫秒完成,那是绝对不能超过0.1毫秒。它不像PC端系统,慢一点也影响不太大。比如金融系统,查询功能原来是1毫秒,插装后变成1.2毫秒,它顶多是慢一点点,不会影响业务结果。但是这种芯片级会影响业务结果,造成逻辑错误,这是绝对不行的。目前国内主要是星云测试承担起了这个级别的测试任务,应用在一些高端场景及领域中,比如军工、智能汽车、芯片、电力等行业的国家级项目上。


四、 准测试的效能提升

这个图早在8年前,我们(星云)就发布了,现在看下来实际效果与起初的预估没多少误判。商用级精准测试有很多驱动点可以改进效率,以覆盖率打比方:原有的黑盒测试的瓶颈阶段效率是很低的。这个阶段假如依然使用人海战术,基本上可以认为是消耗大量成本,而看不见有效成果。也就是你不知道软件里面是什么,就在那猜用例,猜的很多都不对。比如一天猜100个用例,也许只有2个是有用。但商用精准测试,就可以高效地分析用例、有目的地补充用例,一天做100个用例100个都是有效的,它并没有增加工作量,这个是最让人赏心悦目的。

引入商用系统精准测试很多企业覆盖率很容易做到惊人的90%以上。因为它的提升是全方位的,包括我们开发测试的交互的效率和管理端的效率。以前我们强调现场管理,时常需要盯着测试工程师看干不干活,干得怎么样。这种情况一个是容易造成矛盾,另外因为受人为因素干扰太多也不客观,再有就是不能帮助测试工程师们发现自己需要补充的技能,长此以往容易迷茫,早早碰到职业天花板,很痛苦。由此导致人员流动过于频繁,不利于业务稳定。另外,商用级精准测试在回归上,给了测试和开发们很大的支撑点。以前很模糊的一些东西,要人去投入大量时间分析,现在测试用例自动推荐功能可以自动分析,而且速度极快,整个回归测试效率至少提高一倍以上。


五、商用精准测试的规划与发展

商用精准测试不是项目制的,整体都是高度产品化,每个功能都要考虑到整个行业的通用模式诉求,如何做到普适化?是非常一个严格的产品化过程。所以客户的需求是模型化,我们就得按模型化来设计。比如很多场景要通过参数来区分,类似oracle这种软件的参数比较多,一般我们(星云)的专业人员可以帮大家配好,对某个行业客户的具体场景后续不需要变配置。

高性能、高可靠永远是追求的技术管理点。如果没有高性能、高可靠,产品功能就算再强大也是没用的,大规模商用化是会受到重大阻碍的。商用精准测试技术是未来软件质量体系最核心的业务和大趋势,它不允许有任何错误,我们(星云)在这块投入很大。

目前首创的核心技术都有保护。因为我们(星云)会按照自主可控内核的路线去发展,虽然很难,但是对企业来说,正是有了核心竞争力,才有资格去国际舞台上与主流白盒一争高下。如果拿开源直接用,会发现上手快很简单,但是企业很多复杂一点的需求变更功能扩展都解决不了。因为它内核本身就有缺陷,另外是大部分用户还是看不懂它的逻辑本身,遇到问题无从下手。

所以(星云)一直很关注专利保护授权。对专利的注重和保护是希望大家尊重技术创新,尊重商业规范。如果有人要借鉴,需要一个知会、授权的流程。星云是友好的,比如白皮书里面的内容是我们的专利得到授权可以公开后,面向行业是敞开式的定期更新、向大家介绍最新的技术,也会写这些基础怎么做。

我个人认为,精准测试是在测试全面智能化之前的一个很好的过渡,但是我认为过渡期最起码需要几十年,那时AI才有可能成为主导。然后把人的工作全部省掉,甚至可能包括覆盖率工具都可以不再需要。但这是最起码是几十年以后的事情。

不改初心,方得始终。在很长的一段时间内,我们会持续的发展精准测试,让精准测试成为整个测试行业提高效率的一个保障。现在很多企业的业务扩展太快,有限的人根本接不了暴增的项目,测试工作量随着项目指数级增加。精准测试让指数级变成一个直线。人力的贡献是有限的,因为软件的算法是极度复杂的,人力无法在看不见的情况下,去做完全而有效的遍历。所以好的产品和工具是必须品。我们一直在发展,包括很多研究合作、一些理论上的算法,逐步的让它更拥有更强大的能力,把人从繁琐而没有创造力的工作中解放出来。

撰稿人介绍:

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

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

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