建议: 开发使用diff覆盖率工具; 根据代码diff进行分析, 也是qa的基本功之一覆盖率结果没有标准覆盖率结果没有标准, 不同项目覆盖率差异较大。 建议: 目前还是以经验为主, 只要经过认真仔细的分析来补充case就好, 覆盖率数据大小不重要不同项目覆盖率差异较大。 建议: 目前还是以经验覆盖率分析投入大, 效果不明显, 不如做好测试设计和code review。 建议: 一个是事前的设计, 一个是事后的验证, 两个不是只能选其一的关系,而是可以共同存在的。 Q&AQ&A16 白 盒测试与代码覆盖 插桩技术1. 字节码插桩: On-the-fly( java agent)JVM –javaagent指定特定的 jar文件启动插桩代理程序;装载class过程中将统计指令插入class文件。2. 字节码插桩:On-the-fly(Class Loader)自定义classloader实现自己的类装载策略, 在加载到JVM前修改字节码3. 字节码插桩:测试前对class或者jar包插桩, 测试插过桩的class和jar包Offline插桩4. 源码插桩源代码插桩: 将统计代码插入源代码并编译成新的.class文件5. Runtime profiling应用JAVA的JVMPI、 JVMTI的接口实现代码覆盖技术 及实践代码覆盖实践1. 工具调研JaCoCo:支持java agent的on-the-fly, ASM修改字节码。 确定代码覆盖实践工具。EMMA:不支持分支覆盖, 支持class Loader的on-the flyC bCobertura:offline插桩tffli插桩2. 应用 效果核心class自动化行覆盖率70%左右完成6个核心接口的代码覆盖分析,补充55个case, 系统框架、 存储策略和接口流程逻辑图定性成果: QA深入理解产品, 辅助测试范围和影响定位、 bug定位能力等。字节码技术开源ASM, Javassist字节码操作框架根据class规范修改字节码Probe探针探针: 字节指令集, 探针记录执行行为, 探针不能改变原有代码的行为插入规则: 顺序指令、 非条件跳转指令、 条件跳转和退出方法插入指令规则 JUnit4单元测试技术1. Junit Annotation和反射Annotation: 提供给与程序元素关联任何信息或者任何元数据的途径。通过反射机制提取Annotation。2. JUnit生命周期@BeforeClass、@Test、 @After、3. JUnit 断言 Hamcrest : 书写匹配器对象时允书许直接定义匹配规则的框架。assertThat: 使用Hamcrest 的Matcher匹配符灵活定义断言测试构建1. Maven构建项目构建、 依赖管理和项目信息管理工具定义测试项目的pom.xml文件, 确定依赖jar包远程仓库, 构建测试工程2. Maven生命周期Clean Lifecy、Site Lifecycle@Before、@AfterClass单元测试技术 及实践Mock技术