状态转换测试是一种黑盒测试技术,可应用于测试“有限状态机”。有限状态机(FSM)是一个系统,根据当前状态和输入不同而处于不同的状态,如“就绪”,“未就绪”,“打开”,“关闭”等。
系统最终处于的状态取决于系统的转换规则。也就是说,如果一个系统对于相同的输入,在其先前状态不同的情况下可能会转变未不同的状态,那么它就是一个有限状态系统。
什么是状态转换测试技术?
状态转换技术是一种动态测试技术,当系统的定义基于有限数量的状态,并且状态之间的转换受系统规则的控制时使用。
换句话说,当系统的特性被表示为相互转换的状态时,就会使用这种技术。这些转换是由软件的规则确定的。可以通过图形表示如下:
我们可以看到,一个实体由于某些输入条件从状态1转换到状态2,这导致事件发生并产生动作,最终得到输出。
用一个例子来解释:你去ATM取款1000美元。你得到了现金。现在你的余额用完了,再次提出了取款1000美元的请求。这次ATM拒绝给你钱,因为余额不足。因此,这里导致状态改变的转换是之前的取款。
状态转换测试的定义
状态转换测试是一种黑盒测试,测试人员必须根据给定的一系列输入条件来检查被测试应用程序(AUT, Application Under Test)的行为。
何时使用状态转换测试
状态转换测试可用于以下情况:
- 当被测试的应用程序是一个具有不同状态和转换的实时系统时
- 当应用程序依赖于过去的事件/值/条件时
- 当需要测试事件的顺序时
- 当应用程序需要根据有限的一组输入值进行测试时
不适用状态转换测试的情况:
- 当不需要测试顺序输入组合时
- 当需要测试应用程序的不同功能时(更像是探索性测试)
状态转换测试示例
在实际场景中,测试人员通常会收到状态转换图,并需要解释它。这些图表通常由业务分析师或利益相关者提供,我们使用这些图表来确定我们的测试用例。
让我们考虑以下场景:
Software name - Manage_display_changes
Specifications - 软件响应输入请求,用于更改时间显示设备的显示模式。
显示模式可以设置为以下四个值之一:
- 显示时间(T)或显示日期(D)
- 更改时间(AT)或更改日期(AD)
不同的输入如下:
- Change Mode(CM):显示模式将在“显示时间(T)”和“显示日期(D)”之间切换
- Reset(R):如果显示模式设置为T或D,则会“重置”,将显示模式设置为“更改时间(AT)”或“更改日期(AD)”模式
- Time Set(TS):显示模式将从AT返回到T
- Date Set(DS):显示模式将从AD返回到D
状态转换图:
现在,让我们开始解释它:
#1) 各种状态为:
- 显示时间(S1)
- 更改时间(S3)
- 显示日期(S2)
- 更改日期(S4)
#2) 各种输入为:
- 更改模式(CM)
- 重置(R)
- 时间设置(TS)
- 日期设置(DS)
#3) 各种输出为:
- 更改后的时间(AT)
- 显示时间(T)
- 显示日期(D)
- 更改后的日期(AD)
#4) 更改的状态为:
- 显示时间(S1)
- 更改时间(S3)
- 显示日期(S2)
- 更改日期(S4)
步骤1:写出所有起始状态。为此,逐个状态检查有多少箭头从中出来。
- 对于状态S1,有两个箭头从中出来。一个箭头指向状态S3,另一个箭头指向状态S2
- 对于状态S2 - 有2个箭头。一个指向状态S1,另一个指向S4
- 对于状态S3 - 只有一个箭头从中出来,指向状态S1
- 对于状态S4 - 只有一个箭头从中出来,指向状态S2
让我们将此放在表格中:
由于对于状态S1和S2,有两个箭头从中出来,我们将它写两次。
步骤2:为每个状态编写它们的最终转换状态。
- 对于状态S1 - 最终状态为S2和S3
- 对于状态S2 - 最终状态为S1和S4
- 对于状态S3 - 最终状态为S1
- 对于状态S4 - 最终状态为S2
将此放在表格中作为输出/结果状态
步骤3:对于每个起始状态及其相应的最终状态,写下输入和输出条件。
对于状态S1转到状态S2,输入是更改模式(CM),输出是显示日期(D),如下所示:
以类似的方式,按以下方式为所有状态编写输入条件及其输出:
步骤4:为每个测试添加测试用例ID
将其转换为正式的测试用例:
通过这种方式,可以得出所有剩余的测试用例。假设测试用例的其他属性,如前提条件、严重性、优先级、环境、构建等也一并包含在测试用例中。
总结步骤如下:
- 根据从初始状态出来的线/箭头,确定初始状态及其最终状态
- 对于每个初始状态,找出输入条件和输出结果
- 将每个集合标记为单独的测试用例
状态转换技术的应用
“有状态功能测试”方法可用于测试应用程序的特定部分或组件:具有有限状态机(FSM)的特性的部分或组件。
实施步骤:
- 实施“有状态功能测试”的第一步是识别应用程序中可以分类为FSM的不同组件/部分。对于每个FSM,仔细跟踪输入、状态和输出。
- 下一步是根据过渡规则、输入、输出和过渡状态为这些FSM开发测试用例。
- 第三步是将这些组件的测试与其他接口组件集成,以验证整个应用程序。
风险和挑战
- 对于大型应用程序,深入了解应用程序的知识是将应用程序分解为不同逻辑组件以实现FSM和常规组件分类的关键。这可能需要SME(主题专家)耗费昂贵的时间。
- 并非所有应用程序都具备这种FSM分类的可行性。
- 由于FSM组件与应用程序中的常规组件进行交互,来自不同组件的FSM的输入需要仔细规划和执行。
状态转换测试的优点
- 通过使用系统行为的图形或表格表示,测试人员可以熟悉应用程序设计,并能够有效而高效地覆盖和设计测试。
- 使用状态转换图,可以轻松验证是否覆盖了所有条件。
状态转换测试的缺点
- 该技术无法用于非有限状态系统。
- 对于大型复杂系统,定义所有可能状态是一项繁琐的任务。
结论
状态转换测试在需要测试有限状态系统的不同系统转换时是一种有用的方法。
使用“有状态功能测试”的概念来测试应用程序可以为测试组织提供一种独特的测试方法,增加测试执行效率而不减少测试覆盖范围。
该技术的局限性在于只能在被测试系统具有有限状态的情况下使用。