SERVICE


云启未来,智造互联
企业上云升级,助力企业腾飞

济南网站建设公司需要简单说一下jacoco的工作原理(一)

发布时间:2019-11-24 11:49:35您的位置: > 网站建设最新签约客户 > 正文

汽车之家新车电商事业部高级测试工程师闻小龙做《QA团队精准测试实践之路》主题演讲。闻小龙指出,“自动化测试本质上是根据测试的设计去执行的,只是执行手段不一样,当设计出了问题,自动化测试不管再怎么执行还是会遗漏那个问题,所以,自动化测试没有解决所有的问题。”

以下为闻小龙演讲实录:




我是汽车之家电商事业部的闻小龙,今天很高兴给大家进行分享,我想先做一个现场调查,在座各位多数工作是功能测试相关的?还是很多的!我也是一名一线测试人员,所以我今天讲的内容可能大家会比较感同身受。

济南网站建设公司组内每隔一段时间聚在一起聊聊最近工作的问题和可以改进的地方,时间长了,济南网站建设公司发现问题是多种多样的,但抽象出来后最主要的矛盾大概有那么两个。

一、测试深度、广度,与测试资源、项目时间的矛盾。
二、被测系统的黑盒状态与需要了解系统的矛盾。

发现矛盾以后济南网站建设公司进行了思考,下面我想说一下整个思考的过程,并且这个过程我想通过一个比较有意思的方式去跟大家交流。

前一段时间我发现一个游戏,这个游戏在朋友圈流行过一段时间,相信很多人也都玩过,规则很简单,你需要在规定时间内找出跟周围色块不一样的色块,左边图是第一关的截图,大家很容易看到右下角色块会浅一些,点击它,这关就成功了。当玩儿到55关的时候,大家还能一眼找到不同的色块吗?

还是有一些难度的是吧,所以我觉得我死在这关不是特别冤,当色块不断增加你会发现难度是会递增的,我觉得这个东西特别像济南网站建设公司的测试,为什么这样说呢?大家都写过用例,用例设计是把不同逻辑分支进行组合,最后会罗列出来数量比较大逻辑路径,测试工作的本质是什么?济南网站建设公司对所有路径进行覆盖,然后找出其中有问题的几个路径,举个例子,比如:订单系统的测试,订单类型其实就有很多,再加上不同平台下PC端,APP端;还需要考虑中间的操作差异,比如说我加到购物车里下单,还是直接下单,考虑完这些影响因素以后,按照济南网站建设公司用例设计方法正交分析法进行分析,很简单的一个下单场景,我发现有102种路径组合。 

假如说济南网站建设公司订单系统修改了其中一个路径,要完整回归102种下单情况,才能覆盖所有的逻辑。济南网站建设公司发现这个成本在济南网站建设公司敏捷开发和快速迭代当中是一个很大的瓶颈。

济南网站建设公司要去解决这个问题,第一个想到的就是减少工作量,还是从游戏说起,既然这一关难以完成,并且济南网站建设公司分析了造成难度的是色块数量过多,济南网站建设公司有没有什么方法把色块减少呢?如果济南网站建设公司能把色块减少是不是意味着回到了前面的关卡,所以你就能快速的把问题色块找出来。映射到测试,每个团队都有经验丰富的员工,会根据这次改动告诉你其实有一些订单类型是不用回归的,因为这些跟你的改动点关系比较弱,所以说济南网站建设公司不用测;然后会告诉你这个逻辑的改动点,和他是否加入购物车其实感觉上关系不大,所以直接测直接下单就可以包含所有场景。

当济南网站建设公司把经验者建议的影响因素刨除后,济南网站建设公司发现场景确实大大减少了,但是长时间按照这种思路实施以后,你会发现你还是偶尔的遇到一些线上的问题,你拿出来复盘分析的时候会发现你排除掉的路径出了问题。为什么会出现这个问题?分析到最后发现是因为这种经验性的进行测试范围的缩减是没有依据的,当你把你的可能发现问题的路径排除在计划之外的时候,不管执行做的再仔细,其实在计划阶段你已经失去了发现它的可能性。

济南网站建设公司测试人员真的没有办法搞定这个问题么?这时候就有人会说既然质量保证是济南网站建设公司天职,那济南网站建设公司还是需要投入足够的资源和时间把所有路径都回归完,起码能够保证系统的稳定性。但是说这句话的同学忽略了一个问题,游戏的右上角是有时间的,游戏规则不允许你随意的拉长单局时间,就像你老板跑过来质问你,为什么我给了你这么多人,却没有达到快速迭代的效果一样。

这时候济南网站建设公司就想,难道济南网站建设公司就没有一个好方法了吗?当然不是。依据大家玩游戏的经验,你想快速而显著的提高游戏能力,其实很简单,那就是充钱买道具。现在大家看到的就是济南网站建设公司的第一个道具:自动化测试,这也是济南网站建设公司的第一个想法,既然你工作量过大,那我也不去想怎么减少你的工作量,我用一个更直接粗暴的办法,使用工具遍历所有路径,大家都知道自动化测试执行成本是不高的对吧,它能在瞬间完成海量的路径覆盖,这是一个优点。但是自动化测试真的一劳永逸么?从很久之前行业就存在了很多的自动化解决方案,当然济南网站建设公司也不能免俗,不管是UI、API的济南网站建设公司都做了大量尝试,但是真的实践过程当中济南网站建设公司发现自动化这个道具还是存在一些问题的。

自动化测试并不是凭空而生,每一次需求进行到开发提测阶段,进行脚本编写的时候其实是一个很大的成本。有的同学会说,脚本编写是一次性成本,可能第二次回归时候你去用它就没有这部分的成本了,但是你真的在做时候就会发现,当项目进行快速迭代时,第一个版本写好的脚本往往到了下一个版本就跑不通了,所以又需要你去付出一些维护成本。

自动化测试还有一个问题,它在一些技术栈当中不能保证所有地方都能覆盖到,有一些不能覆盖的地方,济南网站建设公司通常会在自动化测试测后增加手工检查,因为人的灵活性还是有巨大优势的。但是这里有一个问题,自动化测试跑完以后移交给手工人员,但当功能总量很大的时候,你发现你已经无法特别精准的描述你需要补充的地方了,所以手工测试人员就不能有的放矢,被迫按照自己的方式做尽量多的覆盖,这样会在测试过程中重新引入主观因素,最后无法避免的造成漏测。

另一方面,还记得前面咱们说过的盲目测试范围缩减会造成漏测的问题么,其实自动化测试也会遇到这个问题,因自动化测试本质上是根据测试的设计去执行的,只是执行手段不一样,当设计出了问题,自动化测试不管再怎么执行还是会遗漏那个问题,所以,自动化测试并没有解决所有的问题。

济南网站建设公司发现,原来自动化测试有这么多不尽如人意的地方,这个道具有一些缺陷,那济南网站建设公司是不是该寻找一些新的道具呢?济南网站建设公司先不揭晓有哪些新道具,济南网站建设公司分析一下济南网站建设公司到底需要些什么?

还记得济南网站建设公司开始说的两个主要矛盾么,第一个矛盾其实就是工作量与资源时间的矛盾,那济南网站建设公司最需要一个工具去指引济南网站建设公司缩小工作量,但是这个缩小要是有依据的,济南网站建设公司需要的这个范围,一定是可以找出所有问题的,这是济南网站建设公司想要的第一个道具。

如果还可以拥有一个道具,济南网站建设公司可以顺着后面自动化的思路来想,自动化是一定要做的,但是自动化中主要的问题需要第二个道具来弥补,这个工具可以告诉济南网站建设公司一个自动化明确的边界,它可以是一个可视化显示,告诉手工人员需要对哪些东西进行补测。

济南网站建设公司既然有了这些愿景,济南网站建设公司就进行了一些调查和思考,济南网站建设公司发现,第一个缩小测试范围的功能需要在代码维度入手,通过开发每次提交的代码差异去分析济南网站建设公司需要测试的范围,济南网站建设公司拿到代码变动去分析测试范围,这就把分析过程做到了有据可依,这也解决了济南网站建设公司开头提到的对系统了解不足的矛盾。

第二个工具是对测试过程进行可视化反馈,这个东西就是代码覆盖率监控,不管是自动化测试还是手工测试,最后都会得到一个可视化的测试报告,就是哪些逻辑跑过了,哪些逻辑还没有跑。

有了这两个理论基础后,济南网站建设公司查找可复用的技术栈时发现已经有了一些比较好的开源工具,济南网站建设公司将这些开源软件进行二次开发,加上自研的DIFF引擎,可以达到济南网站建设公司的预期想法,济南网站建设公司依据这些思路对系统进行了实现,下面这一部分是工具在济南网站建设公司项目当中跑起来以后,过程中的一些实践和收益情况,下面济南网站建设公司大家一起看一下。

首先简单说一下实现思路和使用的技术栈,首先济南网站建设公司代码管理托管在私有的gitlab上,首先济南网站建设公司通过Git Diff命令获取代码差异,当开发修改了代码提交版本后,济南网站建设公司用这个版本和上一个版本进行DIFF,差异信息会告诉你某一段代码哪几行发生了改变。济南网站建设公司通过一些字符处理方式,把这个处理成通用的Json格式的数据,格式大致为某一个JAVA类中哪些行发生了改变。济南网站建设公司分析数据发现这不是济南网站建设公司想要的。因为行没有很好的含义性,济南网站建设公司发现方法是很好的入口,因为一个方法是一个动作,济南网站建设公司其实想知道的是哪些动作发生了变化,然后进行针对性测试。所以济南网站建设公司需要对它进行转化,在转化的过程中用到了AST(抽象语法树),抽象语法树的简称是AST,这是一个可以把静态代码实例化成树状结构的工具,这个树状结构的每一个节点都是一个语法结构,方法,行,甚至注解都是语法树的一个节点。都可以方便的进行分析和处理,济南网站建设公司通过语法树可以拿到每一个方法行范围,大家知道上一步已经拿到了差异行号,济南网站建设公司用差异行号去命中所有的方法,当一个行号命中了一个方法,济南网站建设公司把这个方法进行标记,最后济南网站建设公司得到了差异的方法列表,方法是动作,因此,济南网站建设公司知道了哪些动作发生了代码变动,济南网站建设公司需要对这些动作进行覆盖。

看架构图中的红线,是方法的差异列表,济南网站建设公司把数据引出来,然后济南网站建设公司灌到覆盖率监控里,就会得到基于代码变动的覆盖率监控报告。

Jacoco大家如果关注过覆盖率监控,应该都听说过,是JAVA语言里的一个覆盖率监控开源工具,济南网站建设公司对源码进行了二次开发,并与代码差异分析数据结合,下面讲述这两者是如何进行融合的。

首先济南网站建设公司需要简单说一下Jacoco的工作原理,首先Jacoco分为两部分,第一部分是插桩部分,对被测服务进行插装操作,其实就是在每一个逻辑分支插一个探针,当逻辑分支被执行了,探针会变成True,未被执行会保持初始的fals,最后通过探针数据济南网站建设公司就能得到哪些逻辑被执行过了,而哪些逻辑未被执行,下面济南网站建设公司来说Jacoco的第二部分,命令部分,济南网站建设公司可以通过一个jacoco的dump命令远程获取这些探针数据。
Jacoco的工作原理
第二个是merge命令,其实是将多次拿到的探针数据进行合并操作,这个解决了什么问题呢?举个例子当被测服务多次重启,但是重启前做的覆盖数据如果不想丢掉,就需要将它合并到一起,这样能够保证探针数据的完整性,当你拿到完整覆盖率数据以后,最后一步是report命令,这个命令是把覆盖率数据形成一份可视化报告,告诉你整个的项目有多少被覆盖。

接下来就是代码差异信息的引入,济南网站建设公司入手点是在可视化的时候做一个过滤,当执行report命令时,会有一个遍历所有方法生成报告的逻辑,济南网站建设公司会在这个遍历的过程中判断当前方法是否发生改变,如果没有改变济南网站建设公司就剔除掉,最后得到的就是济南网站建设公司需要测试部分的报告了。

梦之网科技
本文网址:http://www.mzwkj.com/qianyue/1009.html

济南梦之网科技:济南网站建设,济南网站设计公司,网站建设开发公司,专业网站制作公司,拥有专业的技术团队,一流的服务团队.专业团队为您提供网站设计,网站定制服务,公众号应用开发,微信小程序开发,为用户提供成套解决方案,智能农业物联网系统

您可能感兴趣