上图关于代码质量大家可能都看过,如何衡量一段代码的质量?什么是代码质量?它为什么如此重要?作者通过他的书讲述了一个清晰、令人信服的故事。他们使用章节、标题和段落等工具来清晰地组织他们的思想并轻松地引导读者。开发人员的工作与编写人员的工作类似,只是使用不同的术语,例如命名空间、类和方法。如果创作者不能有效地使用他们的工具,他们的作品,无论是书籍还是代码,都将很难让读者理解。回到代码质量的话题,好的代码应该具备以下一系列理想的特性:可靠:可以稳定工作,不会经常死机。一致的编码风格:遵循语言一致的编码风格和命名约定。可维护:易于理解、可维护的代码应该易于扩展和添加新功能。经过良好测试:具有良好测试的代码往往有更少的错误。高效:不应使用不必要的资源来执行所需的操作。安全性:应防止SQL注入等编码漏洞。低技术债务:低技术债务使团队能够快速前进并开发新功能,而不会被低质量和不可维护的代码所阻碍。以上特征越多,代码的质量就越高。根据项目和客户的具体情况,代码可能不需要其中的某些功能。当面临交付期限时,编写高质量的代码非常具有挑战性,但如果您考虑代码的长期可维护性,这一点就很重要。同时,高质量的代码也有助于团队长期保持一致的交付速度。根据我的经验,下面总结了一些在我的项目中对改进和维护高质量代码非常有效的方法。使用静态代码分析器提高代码质量编译器可以捕获和预防语法问题,但它们无法检测到以下情况:不一致的代码结构社区的既定经验代码复杂性静态代码分析是一种在运行前检查代码的技术。有一些工具可以进行静态分析,它通过根据各种编码规则分析代码来发现一些违规行为。这些工具可以集成到gradle、maven等构建工具中,让有问题的代码构建失败。以下是一些可以合并到您的项目中的工具。CheckstyleCheckstyle(1)是开发中用来检查Java源代码是否符合编码规则的静态代码分析工具。Checkstyle执行的检查仅限于代码的表示;这些检查不确认代码的正确性或完整性。https://checkstyle.sourceforge.io/使用Checkstyle可确保开发团队遵循一致的编码风格,使其更易于阅读和理解。下面是一些可以使用checkstyle执行的检查。属性和方法的命名约定函数参数的数量代码每行最大宽度强制文件头描述,例如版权导入和范围修饰符类构造函数之间的空格多重代码复杂度测量PMDPMD(ProgrammingMistakeDetector,编程错误检测器)(1)is报告在应用程序代码中发现的问题的静态代码分析器。https://pmd.github.io/PMD可以帮助检测您的代码中的问题,这些问题可能会在您的代码交付到生产环境时导致问题。可能的错误:清空try/catch/finally/switch块,吞没原始异常并抛出新异常。死代码:未使用的局部变量、参数和私有方法。空的if/while语句过于复杂的表达式:不必要的if语句,for循环可以是while循环。次优代码:浪费使用String/StringBufferhighcyclomaticcomplexityclasses错误使用BigDecimalCPD(Copy/PasteDetector)CPD(1),顾名思义,是一个基于复制的检测器,即使对于大型代码库也是如此非常有效率。它是使用Karp-Rabin(2)字符串匹配算法编写的。https://pmd.sourceforge.io/pmd-4.2.5/cpd.htmlhttps://xlinux.nist.gov/dads/HTML/karpRabin.html可以配置为检测大于一定数量的重复令牌.复制/粘贴代码是不可取的,因为它会使代码难以维护,并且如果您在一个地方进行更改而忘记其他地方存在相同的代码,则可能导致错误。衡量代码质量免责声明:当衡量标准成为目标时,它就不再是一个好的衡量标准。(1)https://en.wikipedia.org/wiki/Goodhart%27s_law代码覆盖率指标代码覆盖率是一种指标,可用于获得对代码质量的信心。话虽如此,请注意选择哪些测试来衡量覆盖率。并非测试金字塔中的所有测试都是平等创建的,可以使用JaCoCo等工具来计算代码覆盖率。在查看代码覆盖率指标时,只应考虑单元测试,因为单元测试旨在测试代码是否按照开发人员的意图进行,执行这些测试是最快的验证方法。测量集成测试的代码覆盖率可能很有价值,但它应该被视为一个单独的结果,而不是与单元测试报告合并。请记住集成测试是为了确保所有组件协同工作。使用集成测试来提高代码覆盖率就像使用大锤敲开坚果一样。毒性图(ToxicityChart)毒性图(1),顾名思义是一种显示代码毒性的方法。该图表示代码库中每个类的毒性。毒性分数是根据一系列参数计算得出的,例如文件长度、方法长度、圈复杂度、嵌套语句等。这个图表可以展示给业务人员和管理人员等非技术人员,帮助他们了解代码的质量。https://erik.doernenburg.com/2008/11/how-toxic-is-your-code/示例代码下方的Github存储库包含一个包含上述所有工具的示例项目。它的结构使您可以轻松选择集成到您自己的项目中所需的工具。https://github.com/singhalkul/java-quality-checks维护代码质量是一个持续的过程,不能由团队中的一个人完成,整个团队有责任确保编写的代码是高质量的.虽然上面提到的工具将有助于确保您的代码中的一些质量问题得到缓解,但这并不是唯一的方法。团队应遵循结对编程、测试驱动开发、代码审查、持续集成等极限编程实践,以确保代码库中存在高质量的代码功能。英文原文:https://medium.com/inspiredbrilliance/improving-code-quality-for-java-projects-5d24ad448109本文转载自微信公众号“高可用架构”,可通过以下二维码关注.转载本文请联系高可用架构公众号。
