FindBugs详解

欢迎和大家交流技术相关问题:
邮箱: jiangxinnju@163.com
博客园地址: http://www.cnblogs.com/jiangxinnju
GitHub地址: https://github.com/jiangxincode
知乎地址: https://www.zhihu.com/people/jiangxinnju

Find bugs误报告警的消除方法

背景介绍

在java工程中,Find bugs的静态检查能够帮助我们挖掘出代码可能存在的缺陷。在我实际使用的过程中,也确实发现了两处由于“缺少else分支”导致“引入未初始化对象”的错误。与之相对应的是,通过Find bugs也发现四处对象中使用静态成员导致Find bugs告警的情况。通过仔细阅读和分析代码逻辑,可以确认代码本身没有问题,这个是属于Find bugs误报的情况。既然我们打算使用Find bugs来做代码的静态检查,那么就有必要保持一个干净的代码环境,这里面没有任何的Find bugs告警。如果确定是代码问题,毫无疑问需要马上纠正。如果确认是Find bugs误报,也应该进行消除,以便后续的检查能够基于一个干净的环境,同样的误报不需要反复确认。Find bugs告警误报的消除非常容易,只需要在两个级别(类级别和方法进行)加上Find bugs的注解就可以消除。这里建议误报消除尽量在方法级别上进行,以控制误报消除的范围,最大限度放置将真正的代码问题也作为误报给隐藏掉了。

方法

  • 在工程添加注解依赖的jar包:使用Find bugs注解需要用到两个jar包,annotations.jar和jsr305.jar。在eclipse中装完Find bugs插件后,在eclipse目录下可以找到这两个jar包文件。
  • 添加注解:在疑问代码所在的类或者方法前面添加注解。其中,value的值就是前面提到的find bugs告警信息中的模式,因为value是一个数组,所以可以同时添加多个模式。justification的值是一句描述信息,你可以理解为是这条注解的注释,内容可以是任意的。
    @edu.umd.cs.findbugs.annotations
    SuppressWarnings(value={"NM_CONFUSING"}, justification="remove findbugs")
  • 重新运行Find bugs进行检查:添加完注解后,接下来应该重新运行find bugs工具进行检查,以确定误报已经被消除。

MS: Field should be package protected (MS_PKGPROTECT)

A mutable static field could be changed by malicious code or by accident. The field could be made package protected to avoid this vulnerability.

我这样定义了多个数组,均使用了 public final static 修饰符:

    public final static double[][][] Y_MIN_SCOPE=
    {
        {{-120, -25}},
        {{0, 254}},
        {{0, 254}},
        {{0, 254}}

    };
    public final static double[] GRID_HEIGHT = {1,1,1,1};

    public final static String[][] TAG_NAMES=
    {
        {"RSRQ(dB)","RSRP(dBm)"},
        {"TA(16*Ts)","UE TxPower(dBm)"},
        {"TA(16*Ts)","RSRP(dBm)"},
        {"TA(16*Ts)","RSRQ(dB)"}
    };

findbugs给的修改提示是:

    In LTE3DConstant
    Field LTE3DConstant.Y_MIN_SCOPE
    At LTE3DConstant.java:[line 53]
    Y_MIN_SCOPE should be package protected
    Bug Type: MS_PKGPROTECT
    Bug Category:MALICIOUS_CODE (Malicious code vulnerability)
    Source File:
    Line:53

修改成这样就不报错了。

    protected final double[][][] Y_MIN_SCOPE=
    {
        {{-120, -25}},
        {{0, 254}},
        {{0, 254}},
        {{0, 254}}

    };

可能原因是因为其它地方没有使用到这个类的变量,所以最好将public改成protected,但是为什么要去掉static还是不理解。

转载于:https://www.cnblogs.com/jiangxinnju/p/6582404.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值