状态机软件测试

随着开发人员不断寻求提高质量并按时完成项目的方法,许多软件测试方法越来越受到重视,例如代码审查、单元测试、回归测试、Beta测试、测试驱动开发等等。 无论项目的目标是什么,以及使用的源代码语言是什么,普遍认为,越早发现缺陷,就越容易、更经济、更快速地修复。 代码生成 来自 UML状态机图, 一项新功能,于...版本中推出 Altova UModel 2011软件 版本2可以用于在项目开发的早期阶段验证概念逻辑。

在状态机图中体现实际应用的设计

UModel 附带的一个示例包含一个简单而真实的有限状态机图,以及一个小型测试应用程序,您可以运行它来亲身体验测试设计逻辑的便捷性。UModel 2011 示例文件夹中的 "AirCondition.ump" 项目中的有限状态机图描述了一个典型供暖和空调系统的运行方式。

该系统包括一个电源按钮,位于左侧,用于从关闭状态切换;一个模式选择功能,用于选择加热或制冷模式;一个风扇速度选择功能;以及一个待机按钮,用于将系统置于右侧显示的待机模式。示例项目文件夹包含UModel使用Java、C#和Visual Basic生成的全部代码,用于该图表。要尝试Java版本,我们只需要使用命令javac STMTester.java来编译代码,然后使用java STMTester来运行它。测试应用程序会显示一个模拟控制面板,其中包含有关加热和空调设备的窗口。操作按钮位于顶部,第一个窗口显示当前状态,而系统变化产生的输出信息则显示在第二个窗口中。

如上所示,系统初始化时处于关闭状态,模式设置为加热,风扇处于关闭状态。在使用系统之前,您可能需要调整控制面板和状态机图的大小,以便更清楚地了解测试应用程序在图表中的操作流程,如下方所示的缩小后的图像。

操作状态机

当我们点击电源按钮时,当前状态窗口会更新,并且详细描述发生的各项操作会以“事件 1”的形式列在调试输出消息窗口中。

如果天气炎热,我们可以将模式切换为“制冷”,并提高风扇转速。可以通过点击“模式选择”和“风速选择”按钮来实现。每次点击后,“当前状态”窗口都会更新,并且“事件2”和“事件3”会被添加到“输出消息”窗口中。

现在我们可以看到,这个测试应用程序如何让我们充分验证状态机图的逻辑。通过点击所有可能的按钮选择顺序,我们可以观察它们是否产生预期的结果。例如,如果我们将设备置于待机模式(以下事件 4),然后按下“速度选择”按钮,我们可以在事件 5 的输出消息中看到,名为“区域速度”的子状态没有发生任何改变。请将事件 5 与以下窗口中显示的事件 3 进行比较。

现在系统处于待机模式,我们不需要加热或制冷,为了节约能源,请按下电源按钮将其关闭。

等等,看起来什么也没发生。在事件6中,没有发生任何状态转换,而且顶部的“当前状态”仍然显示为“待机”! 重新查看状态机图,我们可以看到,从“待机”模式的唯一退出方式是再次按下“待机”按钮。 难道这真的是普通用户所期望的行为吗? 即按下“电源”按钮无法从“待机”模式关闭系统?

想象一下,如果这个问题是在产品开发后期,当原型产品被监管机构进行测试时才被发现,修复它的成本将会多么高昂!现在,我们向各位读者提出一个挑战:你们会如何设计一条更直接的路径,从待机状态直接进入关机状态?

测试您自己的状态机

您可以将 UModel 状态机代码生成示例项目用作模板,用于创建您自己的设计的测试应用程序。 您应该充分利用 UModel 的一项功能,即在您向状态机中的状态转换添加操作名称时,该功能会自动在类中创建相应的操作。

此外,UModel的帮助系统包含了关于从状态机图生成代码的详细信息,并且以“AirCondition.ump”项目文件作为示例。

通过使用Altova UModel,您可以亲自了解如何通过测试您自己的状态机图的逻辑,从而改进项目开发 今天就下载免费的30天试用版