Sneak pathとは
ここら辺の論文に出てきたので気になって調べてみました。そしたら例のBinderさんのTesting Object-oriented Systemsを参照していたので、読んでみました。(どうでもいいですがこの本、立てて読んだ方がうまくいくぐらい、分厚いです)
Table 7.4というところに、状態遷移モデルにおいてどんなフォールトが発生するか、ということが説明されています。そこでは、Event/Action/Resultant Stateの組合せでどんなエラーとなるかが説明されています。
例えば、Event:OK/Action:OK/Resultant State:Wrongの場合は”Incorrect state”というフォールトだ、という具合です。
この中に、Sneak pathというのが出てきます。どんな条件かというと、
Event:Accept Illegal
Action:Any
Resultant State:Any
です。正確には、ActionとResultant Stateの組合せでside effectの有無が異なりますが、EventがAccept IllegalであればすべてSneak pathと呼ぶようです。本来そのStateで受け付けてはいけないイベントを受け付けた場合にここに分類されます。
今気づきましたが、Sneak path=蛇の道、ですね。誰も知らない道がある、ということですか。わかりやすい。
もう一つ、似たような分類でTrap doorというのがあります。これは、EventがAccept Undefinedというものです。Sneak pathはそのStateには影響を与えるべきでないイベント(しかしそのState machine内にはそのイベントがある)がStateを遷移させることを指していますが、Trap doorはそのState machineにすらないイベントがStateを遷移させてしまうもののようです。まさに「トラップドア」ですね。
Sneak pathをテストするためには無効イベントも含めてテストすればよさそうですが、Trap doorはなかなか見つけるのが難しそうです。わな、ですからね。