Sonar:java项目的更好规则

Sonar:java项目的更好规则,java,sonarqube,Java,Sonarqube,我试图找到一个更好的替代默认java质量概要文件“Sonar way with Findbugs” 在516条配置文件规则中,有些规则实际上没有正确设置(优先级或激活) 例如: “死存储到局部变量”真的是一个关键问题吗 “添加空字符串”已禁用,但值得启用 “使用等于比较字符串”已禁用 由于我找不到比默认规则更好的随时可用的规则集,因此我想从经验丰富的Sonar用户那里获得有关此主题的反馈 “死存储到局部变量”真的是一个关键问题吗 这可能是一个严重的问题,因为在某些情况下,它不仅仅表示内存浪费

我试图找到一个更好的替代默认java质量概要文件“Sonar way with Findbugs”

在516条配置文件规则中,有些规则实际上没有正确设置(优先级或激活)

例如:

  • “死存储到局部变量”真的是一个关键问题吗
  • “添加空字符串”已禁用,但值得启用
  • “使用等于比较字符串”已禁用
由于我找不到比默认规则更好的随时可用的规则集,因此我想从经验丰富的Sonar用户那里获得有关此主题的反馈

“死存储到局部变量”真的是一个关键问题吗

这可能是一个严重的问题,因为在某些情况下,它不仅仅表示内存浪费。通常,此问题是由缺少或错误的变量访问引起的。考虑下面的例子:<代码> MyValue将被标记为死存储:

public class ResultData {
  private int m_valueX;
  private int m_valueY;

  public int getValueX() {
    return m_valueX;
   }
   public int getValueY() {
     //should actually be m_valueY
     return m_valueX;
   }
   public void setValueX(int valueX) {
     m_valueX = valueX;
   }
   public void setValueY(int valueY) {
     m_valueY = valueY;
   }
}
使用Equals来比较字符串

可能“对象应与‘equals()’进行比较”规则是有效的,并且隐含地涵盖了此规则检测到的问题。

我的经验(自SQ首次在3家不同的公司发布以来,我一直在使用它,多年来写了130多个自定义检查)如下:

  • 创建作为当前“SonarQube方式”配置文件副本的配置文件P1
  • 在此配置文件中,删除与您的上下文无关的所有规则(主要是当您的自定义规则与现成规则冲突时),并在需要时更改优先级(仅在您的上下文需要时尝试增加优先级)。跟踪修改配置文件的原因。这里的要点是能够说“我们遵循现成的配置,除了一些需要更严格控制的特定情况”。此配置文件将用于轻松比较您当前的“SonarQube方式”配置文件与较新的配置文件
  • 创建从P1继承的配置文件P2并添加其他规则,无论这些规则是否为自定义规则。与您的开发团队一起研究这个主题,以便达成共识
  • 尽可能多地保留您添加的规则的默认优先级(不要向那些想争辩您的配置有缺陷的人提供食物,如果您需要更改优先级,请准备好捍卫您的决定,请参阅下一点。)
  • 对于所有规则优先级更改(现成的和/或自定义规则),请遵循预定义的比例(例如)并遵守该比例
  • 将P2设置为默认配置文件
然后每次“SonarQube方式”演变时,您都可以轻松地更新它,然后将其与P1进行比较

您可以使用“SonarQube Way with Findbugs”配置文件执行完全相同的操作(但我不会这样做,因为这会启用很多规则…)

始终记住,最好少解释一些规则,所有开发人员都愿意应用,而不是有很多难以解释的检查,没有人相信也没有人愿意应用,也没有人愿意再阅读SQ,因为检查数量巨大。换句话说,从小处做起,与其他开发人员一起成长

还请记住,未解决的问题(没有人愿意解决,因为他的规则会引起太多误报、难以理解等),是一种难以摆脱的债务。这是一个总是会带来更多债务的漏洞,主要是因为人们还没有准备好听到这些问题。在这样的环境下,最好停用这些规则,并在人们准备好讨论和应用这些规则时将其带回

最后但并非最不重要。与开发团队就质量概要文件发布日期达成一致。例如,假设您同意每年更新两次配置文件。在两个概要文件版本之间,欢迎人们讨论规则,但在下一个版本之前不会对这些规则进行修改,如果需要修改(添加/删除规则),则必须对其进行讨论并达成共识。如果一个项目在两个版本之间启动,它将以当前概要文件启动并使用它。当概要文件更新时,您的项目可能会有一个版本将其代码与新规则对齐,或者如果您使用“修复漏洞”方法,则项目同意新代码以及重构代码将遵循新概要文件

请记住,如果您是概要文件的所有者,那么您的开发人员应该是那些要求添加新规则的人(顺便说一句,这是一个很好的KPI)

关于这一点还有很多要说的,但这应该是一个很好的起点,以帮助您