僕の部屋には扇風機があります。
(簡略化して)ボタンは電源と風量のふたつだけ。
扇風機の状態は 電源断/弱/中/強 の4つ。
- 電源断で電源ボタン押すと弱に。
- 弱/中/強で電源ボタン押すと電源断に。
- 電源入った状態で風量ボタン押すと弱→中→強→弱...の順に切換。
そーすっと状態遷移表はこんなのができます。
|
断 |
弱 |
中 |
強 |
電 |
→弱 |
→断 |
→断 |
→断 |
風 |
→断 |
→中 |
→強 |
→弱 |
こいつを基に遷移行列を作ります。
遷移行列てのはある状態からある状態に遷移させるのに必要な事象の行列。
|
断 |
弱 |
中 |
強 |
断 |
風 |
電 |
|
|
弱 |
電 |
|
風 |
|
中 |
電 |
|
|
風 |
強 |
電 |
風 |
|
|
わかるよね。縦に並ぶのが今の状態、横に並ぶのが次の状態。
この表によると、弱から中にするには風ボタンを押せばいい。
さて、この遷移行列をTとし、T^2 (=T×T) を求めると:
|
断 |
弱 |
中 |
強 |
断 |
風風+電電 |
風電 |
電風 |
|
弱 |
電風+風電 |
電電 |
|
風風 |
中 |
電風+風電 |
電電+風風 |
|
|
強 |
電風+風電 |
電電 |
風風 |
|
こんなのができます。
これは二回の操作で状態を遷移させるときの事象の列
すなわち操作の列が表になってます。
たとえば中状態から二回の操作で断にするには
電・風または風・電の順にボタンを押せばいい。
遷移行列の掛け算を繰り返して T^n (= T×T×T×....×T)
を求めると、n回の操作で状態を遷移させるときの操作の列
が得られます。
ってことは、だ。全自動"扇風機のボタン押しますぃーん"を用意して、
T^nの遷移行列に記されたとおりにボタンをn回押させ、
期待する状態に落ち着くかを検証すれば扇風機のテストができるわけっすね。
ややこしいUI操作や通信プロトコルなんかもこの戦略でテスト
できそうなんだよねー