




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JTest检查的Java编程规范目 录1.前言32.JTest检查的编程规范32.1.编码规则32.2.按合约设计规则42.3.EJB规则42.4.代码格式规则62.5.垃圾回收规则72.6.全局静态分析规则72.7.初始化规则82.8.国际化规则82.9.Javadoc注释规则82.10.JUnit测试用例规则102.11.类的统计信息102.12.其它规则102.13.命名规范112.14.面向对象编程规则122.15.优化规则122.16.预防BUG规则142.17.工程项目统计152.18.兼容性规则152.19.安全性规则152.20.Servlet规则162.21.线程及同步规则162.22.不使用的代码规则171. 前言JTest可以对Java代码进行静态和动态分析,可以规范化统一编程规定和帮助开发人员预防潜在的编程错误。本文详细描述了JTest中采用的编程格式。2. JTest检查的编程规范JTest中共有518条规定,结合实际情况,选取了其中的199条。已经将适合的规则导出到文件中,开发人员只需将规则导入到JTest中即可。2.1. 规则导出文件JTest代码审查规定.property2.2. 如何导入到JTest中在JTest主菜单中,选择“Jtest”“Jtest Configurations”,弹出JTest的“TEST Configurations”设置对话框,在左端的面板中选择“User-Defined”,点击鼠标右键的“Import”菜单导入上述的property文件即可。以下的编程规则来源于JTest检查规范,对于其中的适合部分进行了说明。【说明】对于每条规则的利弊,请参见JTest联机帮助。2.3. 编码规则 CODSTA.ACDO-1避免在字符串常量前使用“new”操作符; CODSTA.ASI-3不用!对于任何没有使用非静态变量类成员变量的方法使用“static”修饰符; CODSTA.AUVT-3不用!对于“List”和“Set”的接口实现的类型使用“List”和“Set”声明; CODSTA.CLONE-2对于Cloneable 类声明“clone() throws CloneNotSupportedException“; CODSTA.CLS-4在比较是否相等时,将常量放在左边; CODSTA.CRS-4不用!在比较是否相等时,将常量放在右边; CODSTA.DCI-5不用!在interface中定义常量; CODSTA.DCTOR-3不用!在任何可能的情况下,都定义一个缺省的构造函数; CODSTA.DUN-5不用!在一个方法中,避免使用3个以上的“!”操作符; CODSTA.IMPT-4不用!不允许使用通配符“*”import类; CODSTA.IMPT2-4不用!使用通配符import类; CODSTA.ISACF-5可以考虑;避免在接口中定义常量; CODSTA.LONG-2使用“L”修饰符而不是“l”来表示“long”整数; CODSTA.MVOS-3避免在一个语句中声明多个变量; CODSTA.NCAC-2避免在“abstract”类的构造函数中调用其“abstract”方法; CODSTA.NCE-4在“catch”语句中避免使用“Exception”、“RuntimeException”和“Throwable”; CODSTA.NEA-1避免嵌套赋值; CODSTA.NTX-3避免抛出抛出“Exception”,而应该总是抛出“Exception”的子类; CODSTA.OGM-3不用!按照方法的名称顺序定义方法; CODSTA.OTOSM-3不用!总是重载“toString()”方法; CODSTA.OVERLOAD-4不用!避免重载多个相同参数的方法; CODSTA.OVERRIDE-4当重载“Object.equals()”方法时,总是重载“Object.hashCode()”方法; CODSTA.PML-4总是将“main()”方法放在最后; CODSTA.SMC-3不用!避免“switch”语句含有太多的“case”语句; CODSTA.UCC-2不用!对于只提供静态成员和方法的工具类,使用“private”的构造函数; CODSTA.UCDC-2不用!对于只提供静态成员和方法的工具类,提供“private”的构造函数; CODSTA.USN-2避免使用魔术常数; CODSTA.VDT-1避免在一个语句中声明多种类型的变量;2.4. 按合约设计规则共13个规则,全部不用!2.5. EJB规则 EJB.AMSC-2不用!避免访问和修改配置为安全性的对象; EJB.CDP-1Bean类必须声明为“public”; EJB.CNDA-1不允许声明Bean类为“abstract”; EJB.CNDF-1不允许声明Bean类为“final”; EJB.CRTE-1声明“ejbCreate()”方法为“public”而不允许声明为“static”和“final”; EJB.FNDM-1声明“finder”方法为“public” 而不允许声明为“static”和“final”; EJB.IECM-1在Bean类中,实现一个或多个“ejbCreate()”方法; EJB.IEPM-1在EntityBean 类中,实现一个或多个“ejbPostCreate()”方法; EJB.LNL-2在Bean类中,避免装载本地(native)库文件; EJB.MDBC-1在message-driven Bean类中,实现“ejbCreate()”方法; EJB.MEC-1在EntityBean中,对于每一个“ejbCreate”定义匹配的“ejbPostCreate”方法; EJB.MNDF-1在Bean类中,不允许定义“finalize()”方法; EJB.MRE-1对于SessionBean的remote interface和remote home interface抛出“java.rmi.RemoteException”例外; EJB.NAC-1在MessageDrivenBean类中,对于“ejbCreate()”方法,不允许有参数; EJB.NFDC-1Bean类必须提供“public”的构造函数; EJB.NFS-2在EJB组件中,对于所有的“final”成员变量声明为“static”; EJB.PCRTE-1声明“ejbPostCreate()”方法为“public”,而不允许声明为“static”和“final”; EJB.RILH-1在Bean类的local interface和local home interface中不允许抛出“java.rmi.RemoteException”例外; EJB.RT-1使“finder”方法返回值类型为“primary key”或者“primary keys”集合类型; EJB.RTC-1使SessionBean类的“ejbCreate()”方法返回值为“void”; EJB.RTP-1使“ejbPostCreate()”方法的返回值为“void”; EJB.RUH-2重用已经产生返回的EJB home接口,避免JNDI查找的低效率; EJB.TCE-1在remote home和local home的“create”方法中抛出“javax.ejb.CreateException”例外; EJB.TFE-1在remote home和local home的“finder”方法中抛出“javax.ejb.FinderException”例外; EJB.THISARG-1避免在参数中传递“this”引用; EJB.THISRET-1避免返回“this”引用; EJB.THREAD-2避免以任何方式启动、停止和管理线程,这些全部应该由应用服务器管理;2.6. 代码格式规则 FORMAT.CBRACE-3对于“”单独放在一行; FORMAT.CMS-3类型转换之后增加一个空格; FORMAT.DUT-3使用多个空格代替“Tabs”键; FORMAT.FCB-4避免将“”另起一行; FORMAT.IAD-3声明数组时,要将“ ”放在类型和变量名称之间; FORMAT.IND-2不用!使用4个空格的缩进格式; FORMAT.JSPH-2在每一个JSP文件的顶部增加文件注释; FORMAT.LL-2每行语句的长度是80个字符; FORMAT.MCH-2在每一个源文件的顶部增加文件注释; FORMAT.MSP-3不用!在方法名称和“(”之间增加一个空格; FORMAT.NSAB-3避免在“”之后书写语句; FORMAT.OSPL-1一行只书写一个语句; FORMAT.SAC-3在逗号之后增加一个空格; FORMAT.SAOP-3在赋值号的左右各增加一个空格; FORMAT.SAS-3在分号之后增加一个空格; FORMAT.SAUOP-3避免在前置的一元操作符和其操作数之间增加一个空格; FORMAT.SBOP-3在每一个二元操作符的前后各增加一个空格;s FORMAT.SBUOP-3避免在一元操作符和其操作数之间增加一个空格; FORMAT.SC-3在条件关键字和“(”之间增加一个空格; FORMAT.SCOP-3在“?”条件操作符的左右各增加一个空格; FORMAT.SLOP-3在逻辑操作符的左右各增加一个空格; FORMAT.SROP-3在关系操作符的左右各增加一个空格; FORMAT.UP-3对于“return”语句避免使用没有意义的括号;2.7. 垃圾回收规则 GC.AUTP-2在转换基本数据类型的“toString”时,避免创建不必要的临时变量; GC.DUD-3使用“long”代替“Date”; GC.FCF-1在“finalize()”中必须调用“super.finalize()”; GC.FM-1避免在“finalize()”中注销“listeners”; GC.GCB-5在一个方法中,要重复使用“getClipBounds()”的返回值,既不要调用“getClipBounds()”两次; GC.IFF-2在“finalize()”方法中,将对“super.finalize()”方法的调用发在“finally”程序块中; GC.NCF-1避免在程序中直接调用“finalize()”方法; GC.OSTM-2为了防止潜在的内存泄漏,要对“ObjectStreams”调用“reset()”方法; GC.STV-3避免对于各种集合(collection)使用“static”修饰符,因为其有可能无限制的增长;2.8. 全局静态分析规则共16个规则,全部不用!2.9. 初始化规则 INIT.CSI-2在构造函数中明确的初始化全部的成员变量; INIT.LV-3不用!在变量声明的地方明确的初始化全部的局部变量; INIT.NFS-2在变量初始化时,避免使用没有修饰为“final static”的成员变量; INIT.SF-2明确的初始化所有的“static”成员变量;2.10. 国际化规则共10个规则,全部不用!2.11. Javadoc注释规则 JAVADOC.BT-4避免使用不存在的“”标签; JAVADOC.MAJDT-3在类和接口的说明中,必须使用“author”标签的注释; JAVADOC.MRDC-1对于所有的“public”方法,必须使用“return”标签的注释; JAVADOC.MRDC2-2对于所有的“protected”方法,必须使用“return”标签的注释; JAVADOC.MRDC3-3对于所有的“private”方法,必须使用“return”标签的注释; JAVADOC.MRDC4-5在“private”方法中使用“return”标签的注释; JAVADOC.MVJDT-3在类的说明中,必须使用“version”标签的注释; JAVADOC.PARAM-1对于“public”方法,必须使用“param”标签的注释; JAVADOC.PARAM2-2对于“protected”方法,必须使用“param”标签的注释; JAVADOC.PARAM3-3对于“package-private”方法,必须使用“param”标签的注释; JAVADOC.PARAM4-5对于“private”方法,必须使用“param”标签的注释; JAVADOC.PJDCC-1对于所有的“public”类使用JavaDoc注释; JAVADOC.PJDCC2-2对于所有的“protected”类使用JavaDoc注释; JAVADOC.PJDCC3-3对于所有的“package-pritvate”类和接口使用JavaDoc的注释; JAVADOC.PJDCC4-5对于所有的“private”类和接口使用JavaDoc的注释; JAVADOC.PJDCF-1对于所有的“public”成员变量使用JavaDoc注释; JAVADOC.PJDCF2-2对于所有的“protected”成员变量使用JavaDoc注释; JAVADOC.PJDCF3-3对于所有的“package-private”成员变量使用JavaDoc注释; JAVADOC.PJDCF4-5对于所有的“private”成员变量使用JavaDoc注释; JAVADOC.PJDCM-1对于所有的“public”方法使用JavaDoc注释; JAVADOC.PJDCM2-2对于所有的“protected”方法使用JavaDoc注释; JAVADOC.PJDCM3-3对于所有的“package-private”方法使用JavaDoc注释; JAVADOC.PJDCM4-5对于所有的“private”方法使用JavaDoc注释; JAVADOC.SMJT-1对于标识为“synchronized public”的方法和程序块使用“concurrency”标签; JAVADOC.SMJT2-2对于标识为“synchronized protected”的方法和程序块使用“concurrency”标签; JAVADOC.SMJT3-4对于标识为“synchronized package-private”的方法和程序块使用“concurrency”标签; JAVADOC.THROW-1要对“public”方法中抛出的例外使用“throws”或者“exception”标签; JAVADOC.THROW2-2要对“protected”方法中抛出的例外使用“throws”或者“exception”标签; JAVADOC.THROW3-3要对“package-private”方法中抛出的例外使用“throws”或者“exception”标签; JAVADOC.THROW4-5要对“private”方法中抛出的例外使用“throws”或者“exception”标签; JAVADOC.TSMJT-3对于“toString”方法提供JavaDoc注释; JAVADOC.VMCR-3对于返回值为“void”的方法,避免使用“return”标签;2.12. JUnit测试用例规则 JUNIT.OSIC-2避免使用构造函数去初始化测试用例; JUNIT.OSUM-3总是重载“setUp()”方法; JUNIT.OTDM-3总是重载“tearDown()”方法;2.13. 类的统计信息共23个规则,全部不用!2.14. 其它规则 MISC.AFP-5不用!避免使用方法参数进行赋值; MISC.ARN-3返回0长度的数组而不是“null”值; MISC.ASFI-2不用!将只有“abstract”方法和“static final”的成员变量的类重新声明接口; MISC.AUO-1避免创建一个对象实例去访问“static”成员变量或者方法; MISC.BLKELSE-3对于“else”程序块要使用“”; MISC.BLKFOR-3对于“for”程序块要使用“”; MISC.BLKIF-3对于“if”程序块要使用“”; MISC.BLKWHL-3对于“while”程序块要使用“”; MISC.CLNC-1避免在“clone()”方法中调用构造函数; MISC.CLONE-1在所有的“clone()”方法中调用“super.clone()”; MISC.CTOR-4避免在构造函数中调用非“final”、非“static”和非“private”方法; MISC.DPRAPI-1避免使用过时的API方法; MISC.DUID-1对于所有的“Serializable”类创建一个“serialVersionUID”变量; MISC.FF-1对于“private”的常量变量使用“final”修饰符; MISC.FLV-4对于常量局部变量使用“final”修饰符; MISC.HMF-1避免在方法中声明与类成员变量同名的局部变量; MISC.MSF-4不用!避免两个以上的“static”成员变量; MISC.PCIF-1在“for”语句中要使用条件判断和增长变量; MISC.PCTOR-2避免对于非“public”类声明“public”构造函数; MISC.PFL-5尽量使用“for”循环替换“while”循环; MISC.PSFA-2避免使用“public static final”的数组; MISC.UBD-3如果需要精确计算的变量避免使用“float”和“double”类型变量; MISC.UST-2对于解析字符串,使用“StringTokenizer”代替“indexOf()”或者“substring()”方法;2.15. 命名规范 NAMING.CVN-5对于变量的名称尽可能使用约定成熟的名称; NAMING.GETA-1对于getter方法尽可能使用“get”命名; NAMING.GETB-3对于“booean”的getter方法尽可能使用“is,can,has,have”命名; NAMING.IFV-2对于“interface”的成员变量使用全部字符大写的命名; NAMING.IRB-1对于“is.”命名,只能作为返回值为“Boolean”的方法的名称; NAMING.NCL-2对于类,强制使用标准的命名规则:首字母大写; NAMING.NE-2对于例外,强制使用标准的命名规则:尾字母尾“Exception”; NAMING.NIF-2对于非“static”成员变量使用标准的命名规则:首字母小写; NAMING.NITF-2对于接口,强制使用标准的命名规则:首字母大写; NAMING.NLV-2对于局部变量,强制使用标准的命名规则:首字母小写; NAMING.NM-2对于非“static”方法,强制使用标准的命名规则:首字母小写; NAMING.NMP-2对于方法的参数,强制使用标准的命名规则:首字母小写; NAMING.NSF-2对于非“final static”成员变量,强制使用标准的命名规则:首字母小写; NAMING.NSM-2对于“static”方法,强制使用标准的命名规则:首字母小写; NAMING.PKG-3对于“package”的名称全部使用小写字母; NAMING.SETA-2对于setter方法,尽可能使用“set”命名; NAMING.USF-2对于“final static”成员变量,避免使用小写字母;2.16. 面向对象编程规则 OOP.AHF-1避免在子类中重载父类的成员变量; OOP.AHSM-2避免在子类中重载父类的“static”方法; OOP.APPF-2不用!避免“public”或者“package-private”的实例化成员变量; OOP.APROF-2不用!避免“protected”实例化成员变量;s OOP.IIN-5对于实现接口的类,避免对于接口的方法使用“abstract”或者空的函数体; OOP.LEVEL-2避免两个深度级别的内部嵌套类; OOP.LPF-4在代码排列中,首先编码所有的“public”和“package-private”方法或者成员变量; OOP.OPM-2不用!避免重载私有的“private”方法;2.17. 优化规则 OPT.AAS-3使用简短格式的赋值语句; OPT.CEL-3避免在循环语句中调用方法; OPT.CS-1在“finally”块中关闭streams; OPT.DIC-3在创建“ArrayList”、“HashMap”、“HashSet”、“Hashtable”、“Vector”和“WeakHashMap”时,必须定义初始的容量大小; OPT.IF-4不用!对于“if (cond) return; else return;”语句使用条件操作符; OPT.IFAS-4不用!对于“if (cond) a = b; else a = c;”语句,使用条件赋值语句; OPT.INSOF-5仅仅对于接口使用“instanceof”; OPT.IRB-2对于数组的循环拷贝,采用“System.arraycopy()”替换; OPT.LOOP-3不用!避免在循环体中创建变量; OPT.MAF-4不用!对于访问成员变量的方式使用“final”修饰符; OPT.PCTS-3对于单个字符的比较判断,使用“charAt()”替代“startsWith()”方法; OPT.SB-3在创建“StringBuffer”时,明确定义其容量; OPT.SDIV-4不用!使用右移操作符替代被2的指数值相除; OPT.SMUL-4不用!使用左移操作符替代被2的指数值相乘; OPT.STR-3对于单个字符,使用单引号替代双引号; OPT.SYN-3在循环中避免调用“synchronized”方法; OPT.TRY-3不用!将“try/catch/finally”程序块放在循环体外; OPT.UEQ-3避免使用“true”进行boolean类型的判断; OPT.UISO-1避免不必要的”instanceof“的判断; OPT.UNC-1避免不必要的类型转换; OPT.USB-2不用!对于非常量字符串,使用“StringBuffer”替代“String”; OPT.USC-2对于常量字符串,使用“String”替代“StringBuffer”; OPT.USV-3不用!尽可能使用“stack”类型的变量;2.18. 预防BUG规则 PB.ADE-1在条件程序块中,使用“”以避免易混淆的“else”语句; PB.AECB-1避免在“catch”块中使用空语句; PB.ASI-2避免在“if”语句中使用赋值语句; PB.CLP-2不允许将基本数据类型转换为比其更低精度的类型; PB.DCF-2避免比较“float”类型; PB.DCP-3不用!避免使用“+”连接数字字符串,而是先增加数字;s PB.DNCSS-1在“ComponentLponentResized()”中不要调用“setSize()”方法; PB.EQL-3不用!在“equals()”方法的实现中,要使用“getClass()方法; PB.EQL2-3不用!在“equals()”方法的实现中,要使用“instanceof”; PB.FEB-1避免在“for”语句中,使用空的循环体; PB.FLVA-2避免在“for”循环体中对于循环控制变量进行赋值; PB.IEB-1避免在“if”程序块中使用空的程序体; PB.IESM-3避免调用“String.equals(literal)”或者“String.equalsIgnoreCase(literal)”; PB.IMO-2在重载的时候一定要清晰的明确要重载的方法; PB.MAIN-1对于“main()”方法,仅仅用于程序的入口点; PB.MASP-2对于“serializable”的类的“readResolve()”和“writeReplace()”方法,使用“protected”修饰符; PB.MPC-2避免命名方法参数的名称与类的成员变量的名称一致; PB.NAMING-1避免命名非构造函数的名称与类名称一致; PB.NDC-1避免直接或者间接的子类化“Error”和“Throwable”; PB.NXRE-3避免直接或者间接的子类化“RuntimeException”; PB.OROM-2对于所有的“Serializable”类实现“readObject()”方法; PB.PDS-2对于“switch”程序块,提供“default:”语句; PB.SBC-1对于“switch”程序块,避免错误“case”语句; PB.TLS-1对于“switch”程序块,避免使用text条件; PB.UEI-3当比较对象时,使用“equals()”方法; PB.UEI2-3当比较字符串时,使用“equals()”方法;2.19. 工程项目统计共11个规则,全部不用!2.20. 兼容性规则 PORT.ENV-1避免使用“System.getenv()”; PORT.EXEC-3避免使用“Runtime.exec()“; PORT.LNSP-1避免在程序中硬编码“n”、“r”作为换行符; PORT.NATV-3不用!避免使用用户定义的“native”方法; PORT.PEER-1避免直接使用“java.awt.peer.*”接口方法;2.21. 安全性规则 SECURITY.CLONE-3使你自己定义的“clone()”方法为“final”; SECURITY.CMP-2避免按照名称比较类的实例对象; SECURITY.INNER-1使所有的内部类“private”; SECURITY.PKG-5不要依赖“package”的作用域; SECURITY.SER-3使你
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025竹材(竹炭、竹制品)买卖合同
- 2025简易货物买卖合同模板
- 高中化学实验操作:化学实验技能提升教学计划
- 干股赠与协议
- 企业内部培训材料与资料库管理工具
- 2025如何合法终止房屋租赁合同
- 粮食储备库信息技术部招聘面试经典题及答案
- 2025年工勤技能岗位技师驾驶员试题及答案
- 2025年高中技术学业水平考试题库资料及答案指导
- 2025年高级生命支持(ACLS)理论考核试题库(+答案解析)
- 医院安保课件
- 文印员考试题库及答案
- 2025年涂料行业研究报告及未来发展趋势预测
- 2025年部编版新教材语文九年级上册教学计划(含进度表)
- 2025河北唐山某国有企业单位招聘劳务派遣工作人员44人笔试参考题库附带答案详解(10套)
- 班主任与家长沟通课件
- 2025年安庆怀宁县事业单位招聘考试试题【答案】
- 预防残疾知识讲座课件
- 浪漫七夕领证活动方案
- 大型活动策划组织与执行合同
- 培训机构教师如何做续费转介绍
评论
0/150
提交评论