Tech
目录
01
前言
在今年的敏捷团队建设中,我通过Suite
在软件开发的过程中,维护一个干净、高效的代码库是非常重要的。随着项目的发展,系统越来越臃肿,开发过程中代码库往往会积累大量不再使用或者冗余的无用代码,这些无用代码不仅增加了系统的复杂度,还可能降低软件的运行效率,进而增加系统维护成本。因此,设计一个能够自动扫描并识别这些无用代码的组件显得尤为重要。本文将围绕这一需求,分别介绍静态代码扫描方案和运行时扫描代码方案,来帮助读者减少维护成本。
02
设计思路
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载cnblogs,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。
2.1、静态代码扫描方案
本方案解决静态代码下无调用方法扫描,通过对静态文件进行扫描分析,获取代码块来判断调用关系。
基本步骤及思路
(1)载入本地磁盘项目
(2)循环使用解析每个java文件的方法块,把类名+方法名和方法代码块一起落缓存,vm文件单独落。
分析代码如下
(3)进行调用关系扫描,再次用解析解析每个java文件的方法块,拿方法名去缓存中根据代码块模糊查询,刨除掉自己之后统计调用次数,次数为0的可以认为是僵尸方法,打印出来供参考。
2.2、运行时扫描方案
本方案是借助(Java Code ),本质是一种测试覆盖率工具,通过asn字节码增强技术在源代码中加入探针从而获取代码覆盖率
具体实践
(1)依赖.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 文件生成
public class CoverageController {
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)嵌入
java启动参数添加如下:
#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/.sh(脚本默认内容上增加了&& $9 != "")
输出的文件路径为//Data//code-cover.exec
(5)下载cover文件
//Data//code-cover.exec目录下
(6)分析代码
打开idea -> run -> show data选择对应的exec文件即可获取服务端的代码覆盖情况。
绿色覆盖(活跃代码)
红色未覆盖(僵尸代码)
(7)相关链接
1. -
2. 使用指南 - - 博客园 (
3. 使用统计服务端代码覆盖情况实践 - M104 - 博客园 (
4. Into : an Audit Log With ASM and | New Reli
03
实现结果
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。
1、启动工具,选择工程路径
2、点击生成DBcnblogs,解析代码载入数据库
3、点击扫描,获取结果
活动介绍:GIAC全球互联网架构大会于5/24~25日在深圳举行,大会中有更多来自代码质量、AI及大模型精彩案例,点击“阅读原文”了解更多议题。识别下图二维码还可以申请大会单日体验票福利。
参考阅读:
本文由高可用架构转载。技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿
,