当MAP中不存在” bob”的key值时,name就会取到空指针。
2、资源连接未关闭,比如文件,数据流,DB的连接操作完成后,
try { fr = new FileReader(“D:/userSecondCheckRecoder.txt”); } catch (FileNotFoundException e1) { e1.printStackTrace(); } |
需要补充关闭IO语句,fr.close()
3、性能处理技巧,减少内存无谓的耗损
String s = “”;
for (int i = 0; i < field.length; ++i) { s = s + field[i]; } |
以上代码功能上是通过的,但存在性能上不必要的耗损,在每次迭代中,字符串转换为stringbuffer/Builder,并转换回一个字符串。随着越来越多的字符串中的每一次迭代中,这会增加二次迭代的次数,使用StringBuffer效率更高。
更改为以下方式更好:
StringBuffer buf = new StringBuffer(); for (int i = 0; i < field.length; ++i) { buf.append(field[i]); } String s = buf.toString(); |
4、规范:包含命名规范(类名,方法名,常量变量名),未被使用的变量或者方法,硬编码绝对路径等。比如
File file = new File(“D:/ CheckRecoder.txt”); |
5、非法的参数和计算
List<Long> a = new ArrayList<Long>();
a.add(10L); a.add(11L); System.out.println(a.contains(10)); |
应该修改为:
System.out.println(a.contains(10L)); |
或者比如荒谬的计算:
code = code – code; |
从例子可以看出,代码检查比动态测试更有效率,能快速找到缺陷,发现30%~70%的逻辑设计和编码缺陷;静态测试具有发现缺陷早、降低返工成本、覆盖重点和发现缺陷的概率高的优点。自动化维护成本低,且测试较为提前,对缺陷预防很有帮助。
四、主流静态测试工具介绍
主流的JAVA代码静态自动化扫描工具:FINDBUGS介绍
FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。FindBugs可以在ECLIPSE插件,构建工具(MAVEN,ANT),命令行等方式运行。FindBugs自带了丰富的故障探测器,且支持用户自定义规则探测器。运行FindBugs对代码扫描后根据故障类型结果如图:
关于更多故障类型的解读和检测器的自定义方式,将在后面的博文中总结。