代码质量

148 阅读9分钟

代码质量 - 统一风格:统一代码格式化详解

项目的代码通常是一个团队共同完成的,要保障代码质量的首要前提就是统一代码的风格,本文将介绍常用的统一风格的措施之统一代码格式化

统一代码格式化

统一风格的第一条,就是要统一代码的格式化,因为不同人提交的代码格式化不一样将导致merge代码造成大几率的冲突;而统一的代码风格无论是对于项目可维护性,还是降低merge冲突都是极为重要的。

通常是两种方式:一种方式是,强制使用同样的IDE工具;另外一个更为常见的是,使用同一种代码格式规范。

Eclipse code formatter插件

最为常用的工具是 Eclipse code formatter插件, 用来统一eclipse和IDEA等IDE的代码规范

代码质量 - 统一风格:统一命名规范详解

好的代码本身就是注释, 所以我们需要统一命名风格,本文将介绍常用的统一风格的措施之统一命名规范

统一命名风格

好的代码本身就是注释, 所以我们需要统一命名风格。

在本文中,将从大到小,从外到内,总结Java编程中的命名规范。文中将会涉及到日常工作中常见的命名示例,如包命名,类命名,接口命名,方法命名,变量命名,常类命名,抽象类命名,异常类命名以及扩展类命名等。我将按照项目工程目录结构,从包,类(接口,抽象类,异常类),方法,变量和常量的顺序展开介绍。

www.pdai.tech/md/develop/…

著作权归pdai.tech所有。 链接:www.pdai.tech/md/develop/…

扩展:速记Java开发中的各种O

最后,通过一张表和图快速对Java中的BO,DTO,DAO,PO,POJO,VO之间的含义,区别以及联系进行梳理。

名称使用范围解释说明
BO用于Service,Manager,Business等业务相关类的命名Business Object业务处理对象,主要作用是把业务逻辑封装成一个对象。
DTO经过加工后的PO对象,其内部属性可能增加或减少Data Transfer Object数据传输对象,主要用于远程调用等需要大量传输数据的地方,例如,可以将一个或多个PO类的部分或全部属性封装为DTO进行传输
DAO用于对数据库进行读写操作的类进行命名Data Access Object数据访问对象,主要用来封装对数据库的访问,通过DAO可以将POJO持久化为PO,也可以利用PO封装出VO和DTO
POBean,Entity等类的命名Persistant Object持久化对象,数据库表中的数据在Java对象中的映射状态,可以简单的理解为一个PO对象即为数据库表中的一条记录
POJOPOJO是DO/DTO/BO/VO的统称Plain Ordinary Java Object 简单Java对象,它是一个简单的普通Java对象,禁止将类命名为XxxxPOJO
VO通常是视图控制层和模板引擎之间传递的数据对象Value Object 值对象,主要用于视图层,视图控制器将视图层所需的属性封装成一个对象,然后用一个VO对象在视图控制器和视图之间进行数据传输。
AO应用层对象Application Object,在Web层与Service层之间抽象的复用对象模型,很少用。

简单总结一下

PO是实体类

D——入参:Req,出参:DAO

M——入参:Req,出参:BO

S——入参:Param,出参:DTO\AO

C——入参:VO,出参:DTO

A——入参:Param,出参:DTO

下面将通过一张图来理解上述几种O之间相互转换的关系:

blog.csdn.net/cnds123321/…

代码质量 - 统一风格:静态样式检查详解

统一样式检查规范里,最为常用的统一样式工具是checkstyle插件,本文将介绍常用的统一风格的措施之静态样式检查

统一样式检查

在标准化的统一样式检查规范里,最为常用的统一样式工具是checkstyle插件,而不是国内阿里的代码规约插件。

www.pdai.tech/md/develop/…

代码质量 - 代码质量管理: Sonarlint插件详解

在提交代码前,为提升代码质量还需要使用一些静态代码工具检查代码质量,最为常用的是Sonar;在本地IDE中可以配置Sonarlint插件进行检查。

Sonar是什么?

Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测

Sonar可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题

  • 不遵循代码标准 sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写
  • 潜在的缺陷 sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的缺陷
  • 糟糕的复杂度分布 文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试
  • 重复 显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示源码中重复严重的地方
  • 注释不足或者过多 没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷
  • 缺乏单元测试 sonar可以很方便地统计并展示单元测试覆盖率
  • 糟糕的设计 通过sonar可以找出循环,展示包与包、类与类之间相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测耦合。

官方网站: www.sonarsource.com/products/so…

www.pdai.tech/md/develop/…

代码质量 - 代码质量管理: SpotBugs插件详解

SpotBugs是Findbugs的继任者(Findbugs已经于2016年后不再维护),用于对代码进行静态分析,查找相关的漏洞;在本地IDE中可以配置SpotBugs插件进行检查。

SpotBugs

SpotBugs是Findbugs的继任者(Findbugs已经于2016年后不再维护),用于对代码进行静态分析,查找相关的漏洞; 它是一款自由软件,按照GNU Lesser General Public License 的条款发布。

与查看源代码的Java编译器不同,静态分析会检查Java字节码(已编译的.class文件)是否存在错误模式。错误模式是一种经常容易出错的代码表达式/习惯用法。错误模式的产生可能有多种原因,其中包括:

  • 错误使用编程语言的某些特性
  • 误用的API方法
  • 在维护期间修改代码时误解变量
  • 错别字,使用错误的运算符等

在使用之前,我们需要先看下官网的简单介绍,特别是注意点

然后我们看下它提供的哪些检查

  • Bad practice 不佳实践:常见代码错误,用于静态代码检查时进行缺陷模式匹配(如重写equals但没重写 hashCode,或相反情况等)
  • Correctness 可能导致错误的代码(如空指针引用、无限循环等)
  • Experimental 实验性
  • Internationalization 国际化相关问题(如错误的字符串转换等)
  • Malicious code vulnerability 可能受到的恶意攻击(如访问权限修饰符的定义等)
  • Multithreaded correctness 多线程的正确性(如多线程编程时常见的同步,线程调度问题等)
  • BogusMultithreaded correctness 多线程的正确性(如多线程编程时常见的同步,线程调度问题等)
  • Performance 运行时性能问题(如由变量定义,方法调用导致的代码低效问题等)
  • Security 安全问题(如HTTP,SQL,DB等)
  • Dodgy code 导致自身错误的代码(如未确认的强制转换、冗余的空值检查等)

相关文档请参考这里(opens new window)

IDEA 中使用SpotBug插件

IntelliJ SpotBugs插件提供静态字节代码分析,以从IntelliJ IDEA中查找Java代码中的错误。SpotBugs是Java的缺陷检测工具,它使用静态分析来查找 400 多种错误模式,例如空指针取消引用,无限递归循环,对Java库的错误使用和死锁。SpotBugs可以识别大型应用程序中的数百个严重缺陷(通常每 1000-2000 行非注释源语句中大约有 1 个缺陷)。

SpotBugs 额外插件

SpotBugs 还有对应的额外插件,用于扩展对应的规则,探测出更多的代码问题

  • fb-contrib 其中因 FindBugs分叉,SpotBugs需要使用-sb版本。

官网 : github.com/mebigfatguy…

  • find-sec-bugs

针对安全(Security)增加了大致70+条规则

官网: github.com/find-sec-bu…

SonarQube 总览

blog.csdn.net/liuCoding/a…

SonarQube为您提供了编写干净且安全的代码所需的工具:

  • SonarLint – SonarLint是一个随行产品,可在您的编辑器中工作,并提供即时反馈,因此您可以在问题进入存储库之前捕获并修复问题。
  • 质量门–质量门让您知道您的项目是否已准备好进行生产。
  • 编码时纯净–编码时纯净是一种提高代码质量的方法,可消除传统方法带来的许多挑战。作为开发人员,您将专注于维持高标准并在您正在研究的新规范中特别承担责任。
  • 问题– SonarQube会在代码段违反编码规则时引发问题,无论是会破坏代码的错误(错误),代码中容易受到攻击的点(漏洞)还是可维护性问题(代码气味)。
  • 安全热点– SonarQube突出显示了需要检查的对安全敏感的代码段。经过审查,您会发现没有威胁,或者需要应用修复程序来保护代码。

转载自www.pdai.tech/,用于自我学习,如果侵权,马上删除