岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Java >> 高级技术 >> UML/OO >> Java正文
采用敏捷方法进行用户界面开发
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-22 17:52:20

  摘要
  
  1991年秋,在美国勒海大学亚科卡学院的一份研究报告《21世纪美国制造业的战略:一个工业主导的观点》中,首次提出了敏捷竞争的概念.而今天,我们似乎已经看到,敏捷已经在我们身边,形影不离.
  
  之前Matrix一则讨论激烈的新闻(http://www.matrix.org.cn/resource/news/314_Agile.html), 也表达了敏捷在今天的热度.下面通过一个简单的例子, 告诉你如何起步敏捷开发..
  
  概述
  
  如果你没有采用敏捷的方式,那你就落后了。这是最近SD Best Practices 2004会议上的标语。敏捷的方法就象XP和Scrum正在世界的软件发展中,变得越来越普遍了。敏捷是一个巨大的改变,让软件开发者把重心转移到质量和速度上。这对已经被比喻成面向对象设计的软件开发有很大的影响。但是,这种影响的一些方面已经放慢了:GUI的开发,自从大多数软件包含了一些类型的GUI,而且比较多的软件开发的百分比是去完成以GUI为中心的,应用敏捷的优势去开发GUI就是关键问题了。
  
  什么在阻止人们用敏捷的方法来开发GUI呢?不论他们的应用是基于web的或是桌面应用,大多数开发者不做用户界面user interface的测试驱动开发test-driven development (TDD)。这都因为一个简单的原因:单元测试GUI是很困难的。测试GUI是很乏味沉闷而且容易出错的,包含了模拟用户事件的复杂代码,在事件传播和控制重绘的时候等待,然后在他显示给用户之前,尝试着检测状态。敏捷依赖于测试驱动开发,但是为GUI的特定行为来写有效的测试代码是困难的。在cube farm(办公农庄,用隔断间隔成很多小工作间的办公室? 商务英语)的GUI方面上,质量和设计从敏捷方法中受益已经被完全认识到。
  
  敏捷实践正在渗透进这个领域。单元测试GUI元素的工具激增,JFCUnit 框架测试GUI是用java Swing,基于Web的GUI能被HTMLUnit, HTTPUnit, jWebUnit和类似的工具测试。许多GUI构造器和工具包和单元测试工具有关系,比如VBUnit是为了Visual Basic,QtUnit是给Qt用的。
  
  工具已经存在了,但是处理仍是不确定的。在测试驱动开发(TDD)中,每个代码的改变都在新行为的单元测试前。在开发GUI时,许多变化不过是视觉显示上的调整,比如改变元素的位置,文本,或者颜色。你可以加一个按钮,建一个菜单项,或者构造一个对话框。但是怎样和为什么你要测试这种变化呢?测试每个标签或者颜色值是很愚蠢的。同样的,对于标准的元素象按钮和域,测试他们通常的行为是没有意义的,象对鼠标移动的响应,键的按下,点击,和诸如此类的。这些事情是不可能被中断的。怎样去测试他们的问题只是徒劳的增添了做GUI测试的难度。
  
  一个关键的问题:怎样做测试先行的开发?答案就在于GUI的编码是怎样组织的。敏捷方式的领袖例如Kent Beck 和 David Astels建议在构造GUI的时候要保持视图对象尽可能是轻量的,而且“在表面下”( below the surface.)测试视图层。这个 敏捷对象/瘦视图 模型和我们熟悉的 文档-视图 及 客户端-服务器模式类似,但是被应用于个别的GUI元素。内容和表现的分离改善了代码的设计,使他更模块化和更利于测试。每个用户界面的组件被实现为一个敏捷对象,包括将要被测试的应用的行为,但不包括GUI表现的代码。每个敏捷对象有一个相应的瘦视图类只包括普通的GUI行为。采用这种设计模式,GUI构造变得可以被应用于 测试驱动开发(TDD) 处理了。
  
  例子:构造一个登录对话框
  
  让我们进入一个例子看看怎样使用TDD和 敏捷对象/瘦视图 代码设计模式去开发一个GUI对话框。起初,让我们考虑对话框的图形,敏捷开发提倡预先最小化设计,让软件构架在多次循环开发中重构,但是这个方法对GUI设计不是很合适。设计一个用户界面是一个创造的过程,应该规范地处理,画草图,做原型,和可用性测试。然后,尽管在GUI下的代码可以用TDD迭代地设计,一个形象的设计草图是明智的第一步。这个对话框的基本的设计在图1中勾画出来。
  
  
 
  Figure 1. GUI design sketch for login dialog

  
  这个对话框很简单,包括用户名和密码域,相应的静态文本框和标签,登录和取消按钮。做为一个他行为的初始轮廓,我们决定登录成功的话对话框关闭,登录失败的话对话框仍然开着。取消按钮也关闭对话框。
  
  基本的 敏捷对象/瘦视图 代码类设计的对话框实现在图2中表示。
  
  
 
  Figure 2. The classes LoginDialog and LoginDialogView

  
  敏捷对象类LoginDialog 将包含一个方法对应对话框的每个功能行为。瘦视图类LoginDialogView 将只包含简单的和显示相关的代码,还有get/set 方法去读取和设置显示的信息。在这个过程里,只有LoginDialog里复杂的功能需要被单元测试。我们可以十分自信在LoginDialogView 里的简单行为可以正常工作。
  
  第一个构造的组件是敏捷对象LoginDialog 。他需要一个相应的测试类LoginDialogTest 。第一个测试方法将要验证登录方法,如图3所示。
  
  
 
  Figure 3. The smart object LoginDialog and its test class LoginDialogTest
  

  作为测试先行的开发方法规定,首先要写单元测试。测试预期和定义了要被测试的功能设计。我们需要获得一个用户名和密码,然后返回一个登录成功或者登录失败。一个用来判断的接口方法来做刚才所述的
  
  boolean login(String username, String password);
  
  测试类LoginDialogTest 将测试这个功能。例1展示了在LoginDialogTest.java. 文件中他的初始实现。
  
  LoginDialogTest.java
  
  import junit.framework.*;
  public class LoginDialogTest extends TestCase {
  public void testLogin() {
  LoginDialog dialog = new LoginDialog();
  assertTrue( dialog.login("user", "passwd") );
  }}
  
  这个测试是基于JUnit基础测试类TestCase的。测试方法testLogin()创建了一个LoginDialog 的实例,调用了他的login()方法,然后判定结果是真。这段代码将不会编译,因为LoginDialog 不存在。在TDD过程后,LoginDialog
  
  将生成和保存,代码编译后,测试运行验证将象预期的那样失败(因为方法没有实现)。然后 LoginDialog 为了通过单元测试给出最小的实现,遵照敏捷的圣条 做 可能工作的最简单的事情(

[1] [2] [3] 下一页


  • 上一个Java:
  • 下一个Java:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:Admin@Syue.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    传世私服 传奇世界私服 天龙八部私服 bet365 传世私服 天龙八部私服 热血江湖私服 英雄合击传奇私服 热血江湖私服 bet365 bet365