快速业务通道

诊断Java代码: Liar View错误模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19

诊断Java代码: Liar View错误模式

时间:2011-02-12 IBM Eric E. Allen

Liar, liar!

设想一下:您已经为一个分布式系统精心设计了一个极好的 GUI 程序,它包含了客户机请求的所有东西及其它一些东西。您已经让它运行通过了一个自动化测试套件的测试 ― 由于不变量的数量是个天文数字,因此,自动化测试是必须的。测试的结果是程序获得了一张“无错误的健康证明书”。

发布这个 GUI 的期限到了,但是,作为一个象您这样严格的程序员,只是为了发现错误的行为 ― 本该在自动化测试中就被捕捉到的行为,您启动了程序,对它做最后一次手工测试。但愿您能够避免这种情形。真的,您能够。

Liar View 错误模式

好的调试从好的测试开始。由于 GUI 程序中有大量的不变量需要检查,因此,自动化测试是必需的。但有时尽管已经通过了一套测试,在手工检查时,程序仍会出现本该由这些测试之一发现的错误行为。

在分布式和多线程系统中,这种行为是常见的。在这些情况下,程序的“不确定性”本质经常就是原因所在。但在 GUI 中,却有另一种常见的原因 ― Liar View 错误模式。

症状

多数 GUI 程序测试,跟通常的程序测试一样,遵循下列步骤:

启动程序

检查程序状态的一些特征

尝试修改状态

检查状态是否已经按意愿被修改

但就象我已提到过的,有时对运行时程序行为的手工检查的结果会与测试得到的成功结果相矛盾:屏幕上可能显示一个队列,包含被测试(按设想进行)确认删除了的元素;而对象中可能包含报告显示已被更新了的陈旧数据。

类似这样的错误会使我们对自己的心智是否健全产生怀疑,或者更糟地陷入到康德的怀疑论哲学,怀疑起原因本身的有效性。

不要让这些发生在您身上。当正确对待原因时,它确实是有用的。尽管有反面的报告,但很少有程序员会在写代码时永久地丧失心智( 永久地是一个关键词)。

起因

找到这些错误的一个关键是要认识到,至少有一部分错误可以在测试套件中找到。

在测试 GUI 程序的过程中,错误最常发生的地方是在最后一步:检查状态是否已经按意愿被修改。原因是 GUI 一般是基于模型-视图-控制器(MVC)体系结构设计的。Swing 类库甚至把这种体系结构建到了 GUI 类自身的结构中。

在 MVC 体系结构中,程序的内部状态保存在模型中。视图响应改变模型状态的事件并相应更新屏幕图像。控制器把这两个组件连接在一起。

这种体系结构的优点是把视图从模型中分离出来,使得各自的实现可以独立修改。但是它对自动化测试方法却是一个挑战:我们很难检验模型中的状态改变是否在视图中得到了适当的反映。当这两者之间存在矛盾时,我们就会遇到一个 Liar View 错误模式的实例。

诊断Java代码: Liar View错误模式(2)

时间:2011-02-12 IBM Eric E. Allen

例如,考虑下面的简单 GUI。它在一列元素的内容被更新时显示其内容。 Controller 类的 main 方法被用作一个简单的测试。在实际的应用程序中,我把这个方法移到单独的测试类中,并将其挂到 JUnit 中(请参阅 参考资料)。

为了让我们能够使测试以慢动作方式进行,并在每个事件发生时对它进行手工检查,我添加了 pause() 方法和 PAUSE 字段。

清单 1. JTable 及表模型

import java.awt.*; import java.awt.event.*; import java.util.Vector; import javax.swing.*; public class Controller {   private static final int PAUSE = 1;   private static void assert(boolean assertion) {    if (! assertion) {     throw new RuntimeException("Assertion Failed");    }   }   private void pause() {    try {     synchronized (this) {    wait(PAUSE);     }    }    catch (Inter

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号