1991年秋,在美国勒海大学亚科卡学院的一份研究报告《21世纪美国制造业的战略:一个工业主导的观点》中,首次提出了敏捷竞争的概念.而今天,我们似乎已经看到,敏捷已经在我们身边,形影不离.
例子:构造一个登录对话框
让我们进入一个例子看看怎样使用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") );
}}