CSDN博客

img somat

TogetherEC 6.3审计功能简单中文注解

发表于2004/10/20 16:49:00  1725人阅读

分类: Java

Together 6.3 for Eclipse 3.0这个插件非常有用。我花了点时间看了Audits功能的docs,没有全部翻译,做了一些简单的中文注解。贴上来跟大家共享一下。这些条款中有一些对我们的设计、编码很有指导作用。

Arrays and References 数组和引用
Accessing null Reference (ANR) 访问空引用
Array Index is Out of Range (AIOR) 数组下标超出范围
Array Length is Negative (ALN) 数组长度是负数
Array Length is Too Large (ALTL) 数组长度太大
Maybe Accessing Null Reference (MANR) 可能访问空引用
Maybe Array Index is Out of Range (MAIOR) 数组下标可能超出范围
Maybe Array Length is Negative (MALN) 数组长度可能是负数

Branches and Loops 分支和循环
Case Label is Unselectable (CLU) 该case分支不可能被执行
Infinite Loop (IL) 检测出无限循环
Infinite Recursion (IR) 检测出无限递归
Label is Not Used (LNU) 未被使用的标签
Loop Body is Executed Exactly Once (LBEEO) 循环体实际只被执行一次
Loop Body is Never Executed (LBNE) 循环体实际不会被执行
Statement is Unreachable (SU) 永远不可能被执行的语句

Coding Style 代码风格
switch Statement Should Include the Default Case (SSSIDC) switch语句应该包含default的情况
Accessing static Members by the Descendant Class Name (ASMDCN) 不应该通过子类访问父类的静态成员(属于哪个类就直接用哪个类)
Accessing static Member through Object (ASMO) 不应该通过对象来访问静态成员(直接使用类)
Assignment to Formal Parameter (AFP) 对形参赋值(可能是错误的,考虑使用临时变量)
Complex Assignment (CA) 复杂的赋值
Complex Initialization or Update Clause in for Loop (CIUCFL) 在循环里进行复杂的初始化或更新子语句
Declare List and Set Variables with the type of their interface (DLSV) 尽量使用List和Set接口来定义变量,而不是具体类型
Long File (LF) 尽量避免文件太长(SUN约定不要超过2000行)
Multiple Statements on One Line (MSOL) 避免一行书写多个语句
Negation Operator in if Statement (NOIS) 尽量不在if语句里使用非操作(交换if else的位置代替)
Non-final Static Attribute (NFSA) 尽量将静态属性设成final
Numerical Literal in Code (NLC) 不要直接使用数字,用命名常量代替
Operator ? : Should Not Be Used (OSNBU) 尽量不使用?操作符
Parenthesize Conditional expression in Operator ? : (PCO) 在?操作时用括号将条件表达式括起
Place Constants on the Same Side of comparisons (PCSS) 将常量放置在比较符的同一侧
Place Declaration at the Beginning of Block (PDBB) 将声明放置在语句块的开始处
Provide Incremental in for Statement (PIFS) 应该在for语句里提供增量(否则不要使用for语句)
Referencing Implementation Package (RIP) 引用了实现包(应该尽量使用接口包)
Restricted Class Declaration (RCD) 封闭的类声明(导致外部无法访问)
String Literal (SL) 字符串硬编码(尽量使用资源文件)
Temporary Variable is Used for Several Purposes (TVUSP) 临时变量被用于多种目的(尽量做到目的明确)
Use this Explicitly to access class members (UTE) 使用this明白表示使用的是类成员
Use Abbreviated Assignment Operator (UAAO) 尽可能的使用简写的赋值操作(如用a += i代替a = a + i)

Critical Errors 关键性错误
Command Query Separation 查询方法(不改变状态)与命令方法(改变状态)没有分开(要表达准确)
Hiding Inherited Attribute 子类重新定义了父类的属性(使用了同一属性名)
Hiding Inherited Static Method 子类重新定义了父类的静态方法(使用了同一方法名)
Inaccessible Matching Constructors or Methods 不易匹配的构造函数或方法(参数的类型相近不易区别)
Index Out of Bounds 下标越界
Invalid Method Call Order 无效的方法调用顺序(通过配置文件fsa.xml确定)
Invalid Type Cast Or Check 无效的类型强制转换或检查
Multiple Visible Declarations with the Same Name 可视的属性名和方法名相同(易造成误解)
Overriding Non-Abstract Method with Abstract Method 将父类的非抽象方法覆写成抽象方法
Overriding Private Method 将父类的私有方法覆写了
Overriding Within Subclass 子类没有正确覆写父类方法,而变成重载了新方法
Resource Not Found In Boundle 所需资源没有在资源包中发现

Declaration Style 声明风格
Abstract Class Declaration (ACD) 检查抽象类声明(没有包含抽象方法或者构造方法是public的都是有问题的)
Always Override Object.hashCode() when you override Object.equals() (OHCE) 当覆写equals()时就应该同时也覆写hasCode()
Avoid using Universal Exception Specifiers (AUES) 避免使用全能的异常,应该使用具体的异常
Class Should be Interface (CSI) 这个类可以做成接口
Conflict With System Class (CWCS) 命名与系统类名冲突
Constant Private Attribute Should be Final (CPASBF) 私有的常量属性应该定义成final
Constant Variable Should Be Final (CVSBF) 常量变量应该定义成final
Declare clone() throws CloneNotSupportedException for Cloneable class (DCFC) 声明clone()方法时要throws CloneNotSupportedException
Declare Variables in Separate Statements (DVSS) 用分开的语句声明变量
Define Constant in Interface (DCI) 在接口里定义常量(不在类里定义)
Hiding Name (HN) 可能错用了成员变量
Incorrect main() Method Declaration (IMMD) "不正确的main()方法声明(一般为
public static void main(String[]))"
Inner class does Not Use Outer class (INUO) 内嵌类没有使用外部类(这时建议将内嵌类声明为static的)
Instantiated Class Should Be final (ICSBF) 这条建议所有可以被实例化的类应该声明为final(失去灵活性)
Member can be Made private (MCP) 成员可以被声明为private
Non-static method does Not Use Instance variables (MNUI) 非静态方法没有使用实例变量(那么就可以将方法声明为静态的)
Order of Declaration of Class Members (ODCM) 类成员的顺序(一般就为:类(静态)变量,实例变量,构造方法,其他方法,且按public->protect->package->private的顺序)
Place Operations with Same Name Together (POSNT) 将相同名称的操作放在一起
Place Public Class First (PPCF) 将public类放在最前面
Serializable Class Declaration (SCD) 可串行化类的声明是否正确(当串行化类不包含non-static和non-transient域时,当继承的父类是非串行化的且没有可访问的无参数构造方法时,给出警告)
Utility Class Declaration (UCD) 工具类的声明应该将构造方法设为private

Design By Contract 契约式设计
Design By Contract condition Violation (DBCV) 是否违反契约式设计

Design flaws 设计缺憾
Data Class (DC) 数据类(缺乏行为并严重依赖于其他类的类)
Data Clump (DCL) 数据丛(数据和操作可以拆分到不同类的类)
Feature Envy (FE) 功能羡慕(某类的方法实际上对另外一个类的数据更感兴趣,意味着这个方法可能放错了地方)
Field is Used as Temporary Variable (FUTV) 域被当作临时变量使用
God Class (GC) 上帝类(几乎无所不能的类)
God Method (GM) 上帝方法(类似上帝类)
God Package (GP) 上帝包(包含过多功能的包,给重用带来负担)
ISP Violation (ISPV) 违反接口分离原则(尽量不在一个接口里定义太多功能)
Long Message Chain (LMC) 委托方法构成了太长的消息链(A类的a方法调用B类的a方法,而B类的a方法又调用C类的a方法,如此下去)
Member is Used by only One Subclass (MUOS) 父类的成员仅被其中的个别子类使用(没有通用性,应该下放到子类)
Misplaced Class (MC) 在上帝包里可能是错放到这个包的类
Refused Bequest (RB) 拒绝遗产(拒绝使用父类的数据或方法,这可能是类关系没设计好)
Shotgun Surgery (SS) 霰弹式修改(指对某一处的修改影响会很大,而且很难找出涉及的影响范围,不容易重构)
Subclasses Differ only in Methods returning Constant values (SDMC) 各个子类的不同之处仅是方法返回的常量值不同而已
Subclasses have the Same Member (SSM) 各个子类拥有相同的成员(应该放到父类)
Suspicious switch statement Usage (SSU) 始终怀疑switch语句的使用(switch往往是面向过程的产物,应该尽量考虑用面向对象的方法去掉switch语句)
Use Interface Instead of Implementation(UIII) 使用接口代替具体的实现(遵循基于接口编程原则)
Use Singleton Pattern(USP) 使用单实例模式(对那些只有静态变量的类,应该考虑使用单实例模式,并只暴露一个静态方法来获得实例,其他方法非静态)
Wide Subsystem Interface (Lack Of Facade) (WSI) 太多子系统接口(缺乏外观,应使用外观模式整合)

Documentation 文档
Bad Tag in Javadoc Comments (BTJC) 在Javadoc注释里存在不好的标签
Provide File Comment (PFC) 提供文件注释(SUN约定)
Provide Javadoc Comment (PJDC) 提供Javadoc注释(SUN约定)

Duplicated Code 重复代码
Duplicated Code (DC) 重复代码
Duplicated Code in Conditional Branches (DCCB) 在条件分支里存在重复代码
Duplicated Code in Constructors (DCC) 在构造方法里存在重复代码

Expressions 表达式
Argument Value is Invalid (AVI) 参数值无效
Comparison always produces the Same Result (CSR) 比较总是返回相同的值(多余的比较)
Data is Lost in result of type conversion (DL) 类型转换导致数据丢失(大整数转换为小整数时)
Disjoint Bit Masks (DBM) 不相交的位掩码(避免位操作表达式的比较)
Division By Zero (DBZ) 除零(运行时会抛出ArithmeticException)
Expression Value is Always Zero (EVAZ) 表达式的值总是零
Expression Value is Constant (EVC) 表达式的值是常量
Expression Value is Not Used (EVNU) 表达式的值未被使用
Expression value is Floating-point Infinity or NaN (FIN) 表达式的值是无穷大的浮点数或不是数字
Integer Division in Floating-point Context (IDFC) 浮点内容里进行整数除(出现未预期的整数值而非浮点值)
Integer Overflow or Underflow (IOU) 整数上溢或下溢(注意类似int或long类型值的范围)
Maybe Data is Lost in result of type conversion (MDL) 类型转换后可能导致数据丢失
Maybe Shift Count is Out of Range (MSCOR) 移位计数可能超出范围
Operation has No Effect (ONE) 没有引起影响的操作(多余的操作)
Shift Count is Out of Range (SCOR) 移位计数超出范围(确定)

Metric Violations 违反统计
Metric violation (MV) 跟TogetherEC的Metric功能结合(功能非常强大,统计很细)

Naming Style 命名风格
Class Name Should Match File Name (CNSMFN) 类名应该跟文件名匹配
Name of Exception Class (NEC) 异常的命名应该以Exception结尾
Naming Conventions (NC) 命名约定(类或接口名开头大写,方法、域、变量名开头小写,常量应该全大写等等)
Package Name (PN) 包名应该以域名(com,org等)或国家代码(cn,ru等)开始
Use Conventional Variable Names (UCVN) 使用约定的变量命名

Performance 性能
Appending to String Within loop 在循环里对String进行累加(用StringBuffer代替)
Avoid using 'new' keyword when Creating String Objects to hold String Literal 避免使用new创建String对象(直接用字符串)
Complex Loop Expression 避免在循环里使用复杂表达式
Declaring Variables Inside Loops 避免在循环里声明变量
Duplicated Type Cast 重复的类型强制转换
Inefficient Conversion 低效率的转换(用Integer.parseInt(s)代替Integer.valueOf(s).intValue(),用Integer.toString(i)代替new Integer(i).toString())
Multiple String Concatenations 避免使用多个String拼接(用StringBuffer代替)
Replace nested If-Else statements With Switch 用switch代替嵌套的if-else
Store Returned Value in Local Variable 避免在本地变量里存储返回值
Too Many Switch Statement Cases 过多的switch条件

Portability 可移植性
Avoid Hard-Coded '/n' or '/r' as Line Separator 避免使用/n或者/r硬编码成换行符(用System.getProperty("line.separator")代替)
Avoid Using 'java.awt.peer.*' Package 避免使用java.awt.perr.*包(只用于AWT内部)
Avoid Using user-defined Native methods 避免使用用户自定义的Native方法
Identifier conflicts with keyword 使用了与关键字冲突的标识符(包括包名,可能引起冲突的标识符:const、delegate、enum、goto、internal、template、virtual)
Implementation of System Interface 避免实现系统级的接口(如java.sql包里的接口)
Non-Portable Call 避免不可移植的调用(如System.getenv(),应用System.getProperty()代替)

Possible Errors 可能的错误
Assignment in Conditional Expression 在条件表达式里赋值
Assignment to 'for' Loop Variable 在for里给变量赋值
Break Statement is Missing before Case clause case后没有break语句(如特意,应加上注释)
Calling Abstract Method from Constructor in abstract class 在抽象类的构造方法里调用了抽象方法(没有初始化完时会出错)
Comparing Floating-Point Values 对浮点值进行比较(少用==)
Comparison of Short with Char 直接比较short和char(将short进行&0xffff后再比较)
Constants with Equal Values 拥有相同值的多个常量
Contradictory Operation with Container Class 对容器进行错误的操作(如放入Point,取出后却Cast成Line)
Contradictory Type Cast Or Check 错误的类型Cast和检查
Discordant Usage of Cast Operator and Check of Returned Value of qualificator method 检查由错误使用类型代码引起的Cast错误
Discordant usage of 'instanceof' and Cast operators instanceof和Cast操作不一致
Empty Catch Block 空的Catch块
Enumeration Constant is Not Handled in Switch statement 枚举常量没有全被switch处理
Explicit Call to 'finalize()' 调用finalize()
Explicitly Initialize All Variables 尽量多的初始化所有变量
Heterogeneous Container 不要将不同类型的对象放在同一容器里
Incompatible Enumeration Types usage 没有一致使用枚举常量
Incorrect 'finalize()' Method 错误的finalize()方法(finalize()只有一个形式,且最后需要调用super.finalize())
Incorrect Array Copy 错误的数组拷贝(检查System.arraycopy()是否正确使用)
Iteration Variable is Not Used in loop body 迭代变量没有在循环里使用
Maybe Incorrect Enumeration Definition 可能是错误的枚举定义(能分析里值重复或没有按序列的常量定义)
Maybe Wrong Assumption About Operator Precedence 可能是错误的假定了算符优先级
Method is Not Overriden by Mistyping 可能笔误也没有重载方法
Misplaced Argument Position 可能弄错了参数位置(形参和实参的名字一样时可以查出)
Mixing Logical Operators Without Parentheses 可能没加括号也存在逻辑错误
Non-Case Label in Switch statement 在switch语句里少了case,造成误以为是Label
Non-constructor Method with the Same Name as declaring Class 起了与构造方法一样名字的方法名
Object may be Not Finalized 对象可能不被释放(没有放在finally块里)
Operation Has Suspicious Side Effects 操作可能会有副作用
Place Statement In Block 应将语句放在块里(用{})
Possible Integer Overflow Before Conversion to Long int转换成long时可能溢出
Public and Package Attributes 暴露属性(封装性不好)
Replace Inequality Comparison with Equality Comparison 尽量用相等、不等代替大于、小于
Socket IO Problems Socket IO问题
Statement with Empty Body 没有内容的语句
Static Attribute Used for Initialization 非final static属性不应该用来做初始化
Suspicious Break/Continue 可能是错误的break/continue
Suspicious For Statement 可能是错误的for
Use 'L' instead of 'l' at the end of integer constants 表示整数常量时用大写L代替小写l
Use 'equals' instead of '==' 尽量使用equals代替==

Superfluous Content 多余的内容
Empty synchronized statement or finally block (ESF) 空的语句或finally块。
Equality Operations on Boolean Arguments (EOBA) "避免在布尔参数上进行相等比较(直接使用或用!来判断)
如success == false换成!success"
Exception declared in throws clause is Never Thrown (ENT) throws声明的异常永远不会被抛出
Import List Construction (ILC) 重复的引入(用*引入又具体引入)
Member is Not Used (MNU) 不被使用的成员
Obsolete interface modifier (OIM) 已废弃的接口修饰符(abstract修饰符不建议修饰接口)
Return Value is Not Used (RVNU) 返回值从不被使用
Unnecessary Member Modifier (UMM) 不必要的成员修饰符
Unnecessary return statement parentheses (URSP) 多余的返回语句括号
Unnecessary type Cast (UC) 多余的类型强制转换
Unused Local Variable or Formal Parameter (ULVFP) 未被使用的本地变量或者形参

Synchronization 同步
Avoid using Thread_sleep() (AUS) 调用Thread.sleep()的线程无法被恢复除非sleep的时间到期。推荐使用Object.wait()代替
Avoid Using Thread_yield() (AUY) Thread.yield()方法的行为严重依赖于多线程模型。为此应该避免使用这个方法
Field is Accessed concurrently with Different Lock Sets (FADLS) 可能因为使用不同的锁而导致某些域没有控制同步访问
Field is Accessed concurrently Without Locking(FAWL) 没有使用锁也导致某些域没有控制同步访问
Locking monitor can cause deadlock (LMCCD) 可能导致死锁的Locking monitor
Method wait() can be Invoked with Monitor of other object Locked (MWIML) 方法wait()可能通过其他对象的监视器锁定后调用。这导致实际对象没有挂起或延迟挂起。(wait操作会放弃CPU时间挂起线程)
Non-Synchronized Access to Class (NSAC) 对类进行了非同步访问(针对那些非线程安全的类)
synchronized Attribute is Not Needed (SANN) 多余的synchronized
synchronized Method is Overridden by Non-synchronized method (SMONS) 同步方法被覆写成非同步方法
synchronized Modifier (SM) 尽量使用同步块代替同步整个方法
Wait or Notification Method is Called from Non-Synchronized Method (NMCNSM) 等待或通知方法被通过非同步方法调用(运行期错误)。

 

阅读全文
0 0

相关文章推荐

img
取 消
img