PlantUMLによる状態遷移図の書き方, 状態遷移表からのテスト抽出方法

システムを理解する方法の1つに「状態遷移図の作成」があります。ここでは、「PlantUMLを利用した状態遷移図の書き方」と「状態遷移表からテストケースを抽出する方法」について解説します。「電話の状態」を例にして説明します。

状態とイベント

状態遷移とは?

状態遷移は 状態イベント によって作られます。

  • 状態
    • 処理の状態
    • 部位の状態
    • 全体の状態
  • イベント
    • 状態遷移のきっかけとなるアクションや条件

電話で考えると以下のようになります。

全体の状態とイベント

  • 状態
    • 電源オフ
    • 電源オン
  • イベント
    • 電源オフ
    • 電源オン

電話機能の状態とイベント

  • 状態
    • 待機中
    • 着信中
    • 発信中
    • 通話中
  • イベント
    • 着信
    • 応答
    • 発信
    • 接続
    • 切断

PlantUMLで状態遷移図を作成

文章による仕様だけだと理解しずらい場合、状態遷移図を書くことをお勧めします。
状態遷移図があると、仕様を直感的に理解しやすくすることができます。

状態を記述

PlantUMLで状態遷移図を作成していきます。まず、 状態 を記述します。

@startuml
state 電源オフ
state 電源オン {
  state 待機中
  state 着信中
  state 通話中
  state 発信中
}
@enduml

以下UMLが生成されます。

design_state_plantuml_state_only.png

イベントと遷移を記述

次に 開始状態イベント遷移先 を記述します。
開始状態 を記述することで、 最初の状態 が何になるのか判断できます。

@startuml
state 電源オフ
state 電源オン {
  state 待機中
  state 着信中
  state 通話中
  state 発信中

  [*] --> 待機中
  待機中 --> 着信中 : 着信
  着信中 --> 待機中 : 切断
  着信中 --> 通話中 : 応答
  待機中 --> 発信中 : 発信
  発信中 --> 待機中 : 切断
  発信中 --> 通話中 : 接続
  通話中 --> 待機中 : 切断
}

[*] --> 電源オフ
電源オフ --> 電源オン : 電源オン
電源オン --> 電源オフ : 電源オフ
@enduml

上記のように記述すると、以下UMLが生成されます。

design_state_plantuml.png

図から仕様不備がないか確認

状態遷移図を書き終わったら、以下のことを確認します。

  • どこからも遷移されない状態がないか
  • どこにも遷移しない状態がないか
  • 複数の状態に遷移しているイベントはないか

この確認作業を通じて、仕様の不備を発見することができます。

状態遷移表を作成

以下のように、状態遷移図から状態遷移表を作成してみました。
(電話機能のみの状態遷移表となります。)

イベント
着信 応答 発信 接続 切断
現在の状態 待機中 着信中 - 発信中 - -
着信中 - 通話中 - - 待機中
発信中 - - - 通話中 待機中
通話中 - - - - 待機中

縦軸に 現在の状態 、横軸に イベント 、各マス目に 遷移先の状態 を記述しています。

- と記述された箇所は できないこと を表しています。
状態遷移表を作成することにより、 できないこと を判断することができます。

「できないこと」の仕様を深掘りする

できないことには、以下2パターン存在します。

  • イベントが発生しても遷移しないように実装
    • e.g. 通話中に着信が発生しても、通話中のままであるように実装する
  • イベントを発生できないように実装
    • e.g. 通話中に発信できないように実装する

この違いを意識して、仕様の段階で どちらのパターンで実装するのか 決めておきます。

テストケースの抽出

状態遷移表から「できることのテスト」「できないことのテスト」を抽出します。
時間の制約から、全てのテストを確認できない場合、「できることのテスト」を優先して行います。

できることのテスト

No 現在の状態 イベント イベント発生後の状態
1 待機中 着信 着信中
2 着信中 応答 通話中
3 待機中 発信 発信中
4 発信中 接続 通話中
5 着信中 切断 待機中
6 発信中 切断 待機中
7 通話中 切断 待機中

できないことのテスト

No 現在の状態 イベント イベント発生後の状態
8 着信中 着信 状態遷移しない or 発生できない
9 発信中 着信 状態遷移しない or 発生できない
10 通話中 着信 状態遷移しない or 発生できない
11 待機中 応答 状態遷移しない or 発生できない
12 発信中 応答 状態遷移しない or 発生できない
13 通話中 応答 状態遷移しない or 発生できない
14 着信中 発信 状態遷移しない or 発生できない
15 発信中 発信 状態遷移しない or 発生できない
16 通話中 発信 状態遷移しない or 発生できない
17 待機中 接続 状態遷移しない or 発生できない
18 着信中 接続 状態遷移しない or 発生できない
19 通話中 接続 状態遷移しない or 発生できない
20 待機中 切断 状態遷移しない or 発生できない

このように、状態遷移表を作成することで、網羅的にテストケースを抽出することができます。

【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。