当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

Java理论与实践:均衡测试,第2部份:编写和优化bug检测器[Java编程]

赞助商链接



  本文“Java理论与实践:均衡测试,第2部份:编写和优化bug检测器[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

这一简短系列的 第 1 部份 介绍了若何举行有效测试,它构建了 FindBugs 插件来查找一个简单的 bug 情势(只需调用 System.gc() 便可).Bug 情势会 标识有问题的编码实践,它们常常位于 bug 所在的区域.当然,并非全部出 现 bug 情势的地方都一定呈现 bug,但这并不能扼杀 bug 情势检测器的宏大作 用.一个有效 bug 情势检测器的主要功效是发现更高百分比的可疑代码,使该 情势具有更大的利用代价.成立 bug 情势检测器可以提高利用代价;成立检测 器之后,无论是目前还是将来,您都可以在您需求的任何代码上运行它,并且您 大概对发现的问题感到惊奇.比方,第 1 部份 中的简单检测器显示了对 System.gc() 的调用,在 JDK 1.4.2 中,它躲藏在 JPEG 图象 I/O 库中.

编写检测器可以查找对特定静态办法的调用,这并不艰难,但是大大都 的 bug 检测器都包含相当多的解析和实现.在这一期的文章中,您将开辟一个 称为 RuntimeException capture 的更小 bug 情势的检测器(目前,FindBugs 发行版中已包含此 bug 检测器.)

RuntimeException 捕捉

用 Java™ 语言举行非常处理的一个长处是:非常是一些对象,try-catch 机 制理解非常范例的分层构造,并在客户机若何处理错误处理方面供应实际机动性 .比方,假如不能找到文件,则 FileInputStream 构造函数会抛出 FileNotFoundException,该非常是 IOException 的一个子类.此传统用法答应 客户机处理未发现文件的条件,这些条件是从其他与文件相关的条件中别离出来 的(假如他们喜好单独捕捉 FileNotFoundException).但是,他们还可以利用 捕捉 IOException 的办法处理全部与文件相关的错误条件.

另一方面,非常处理的主要缺陷是:在精确利用非常时,易于成立带有三行 或四行业务逻辑以及 20 或 30 行非常处理的办法.因为错误恢复代码在测试时 简单呈现错误并且履行艰难,使一部份专门用于非常处理的代码无所适从并简单 出错.这种情形的典型示比方清单所示,此中带有两行 “真的” 代码的办法需 要三个独立的捕捉块,每个捕捉块都履行完好相同的操作 —— 记录该非常:

清单 1. 多个相同的捕捉块

public void addInstance(String className) {
   try {
     Class clazz = Class.forName(className);
     objectSet.add(clazz.newInstance());
   }
   catch (IllegalAccessException e) {
     logger.log("Exception in addInstance", e);
   }
   catch (InstantiationException e) {
     logger.log("Exception in addInstance", e);
   }
   catch (ClassNotFoundException e) {
     logger.log("Exception in addInstance", e);
   }
}

请拜见清单 1,您大概尝试将三个捕捉块归并成捕捉 Exception 的单独捕捉 块,因为每个捕捉块的捕捉恢复操作是相同的.乍一看,该战略仿佛是一个好方 法 —— 但代码副本有错误,所以整合这些复制途径应当是一种改良.不过,此 “改良” 常常会带来意想不到的后果.因为 RuntimeException 扩大了 Exception,将三个捕捉块归并成一个捕捉块(如清单 2 所示),所以这会更改 语义,目前,未经查抄的非常将被记录(而不传达).此 bug 情势(此中 RuntimeException 简单被超大捕捉块捕捉)也称为 RuntimeException 捕捉.

清单 2. RuntimeException 捕捉 bug 情势 —— 不要履行此情势

public void addInstance(String className) {
   try {
     Class clazz = Class.forName(className);
     objectSet.add(clazz.newInstance());
   }
   catch (Exception e) {
     logger.log("Exception in newInstance", e);
   }
}


  以上是“Java理论与实践:均衡测试,第2部份:编写和优化bug检测器[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .