Java Code Review清单

news/2025/5/24 1:56:23

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

整洁的代码

清单项目分类
使用可以表达实际意图(Intention-Revealing)的名称有意义的名称
每一个概念只用一个词有意义的名称
使用方案/问题领域名称有意义的名称
类应该是比较小的!
函数应该是比较小的!函数
只做一件事函数
DRY(Don’t Repeat Yourself)原则,(拒绝重复)函数
用代码来解释自己的做法(译者注:即代码注释)注释
确定应用了代码格式化格式
使用异常而不是返回码异常
不要返回Null异常
  • 参考自:http://techbus.safaribooksonline.com/book/software-engineering-and-development/agile-development/9780136083238

安全

清单项目分类
如果不用于继承,使类为final基础
避免重复代码基础
权限限制:程序应该运行在保证功能正常的最小权限模式下。基础
最小化类和成员的可访问性基础
注释出安全相关的信息基础
系统的输入必须检查是否有效和在允许范围内拒绝服务(Denial of Service)
避免对于一些不寻常行为的过分日志拒绝服务(Denial of Service)
在任何情况下都释放资源(流,连接等等)拒绝服务(Denial of Service)
从异常中清除敏感信息(暴露文件路径,系统内部相关,配置)P私密信息(Confidential Information)
不要把高度敏感的信息写到日志私密信息(Confidential Information)
考虑把高度敏感的信息在使用后从内存中清除私密信息(Confidential Information)
限制包,类,接口,方法和域的可访问性可访问性的扩展(Accessibility Extensibility)
限制类和方法的可扩展性(通过使它为final)可访问性的扩展(Accessibility Extensibility)
检验输入(有效的数据,大小,范围,边界情况等等)输入检验(Input Validation)
把从不可信对象得到的输出作为输入来检验输入检验(Input Validation)
为native方法定义包装类(而不是定义native方法为pulibc)输入检验(Input Validation)
把从不可信对象得到的输出作为输入来对待可变性
使public static域为final(避免调用方(caller)修改它的值)可变性
避免暴露敏感类的构造函数对象构造
避免安全敏感类的序列化序列化反序列化(Serialization Deserialization)
通过序列化来保护敏感数据序列化反序列化(Serialization Deserialization)
小心地缓存潜在的特权操作结果序列化反序列化(Serialization Deserialization)
只有在需要的时候才使用JNI访问限制
  • 参考自: http://www.oracle.com/technetwork/java/seccodeguide-139067.html
清单项目分类
避免过分的同步并发
保持同步区域比较小并发
知道string连接的性能情况综合编程
避免创建不需要的对象创建和销毁对象
  • 参考自: http://techbus.safaribooksonline.com/book/programming/java/9780137150021

综合(译者注:原文中的作者把checklist和category对应的列搞错了,译文中已修正)

清单项目分类
对可以恢复的情况使用已受检异常(checked exceptions),对于程序错误使用运行时异常(runtime exceptions)异常
更多地使用标准异常异常
不要忽略异常异常
检查参数的有效性方法
返回空数组或集合,而不是null方法
最小化类和成员的可访问性类和接口
在pulibc类中,使用访问器方法(accessor methods)(译者注:访问器方法即我们平常用的get/set方法)而不是public域类和接口
最小化本地变量的范围综合编程
通过接口引用对象综合编程
遵循广泛接受的命名规则综合编程
避免使用finalizer创建和销毁对象
当你重写equals时总是重写hashCode综合编程
总是重写toString综合编程
使用枚举来代替int常量枚举和注解(Annotations)
使用标记接口(marker interface)(译者注:标记接口是一种没有任何行为的接口,实现它只是为了让实现类属于某种类型,如JDK中的Serializable,Cloneable等)来定义类型枚举和注解(Annotations)
对共享可变的数据使用同步访问并发
使用executors而不是task和thread并发
注释中描述线程安全情况并发
存在有效的JUnit/JBehave测试用例测试
  • 参考自: http://techbus.safaribooksonline.com/book/programming/java/9780137150021

静态代码分析

清单项目分类
查看静态代码分析器的报告来进行类的添加和修改静态代码分析

转载于:https://my.oschina.net/zhaoyi1/blog/1620046


https://dhexx.cn/news/show-2654224.html

相关文章

LeetCode Generate Parentheses

题目: Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n 3, a solution set is: "((()))", "(()())", "(())()", "()(())", "()()(…

python起步——可变对象和不可变对象

学习python了一小段时间,觉得整体上还是真的让程序更好写了。   学习过程中,突然想到一个问题——我之前博客写过的一篇文章,关于不用第三个数交换a、b的问题:http://www.cnblogs.com/FreeAquar/archive/2012/07/22/2603381.htm…

Java学习笔记(1)——常用cmd命令与Java编制编译

Java学习笔记——常用cmd命令与Java编制编译 1 JDK下载安装与环境配置 附上链接 2 常用cmd命令 dir 列出当前目录下的文件以及文件夹md 创建目录rd 删除目录cd 进入指定目录cd… 退回到上一级目录del 删除文件 3 Java特点 简单性面向对象分布式健壮性安全性体系结构中立…

华为防火墙-适合CSSIP方向

新版的OS初始console的用户名:admin,密码:Admin123连接console进入设备: Copyright(C) 2010-2013 Huawei Technologies Co., Ltd. *All rights reserved *Without the owners prior written consent, *no decompiling or reverse-…

LeetCode Letter Combinations of a Phone Number

题目: Given a digit string, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone buttons) is given below. Input:Digit string "23" Output: ["ad", &q…

Java学习笔记(2)——基础语法

Java学习——基础语法 1 第一个Java程序 public class 后面采用的类名和文件名保持一样,一个Java程序里面只有一个public class;class后面类名必须以字母开头,后面可以跟字母和数字的任意组合;System.out.println(&a…

LeetCode Clone Graph

题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. OJs undirected graph serialization: Nodes are labeled uniquely. We use # as a separator for each node, and , as a separator for node label and …

彩票问题,长度为6的int型数组,要求取值为1-30,同时元素值各不相同

题目 创建一个长度为6的int型数组&#xff0c;要求取值为1-30&#xff0c;同时元素值各不相同 解法 class CaiPiaoNumber {public static void main(String[] args) {int[] arr new int[6]; // 创建数组for (int i 0; i <arr.length ; i) { …

Nginx 学习笔记(三)Nginx + flv

环境 ubuntu 12.04 搭建视频服务器&#xff0c;播放flv和MP4文件&#xff0c;webserver用Nginx&#xff0c;编译增加http_flv_module;播放器使用开源的jw player。 nginx在ubuntu上用apt-get安装默认编译选项里面没有http_flv_module,所以需要重新编译一遍&#xff0c;顺便升级…

LeetCode Course Schedule

题目&#xff1a; There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1] Given the total number of cour…