了解 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)。
您仍可以开发 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 分数应得到的奖学金。
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。
|
此 fixture 将调用清单 2 中显示的 SUT ScholarshipSystem
类,然后调用该类上的 calculateScholarship()
方法。
|
您可以根据测试的内容对不同类型的 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 菜单和 Run FIT 工具栏按钮(参见图 2)。如果是这样,则表明您已成功安装了 Extended FIT Eclipse 插件。
Extended FIT Eclipse 插件与 FIT .jar 文件捆绑在一起,所以您无需单独安装 FIT .jar 文件就可以运行测试。但是,要开发自已的 fixture,可能需要将 FIT .jar 文件添加到您的构建路径中。
|
使用 Extended FIT Eclipse 插件
若要使用 Extended FIT Eclipse 插件,您需要三个文件:
注意:当创建自定义 fixture 类时,一定要使用您喜欢的构建工具将它们捆绑为一个 .jar 文件。Extended FIT Eclipse 插件需要此 .jar 文件的位置才能运行 FIT 测试。
有了 Extended FIT Eclipse 插件所需的所有文件后,您可以通过完成以下操作步骤来着手运行 FIT 测试:
FIT 采用 .html 文件作为输入文件;因此,应将输入文件名配置为与之相同(参见图 3)。
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)”中测试插件本身。