《增量代码实时染色方案的闭环应用-张留涛.pdf》由会员分享,可在线阅读,更多相关《增量代码实时染色方案的闭环应用-张留涛.pdf(48页珍藏版)》请在三个皮匠报告上搜索。
1、增量代码实时染案的闭环应疆软件部落地经验/Tony Zhang本次都有哪些内容?概览:增量代码实时染案挑战:应对多仓库与多模块流程:与DevOps深度结合闭环:如何在作流中解读报告细节:些典型问题未来:挑战和机遇增量代码实时染案案概览什么是代码染代码染:为代码的运状态做颜标记:部分运绿:已运红:未运为什么要增量增量:精准测试,改什么测什么产品峰期,多达个版本并功能分散,交付质量差,靠QA兜底开发测的质量不稳定,漏测频发法在所有版本全量覆盖QA难以圈定测试例范围开发法确认测试全性可以量化的可以精准判断测试范围的技术段项 体量 功能多 全量测 成本当时临的现状问题归因解法为什么要增量基本流程概览演
2、示CompileRuntimeReport成插桩包成染数据成染报告输?输出报告源码字节码染数据JACOCOXML/HTMLCompileCompileRuntimeCompileRuntimeReport插桩产染数据产格式化报告收获 了解DIFF过程了解插桩过程了解插桩之后的字节码收获 了解染数据的收集过程了解染数据的上报过程了解染数据的件结构收获 了解染数据的应了解染数据的合并策略了解报告产的基本过程了解报告的实际运Compile阶段详解应对多仓库与多模块流程概览提取Git信息进DIFF插桩提取Git信息程Git Repo程Git Repo 1Git Repo 2Git Repo Nproj
3、ect 1project 2project 3project 4project Nsource_tree.jsonrepoUrlprojectListkeyvalueMAPgit ls-remote-get-url origingit rev-parse HEAD获得repoUrl获得Commit ID增量信息提取 Git diffrepoA.diff当前 commit ID对 commit IDgit diff and 写件modified files-和 a 代表对件+和 b 代表当前件“+”代表新增/修改“-”代表删除“”是差异结-1,12 源件第1开始的12+1,34 标件第1开始的3
4、4GIT DIFF 是基于本的对,核算法:求最公共序列得到 MapString,Set KEY:每个被修改的件 VALUE:新增的代码数数组正则解析两个产物:增量字节码+源码遍历 projectListval sourceMatches:MutableList by lazy /需要优先检测是否有src/main,如果没有再去检测src mutableListOf(/src/main/java,/src/main/kotlin,/src)val classMatches:MutableList by lazy mutableListOf(/intermediates/javac/,/tmp/k
5、otlin-classes/)字节码检索录源检索录git_dirs.json应DIFF信息增量插桩注字节码Transform Apioverride fun getInputTypes():MutableSet?return TransformManager.CONTENT_CLASSoverride fun getScopes():MutableSet return TransformManager.SCOPE_FULL_PROJECToverride fun isIncremental():Boolean return trueoverride fun transform(transfor
6、mInvocation:TransformInvocation)val instr=Instrumenter(OfflineInstrumentationAccessGenerator()val instrumented=instr.instrument(is,fileIn.name)os.write(instrumented).class 到 dex阶段定义输类型定义作范围是否持增量接收输的件,.class 和 jar两种类型 在此进字节码插桩识别修改的类,节约编译时间 单个类是全量插桩从 1.5.0-beta1 开始,Gradle 插件包含个 Transform API,允许 3rd 插件