上海品茶

您的当前位置:上海品茶 > 报告分类 > PDF报告下载

3-鲁国宁-去哪儿网代码覆盖率落地实践.pdf

编号:152011 PDF 52页 5.17MB 下载积分:VIP专享
下载报告请您先登录!

3-鲁国宁-去哪儿网代码覆盖率落地实践.pdf

1、去哪儿网覆盖率落地实践鲁国宁去哪儿网-测开专家鲁国宁2019至今:去哪儿网,基础架构-基础平台,致力于测试流程的治理,测试工具建设;建设的平台有自动化测试、全链路压测、代码覆盖率、mock平台、精准测试、代码瘦身等。20152019:京东商城,效能研发部,从事性能压测平台建设,实现近亿级qps压测,智能寻点等功能;保障618、双11性能稳定性目录CONTENTS背景01 覆盖率百分百落地实践02 覆盖率指标提升实践03 覆盖率降本增效实践04 总结与展望05 01背景质量体系概念现状决策背景-质量体系A质量体系介绍Bug 代码逻辑异常(80+%);配置异常;其他;故障 异常影响程度 影响时长腐

2、化 无效代码占比质检平台AIOPS瘦身平台质量指标保障手段背景-质量体系A质量体系介绍Bug 代码逻辑异常(80+%);配置异常;其他;故障 异常影响程度 影响时长腐化 无效代码占比质检平台AIOPS瘦身平台质量指标保障手段背景-概念序号序号维度名称维度名称描述描述1类所有类,包括接口,只要其中有一个方法被执行,则标记为被执行。注意:构造函数和静态初始化块也算作方法2方法已定义的函数中有多少被调用3行已经测试了多少行源代码,只要本行有一条指令被执行,则本行则被标记为被执行4分支控制结构的分支(例如 if 语句)中有多少已执行5指令高级语言编译后的字节指令的覆盖率。执行的最小单位;6圈复杂度简单

3、的说就是为了覆盖所有路径,所需要执行单元测试数量,圈复杂度大说明程序代码可能质量低且难于测试和维护。B了解代码覆盖率背景-现状漏测性能问题发布流程慢查询历史bug其他故障分类应用接入:8%发布拦截:1%发布故障:3%功能漏测占比:50%C故障数据背景-决策D决策规划现象 故障多 漏测占比大思路 拦截未测试的发布 覆盖率可以衡量代码测试程度决策 全量拦截 代码覆盖率高于3/4一、覆盖率百分百落地 所有业务线、所有应用使用覆盖率二、覆盖率指标提升 覆盖率拦截指标大于3/402覆盖率百分百落地覆盖率百分百落地-现状问题落地落地8%不想配不能配不知道不想被拦截!使用覆盖率业务异常了测试过了,没有显示。

4、没人告诉我用户免配置无干扰用户覆盖率百分百落地-提炼需求全量落地免配置用户不接入用户不运维无干扰使用无异常抽象需求需求分析方案选型落地实践需求落地权利责任覆盖率百分百落地-覆盖率配置现状能力归属:覆盖率是应用画像的一个属性;操作配置:应用页面、发布页面应用发布打包开启覆盖率启服务加载覆盖率启动后部署阶段需求分析方案选型落地实践用户免配置如何使用覆盖率覆盖率百分百落地-方案对比默认开启,用户不可修改问题:一对多的配置散落在各地,管理员配置也会出现版本不一,运维困难的问题能力转移一对多的关联关系,将覆盖率的权限移交给平台。方案一方案二需求分析方案选型落地实践用户免配置覆盖率百分百落地-全局配置能力

5、转移:应用管理-平台管理应用发布打包启服务应用启动后部署阶段agent环境Agent平台管理用户免配置需求分析方案选型落地实践覆盖率百分百落地-干扰场景干扰用户的场景业务异常发布失败异常定位用户需求不要干扰我工作需求分析方案选型落地实践无干扰用户覆盖率百分百落地-方案介绍常规方案1-排除异常代码A、排除项目:agent的管理平台配置应用跳过覆盖率安装;B、排除路径:配置需要过滤的包路径;需求分析方案选型落地实践无干扰用户覆盖率百分百落地-方案介绍常规方案2-修改业务代码在 Java 中,如果一个对象的某些属性不希望被序列化,可以将这些属性标记为 transient业务开发中,使用反射的正确姿势

6、是添加transform判断。需求分析方案选型落地实践无干扰用户覆盖率百分百落地-方案介绍优雅方案-修改JDK反射思路:1.出问题的方法是反射类;2.如果修改反射的方法过滤$jacoco开头的属性就可以不用业务线再调整;3.ASM修改class字节码,理论上可以修改反射类。classFileClassFileLoadHookClassFileTransformerJVM类加载完成TransFormClassFile需求分析方案选型落地实践无干扰用户需求分析方案选型落地实践无干扰用户覆盖率百分百落地-方案对比方案方案检测缺失检测缺失用户成本用户成本风险风险选择选择排除应用、路径排除应用、路径是中

7、中修改代码修改代码否高中修改反射类修改反射类否无低方案对比选型覆盖率百分百落地-反射异常修复找到方法修改方法生成字节码重定义类 IDEA插件 ASM Bytecode 返回数组过滤$jacoco Tomcat启动前preMain方法重新定义类 JDK8 类:sun.reflect.Reflection 方法:filter无干扰用户需求分析方案选型落地实践覆盖率百分百落地-反射落地坑点JDK8sun.reflect.Reflection问题:反射类路径不同、反射方法参数不同方案:Class.forName判断路径;getDeclaredMethod校验方法问题:Jacoco自己也用反射,过滤后无

8、法工作方案:设置线程名称,识别agent时不过滤自身反射不同JDK问题:多jdk版本使用一个agent出现编译问题,java不向上兼容jdk版本;方案:使用最低版本编译;编译版本JDK11/17Jdk.internal.reflect.Reflection无干扰用户需求分析方案选型落地实践覆盖率百分百落地-平台示意图覆盖率百分百落地-落地数据8%-100%1%-30%50%-45%使用覆盖率应用开启拦截应用漏测故障比例03覆盖率指标提升覆盖率指标提升-拦截指标提升痛点75%代码行覆盖全量拦截关键动作用户吐槽 只修改了A,只测试增量代码不行吗?我测试过,覆盖率为什么没有了?测试 只修改了日志还让

9、我测试,有病吗?为什么不收集本地的覆盖率?开发效率低抽象需求增量追加左移落地过程需求分析方案选型落地实践010203覆盖率指标提升-提炼需求覆盖率指标提升-拦截有效变更有效变更修改方法:调整业务逻辑新增方法无效变更观测类:添加、修改日志、监控;注解类:修改注解、注释不合理;用户期望增量代码有哪些?变更方法:仅统计方法分支变更行:仅统计变更行;不测试需求分析方案选型落地实践增量计算覆盖率指标提升-增量方案选型方案功能成本计算性能赋能选择修改插桩仅变更1、适配内部类、语法;2、统计变更行;1%不支持精准测试修改计算全量与变更1、统计变更行;10%支持精准测试方案对比需求分析方案选型落地实践增量计算

10、修改计算:全量插装,计算时识别是否只计算增量方法,添加方法过滤。方案介绍修改插装:使用前仅对变更的方法进行插装,实现未变更方法不参与计算效果。覆盖率指标提升-增量计算过程计算透传变更方法与行Jacoco计算展示新增统计类CoverageNodeImpl报告HTMLFormatter#createTableSourceNodeImpl#incrementLine变更行方法匹配变更源码与class匹配变更方法签名与源码匹配ClassAnalyzer#visitMethod变更方法变更类 有效变更:Git diffEclipse AST 源码解析无效过滤日志、监控 提效:复制变更class到新目录

11、多模块:Pom解析module,jar包复制增量计算需求分析方案选型落地实践覆盖率指标提升-增量页面展示增量计算需求分析方案选型落地实践覆盖率指标提升-不能追加的场景testA方法,历史数据追加;testB方法,历史数据废弃;修改方法需要合并的方法有哪些用户期望需求分析方案选型落地实践数据追加覆盖率指标提升-数据追加思路原理分析解决思路Jacoco有方法覆盖率计算时可以获取到方法插桩数据按方法存储数据需求分析方案选型落地实践数据追加覆盖率指标提升-数据追加实践未变更类变更类未变更方法合并数据 分支Diff之前发布版本 未变更类数据直接使用 Eclipse AST解析源码方法 Jacoco计算获

12、取方法数据 存储 完成方案落地(需要合并的方法=全集方法 变更的方法)数据追加需求分析方案选型落地实践覆盖率指标提升-本地有效测试测试左移的工作本地化测试单元测试现状本地化数据收集;单侧数据收集;需求本地化基建需求分析方案选型落地实践数据左移覆盖率指标提升-本地数据收集方案方案思路本地安装Agent提供数据上报接口合并覆盖率数据Maven插件加载Qjacoco单侧执行结束回调上报数据生成报告单元测试本地tomcat启动Qjacoco加载测试环境配置加载上报数据生成报告本地化需求分析方案选型落地实践数据左移覆盖率指标提升-本地数据收集实践本地化数据收集数据左移需求分析方案选型落地实践覆盖率指标提

13、升-对外赋能PMO0302自动化测试Qunit质量检测03业务域梳理02CR01精准测试覆盖率指标提升-落地数据近一年发布故障漏测占比发布故障3.8%0.4%50%25%04覆盖率降本增效现状分析解决方案落地效果覆盖率降本增效-现状分析功能组成成本统计编译文件class45%覆盖率文件10%源码文件40%报告文件5%下载实时下载下载生成计算存储:业务应用接入数:300个;覆盖率平台实例:10个;一年占用磁盘:19T;计算:CPU利用率:7%效率统计分支覆盖率生成:5.6s;单次发布生成:3.8s;下载占比:50%;加载占比:15%;计算占比:10%;报告生成:25%;现状分析解决方案落地效果覆

14、盖率降本增效-现状分析磁盘占用大原因定位编译文件:重复问题源码文件:.git较大待解问题Git commit sha值匹配,重复的发布使用已有编译文件git clone-depth=1 仅下载本次源码清理30天之前的数据,使用时下载解决方案现状分析解决方案落地效果覆盖率降本增效-性能优化1、下载慢:下载时连接耗时支持;并发下载覆盖率数据支持;2、计算慢3、报告生成慢待解问题1、下载:Socket连接等待调整并发时解决jacoco的map并发问题2、计算慢:只计算变更类3、报告:异步报告解决方案监控平台查看耗时差的模块;Bistory 查看耗时长的方法耗时长方法查询现状分析解决方案落地效果覆盖率降本增效-现状分析接入应用3000+生成报告:0.78s实例数:2总磁盘:2.5T效果数据接入量:扩大10倍效率性能:提升10倍现状分析解决方案落地效果05总结&展望覆盖率降本增效-现状分析百分百落地提升覆盖降本增效高ROI-平台痛点低故障-用户痛点0到1-无感知未来展望行存储行存储云开发云开发领域配置领域配置感谢聆听关注QECon公众号

友情提示

1、下载报告失败解决办法
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站报告下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。

本文(3-鲁国宁-去哪儿网代码覆盖率落地实践.pdf)为本站 (2200) 主动上传,三个皮匠报告文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三个皮匠报告文库(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。
会员购买
客服

专属顾问

商务合作

机构入驻、侵权投诉、商务合作

服务号

三个皮匠报告官方公众号

回到顶部