ひさびさにユースケースについて考える

例えば、ライトレーサのユースケースについて考える。

「ラインに沿って走行する」がユースケースになるのは間違いない。議論になるのは

「ボタンを押すと、走行を停止する」という機能がある場合、独立したユースケースにするか、それとも「ラインに沿って走行する」の代替フローとするのか?という点だ。

また、「走行時間を表示する」機能も議論になる。こちらは、機能として

(a) 走行中の表示
(b) 走行を一時停止したときに表示

のパターンがある。
コバーンさんの「ユースケース実践ガイド」を読み直しながら、つらつらと考えた。

「第7章 シナリオ、ステップ 指針6:ユースケースには意味のあるアクションの集合を含める」に以下のような記述を発見した。

Iver Jacobson は、ユースケースのアクションとはトランザクションをあらわすものであると述べています。

この文章を見て思った。「一つのトリガーによって引き起こされる一連のシステムの振る舞いを、1つのユースケースの範囲とする」とすっきりと分類できるのではないか。

このガイドラインで上記について考えてみる。

ユーザからの指示で、ロボットはライントレースを開始する。「ボタンを押して、走行を停止する」のはライントレースの「一連の動作」と呼べるか?

この場合は、「一連の動作」とは限らないと思う。その理由は、「ライントレース中」という状態が十分な時間、定常状態として継続しうると思うからだ。

例えば、踏み切りの遮断機の振る舞いを考える。遮断機は、列車が近づいてから通過し、離脱するまでは閉じているが、大部分の時間は開状態だ。閉じてから開くまでが一連の動作とするのが自然だ。

これに対し、ライントレーサは異なる。トレースを開始したら、指示があるまでいつまでも走り続ける仕様だ。こう考えると、「ボタンを押すと走行を停止する」は別ユースケースにするのが妥当に思える。

一方、走行時間の表示だが、(a)は「ラインに沿って走行する」の一部、(b)は「一時停止」(又は「走行時間の表示」)という別ユースケースになる。それは、「ユーザからの走行開始指示」トリガーによって引き起こされる動作だからライントレースのユースケースに含まれ、(b)は「ユーザからの走行停止指示」トリガーによって引き起こされる動作だから。


うん、自分なりには整理が付いた。(というか、たぶん数年ごとにこの結論を忘れて、また悩み、同じ結論に達しているきがする。。。)