




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 个人知识管理平台下共享资源的个性化推荐个人知识管理平台下共享资源的个性化推荐 王蕾王蕾 2013 Sina Weibo.JAVA代码覆盖工具 大纲大纲代码覆盖的意义代码覆盖的意义1 JAVAJAVA常用常用覆盖工具2工具的工作原理工具的工作原理32实例与问题实例与问题4 3代码覆盖的意义代码覆盖的意义p使用目的使用目的n发现手工/自动化测试的遗漏点,并补充casen作为手工测试、UT及qa自动化测试全面性的衡量标准p使用范围使用范围n RD使用衡量单测覆盖率nQA使用衡量测试覆盖率p使用方式使用方式n 手工测试中,通过环境搭建使用覆盖率工具n持续集成中,通过hudson插件根据自动化执行情况
2、生成覆盖率n自动化case开发中,通过eclipse的覆盖率插件使用pJAVAJAVA常用覆盖率工具常用覆盖率工具n Emma、Cobertura、Jacoco J A V AJ A V A 常 用 覆 盖 工 具常 用 覆 盖 工 具jacocojacocoemmaemmacoberturacobertura原理原理使用asm修改字节码可以修改Jar文件、class文件字节码文件基于jcoverage。基于ASM框架,对class 插桩覆盖粒度覆盖粒度方法,类,行,分支和指令覆盖语句、行、类、基本块、指令。无分支覆盖。项目,包,类,方法的语句覆盖和分支覆盖插桩插桩支持on-the-fly和o
3、ffline的插桩模式支持on the fly模式和offline采用Offline模式,把统计代码插入编译好的.class文件生成报告生成报告在tomcat的catalina.sh中配置-javaagent参数,指出要采集覆盖率的文件。默认在shutdown时才能收集覆盖率数据。html、xml、txt、二进制格式报表生成HTML或xml报告缺点缺点1、需要debug版本、并打开build.xml中的debug编译项2、需要源代码。必须与插桩的代码完全一致1、不能捕获测试案例中未考虑的异常2、关闭服务器才能输出覆盖率信息的结果(已有修改源代码的解决方案,定时输出结果)3、输出结果之前设置了h
4、ook,会与某些服务器的hook冲突。4、Web测试中需要将cobertura.ser文件来回copy性能性能快比较小插入的字节码信息更多 执行方式执行方式Ant/maven命令行maven,ant 或命令行jenkins集成集成生成html报告,直接与hudson集成,展示覆盖率报告。无趋势图无法与hudson集成有现成的插件,有美观的报告,并有趋势图报告实时性报告实时性默认在shutdown时收集覆盖率数据;可动态从jvm dump出数据。可以不关闭tomcat 就得到覆盖率报告默认是在shutdown服务器时才写覆盖率文件 覆 盖 率 基 本 概 念覆 盖 率 基 本 概 念p行覆盖率行
5、覆盖率n度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行。p类覆盖率类覆盖率n 度量计算class类文件是否被执行p分支覆盖率分支覆盖率n 度量if和switch语句的分支覆盖情况。计算一个方法里面的总分支数,确定执行和不执行的分支数量。被执行(绿色方块)p方法覆盖率方法覆盖率n 度量被测程序的方法执行情况,是否执行取决于方法中是否有至少一个指令被执行。p指令覆盖指令覆盖n计数单元是单个java二进制代码指令。指令覆盖率提供了代码是否被执行的信息,度量完全独立源码格式。p圈复杂度圈复杂度n在(线性)组合中,计算在一个方法里面所有可能路径的最小数目。缺失的复杂度同样表示测试
6、案例没有完全覆盖到这个模块 6覆盖工具工作过程覆盖工具工作过程p工作过程工作过程n字节码插桩的过程n执行测试用例,收集程序执行轨迹的信息,将其dump出内存n数据处理:覆盖率信息分析计算的过程n数据显示:生成覆盖率报告的过程 pOn-the-flyOn-the-fly插桩插桩 (java agentjava agent)nJVM中通过 javaagent参数指定特定的 jar 文件启动 Instrumentation 的代理程序。 n代理程序在每装载一个class前判断是否转换修改class文件,将统计代码插入.class。测试覆盖率分析可以在JVM执行测试代码的过程中完成n典型代表:jaco
7、co。 插桩原理插桩原理pOn-the-flyOn-the-fly插桩插桩:Class Loader:Class Loadern自定义classloader实现自己的类装载策略,在加载到JVM前修改字节码n典型代表:emma 8插桩原理插桩原理pOfflineOffline插桩插桩n在测试前先对文件进行插桩,然后生成插过桩的class或jar包,测试插过桩的class和jar包后,会生成动态覆盖信息到文件,最后统一对覆盖信息进行处理,并生成报告。noffline插桩(Instrumentation)又分为两种:Repace:修改字节码生成新的class文件Inject:在原有字节码文件上修改n
8、典型代表: coberturapSource InstrumentationSource InstrumentationnSource Instrumentation(源代码插桩):把统计代码插入源代码并编译成新的.class文件pRuntime profilingRuntime profilingn应用JAVA的JVMPI(虚拟机监视程序接口)、JVMTI( Java 虚拟机工具接口)的接口实现。 pOn-the-flyOn-the-fly和和offlineoffline比较比较nOn-the-fly模式更方便简单进行代码覆盖分析,无需提前进行字节码插桩,无需考虑classpath 的设置n
9、存在如下情况不适合on-the-fly,需要采用offline提前对字节码插桩运行环境不支持java agent部署环境不允许设置JVM参数字节码需要被转换成其他的虚拟机如Android Dalvik VM动态修改字节码过程中和其他agent冲突无法自定义用户加载类 插桩原理插桩原理 插桩方法插桩方法p插桩方法插桩方法n无论是静态还是动态,插桩都涉及到修改二进制文件的字节码问题。p怎么修改字节码怎么修改字节码n开源工具asm,Javassist等n根据class规范修改p何时修改字节码何时修改字节码nOn the fly模式定义用户类装载器,实现自己的类装载策略定义一个java agent:在
10、类加载到虚拟机前先对其进行插桩nOffline模式:在执行测试前replaceinject 1.实例实例public static void example() a(); if (cond() b(); else c(); d();2.编译后的字节码编译后的字节码public static example()V INVOKESTATIC a()V INVOKESTATIC cond()Z IFEQ L1 INVOKESTATIC b()V GOTO L2 L1: INVOKESTATIC c()V L2: INVOKESTATIC d()V RETURN3.Probe探针探针探针是字节指令集能
11、被插入java方法中,探针执行行为被记录,探针不能改变原有代码的 行为示例该方法控制流图插入探针前后的对比实例实例-JACOCO-JACOCO原理原理 4.探针插入规则探针插入规则探针插入在方法控制流图的边上理论上任何一条边都可以插上probe,但是会引发大量的指令,增加class file大小,降低插桩后的class执行效率探针插入规则如有 简单顺序指令之间插入一个probe非条件的GOTO指令前插入probe在RETURN,throw等语义退出方法前插入probe反转操作语义,在满足条件跳转的后方添加probe conditional jump.实例实例-JACOCO-JACOCO原理原理
12、 实例实例-JACOCO-JACOCO配置配置3.通过通过exec文件生成报告文件生成报告 -V4模块覆盖率模块覆盖率 -engine模块覆盖率模块覆盖率 - On-the-fly 模式模式build.xml示例示例1. 配置配置on-the-fly在类加载时插桩在类加载时插桩JAVA_OPTS=xxxx -javaagent:/usr/home/wenping1/jacoco/lib/jacocoagent.jar=includes= *2.实时实时 dump出覆盖率数据出覆盖率数据JAVA_OPTS=xxxx -javaagent:/usr/home/wenping1/jacoco/lib
13、/jacocoagent.jar=includes= *,output=tcpserver,port=10001,address=57“ 实例实例-JACOCO-JACOCO配置配置poffline offline 模式模式build.xmlbuild.xml示例示例n配置instrument task n执行ant instrument插桩,将插桩后的class部署到测试环境n收集exec数据收集同on-the-flyn产出报告同on-the-fly 代 码 覆 盖 问 题代 码 覆 盖 问 题p覆盖率分析碰到的问题覆盖率分析碰到的问题nqa能力要求较高。建议:对于能力不高
14、的团队,建议一方面提高能力,另一方面暂时让rd帮忙分析n手工测试中,对于新项目,测试覆盖率数据比较可靠。但对于升级项目,rd只是增改部分函数和代码行,这时覆盖率不能反应升级功能的测试效果。 建议:开发使用diff覆盖率工具;根据代码diff进行分析,也是qa的基本功之一n覆盖率结果没有标准,不同项目覆盖率差异较大。建议:目前还是以经验为主,只要经过认真仔细的分析来补充case就好,覆盖率数据大小不重要n覆盖率分析投入大,效果不明显,不如做好测试设计和code review。建议:一个是事前的设计,一个是事后的验证,两个不是只能选其一的关系,而是可以共同存在的。 16Q&A 白盒测试与代
15、码覆盖 p插桩技术插桩技术 1. 1.字节码插桩:字节码插桩:On-the-flyOn-the-fly(java agentjava agent)nJVM javaagent指定特定的 jar文件启动插桩代理程序;装载class过程中将统计指令插入class文件。 2. 2.字节码插桩:字节码插桩: On-the-fly(Class Loader)On-the-fly(Class Loader)n自定义classloader实现自己的类装载策略,在加载到JVM前修改字节码 3. 3.字节码插桩:字节码插桩: OfflineOffline插桩插桩n测试前对class或者jar包插桩,测试插过桩的
16、class和jar包 4. 4.源码插桩源码插桩n源代码插桩:将统计代码插入源代码并编译成新的.class文件 5.Runtime profiling 5.Runtime profilingn应用JAVA的JVMPI、JVMTI的接口实现代码覆盖技术及实践代码覆盖技术及实践p代码覆盖实践代码覆盖实践 1. 1.工具调研工具调研nJaCoCo:支持java agent的on-the-fly,ASM修改字节码。确定代码覆盖实践工具。nEMMA:不支持分支覆盖,支持class Loader的on-the flynCobertura:offline插桩 2. 2.应用效果应用效果n核心class自动化
17、行覆盖率70%左右n完成6个核心接口的代码覆盖分析,补充55个case,系统框架、存储策略和接口流程逻辑图n定性成果:QA深入理解产品,辅助测试范围和影响定位、bug定位能力等。p字节码技术字节码技术n开源ASM,Javassist字节码操作框架n根据class规范修改字节码pProbeProbe探针探针n探针:字节指令集,探针记录执行行为,探针不能改变原有代码的行为n插入规则:顺序指令、非条件跳转指令、条件跳转和退出方法插入指令规则 pJUnit4JUnit4单元测试技术单元测试技术 1.Junit Annotation 1.Junit Annotation和反射和反射nAnnotation
18、:提供给与程序元素关联任何信息或者任何元数据的途径。n通过反射机制提取Annotation。 2. 2. JUnit JUnit生命周期生命周期nBeforeClass、 Before、 Test、After、 AfterClass 3. 3. JUnit JUnit 断言断言n Hamcrest :书写匹配器对象时允许直接定义匹配规则的框架。nassertThat:使用Hamcrest 的 Matcher匹配符灵活定义断言p测试构建测试构建 1.Maven 1.Maven构建构建n项目构建、依赖管理和项目信息管理工具n定义测试项目的pom.xml文件,确定依赖jar包远程仓库,构建测试工程 2.Maven 2.Maven生命周期生命周期nClean Lifecy、 Clean Lifecycle 、 Site Lifecycle单元单元测试测
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 箱包制作中的精细工艺与品质控制考核试卷
- 石油产品销售渠道整合考核试卷
- 核电工程质量控制与管理考核试卷
- 皮革服装色彩搭配技巧考核试卷
- 洗浴服务智能化发展考核试卷
- 皮革制品生产过程中的生态环境保护考核试卷
- 民居建筑设计汇报
- 坚果种植的农业环境保护考核试卷
- 守护童心 共建和谐-幼儿园防欺凌安全教育
- 建筑装饰施工安全教育
- 2024年山东省济宁市中考生物试题卷(含答案解析)
- 健合集团在线测评原题
- 公路工程标准施工招标文件(2018年版)
- 个人理财-形考作业4(第8-9章)-国开(ZJ)-参考资料
- DL∕T 1654-2016 磷酸酯抗燃油氧化安定性和腐蚀性试验方法
- AQ/T 2059-2016 磷石膏库安全技术规程(正式版)
- 青岛超银中学2022-2023学年七年级下学期阶段性调研地理试题【带答案】
- 2024年安徽省初中(八年级)学业水平考试初二会考生物+地理试卷真题
- 4000m3d制药废水计算书
- 越剧古装衣介绍
- 人事行政工作成功典范总结
评论
0/150
提交评论