了解 Framework for Integrated Tests (FIT) 的基本概念,并使用 Extended FIT Eclipse 插件着手为 Eclipse 开发人员测试 FIT 表。本文是由两部分组成的系列文章的第一部分,向您介绍 FIT 并展示如何在基于 Eclipse 的环境中使用它。
自从大型计算机诞生以来,软件工程师就关心着两个主要问题:第一,业务如何通过应用程序与其所需内容通信;第二,工程师如何验证他们是否正在构建满足业务需要的正确软件。多年来,为了解决这些关心的问题,已探索了许多方法和框架,但直到出现 Framework for Integrated Tests (FIT) 以后,才找到了解决这些问题的简便而直观的方法。
FIT 是一种通用的开放框架,您可以方便地对它进行扩展,来表示各种测试。本文介绍如何结合使用 FIT 与 Eclipse 来解决软件开发中的几个问题。首先简要介绍一下 FIT 如何解决软件工程中的固有问题。
FIT 促进了企业各利益相关者 (stake holder) 和开发人员之间的沟通,从而使他们更精确地关注必须完成的任务。此功能可帮助每个人避免不明确的业务需求,有助于确保开发人员有的放矢地解决业务问题。此外,FIT 还支持因系统升级而导致的不可避免的代码重组,从而减少维护、扩展或更改代码的难度,并减少代码膨胀和软件熵 (software entropy)。最后,FIT 通过确保团队能够立即知道组件何时完成,以及何时错误地中断完成的工作,从而提高了软件的总体质量。
FIT 和 JUnit
如果您使用的是 JUnit,则最重要问题是:必须停止编写 JUnit 测试用例吗?回答当然是否。FIT 不是用于补充 JUnit 测试的;它具有更高级别的功能,即集成测试(参见图 1)。
图 1. FIT 处理流程
您仍可以开发 JUnit 测试。但是,另外还需要使用 FIT 表创建 FIT 测试。


|
回页首 |
|
FIT 和FIT 表
对于 JUnit,它是一个测试用例。对于 IBM Rational Unified Process® (RUP®),它是一个使用用例。对于 FIT,它是一个表。表在 FIT 提高利益相关者之间的沟通能力、软件灵活性和软件稳定性方面扮演着重要角色。
在日报上,无论是棒球比赛的最后得分,还是股票价格,表都是简单而又有效的沟通方法。因此,FIT 创建者选择表作为精良武器,使用户能够通过示例与软件行为进行通信。这减少了责任不明的情况,并由用户负责明确地定义软件系统。
灵活性(允许进行更改)是现代软件系统的重要特征。持续增长的竞争力迫使业务用户不断添加更多的特性和功能。FIT 测试通过定义更改,并确保软件修改不影响以前满足的需求,从而帮助增加了灵活性。FIT 表作为一种机制,用来传达所开发软件的结果,它在软件开发过程中像一盏指路明灯,并侧重于业务价值。
但是,随着灵活性的提高和不断进行的更改,失去稳定性的风险也在增加。FIT 表通过确保将底层系统的任何更改(包括重构和增强)立即以可视方式传达给该系统的各利益相关者,可以帮助恢复“被测系统 (SUT)”所需的平衡。


|
回页首 |
|
使用 FIT 进行测试计算
按照给定业务规则进行测试计算是软件测试的重要组成部分。采用表和具体示例的形式沟通业务需求可以帮助您了解所需内容。
示例:FIT 计算表
此示例中计算测试的业务规则是:
将价值 500 美元的美国奖学金授予“学术评估测验 (SAT)”分数至少为 2000 的学生,每超过 100 分增加 500 美元。表中的示例数据摸拟了 SAT 分数和所得奖学金之间关系的几种情形。例如,如果分数为 2300,则奖学金为 2000 美元。
表 1 是 FIT 表的一个示例,它摸拟了此业务规则的预期行为。该规则计算了学生根据他们的 SAT 分数应得到的奖学金。
表 1. 使用 ColumnFixture 表的 FIT 计算
| CalculateScholarship |
| Score |
Scholarship() |
| 1000 |
0 |
| 1999 |
0 |
| 2000 |
500 |
| 2050 |
500 |
| 2100 |
1000 |
| 2200 |
1500 |
| 2300 |
2000 |
| 2350 |
2000 |
| 2400 |
2500 |
表中的第一行显示要测试的 fixture 名称。fixture 类的作用相当于驱动程序,确定如何根据 SUT 来测试表中的示例数据集。在本示例中,fixture 是 CalculateScholarship。
因为本示例涉及一个 ColumnFixture 表,所以第二行会标识给定的和计算的字段列名称。在本示例中,Score 列表示输入值,Scholarship() 列表示预期的计算结果。


|
回页首 |
|
为 ColumnFixture 表创建一个 FIT fixture
要让框架能够处理表 1,必须创建一个 fixture,或创建一个中间 Test Adapter 类,告诉 FIT 如何与您的软件通信。清单 1 显示了 CalculateScholarship fixture。
清单 1. CalculateScholarship fixture
public class CalculateScholarship extends ColumnFixture {
public int score;
public int scholarship(){
ScholarshipSystem scholar = new ScholarshipSystem();
return scholar.calculateScholarship(score);
}
}
|
此 fixture 将调用清单 2 中显示的 SUT ScholarshipSystem 类,然后调用该类上的 calculateScholarship() 方法。
清单 2. ScholarshipSystem 类
public class ScholarshipSystem {
public int calculateScholarship(int score){
int scholarship = 0;
if(score<2000)
return scholarship;
else
scholarship = 500;
scholarship = scholarship + ((score - 2000)/100) * 500;
return scholarship;
}
}
|
您可以根据测试的内容对不同类型的 fixture 进行扩展。在上面的示例中,我使用 ColumnFixture 将表中的列映射为 fixture 中的变量和方法。
表中的两个列对应于 fixture 中的变量。包含预期结果的第二列对应于 fixture 中的 scholarship() 方法。为计算结果,我将 ScholarshipSystem 类用作 SUT。


|
回页首 |
|
在 Eclipse 中使用 FIT 测试
为了演示如何在 Eclipse 环境中使用 FIT,我使用了 Extended FIT Eclipse 插件,它提供了一个简单的用户界面 (UI),用于加载 FIT 输入和输出文件。此插件基于 FIT Library 基本插件。
安装 Extended FIT Eclipse 插件
要安装 Extended FIT Eclipse 插件,请完成下列操作步骤:
- 下载核心 FIT Eclipse 插件。
- 解压缩 .zip 文件内容,将 .jar 文件复制到 Eclipse 安装所在的 Plugins 文件夹中。
- 下载 Extended FIT Eclipse 插件。
- 将 .jar 文件复制到 Eclipse 安装所在的 Plugins 文件夹中。
- 重新启动 Eclipse。
现在,您会看到一个新的 FIT 菜单和 Run FIT 工具栏按钮(参见图 2)。如果是这样,则表明您已成功安装了 Extended FIT Eclipse 插件。
图 2. 在 Eclipse 中安装的 Extended FIT 插件
Extended FIT Eclipse 插件与 FIT .jar 文件捆绑在一起,所以您无需单独安装 FIT .jar 文件就可以运行测试。但是,要开发自已的 fixture,可能需要将 FIT .jar 文件添加到您的构建路径中。
 |
测试其他类型的 fixture
您可以使用此处所示的方法(即使用 FIT 表和 fixture 测试计算结果)来测试其他 FIT 表。例如,使用 ActionFixtures fixture 测试业务处理流程,而使用 RowFixtures fixture 测试预期的搜索或查询结果。使用 Extended FIT Eclipse 插件测试此类 fixture 的惟一不同之处是您编写的 fixture 会扩展不同类型的 Base Fixture 类。
|
|
使用 Extended FIT Eclipse 插件
若要使用 Extended FIT Eclipse 插件,您需要三个文件:
- 一个包含所有输入 FIT 表的输入 .html 文件
- 一个包含 FIT 测试运行结果的输出 .html 文件
- 一个包含所有自定义 fixture 类的单独 .jar 文件
注意:当创建自定义 fixture 类时,一定要使用您喜欢的构建工具将它们捆绑为一个 .jar 文件。Extended FIT Eclipse 插件需要此 .jar 文件的位置才能运行 FIT 测试。
有了 Extended FIT Eclipse 插件所需的所有文件后,您可以通过完成以下操作步骤来着手运行 FIT 测试:
- 单击 Run FIT。
- 单击 Browse i/p 添加输入文件名。
- 单击 Browse o/p 找到输出文件。
- 单击 Browse fixture Jar 找到 fixture .jar 文件。
- 单击 Run FIT。
FIT 采用 .html 文件作为输入文件;因此,应将输入文件名配置为与之相同(参见图 3)。
图 3. 使用 Extended FIT Eclipse 插件运行测试
Extended FIT Eclipse 插件功能
用于 Eclipse 的 Extended FIT Eclipse 插件的作用相当于简单的包装,充当底层 FIT 库的一个委派。单击 Run FIT 后,Extended FIT Eclipse 插件通过将所选输入和输出文件作为参数传递给 FIT FileRunner 类来调用并运行该类。FIT FileRunner 类会依次解析输入文件,并将 FIT 运行的结果写入您选择的输出文件中。如果一切顺利,就会在窗口中显示运行结果。


|
回页首 |
|
展望
在本文中,您了解到 FIT 如何让用户和工程师就他们的软件架起沟通的桥梁。通过创建切实的示例,用户可以让工程师清楚地了解他们必须构建什么内容。您还了解到如何将 FIT 和 Eclipse 完美地结合在一起,不但让开发人员可以编写 fixture,而且可以运行 FIT 表来验证他们的软件。通过扩展核心 FIT Eclipse 插件,您了解到如何使用 Eclipse 执行基于计算规则的 FIT 测试,同时它也可以方便地应用于其他形式的 FIT 测试。
在本系列文章的下一篇中,您将了解如何构建 Extended Eclipse FIT 插件。还将学习如何使用 FIT 在 Eclipse 的“插件开发环境 (PDE)”中测试插件本身。 |