background image

Java 编程:平衡测试(三)面向编程

面向方面编程(AOP)是项大有前途的新技术,但是采用新技术可能有风险(当然,不 

采用新技术也会有风险)。与所有的新技术一样,通常来说,最好是沿着一条可以管理风

 

险的路径来采用它们。如果用 AOP 

 

来执行策略和测试,就可以从 AOP 得到降低风险的好

处。因为方面不会进入生产,所以不会出现技术破坏代码稳定性或开发过程的风险,但却
会有助于开发质量更好的软件。用方面进行测试也是学习方面的工作方式,并体验这项激
动人心的新技术的好方法。

  组合测试方法

   

  正如我在 第 1 

 

部分 中讨论过的,QA 

 

的目的不是找到所有可能有的 bug —— 因

 —— 

 

为这是不可能的

而是提升我们对代码按预期工作的确信程度。对于管理有效的 QA 

组织,它的挑战就是最大化所花费资源的回报,即确信度。因为所有的测试方法最终都会
表现出回报消退(对于等量的付出增加,得到的确信度增加越来越少),而且不同的方法

 

适合寻找不同类型的错误,所以把 QA 付出分散在测试、代码审查和静态分析上,要比把

 

整个 QA 预算只花在其中一项措施上,回报要更好。

  FindBugs 这样的静态分析工具是不精确的,但是不精确的分析对于提高软件质

量仍然是非常有用和有效的。它们可能发出假警告,例如在无害的构造上触发警告,也可

 

能忽略了 bug

 

,例如没有找出与特定 bug 

 

模式匹配的全部 bug。但是它们仍然能发现真正

 

的 bug,而且只要误报率没有高到让用户厌烦的程度,那么它们仍然对测试付出提供了
有价值的回报。

 

  从测试的角度来说,使用 AOP 来验证设计规则与使用静态分析有许多共同之处。

静态分析和面向方面编程都不用为了特定的方法或类设计测试用例,而是都鼓励找出违
犯规则的全部分类,并创建能够发现代码体中任何违规的工件。另一个相似性就是它们不
必非常完善也能够发挥作用;

 

尽管 bug 

 

探测器或测试方面都不能找出所有可能的 bug,甚

至有些会发出假警告,它们仍然是非常有用的工具,可以验证代码是否按期望的那样工

 

作。有些 bug 

 —— 

模式用静态工具更容易找出,而另一些用方面会更容易找出

这使得方

 

面成为参与 QA 过程的一个有用的方法。

  简单的测试方面

  FindBugs 这样的静态分析工具审计代码但不执行代码;面向方面的工具既提供静

态类工具,也提供动态类工具。静态方面可以生成编译时警告或错误;动态方面可以把错
误检测代码插入类。

   

  在 第 1 

 

 

部分 中,我提供了一个简单的 FindBugs 探测器,查找可能潜伏在库中