标签: 编码规范

为什么Google要执行严格的编码规范

rules在到谷歌工作之前,我一直认为编码规范没有什么用处。我坚信这些规范都是官僚制度下产生的浪费大家的编程时间、影响人们开发效率的东西。

现在看来,我是大错特错了。

在谷歌,我可以查看任何的代码,进入所有谷歌的代码库,我有权查看它们。事实上,这种权限是很少人能拥有的。但是,让我感到惊讶的却是,如此多的编码规范—缩进,命名,文件结构,注释风格—这一切让我出乎意料的轻松的阅读任意一段代码,并轻易的看懂它们。这让我震惊—因为我以为这些规范是微不足道的东西。它们不可能有这么大的作用—但它们却起到了这么大的作用。当你发现只通过看程序的基本语法结构就能读懂一段代码,这种时间上的节省不能不让人震撼!

反对编码规范的人很多,下面是一些常见的理由,对于这些理由,我以前是深信不疑的:

这是浪费时间!
我是一个优秀的程序员,我不愿意浪费时间干这些愚蠢的事。我的技术很好,我可以写出清晰的、易于理解的代码。为什么我要浪费时间遵守这些愚蠢的规范?答案是:统一是有价值的。就像我前面说的—你看到的任何的一行代码—不论是由你写的,还是由你身边的同事,还是由一个跟你相差11个时区的距离人写的—它们都有统一的结构,相同的命名规范—这带来的效果是巨大的。你只需要花这么少的功夫就能看懂一个你不熟悉(或完全未见过)的程序,因为你一见它们就会觉得面熟。 阅读详细 »

JAVA编码规范

 

 

1、合理组织代码层次,分层清晰:controllerlogicdao、对第三方接口(包括公司接口)的调用;各层要继承基类或实现接口

2、先定义方法原型,再实现方法体

3、理想的方法,是不可拆分的、原子的一个逻辑实现,具有一个明确的职责

4、方法体不超过70行,类体不超过500

5、类名称、变量名称、方法名称,遵循简单明确,知名见义原则。建议不带数字,下划线等特殊字符(类常量除外),采用有意义的名词或者名称组合、动宾结构(反对使用拼音命名)

6、常量名大写

7、代码逻辑块之间留有空行;等号、运算符号、变量两边留有空格

8、循环、条件语句嵌套不超过2层 (最好的避免嵌套的方法就是尽早return、合并条件、利用子方法)

9、类注释描述职责;变量要有明确的注释;方法注释描述职责,输入、输出要有说明;复杂逻辑片断,要有说明;注释要简洁明了

10、关键点要有日志;记住生产环境为info级;debug日志要先判断设置级别;日志不允许打印用户的密码,账户等敏感信息;禁止使用System.out

11、方法参数不超过4

12boolean变量使用is前缀;返回boolean类型的方法名使用is前缀

13、最大程度复用,相同的代码片断只出现一次,相同语义的变量只定义一个

14if判断逻辑过于复杂的,必须单独提练为方法

15、必须对边界条件做处理

16、异常处理,建议try..catch,反对throw;对于捕获的异常信息,必须将异常堆栈打印出;尽可能减小try的代码范围

17、禁止对测试用的数据硬编码

18、禁止存放注释掉的代码

19、配置项编写配置文件,反对硬编码

20 不能修改的变量要加final,不能被重写的方法要加final

21、数据库连接,必须使用连接池

22IO操作(文件、URLDB等),牢记finally语句中close

23、反对似懂非懂,反对没掌握使用即引入新技术

24、自动化测试case符合下单要求

25、鼓励使用设计模式

开发中如何编写高质量Java代码

Java项目开发过程中,由于开发人员的经验、Java代码编写习惯,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维 护,需要较大的测试投入和周期等问题。这些问题在一个项目组初建、需求和设计均具有不完全可预期性和完备性的全新项目中将尤为突出。可以采用以下步骤来保证和提高整个项目的代 码质量:统一编码规范、代码样式;静态代码分析(staticcodereview);单元测试;持续集成;代码评审和重构 (Review&Refactor)。

Java代码质量保证步骤

步骤一:统一编码规范、代码样式

规范统一的编码会增加项目代码的可读性和可维护性,但实际情况往往是项目组内的Java代码开发人员的编码风格常常各不相同,这可能是由于不同 的经验习惯或者缺乏编码规范方面的学习造成的。这样一来,其他项目成员或者维护人员在阅读项目代码时就需要花费更多的时间来理解代码作者的意图,所以制定 并采取统一的编码规范就显得很重要。编码规范主要应包含以下几个方面:

◆一般规则和格式规范。例如代码缩进、程序块规范、每行最大代码长度等。

◆命名规则。例如包名、类名、变量、方法、接口、参数等命名规范

◆文档规范。例如类文件头声明、类注释、成员变量和方法注释等规范。

◆编程规范。例如异常、并发、多线程等方面的处理方式。

◆其他规范。例如日志格式、属性文件格式,返回值和消息格式。

步骤二:静态代码分析

在完成源代码的开发以后,下面要进行的工作就是审视和测试代码。除了通过运行测试代码来检查功能之外,还能利用一些静态分析工具来快速、直接地 提高代码质量。静态代码分析工具并不需要运行代码,可以直接对Java文件和Class文件进行分析,通过一些检查条件的设置,快速找到代码中的错误和潜 在缺陷。

步骤三:单元测试

模拟对象技术

在实际项目中,开发人员自己的代码往往需要和其他的代码模块或系统进行交互,但在测试的过程中,这些需要被调用的真实对象常常很难被实例化,或 者这些对象在某些情况下无法被用来测试,例如,真实对象的行为无法预测,真实对象的行为难以触发,或者真实对象的运行速度很慢。这时候,就需要使用模拟对 象技术(Mock),利用一个模拟对象来模拟我们的代码所依赖的真实对象,来帮助完成测试,提高测试覆盖率,从而提高代码质量。

测试覆盖率分析

为了衡量单元测试的质量和覆盖的范围,需要对单元测试的代码进行测试覆盖分析。常用的衡量测试覆盖率的指标主要有语句覆盖率、分支覆盖率、路径 覆盖率、条件覆盖率和方法覆盖率等。具体采用哪些指标可以根据项目的实际情况来定,以避免因过高的指标增加了代码开发人员的工作量而影响了项目整体的进 度。

步骤四:持续集成

持续集成(ContinuousIntegration)是利用一系列的工具,方法和规则,做到快速的构建开发代码,自动的测试化,来提高开发 代码的效率和质量。利用自动构建工具,随时都能把提交的代码构建出来,提供一个可以测试使用的版本,让用户和开发人员同时看到相同的功能,尽早的发现问题 和错误,也可以尽快的得到测试人员和用户的反馈。

步骤五:代码评审和重构

代码评审(CodeReview)是Java项目开发过程中的一个重要步骤,代码评审可以帮助发现静态代码分析过程中无法发现的一些问题,例如 代码的编写是否符合编码规范,代码在逻辑上或者功能上是否存在错误,代码在执行效率和性能上是否有需要改进的地方,代码的注释是否完整正确,代码是否存在 冗余和重复。代码评审还可以帮助新进入项目组的成员快速学习和了解项目,促进经验分享,同时也能保证项目成员的良好沟通。代码评审主要包括两种形式,同级 评审(PeerReview)和小组评审(GroupReview)。同级评审主要指项目成员间的互相评审,小组评审是指通过召开评审会议,项目成员一起 对项目代码进行评审。