---
title: "状態遷移モデルのソフトウェアテスト"
date: "2011-04-05"
categories: 
  - "software"
tags: 
  - "agile-development"
  - "software-modeling"
  - "software-tools"
  - "uml"
  - "uml-tool"
  - "umodel"
  - "v2011r2"
description: Altova UModelを使用して、UMLステートマシン図の早期テストを通じて、ソフトウェアの品質を向上させる方法を解説します。具体的なテスト手法と事例をご紹介します。
---
Status: #blog

Tags:  #agile-development #software-modeling #software-tools #uml #uml-tool #umodel #v2011r2

Categories: [development](/blog/ja/category/development.md) [uml](/blog/ja/category/uml.md)
# 状態遷移モデルのソフトウェアテスト

ソフトウェアの品質向上とプロジェクトの納期遵守を目指す開発者にとって、コードレビュー、単体テスト、回帰テスト、ベータテスト、テスト駆動開発など、様々なソフトウェアテスト手法が重要性を増しています。プロジェクトの目的や使用するプログラミング言語に関わらず、一般的に認識されているのは、バグが早期に発見されるほど、修正が容易になり、コストも抑えられ、迅速に解決できるということです。 [コード生成](https://www.altova.com/ja/umodel/uml-code-generation.html) from [UMLステートマシン図](https://www.altova.com/ja/umodel/state-diagrams.html), 新たに追加された機能は、 [Altova UModel 2011](https://www.altova.com/ja/umodel.html) バージョン2は、プロジェクト開発の初期段階で、概念的なロジックを検証するために利用できます。 

**ステートマシン図による、現実世界の設計表現** 

UModelに付属するサンプルには、シンプルなステートマシン図と、その動作を検証するための小さなテストアプリケーションが含まれています。このアプリケーションを実行することで、設計のロジックをどれほど簡単にテストできるかを確認できます。UModel 2011のサンプルフォルダにある"AirCondition.ump"プロジェクトに含まれるステートマシン図は、一般的な暖房・空調システムの動作を説明しています。 

[![Altova UModelにおける状態遷移図 ](https://lh5.ggpht.com/_REdrfeVqYdU/TZsY4ceg5yI/AAAAAAAAAXU/EvHaGDO0_sw/Snap1_state_diagram_LR5.png?imgmax=800 "State machine diagram in Altova UModel ")](https://www.altova.com/umodel.html) 

このシステムには、オフ状態から起動時に左側に表示される電源ボタン、暖房または冷房を選択するモード選択機能、ファンの速度を選択する速度選択機能、そして右側に表示されるスタンバイモードにシステムを移行させるスタンバイボタンが含まれています。サンプルプロジェクトフォルダには、UModelがこの図に基づいて生成したJava、C#、およびVisual Basicのコードがすべて含まれています。Java版を試すには、コードをコンパイルするために**javac STMTester.java**コマンドを使用し、実行するには**java STMTester**コマンドを使用するだけです。このテストアプリケーションは、暖房および冷房ユニットに関する情報ウィンドウを備えた、シミュレーションされたコントロールパネルを表示します。操作ボタンは上部に配置され、現在の状態は最初のウィンドウに表示され、システムの変更によって生成された出力メッセージは2番目のウィンドウに表示されます。

[![Altova UModelによって生成されたステートマシンのコードをテストするための制御パネル](https://lh4.ggpht.com/_REdrfeVqYdU/TZsY4k3SX7I/AAAAAAAAAXY/BbrYrNG5nTQ/clip_image0043.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel/state-diagrams.html) 

上記のように、システムは通常、オフ状態から起動し、モードは「ヒーター」に設定され、ファンは停止しています。システムを操作する前に、制御パネルとステートマシンの図を、図自体に示されているテストアプリケーションの動作に合わせて調整することをお勧めします。以下に、サイズを小さくした画像を示します。 

[![生成されたコードに対応する、UModelの状態遷移図とテスト制御パネル](https://lh3.ggpht.com/_REdrfeVqYdU/TZsY5AeHLzI/AAAAAAAAAXc/oNqgojYQqZw/Snap3_combinedimage_LR5.png?imgmax=800 "UModel state machine diagram and test control panel for generated code")](https://www.altova.com/umodel.html) 

**ステートマシンの動作** 

電源ボタンをクリックすると、現在の状態を示すウィンドウが更新され、実行された操作の詳細な説明が、デバッグ出力メッセージウィンドウの「イベント1」として表示されます。 

[![Altova UModelによって生成されたステートマシンのコードをテストするための制御パネル](https://lh5.ggpht.com/_REdrfeVqYdU/TZsY5d6YGOI/AAAAAAAAAXg/GPAgI00JHWo/clip_image0084.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel.html) 

もし暑い日であれば、モードを「冷却」に変更し、風量を上げることを検討できます。その場合、「モード選択」ボタンと「風量選択」ボタンをクリックすることで設定を変更できます。現在の状態を示すウィンドウは、クリックするたびに更新され、「イベント2」と「イベント3」が、出力メッセージウィンドウに追加されます。 

[![Altova UModelによって生成されたステートマシンのコードをテストするための制御パネル](https://lh6.ggpht.com/_REdrfeVqYdU/TZsY6EeKdOI/AAAAAAAAAXk/hIxBihKj4-Y/clip_image0103.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel.html) 

現在、テストアプリケーションを使用することで、ステートマシン図のロジックを完全に検証できます。あらゆるボタンの組み合わせを選択し、期待される結果が得られるかどうかを確認できます。例えば、ユニットを待機モード（以下、イベント4）に設定した後、スピード選択ボタンを押すと、イベント5の出力メッセージで、サブステート「RegionSpeed」において状態が変化しないことが確認できます。以下に示すように、イベント5とイベント3の出力メッセージを比較してください。 

[![Altova UModelによって生成されたステートマシンのコードをテストするための制御パネル](https://lh5.ggpht.com/_REdrfeVqYdU/TZsY6T-8lBI/AAAAAAAAAXo/VDovIAt3cDs/clip_image0123.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel.html) 

システムが待機モードになっており、暖房や冷房も不要な状態ですので、省エネのために、電源ボタンを押してシステムを停止しましょう。 

[![Altova UModelによって生成されたステートマシンのコードをテストするための制御パネル](https://lh4.ggpht.com/_REdrfeVqYdU/TZsY66RZsKI/AAAAAAAAAXs/v6FK67nFMVI/clip_image0143.jpg?imgmax=800 "Test control panel for state machine code generated by Altova UModel")](https://www.altova.com/umodel.html) 

ちょっと待ってください。どうやら何も起こっていないようです。イベント6では何も変化がなく、画面上部の「現在の状態」は依然として「待機」のままです。状態遷移図を振り返ると、待機モードから抜け出す唯一の方法は、再び待機ボタンを押すことだとわかります。本当に一般的なユーザーが期待する動作なのか、電源ボタンを押しても待機モードからシステムがシャットダウンしないというのは？ 

[![Altova UModelを使用して作成された、状態遷移図の一部](https://lh6.ggpht.com/_REdrfeVqYdU/TZsY7RcFpgI/AAAAAAAAAXw/1oWwcxTveBE/clip_image0163.jpg?imgmax=800 "Portion of a state machine diagram created with Altova UModel")](https://www.altova.com/umodel.html) 

もしこの問題が、製品開発のさらに後半、つまり試作品が規制機関によってテストされる段階で初めて発見されたとしたら、その解決にかかる費用はどれほど高くなるでしょうか。読者の皆様に、ここで一つ課題を提示します。待機状態から電源オフ状態への、より直接的な経路をどのように設計しますか？ 

**自身のステートマシンをテストする** 

UModelのステートマシンコード生成のサンプルプロジェクトは、お客様自身の設計に対するテストアプリケーションを作成するためのテンプレートとしてご利用いただけます。UModelの機能である、ステートマシン内の遷移に操作名を追加すると、そのクラスに自動的に操作が作成される機能を活用することをお勧めします。 

[![Altova UModelのツールバーにある、クラス内で自動的に操作（メソッド）を作成するためのボタン](https://lh6.ggpht.com/_REdrfeVqYdU/TZsY7mEsVhI/AAAAAAAAAX0/FDDlekHpIgk/clip_image0183.jpg?imgmax=800 "Altova UModel toolbar button for automatic creation of operations in classes")](https://www.altova.com/umodel.html) 

また、UModelのヘルプシステムには、ステートマシン図からのコード生成に関する詳細な情報が記載されており、さらに、AirCondition.umpというプロジェクトファイルを例として使用しています。 

**Altova UModelを使って、ご自身のステートマシン図のロジックをテストし、プロジェクト開発をどのように改善できるか、ぜひご自身で確かめてみてください** [**今すぐ30日間の無料トライアルをダウンロードしてください](https://www.altova.com/ja/download/umodel/uml_tool_enterprise.html)**！**
