无用代码扫描组件设计

发布时间:2025-05-17 11:11:46 作者:益华网络 来源:undefined 浏览量(2) 点赞(2)
摘要:来源:京东技术目录 前言 设计思路 实现结果 01 前言 在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执

来源:京东技术

目录

前言

设计思路

实现结果

01

前言

在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!在软件开发的过程中,维护一个干净、高效的代码库是非常重要的。随着项目的发展,系统越来越臃肿,开发过程中代码库往往会积累大量不再使用或者冗余的无用代码,这些无用代码不仅增加了系统的复杂度,还可能降低软件的运行效率,进而增加系统维护成本。因此,设计一个能够自动扫描并识别这些无用代码的组件显得尤为重要。本文将围绕这一需求,分别介绍静态代码扫描方案和运行时扫描代码方案,来帮助读者减少维护成本。02  设计思路理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。

2.1、静态代码扫描方案

本方案解决静态代码下无调用方法扫描,通过ASTParser对静态文件进行扫描分析,获取代码块来判断调用关系。 基本步骤及思路 (1)载入本地磁盘项目 (2)循环使用ASTParser解析每个java文件的方法块,把类名+方法名和方法代码块一起落缓存,vm文件单独落。

分析代码如下

(3)进行调用关系扫描,再次用ASTParser解析解析每个java文件的方法块,拿方法名去缓存中根据代码块模糊查询,刨除掉自己之后统计调用次数,次数为0的可以认为是僵尸方法,打印出来供参考。2.2、运行时扫描方案 本方案是借助jacoco(Java Code Coverage),jacoco本质是一种测试覆盖率工具,通过asn字节码增强技术在源代码中加入探针从而获取代码覆盖率 具体实践 (1)依赖jacoco.ant在工程内的pom中引入jar依赖<dependency>    <groupId>org.jacoco</groupId>    <artifactId>org.jacoco.ant</artifactId>    <version>0.8.3</version></dependency><dependency>     <groupId>org.apache.ant</groupId>     <artifactId>ant</artifactId>     <version>1.9.9</version> </dependency>(2)赋能Rest请求添加一个url地址,通过ant执行dump task用于Dump Coverage文件生成@RestController@RequestMapping("/coverage")public class CoverageController {    @PostMapping("dump")    @NoCheckMenuPermission    public Result<Boolean> dumpCoverageFile() {        DumpTask dumpTask = new DumpTask();        // dump文件地址        dumpTask.setDestfile(new File("/export/Data/coverage/code-cover.exec"));        // 多次dump追加形式        dumpTask.setAppend(true);        // 选一个空闲接口即可        dumpTask.setPort(8840);        // 默认本机        dumpTask.setAddress("127.0.0.1");        dumpTask.execute();        return Result.succeed(true);    }}(3)嵌入jacocoagentjava启动参数添加如下:#decompress file 解压依赖,获得jacocoagent.jar包,避免需要联系运维上传包jar -xvf $BASEDIR/lib/org.jacoco.agent-0.8.3.jar-javaagent:$BASEDIR/bin/jacocoagent.jar=includes=com.jdwl.*,output=tcpserver,port=8840,address=127.0.0.1 -Xverify:none(4)增加配置脚本/home/admin/clean_export.sh(脚本默认内容上增加了 && $9 != "coverage"输出的文件路径为/export/Data/coverage/code-cover.exec(5)下载cover文件/export/Data/coverage/code-cover.exec目录下(6)分析代码打开idea -> run -> show coverage data选择对应的exec文件即可获取服务端的代码覆盖情况。绿色覆盖(活跃代码)红色未覆盖(僵尸代码)(7)相关链接

1. JaCoCo - Documentatio

2. javaagent使用指南 - rickiyang - 博客园 (cnblogs.com

3. 使用Jacoco统计服务端代码覆盖情况实践 - M104 - 博客园 (cnblogs.com

4. Diving Into Bytecode Manipulation: Creating an Audit Log With ASM and Javassist | New Reli

03实现结果理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。

1、启动工具,选择工程路径

2、点击生成DB,解析代码载入数据库

3、点击扫描,获取结果

二维码

扫一扫,关注我们

声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

您身边的【网站建设专家】

搜索千万次不如咨询1次

主营项目:网站建设,手机网站,响应式网站,SEO优化,小程序开发,公众号系统,软件开发等

立即咨询 15368564009
在线客服
嘿,我来帮您!