---
title: "软件测试中使用状态机的挑战解决方案"
date: "2011-05-03"
categories: 
  - "software"
tags: 
  - "java"
  - "software-modeling"
  - "software-tools"
  - "uml"
  - "uml-tool"
  - "umodel"
  - "v2011r2"
description: 本文探讨了一种解决在 Altova UModel 中遇到的状态机设计难题的方案，具体针对系统在待机模式下的行为。
---
Status: #blog

Tags:  #java #software-modeling #software-tools #uml #uml-tool #umodel #v2011r2

Categories: [uml](/blog/zh/category/uml.md)
# 软件测试中使用状态机的挑战解决方案

上个月，在我们的博客中 [状态机软件测试](https://www.altova.com/blog/2011/04/software-testing-for-state-machines.html) 与 [Altova UModel](https://www.altova.com/zh/umodel.html) 我们在空调系统的模型中发现了一些意想不到的行为，并邀请读者们改进设计。这篇文章描述了一种可能的解决方案。当我们运行针对该模型的测试程序时，我们发现，即使系统处于待机状态，电源开关并没有将其关闭。在 [状态机图](https://www.altova.com/zh/umodel/state-diagrams.html) 在我们的最初设计中，从工作模式进入待机模式的唯一途径是通过待机按钮，而退出待机状态的唯一方法也是再次按下待机按钮，具体情况请参见以下说明。 

[![Altova UModel软件中状态机图的详细信息](https://lh5.ggpht.com/_REdrfeVqYdU/TbBqA8gVCnI/AAAAAAAAAYE/3PfcEd2PcKo/clip_image002%5B6%5D.jpg?imgmax=800 "Detail of a state machine diagram in Altova UModel")](https://www.altova.com/umodel/state-diagrams.html) 

我们可以通过在状态图中添加一条新的转换线，从“待机”状态直接连接到“关闭”状态，从而创建一个备用退出方式，用于在待机状态下关闭系统。将 `powerButton()` 函数指定为触发该转换的事件即可。UModel 通过提供一个弹出窗口，列出模型中已定义的事件，从而简化了事件的指定过程。 

[![Altova UModel 中，状态机图的转换触发器弹出列表](https://lh3.ggpht.com/_REdrfeVqYdU/TbBqBGFuyKI/AAAAAAAAAYI/63ZNLF_dU3A/clip_image004%5B6%5D.jpg?imgmax=800 "Pop-up list of triggers for transitions in a state machine diagram in Altova UModel")](https://www.altova.com/umodel/state-diagrams.html)

我们对该模型进行的改进，特别是从待机状态到关闭状态的转换，效果如下：

[![Altova UModel 中的状态机图](https://lh6.ggpht.com/_REdrfeVqYdU/TbBqBUKsVYI/AAAAAAAAAYM/jSeTZcHJL4g/Snap10_new%20transition_thumb%5B6%5D.png?imgmax=800 "State machine diagram in Altova UModel")](https://www.altova.com/umodel.html) 

在重新生成 Java 代码并编译新版本后，我们可以再次运行测试应用程序。调试输出消息窗口显示，系统在事件 3 中进入了待机状态。现在，事件 4，即按下电源按钮，会将状态设置为关闭。 

[![Altova UModel 生成的状态机测试应用程序](https://lh3.ggpht.com/_REdrfeVqYdU/TbBqCLuSc2I/AAAAAAAAAYU/13GMhNPkg7s/clip_image008_thumb%5B2%5D.jpg?imgmax=800 "State machine test application generated by Altova UModel")](http://lh6.ggpht.com/_REdrfeVqYdU/TbBqBgADPsI/AAAAAAAAAYQ/0AsFb3WdtAU/s1600-h/clip_image008%5B5%5D.jpg) 

**通过 Altova UModel，您可以亲身体验如何提升您自己的状态机图的逻辑性** [**立即下载免费的 30 天试用版**](https://www.altova.com/zh/download/umodel/uml_tool_enterprise.html) **！**
