• 测试技术
  • 博客
  • 视频
  • 开源
  • 论坛
  • 沙龙
  • 下载
  • 杂志
  • 招聘

字号: | 推荐给好友 上一篇 | 下一篇

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

发布: 2008-6-13 14:39 | 作者: 不详 | 来源: 领测软件测试网编辑整理 | 查看: 30次 | 进入领测软件测试网论坛讨论

领测软件测试网 软件测试技术第一门户yo^vX A"^~k

"s0f#baybi9d)M0@-En软件测试技术第一门户a1M(t?"A@-p Si

关于静态分析软件测试技术第一门户.^cR[S
软件测试技术第一门户PFz$s|W'|,F%`A+XE

诸如 FindBugs 等静态分析工具通过将字节码和一系列 bug 模式相匹配来检验类或 JAR 文件从而寻找潜在问题。针对样例的代码运行 FindBugs 不会 揭示出清单 1 中找到的 NullPointerException

5g\L)c ]P@I2L
软件测试技术第一门户j$dCx1t_

防御性编程软件测试技术第一门户['w i#{-Q;h{

c|/HE"?7k7bN一旦出现这个问题,下一步就是要拿出对抗的策略。问题是我控制不了这个方法能否接收这种输入。对于这类问题,开发人员通常会使用防御性编程技术,该技术专门用来在发生摧毁性后果前捕捉潜在错误。软件测试技术第一门户3X7c}`1|

Z7\-~*Wf!r4S?M对象验证是处理不确定性的一项经典的防御性编程策略。相应地,我会添加一项检验来验证 clzz 是否为 null,如清单 3 所示。如果其值最终为 null,我就会抛出一个 RuntimeException 来警告他人注意这个潜在问题。

K7zlA(G4~
)x,U wu:pM清单 3. 添加验证 null 值的检验 软件测试技术第一门户(v3Am/J9p/Uu(Oeo
public static Hierarchy buildHierarchy(Class clzz){
 
 if(clzz == null){
  throw new RuntimeException("Class parameter can not be null");
 }

 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;
 }
}     

v-M&Us E