WEB开发网
开发学院软件开发Java Java 理论与实践: 平衡测试,第 1 部分:不要仅编... 阅读

Java 理论与实践: 平衡测试,第 1 部分:不要仅编写测试,还要编写 bug 检测器

 2010-01-11 00:00:00 来源:WEB开发网   
核心提示: 将检测器包装为插件创建新的 bug 检测所需的最后一步是将其打包为一个插件,FindBugs 插件包含一个或多个 bug 检测器、一个部署描述符和一个资源文件,Java 理论与实践: 平衡测试,第 1 部分:不要仅编写测试,还要编写 bug 检测器(6),它们被打包成一个 JAR 文件,放在 F

将检测器包装为插件

创建新的 bug 检测所需的最后一步是将其打包为一个插件。FindBugs 插件包含一个或多个 bug 检测器、一个部署描述符和一个资源文件,它们被打包成一个 JAR 文件,放在 FindBugs 安装的插件目录中。称为 findbugs.xml 的部署描述符将定义已知的 bug 检测器和它报告的错误。称为 messages.xml (对于本地化版本称为 messages_xx.xml)的资源文件定义特定于语言的、将由 FindBugs GUI 使用的字符串,用它描述所报告的 bug。清单 5 和清单 6 显示了示例 bug 检测器的部署描述符和资源文件。插件 JAR 中可以包括多个资源文件的本地版本;部署描述符和资源文件放置在插件 JAR 的顶级目录中。


清单 5. 示例 bug 检测器的部署描述符
<FindbugsPlugin xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="findbugsplugin.xsd" 
  pluginid="com.briangoetz.findbugs.plugin" 
        defaultenabled="true" 
        provider="Brian Goetz" 
        website="http://www.briangoetz.com"> 
 
 <Detector class="com.briangoetz.findbugs.plugin.CallSystemGC" 
     speed="fast" 
     reports="SYSTEM_GC" /> 
 
 <BugPattern abbrev="GC" type="SYSTEM_GC" category="PERFORMANCE" /> 
</FindbugsPlugin> 
<


清单 6. 示例 bug 检测器的资源文件
<MessageCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:noNamespaceSchemaLocation="messagecollection.xsd"> 
 
 <Plugin> 
  <ShortDescription>Brian's plugin</ShortDescription> 
  <Details></Details> 
 </Plugin> 
 
 <Detector class="com.briangoetz.findbugs.plugin.CallSystemGC"> 
  <Details> 
<![CDATA[ 
Finds calls to System.gc(). 
]]> 
  </Details> 
 </Detector> 
 
 <BugPattern type="SYSTEM_GC"> 
  <ShortDescription>Method calls System.gc()</ShortDescription> 
  <LongDescription>Call to System.gc() method in {1}</LongDescription> 
  <Details> 
<![CDATA[ 
Library code should not call System.gc() 
]]> 
  </Details> 
 </BugPattern> 
 
 <BugCode abbrev="GC" >Garbage collection</BugCode> 
</MessageCollection> 

根据 JDK 1.4.2 类库构建和包装插件,并运行它,这会为我们带来意想不到的效果:com.sun.imageio 中的几个类(包括 JPEGImageReader 和 JPEGImageWriter)将调用 System.gc()!此结果还有另一个好处,即静态分析的灵活性:创建 bug 检测器后,它可以在任何地方查找 bug。

结束语

静态分析和自定义 bug 检测器是提高软件质量的非常有效的方法。通过为已知 bug 模式创建检测器,我们不仅可以在特定项目的当前代码基址中搜索 bug 模式,还可以在当前或以后的任何项目中搜索 bug 模式。创建 bug 检测器所付出的额外努力将来会为您带来质量方面的丰厚回报。

本文示例源代码或素材下载

上一页  1 2 3 4 5 6 

Tags:Java 理论 实践

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