代码质量 - 统一风格:统一代码格式化详解
项目的代码通常是一个团队共同完成的,要保障代码质量的首要前提就是统一代码的风格,本文将介绍常用的统一风格的措施之统一代码格式化。
统一代码格式化
统一风格的第一条,就是要统一代码的格式化,因为不同人提交的代码格式化不一样将导致merge代码造成大几率的冲突;而统一的代码风格无论是对于项目可维护性,还是降低merge冲突都是极为重要的。
通常是两种方式:一种方式是,强制使用同样的IDE工具;另外一个更为常见的是,使用同一种代码格式规范。
Eclipse code formatter插件
最为常用的工具是 Eclipse code formatter插件, 用来统一eclipse和IDEA等IDE的代码规范
代码质量 - 统一风格:统一命名规范详解
好的代码本身就是注释, 所以我们需要统一命名风格,本文将介绍常用的统一风格的措施之统一命名规范。
统一命名风格
好的代码本身就是注释, 所以我们需要统一命名风格。
在本文中,将从大到小,从外到内,总结Java编程中的命名规范。文中将会涉及到日常工作中常见的命名示例,如包命名,类命名,接口命名,方法命名,变量命名,常类命名,抽象类命名,异常类命名以及扩展类命名等。我将按照项目工程目录结构,从包,类(接口,抽象类,异常类),方法,变量和常量的顺序展开介绍。
著作权归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 |
PO | Bean,Entity等类的命名 | Persistant Object持久化对象,数据库表中的数据在Java对象中的映射状态,可以简单的理解为一个PO对象即为数据库表中的一条记录 |
POJO | POJO是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之间相互转换的关系:
代码质量 - 统一风格:静态样式检查详解
统一样式检查规范里,最为常用的统一样式工具是checkstyle插件,本文将介绍常用的统一风格的措施之静态样式检查。
统一样式检查
在标准化的统一样式检查规范里,最为常用的统一样式工具是checkstyle插件,而不是国内阿里的代码规约插件。
代码质量 - 代码质量管理: 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…
代码质量 - 代码质量管理: 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版本。
- find-sec-bugs
针对安全(Security)增加了大致70+条规则
SonarQube 总览
SonarQube为您提供了编写干净且安全的代码所需的工具:
- SonarLint – SonarLint是一个随行产品,可在您的编辑器中工作,并提供即时反馈,因此您可以在问题进入存储库之前捕获并修复问题。
- 质量门–质量门让您知道您的项目是否已准备好进行生产。
- 编码时纯净–编码时纯净是一种提高代码质量的方法,可消除传统方法带来的许多挑战。作为开发人员,您将专注于维持高标准并在您正在研究的新规范中特别承担责任。
- 问题– SonarQube会在代码段违反编码规则时引发问题,无论是会破坏代码的错误(错误),代码中容易受到攻击的点(漏洞)还是可维护性问题(代码气味)。
- 安全热点– SonarQube突出显示了需要检查的对安全敏感的代码段。经过审查,您会发现没有威胁,或者需要应用修复程序来保护代码。
转载自www.pdai.tech/,用于自我学习,如果侵权,马上删除