1.实战|Java 测试覆盖率 Jacoco 插桩的源码不同形式总结和踩坑记录
2.代码测试方式和工具
3.JaCoCo 助您毁灭线上僵尸代码 | 京东物流技术团队
4.精准测试之过程与实践 | 京东云技术团队
5.关于代码覆盖率(Code Coverage)
实战|Java 测试覆盖率 Jacoco 插桩的不同形式总结和踩坑记录
本文为霍格沃兹测试学院优秀学员对 Jacoco 的总结和对使用过程中可能遇到的坑点记录。测试开发进阶学习,解析文末加群。源码一、解析概述
测试覆盖率是源码老生常谈的话题。本文主要关注Java后端的解析rz 源码测试覆盖率。由于历史原因,源码公司基本不做单元测试(UT),解析因此我们更关心手工执行、源码接口执行(人工使用Postman等)、解析接口自动化、源码WebUI自动化对应用系统的解析覆盖度。
尽管Jacoco已流行多年,源码各种文档和帖子描述得很详细,解析但大多数文章都是源码针对特定形式的总结和使用方法。负责整个公司项目的覆盖率任务的人们需要一一研究和应对,经历多次入坑、出坑。
今年上半年负责公司不同类型的项目覆盖率统计技术的适配,对不同形式的项目有了一定的了解,记录下来,希望对他人有所帮助。本文由个人能力有限、表达能力有限所写,如有错误,欢迎指正。
二、投入覆盖率之前的spring aop的源码分析思路
了解了Jacoco的部分机制,知道它提供了许多强大的功能,以满足不同形式的项目需求。Jacoco提供了API,可以屏蔽不同类型项目带来的困扰。
官方API示例地址:Jacoco.org/Jacoco/trunk...
使用API进行操作的好处包括:
屏蔽不同方式的构建部署。若想将此功能集成到平台中,API无疑是很好的方式。只需将Jacoco插桩到测试服务器上,暴露TCP IP和端口,剩余提取代码执行数据、生成覆盖率报告,就可以统一方式执行。Jacoco官方提供了Maven插件方式、Ant的XML方式,均有对应的dump和report进行覆盖率数据的dump和报告生成。三、项目梳理
公司是个老牌公司,项目杂乱无章,技术五花八门,至今仍有使用JDK6的项目。影响Jacoco使用过程的因素可能包括:
JDK版本:公司使用JDK6、7、8,JDK6是个分水岭,其他版本基本可用JDK8适配。构建方式:Maven构建、ANT构建,有卡拉发卡平台源码也有使用Gradle的可能。启动方式:Java -jar启动、通过命令行启动、使用Tomcat启动WAR包(打包方式灵活)。部署场景:线上部署、测试部署、开发部署可能采用不同方式,开发者多倾向于使用插件方式启动,因为快速且集成IDE。四、Jacoco插桩的本质
Jacoco介入部署过程的本质是插桩,可以是编译时插桩或运行时插桩。选择on-the-fly模式。
本质在于,在应用启动过程中,让Jacoco相关工具介入部署过程,即介入class文件的加载,在加载class时动态改变字节码结构,插入Jacoco的探针。以TCPserver方式进行插桩,应用启动时在端口上开启TCP服务,接收执行覆盖率信息并保存。提供API连接TCP服务,进行覆盖率数据的dump操作。
五、不同形式的插桩配置
介入启动过程需要一个jar包:Jacocoagent.jar。配置需要介入的空间视频网站源码jar包路径、过滤class文件、TCPserver端口号、访问地址等。针对不同启动方式,需要在相应的启动参数中加入配置,如在java命令、war包启动、Maven命令、ANT构建、Java -jar启动时加入相应的配置参数。
六、注意事项汇总
在配置过程中,需注意端口管理、变量作用域、代码适配性等问题,确保配置的正确性和兼容性。
七、说给想做平台的你
对于想做增量覆盖率的平台,需要自动化配置,集成devops平台,规划端口,使用API进行数据收集,确保不同启动方式的兼容性。
八、一些坑
在配置Ant构建时,确保compile阶段配置正确,避免数据无法注入。js控制左右切换源码在多服务器部署负载均衡时,需要循环连接不同服务器的IP:port进行数据收集。确保编译环境的一致性,可以使用sftp下载代码。注意数据的及时保存和收集,防止覆盖率数据丢失或不准确。
九、补充API相关代码覆盖率数据的获取
可以封装覆盖率数据生成报告时所需的属性,如数据文件、源码、class文件等,生成报告时自动获取这些信息。若需要具体实现代码示例或获取更多代码,请参阅GitHub仓库。
十、总结
本文是对Java端覆盖率探索的细化总结,参考了相关资料和课程。期待与大家分享和探讨,共同进步。
代码测试方式和工具
代码测试方式和工具有哪些?
代码测试方式主要分为手动审查和工具扫描。手动审查是指开发者逐行阅读和检查代码,寻找可能的问题,比如代码风格错误、未使用的变量、潜在的安全漏洞等。工具扫描则使用自动化工具对代码进行快速、大规模的检查,这些工具能够识别出常见的编程错误、模式匹配问题以及不符合编码规范的地方。
静态分析工具是代码测试的重要工具,例如 SonarQube、PMD、FindBugs、ESLint、JSHint 等。它们可以分析源代码,生成详细的报告指出潜在问题。代码覆盖率工具如 JaCoCo、Cobertura 等,确保代码覆盖所有预期的功能和边缘情况,帮助查找未测试部分的缺陷。
静态类型检查器如 TypeScript、Java 的 Type Checking 等,帮助发现类型错误。安全审计工具如 OWASP ZAP、Sonatype Nexus 等,专门针对安全问题,检测敏感信息泄露、SQL 注入等风险。
持续集成/持续部署(CI/CD)中的自动化测试,在构建流程中集成代码审计,确保每次提交都经过严格的代码质量检查。代码异味检测工具能检测不良设计习惯或编码风格问题。
动态代码分析(Dynamic Code Analysis, DCA)与静态代码分析(SCA)不同,DCA 工具在代码执行时监测其行为,以识别运行时的安全问题,例如运行时的内存泄漏、缓冲区溢出等。
利用开源工具,如 Semgrep,可以获取针对多种编程语言的规则集合。对于自动化代码审计工具,它们通常具备管理误报(False Positives)和漏报(False Negatives)的机制,以提高审计的准确性。
JaCoCo 助您毁灭线上僵尸代码 | 京东物流技术团队
随着业务系统的快速迭代,代码量的产出虽高,但实际被线上用户使用的代码量却常常被忽视。过量的代码不仅增加维护成本,更可能成为系统中的“僵尸代码”,消耗资源而不产生实际价值。如何准确判断代码的使用情况,进而安全地进行代码下线,成为了系统优化的关键。
大部分业务系统中,线上僵尸代码的普遍存在是常态。面对这种情况,传统的方法如询问产品经理或观察接口流量,往往难以给出精确的答案。针对这一问题,引入测试覆盖率工具 Jacoco,通过代码分析来识别并优化系统代码,成为了一个有效策略。
Jacoco 是一个测试覆盖率工具,利用 ASM 字节码增强技术在源代码中加入探针,以获取代码覆盖率信息。它通过在 Java agent 的 premain 方法中实现 ClassFileTransformer 接口,对加载的 Class 文件进行修改以增强源代码。这为识别和分析线上代码的使用情况提供了一个自动化且准确的途径。
实现 Jacoco 的实践步骤包括引入 jar 依赖、赋能 Rest 请求、嵌入 jacocoagent、资源预留、下载覆盖文件以及分析代码等。通过这些步骤,团队可以有效识别出僵尸代码,进而进行安全的代码下线,优化系统结构。
采用 Jacoco 进行代码分析后,京东物流技术团队在实践过程中取得了显著的成效。需求交付效率提升,需求交付周期缩短,开发阶段时长显著降低,人均需求吞吐量增加,自动化 bug 数减少,单测覆盖率提升,系统整体质量得到改善。这些成果表明,通过引入和应用 Jacoco 这样的工具,不仅能够有效识别并优化系统中的僵尸代码,还能带来整体工作效率和质量的提升。
综上所述,Jacoco 作为一种强大的测试覆盖率工具,为识别和优化线上僵尸代码提供了可行的解决方案。通过其在京东物流技术团队中的实践,我们可以看到其在提升系统效率、减少维护成本、优化代码质量方面的巨大潜力。在不断迭代的业务场景中,Jacoco 成为了推动系统优化、提升技术团队效能的重要工具。
精准测试之过程与实践 | 京东云技术团队
作者:京东工业 宛煜昕
・百度百科:
精准测试是一套计算机测试辅助分析系统。
精准测试的核心组件包含软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。
・其他定义
精准测试是中国自己有知识产权的完全的理论体系,它同时关注功能点和代码相关逻辑这样一个方法论,是一种灰盒的测试模式。
最开始在年的国际软件测试大会上发布精准测试的时候,它叫穿线测试,英文名字叫Threading Test,表达了精准测试的本质,Threading这个英文单词本身有两个含义,一个是穿线一个是线程,建立用例和代码的关系,相当于把黑盒和白盒关联起来,做黑盒测试也能看到白盒数据,同时把开发和测试能够关联起来,测试一做完,开发的逻辑马上就能自动生成。另一个层面,精准测试最本质就是线程测试,因为精准测试基于覆盖率白盒理论产生,它跟白盒最大的区别是它的覆盖率是线程级的,也就是说要追溯到用例这个级别。
・历史发展
・成熟度模型的五级划分
这里介绍两款,分别为JAVA和C/C++相关,
第一,开发的基础和核心(编程)知识及所需要用到的版本管理工具(GIT)等。
第二,领域特定的知识、技术需要具备如下:
JAVA:Javassist(官网 - /blog/cod... atlassian.com/continuou...
2024-12-23 00:30
2024-12-23 00:06
2024-12-22 23:50
2024-12-22 23:40
2024-12-22 23:31
2024-12-22 22:58