Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Findbugs与比较_Java_Static Analysis_Findbugs - Fatal编程技术网

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 {

我最近开始在java构建中使用findbugs静态分析工具。第一份报告返回时包含大量高优先级警告。作为一个强迫型的人,我准备把他们都打倒。然而,我肯定错过了什么。我在比较事物时得到了大多数警告。例如以下代码:

   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(" ");
    }