日常的に使うテスト技法のひとつに状態遷移テストがある。
が、そもそも「状態」とは何かが気になったので、いくつか文献を調べてみた。
具体例を多く知っているためにイメージは持てているのだが、ソフトウェア開発経験が浅い人に説明する場合に悩んでしまう言葉のひとつだ。
調べた結果、自分の理解は以下の通り。
- 定義は、日常で使う「状態」と同様で問題ない
- ただし、ソフトウェア開発においては以下の特徴がある
- 状態は、時間の経過により変化するものに対して適用される
- 状態は、過去の処理結果を先々使用するために適用される
過去の処理結果を使用するというのは、例えば、
会員料金支払い処理が済んでいることを「支払い済」ステータスとして記憶しておき、「支払い済」のユーザに限定して有料会員コンテンツを見せる制御に使う、といったことである。
特に参考になった文献の引用
辞書
- 「人や物事の、ある時点でのありさま。」
- goo辞書「状態」, https://dictionary.goo.ne.jp/word/%E7%8A%B6%E6%85%8B/, 2021年11月07日閲覧時
ソフトウェア開発関係の文献より
「これはプログラムがそれまでの処理結果を状態として記憶しており,その状態によって現在の処理を変えるような機能を持つからである.」
- 松本 正雄 (著), 小山田 正史 (著), 松尾谷 徹 (著) (平成9年),『ソフトウェア開発・検証技法』初版, 電子情報通信学会, 153ページ
『そもそも動的モデルでいう「動的」とは、インスタンスの属性が時間の経過に伴って変化することを指します。多くの場合、人間はその変化を連続的、あるいはアナログ的なものとはとらえないで、何らかの契機に伴う離散的、つまりデジタルな変化としてとらえます。実際の状態の変化はゆっくり進むこともあれば、きわめて短時間で進むこともあります。どちらにしても時間の経過を伴います。人間は、そうした変化の前後を取り出してそれぞれを状態と呼んでいるように思えます。それが人間の認知上、具合がいいからでしょう。』
『状態は,「集合の状態」や「健康の状態」のように,通常の言葉と同じように使用する。Oxford英語辞典では,「状態」を「人や物に関する当分の間の状況と特性」と定義している。』
- Boris Beizer (原著), 小野間 彰 (翻訳), 山浦 恒央 (翻訳)(1994年)『ソフトウェアテスト技法』1版, 日経BP出版センター, 303ページ
「状態(state):あるオブジェクトの集合で,任意の時点に取るすべてのオブジェクトのすべての値の集合。たとえば,ユニットの状態,システムの状態,オブジェクトの状態,あるいは初期状態というように,状態はオブジェクトの集合と条件を定義することで特定できる。」