WEB开发网
开发学院软件开发Java 追求代码质量: 用 AOP 进行防御性编程 阅读

追求代码质量: 用 AOP 进行防御性编程

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示:开发人员测试的主要缺点是:绝大部分测试都是在理想的场景中进行的,在这些情况下并不会出现缺陷 —— 能导致出现问题的往往是那些边界情况,追求代码质量: 用 AOP 进行防御性编程,什么是边界情况呢?比方说,把 null 值传入一个并未编写如何处理 null 值的方法中,但如果仔细看的话,您会注意到

开发人员测试的主要缺点是:绝大部分测试都是在理想的场景中进行的。在这些情况下并不会出现缺陷 —— 能导致出现问题的往往是那些边界情况。

什么是边界情况呢?比方说,把 null 值传入一个并未编写如何处理 null 值的方法中,这就是一种边界情况。大多数开发人员通常都不能成功测试这样的场景,因为这没多大意义。但不管有没有意义,发生了这样的情况,就会抛出一个 NullPointerException,然后整个程序就会崩溃。

本月,我将为您推荐一种多层面的方法,来处理代码中那些不易预料的缺陷。尝试为应用程序整合进防御性编程、契约式设计和一种叫做 OVal 的易用的通用验证框架。

将敌人暴露出来

清单 1 中的代码为给定的 Class 对象(省去了 java.lang.Object,因为所有对象都最终由它扩展)构建一个类层次。但如果仔细看的话,您会注意到一个有待发现的潜在缺陷,即该方法对对象值所做的假设。


清单 1. 不检验 null 的方法

public static Hierarchy buildHierarchy(Class clzz){ 
 
 Hierarchy hier = new Hierarchy(); 
 hier.setBaseClass(clzz); 
 Class superclass = clzz.getSuperclass(); 
 
 if(superclass != null && superclass.getName().equals("java.lang.Object")){ 
 return hier; 
 }else{    
 while((clzz.getSuperclass() != null) && 
  (!clzz.getSuperclass().getName().equals("java.lang.Object"))){ 
   clzz = clzz.getSuperclass(); 
   hier.addClass(clzz); 
 }     
 return hier; 
 } 
}   

1 2 3 4 5 6  下一页

Tags:追求 代码 质量

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接