Strict Control of Java Code Quality

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

有很多工具可以控制Java代码的质量,包括CheckstylePMDFindBugsCobertura等。它们通常用于分析质量并生成一些华丽的报告。这些报告经常由像Jenkins这样的持续集成服务器发布。

Qulice 更进一步。它聚合了几个质量检查器,将它们配置为最严格模式,并在任何一个失败时中断构建。

认真地说。在Checkstyle中有超过130个检查,PMD中有超过400条规则,FindBugs中有超过400个错误。所有这些都应该说:“是的,我们喜欢你的代码。”否则,你的构建不应该通过。

你认为呢?每次你的代码只要有一个出现问题就被拒绝,这样方便吗?对团队来说,迫使开发人员如此专注于代码质量是否具有生产力?

First Reaction

如果您加入我们的团队成为Java开发人员,您将在分支中开发您的代码,然后Rultor将把您的更改合并到主分支master中。然而,在实际合并之前,Rultor将运行自动构建脚本,以确保您的分支不会破坏它。

作为一个静态分析工具,Qulice只是自动构建脚本中的一步。它实际上是一个Maven插件,我们使用Maven 3x自动化Java构建。因此,如果您的更改违反了Qulice的任何规则,整个分支都会被拒绝。

你的第一反应——我已经看过无数次——会是消极的。你可能会变得足够沮丧以至于立即离开这个项目。你可能会说出这样的话(我引用了真实的故事):

  • 这些质量规则完全破坏了我的创造力!

  • 与其浪费时间在这些错误放置的逗号和大括号上,我们最好是开发新功能!

  • 我一生中做过许多成功的项目,从未听说过这种荒谬的质量检查……

这第一反应是很合乎逻辑的。我见过很多人在开源和商业项目中都说过类似的话。不仅仅是在Java中,还有在PHP中(使用phpcsphpmd)以及Ruby中(使用rubocopsimplecov)。

我该如何回答?请继续阅读。

On Second Thought

我的经验告诉我,一个人越早适应Qulice的严格质量控制,他/她学习和成长得就越快;他/她就是一个更好的程序员;他/她就能在我们和我们的项目中走得更远。

记住这个经验,我建议所有新项目成员要有耐心,并努力适应这种对质量的新方法。几周后,那些坚持下来的人会开始理解为什么这种方法对项目和作为Java工程师的他们都是有益的。

为什么它好呢?继续阅读。

What Do Projects Get From Qulice?

让我们以一个简单的规则作为例子。这是一段Java代码,Qulice会对其提出抱怨(由于Checkstyle的DesignForExtension规则)。

public class Employee {
  public String name() {
    return "Jeff";
  }
}

这段代码有什么问题?name() 方法不是最终方法,可以被继承 Employee 的类重写。从设计上来说,这是错误的,因为子类允许破坏父类并重写其方法。

什么是正确的设计?这个:

public class Employee {
  public final String name() {
    return "Jeff";
  }
}

现在,这个方法是最终的,子类无法覆盖它。这是一个更安全的设计(根据 Checkstyle,我也同意)。

所以,假设我们将此规则应用于项目中的所有类。这给项目带来了什么好处呢?与没有此限制的其他项目相比,它可以保证其成员(程序员)的工作质量更高,主要是因为:

  • 设计的可预测性—我不需要滚动整个类来确保它没有可以被意外覆盖的方法。我确定在这个项目中不会发生这种情况。换句话说,我知道可以期待什么。

  • 减少隐藏的技巧—设计的可预测性更高,可以更好地发现错误和技巧。源代码的标准化使其统一。这意味着更容易阅读和发现问题。

  • 行业标准—决定使用这种设计的是Checkstyle,而不是项目架构师。对于我作为项目开发者来说,这意味着我正在遵循行业标准。这使得项目(及其领导者)更加值得尊敬。

  • 学习—我敢打赌,阅读本篇文章的大部分人都不知道上述解释的设计原则。仅仅通过阅读本文,你已经学到了新的东西。想象一下,在使你的代码符合Qulice的全部900个规则(Checkstyle + PMD + FindBugs)之后,你还能学到多少东西。

关于学习的观点带领我们来到最后,也是最重要的一个要讨论的思想。

What Do I Get from Qulice?

作为一名程序员,我希望你已经意识到在一个如Qulice所要求的项目中工作所带来的好处。是的,你将会学到很多关于编写高质量Java代码的新知识。

除此之外,我实际上会说,每当你编写新的代码行时,你其实是在获取免费的教训。而这个老师是由数百名Java开发人员编写的软件,已经存在了十年之久。Qulice只是将这些软件工具整合在一起。说实话,真正的质量检查和规则的作者是开发人员们。

那么,我要告诉那些抱怨质量规则太严格的人什么呢?我这样说:“你是想学习和提高,还是只是想拿钱而逃避责任?”

ps. 你可以使用我的 settings.jar 来配置 IntelliJ,它们相当严格,能帮助你在 Qulice 开始抱怨之前就清理你的代码。

Translated by ChatGPT gpt-3.5-turbo/35 on 2023-09-08 at 16:08

sixnines availability badge   GitHub stars