代码审计报告3Word格式.docx
《代码审计报告3Word格式.docx》由会员分享,可在线阅读,更多相关《代码审计报告3Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
![代码审计报告3Word格式.docx](https://file1.bdocx.com/fileroot1/2022-10/18/b3ce1436-f3df-4d2d-a7d7-c51065df47f3/b3ce1436-f3df-4d2d-a7d7-c51065df47f31.gif)
重要
命名规那么是否与所采用的标准保持一致?
成员变量,方法参数等需要使用首字母小写,
其余单词首字母大写的命名方式,
制止使用下划线(_)数字等方式命名
不要出现部分变量,成员变量大写字母开头等问题
一般
是否遵循了最小长度最多信息原那么?
各种命名尽可能短,表意准确,除2代替‘to’,
4代替‘for’外,不建议使用数字在命名中
has/can/is前缀的函数是否返回布尔型?
成员变量,方法参数,部分变量等为布尔型时,
假如出现has/can/is开头,那么将这些词去掉
类名是否存在重名问题?
自己实现的类尽量不要和别人的类重名,
尽管不在同一个包下,特别是子类和父类重名的情况
注释
注释是否较明晰且必要?
方法JAVADOC注释中需要说明各参数、返回值
及异常说明,参数说明需按照参数名称及用意对应标注
复杂的分支流程是否已经被注释?
间隔较远的}是否已经被注释?
函数是否已经有文档注释?
〔功能、输入、返回及其他可选〕
文件,类〔含接口,枚举等〕,成员变量,
方法前需要有JAVADOC的注释
特殊用法是否被注释?
声明、空白、缩
进
每行是否只声明了一个变量?
〔特别是那些可能出错的类型〕
变量是否已经在定义的同时初始化?
类属性是否都执行了初始化?
代码段落是否被适宜地以空行分隔?
是否合理地使用了空格使程序更明晰?
根本代码格式中的空格符不可缺少,
这些空格出如今?
:
+,-,*,/,=,==,>
<
>
=,<
=,!
=,
及各种括号附近
提示
代码行长度是否在要求之内?
每行不得超过120个字符
controller,service,
dao
中不要声明有状态的变量。
此变量不能被修改。
假如要进展修改,
必须通过锁进展控制。
折行是否恰当?
集合是否被定义为泛型类型?
定义集合时,建议定义其泛型类型,
减少类型转换和警告错误
语句/功能分布/规模
包含复合语句的{}是否成对出现并符合标准?
是否给单个的循环、条件语句也加了{}?
if,else,else
if,while,for,case等
代码块必须用{}包围
单个变量是否只做单个用处?
单行是否只有单个功能?
〔不要使用;
进展多行合并〕
单个函数是否执行了单个功能并与其命名相符?
操作符++和—
—操作符的应用是否符合标准?
规模
单个函数不超过规定行数?
缩进层数是否不超过规定?
可靠性〔概述/变量和语句〕
是否已经消除了所有警告?
开发工具的警告
常数变量是否声明为final?
对象使用前是否进展了检查?
成员变量,部分变量是否在使用前被赋值?
对象初始化为null的对象被调用前必须被重新赋值,
假如赋值语句在try块中,调用操作必须在try块中
部分对象变量使用后是否被复位为NULL?
特别是
数组
集合
Map
对数组的访问是否是平安的?
〔合法的index取值为[0,
MAX_SIZE-1]〕。
是否确认没有同名变量部分重复定义问题?
严禁部分变量名称和类或对象成员变量同名
程序中是否只使用了简单的表达式?
是否已经用〔〕使操作符优先级明确化?
所有判断是否都使用了〔常量==变量
或者
常量.equals(变量)〕的形式?
常量放在比拟符前可以有效降低比拟符写成赋值语句
,
减少空指针异常
是否每个if-else
if-else语句都有最后一个else以确保处理了全集?
是否每个switch-case语句都有最后一个default以确保处理了全集?
for循环是否都使用了包含下限不包含上限的形式?
〔k=0;
k<
MAX〕
XML标记书写是否完好,字符串的拼写是否正确?
对于流操作代码的异常捕获是否有finally操作以关闭流对象?
关闭前需要判断
流对象是否为空
退出代码段时是否对临时对象做了释放处理?
对浮点数值的相等判断是否是恰当的?
严禁使用==直接判断浮点数值
。
提供通用方法
是否对象比拟都使用了equals?
对象〔包括包装类〕比拟必须使用equals,
而不是使用==或!
=操作
使用equals进展比拟时是否确保比拟的两个对象类型一致?
equals方法比拟的对象在对象类型确定的前提下,
建议是同一类型的,例如Integer和"
"
使用equals
是不提倡的
操作Map或Properties构造对象,用于传值时是否将Key定义为常量?
Session,Request等对象的setAttribute,
getAttribute方法的key建议使用常量,
不得手工输入字符串
是否在类型转换前确保了类型的兼容?
除非明确保证对象类型
包装类做简单预算前是否保证非空?
建议都使用包装类。
包装类进展操作前,建议进展非空〔null
!
=
xx〕判断,
防止发生空指针异常
对象属性在使用前是否确保被准确赋值?
只读属性〔只提供get方法的成员变量〕
除非特意返回固定值,否那么必须提供set方法
或在其他方法调用时将其赋值
方法调用前是否有非空判断?
对参数的非空判断必须出如今方法调用之前,
否那么说明前面可能导致空指针或者后者判断是没有必要的,
非空判断,默认由调用者提供
非线程平安的对象是否被正确保证线程平安?
DateFormat实例的format方法调用不是线程平安,
类似的情况不合适使用static定义
,建议使用ThreadLocal方式实现,
参看UnifiedCodeGenerator
一样用意的成员变量是否使用了一样的命名?
不同实体Entity、VO、BO之间表示同一含义的成员变量,
建议使用一样的名称,尽量不要出现,
有的地方用username,
有的地方用userName这样的情况
可靠性〔函数〕
入口对象是否都被进展了判断不为空?
入口数据的合法范围是否都被进展了判断?
是否对有异常抛出的方法都执行了try...catch保护?
是否函数的所有分支都有返回值?
int的返回值是否合理?
〔负值为失败,非负值成功〕
对于反复进展了int返回值判断是否认义了函数来处理?
关键代码是否做了捕获异常处理?
字典表定义是否用枚举,或者有一个统一的定义?
是否对方法返回值对象做了null检查,该返回值定义时是否被初始化?
是否对同步对象的遍历访问做了代码同步?
是否确认在对Map对象使用迭代遍历过程中没有做增减元素操作?
Map遍历时执行增减元素操作将抛出
ConcurrentModificationException,
对集合对象遍历时建议都不要进展增减元素操作。
线程处理函数循环内部是否有异常捕获处理,防止线程抛出异常而退出?
原子操作代码异常中断,使用的相关外部变量是否恢复先前状态?
函数对错误的处理是恰当的?
异常捕获后是否进展了日志记录或异常继续抛出?
异常捕获后假如无法处理需要继续抛出,
假如可以处理,建议将异常日志进展记录
是否构造方法中不调用当前对象的构造方法
严禁在构造方法中new一个当前对象
可维护性
实现代码中是否消除了直接常数?
〔用于计数起点的简单常数例外〕
是否消除了导致构造模糊的连续赋值?
〔如a=
(b=d+c
)〕
是否正确使用了日志记录?
是否有冗余判断语句?
〔如:
if
(b)
return
true;
else
false;
〕
“if
〞==?
“return
b;
〞;
制止使用类似“if/while(表达式
==
true)
或if/while(表达式
false)〞的判断
是否把方法中的重复代码抽象成私有函数?
代码警告
是否去除了多余导入的包或类?
是否去除了只定义未使用的部分变量?
严禁部分变量被定义或者初始化而未被使用,
这种情况需要删除该部分变量
是否将魔鬼数字修改为常量使用?
不允许直接使用除-2,-1,0,1,2,3,4,5,6,7,8,9,10外的
数字,除此外的数字需要定义常量使用
常量定义是否为static
final格式?
常量定义格式为public/protected//private
static
final
Type
TYPE,static和final顺序要保持一致
实现序列化的对象是否认义了serialVersionUID?
建议实现Serializable的类需要增加
“private
long
serialVersionUID
1L;
〞
可读性
是否用if
else构造交换了三元运算符?
表达式复杂情况下
不要使用(flag?
exp1:
exp2)语句,
该语句需要修改为if
else构造
代码注释率是否结余30%~60%之间?
代码注释率应落在30%~60%之间
性能
日志记录的Log,Logger对象是否认义为常量?
用于记录日志的Log,Logger对象在类中
定义必须是static
final的,建议定义为private的,
因为这类对象初始化比拟耗时,不利系统运行
日志
打印信息是否都用日志管理?
代码中建议不要使用打印信息,
只有在系统启动或系统即将退出时使用,