Java Findbugs与比较
我最近开始在java构建中使用findbugs静态分析工具。第一份报告返回时包含大量高优先级警告。作为一个强迫型的人,我准备把他们都打倒。然而,我肯定错过了什么。我在比较事物时得到了大多数警告。例如以下代码:Java Findbugs与比较,java,static-analysis,findbugs,Java,Static Analysis,Findbugs,我最近开始在java构建中使用findbugs静态分析工具。第一份报告返回时包含大量高优先级警告。作为一个强迫型的人,我准备把他们都打倒。然而,我肯定错过了什么。我在比较事物时得到了大多数警告。例如以下代码: public void setSpacesPerLevel(int value) { if( value >= 0) { spacesPerLevel = value; } else {
public void setSpacesPerLevel(int value)
{
if( value >= 0)
{
spacesPerLevel = value;
}
else
{
spacesPerLevel = 0;
}
}
在读取的if语句处生成高优先级警告
文件:Indenter.java,第60行,类型:
位_和_ZZ,优先级:高,类别:
正确性检查以查看是否((…)&
0)==0英寸
样本压头设置间隔水平(int)
我把一个int和一个int进行比较,这似乎是一件很平常的事情。通过类似的简单比较,我得到了相当多的此类错误
我有很多其他高优先级的警告,这些警告似乎是简单的代码块。我是不是遗漏了什么?我意识到静态分析可能会产生误报,但我看到的错误对于一个案例来说太微不足道了,不可能是误报
这一次也让我抓狂
for(int spaces = 0;spaces < spacesPerLevel;spaces++)
{
result = result.concat(" ");
}
有什么想法吗
所以基本上我有一些文件和50-60个高优先级警告,类似于上面的那些。我正在使用findbugs 1.3.9,并从findbugs ant任务调用它
更新:
我让hudson服务器执行这个构建,并让Clover检测代码覆盖率。当我关掉它时,我所有的高优先级警告都消失了。现在这是有道理的。感谢您的反馈。您是通过Eclipse插件、ant还是gui运行Findbugs?是否可能代码在运行后(在进行更改之前)没有重新编译 如果setSpacesPerLevel不太长,则发布 javap-v包含setspacerperlevel的类
至于第二个bug,您必须先显示整个循环,然后才能判断它是否有问题。更新:我让hudson服务器执行此构建,并让Clover检测代码覆盖率。当我关掉它时,我所有的高优先级警告都消失了。现在这是有道理的。感谢您的反馈。旁注:
for(int spaces = 0;spaces < spacesPerLevel;spaces++)
{
result = result.concat(" ");
}
for(int-spaces=0;spaces
如果result
是java.lang.String
,这可能效率低下,因为您对每个空格字符执行以下步骤:
char[]
来保存连接结果java.lang.String
实例,该实例围绕字符数组进行包装结果
已经很长时,这将花费大量时间
如果性能(时间和内存)对该方法很重要,则应该考虑使用<代码> StringBuilder < /C> >(不是线程安全)或<代码> StringBuffer < /C> >(线程安全)。或者减少空格。只是更新了问题以包含更多的代码段。您是使用调试信息编译的吗?@Anton Yes@Rob Goodwin:我知道这应该是相同的,但是您可以试试
debug=“on”
或debug=“true”
。我正在ant上运行它。目标在进行任何构建或静态分析之前都会进行清理。正在处理javap输出…谢谢!我从.NET移植了这段代码(我在java部门有点生疏)。我们正在使用的.net字符串类中有一个构造函数,它允许您重复X字符多次。这是我快速而肮脏的解决方案,但它从一开始就错了。谢谢
for(int spaces = 0;spaces < spacesPerLevel;spaces++)
{
result = result.concat(" ");
}