安卓手机做单手机兼职一单60元

平心在线官网 208 1

作者安卓手机做单:yingsong安卓手机做单,腾讯PCG工程效能平台部

| 导语 你是否在编写Android单元测试用例时被繁杂的数据构造和断言所折磨?如果是安卓手机做单,那么Android单测生成工具可能正是你所需要的。这款工具提供了包含路径分析、测试数据构造、及断言验证等核心能力安卓手机做单,最终实现了单测用例的一键生成。心动不如行动,快来试试吧!

一、背景及工具简介1.1 背景

单元测试主要原理是对源代码中的控制结构和处理过程等进行分析,检查程序内部处理是否正确,包括语句结构、分支和循环结构的路径分析、参数以及断言的构造。随着devops的不断深入,需要高效的编写单元测试。那么面对庞大的存量代码,如何高效的编写单元测试呢?针对这个痛点,我们开发了这款Android单测自动生成工具,下面进行具体介绍。

1.2 工具简介1.2.1 工具能做什么?

工具可以自动批量生成Android单元测试case,对于java文件或kotlin文件类中的方法,支持包含路径分析、测试数据构造及断言验证的一键生成,替代了原有的人工阅读分析代码和手工构造数据。    

对于java被测代码,工具支持两种生成单测方式,包含条件构造和录制回填安卓手机做单;对于kotlin被测代码,工具目前支持生成单测用例模板。

1.2.2 工具是如何工作的?

工具以IDE插件形式存在,适用于android客户端,安装以后,可以直接使用。

1.2.3 工具能带来什么好处?

① 为增量和存量场景单测用例的编写提效; ② 提高单元测试覆盖率; ③ 在代码版本回归测试中,工具通过路径分析能帮助更快定位代码变动引入的问题,降低维护成本;

二、整体思路

前面已经提到工具的目的是要替代原有的人工阅读代码、路径分析、手工构造测试数据的工作。

这要求工具能够做到以下两点:① 自动分析路径,效率更高,避免人工分析可能造成的路径覆盖不全的问题;② 采用某种方式构造测试数据,无需用户手工介入。基于这两点,将开发人员对一个方法撰写单元测试代码的过程进行拆解,各关键步骤如图所示:

安卓手机做单手机兼职一单60元-第1张图片-平心在线

将整个过程抽象为确认被测方法->分析被测代码->构造测试数据->生成测试代码4个过程。

确认待测试方法:本次提交的代码中,结合函数属性(构造方法无需编写单测)、修改内容(测试代码无需编写单测)。分析代码:静态分析被测方法的代码,如路径、参数(输入参数、内部依赖其它依赖参数)、返回值等信息。构造测试数据:自动构造被测方法所需的用例数据,无需人工参与。生成测试用例:自动生成测试被测方法的代码,无需人工参与。 解决思路的关键是通过语法树分析等白盒技术来实现一键分析路径、构造满足路径的测试数据,真实模拟开发人员撰写单元测试代码。三、实现方案

基于上一节分析,整个技术方案设计如下图所示,本节重点介绍路径生成、条件构造的实现方案。

安卓手机做单手机兼职一单60元-第2张图片-平心在线

3.1 路径生成方案3.1.1 路径生成背景

在生成用例时,需要对被测方法的路径进行完备的覆盖,则需要路径生成。当前业界方案主要是基于编译后的字节码来识别跳转语句,找到代码块之间的跳转关系,获得可执行路径。业界方案有两个不足:一是源码必须编译成字节码,有时甚至要编译整个模块或工程,非常耗时,使用不便;二是基于字节码生成的路径可读性不够好,跟源码的分支难以一一对应。

由于业界方案的不足,我们需要考虑其他更优的方案。经过分析和调研,我们实现了一个基于基本块的路径生成算法,有效的解决了这个问题。

3.1.2 路径分析方案

基于基本块的路径生成算法原理:对目标源码进行静态分析,识别跳转指令和停机指令,划分程序的基本块,构造基本块有向图,然后根据对基本块有向图的遍历获得程序的可执行路径,最后根据语义分析,去除包含互斥条件的路径,即可得到被测方法的有效可执行路径。核心流程如下图:

安卓手机做单手机兼职一单60元-第3张图片-平心在线

3.1.3 路径优选算法

当一个方法比较复杂、分支条件较多时,基于基本块的路径生成算法生成的有效路径可能会非常多,甚至达到几百条,如果真的生成了几百条case,不管对于看的人还是后面代码改动的维护,都会是非常大的工作量。另外,出于圈复杂度和可测性角度考虑,这种方法很大可能是需要被改善的,这个时候该怎么办呢?   

经过调研,我们对可执行路径提出一个优先级的概念,同时通过对业务代码和开源代码的模型分析,我们得到结论:一条路径包含的分支越多,越有可能有单元测试覆盖它,它的优先级越高。    

根据上述结论,我们实现了一个路径优选算法:    

假设基于基本块的路径生成算法生成的有效路径为m条,设定一个临界值n。    

① 当m<=n时,完全生成路径,在满足行覆盖的同时,尽可能满足分支覆盖;  

② 当m>n时,启用路径优选算法,首先m条路径进行优先级排序,然后按优先级从高到底选出可执行路径,当选择到的可执行路径已经使被测方法的行覆盖率达到100%时,则停止选择。    

通过路径优选算法,我们最终获得了有效的可执行路径,并根据有效可执行路径生成单元测试用例模板。

安卓手机做单手机兼职一单60元-第4张图片-平心在线

3.2 条件构造方案3.2.1 最佳构造条件筛选

条件构造是基于对路径分析后每一条路径的进入逻辑条件进行静态分析,结合mock框架构造使得该逻辑条件满足为真时的代码片段。

以如下条件举例,阐述工具条件构造方案。

"Acct1 == a.b() && (Acct2 == c.d() || Acct3 == a.b()) || Acc4==5"

可见条件中有四个子条件expr1、expr2、expr3和expr4,

`expr1 && (expr2 || expr3) || expr4`

每个条件取值为(true / false),那么工具会对条件取值进行全排列,得到以下结果:

安卓手机做单手机兼职一单60元-第5张图片-平心在线

最少 ② 成本最小构造原则: 表现形式:字面量 > 方法调用 来源:属性、参数 > 局部变量 基于原则① :得到最佳构造条件为编号2的情况:

{expr1=0, expr2=0, expr3=0, expr4=1} : true

即需要构造的条件为

Acc4==53.2.2 条件构造数据

上节中筛选出最佳构造的条件后,本节介绍如何构造满足条件的代码,大致分为以下几个步骤: ① 获得进入用例路径的最佳条件; ② 分析条件左右两侧对象的来源和表现形式,建立数据构造策略; ③ 生成条件构造的mock代码; 第①步上节已有阐述,本节主要阐述第② 步和第③步。 分析条件左右两侧对象的来源和类型的流程图如下:

安卓手机做单手机兼职一单60元-第6张图片-平心在线

四、demo展示

接下来,本文将分别介绍2种demo包括:「生成java单测case(条件构造)」和「生成java单测case(录制回填)」。

4.1 功能一:生成java单测用例(条件构造)demo

被测方法有2条路径,便生成了2条case。

安卓手机做单手机兼职一单60元-第7张图片-平心在线

展开case信息:

安卓手机做单手机兼职一单60元-第8张图片-平心在线

生成的java测试case包含:被测路径信息,参数准备,条件构造、方法调用和断言。4.2 功能二:生成java单测用例(录制回填)4.2.1 「录制回填」简介

录制回填分为录制用户真实数据和将数据回填两个过程。

安卓手机做单手机兼职一单60元-第9张图片-平心在线

   录制和回填的过程是独立的。用户A录制app数据后,会存储至后台服务db,等到用户B需要生成相关case时,请求回填数据,会根据case路径去匹配已录制的数据,找到最佳匹配的数据来进行回填。

4.2.2 「录制回填」生成java单测用例demo

步骤一:录制数据 将录制和回填配置好后,将app重新编译打包至手机,进行用户操作,使代码走到想要录制的类,即可采集实时数据。 步骤二:生成case

安卓手机做单手机兼职一单60元-第10张图片-平心在线

数据匹配回填是在生成case的过程中完成的,用户无需介入。

五、落地效果

① 提效:实践统计,以往人均每天编写单测50+条,试用工具后人均每天编写可达110+条。且在业务6700条单测中验证,自动生成约50%的单测用例可直接运行通过(基本无需人工介入)。对于不可直接运行通过的,因为也构造了数据,调用方法,及断言的代码,只需要【少量修改】也可执行。 ② 高覆盖:工具生成的单测满足覆盖路径100%。 ③ 接入门槛低:只需安装插件即可使用; ④ 适配性强:目前本方案已经为多个业务生成多条单测用例,已经超过6700条合入到主干中在日常mr中进行单元测试。

六、总结

工具探索出了基于路径分析、测试数据构造、及断言验证代码的一键生成Android单元测试的通用方案。欢迎大家一起交流探讨和使用本工具!

标签: 安卓手机做单

发表评论 (已有1条评论)

评论列表

2022-04-15 10:44:15

存量代码,如何高效的编写单元测试呢?针对这个痛点,我们开发了这款Android单测自动生成工具,下面进行具体介绍。1.2 工具简介1.2.1 工具能做什么?工具可以自动批量生成Android单元测试case,对于java文件或kotlin文件类中的方法,支持包含路径分析、测试数据构造及断言验证的一