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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |