ユーザーストーリーとは何か
ユーザーストーリーとは、使う人の望みを、1文で書いたものです。「誰が、何をしたい、なぜ」の3つを入れます。
ストーリーは短いので、そのままでは作れたかどうかを決められません。だから、完成の目印になる受け入れ条件を、ストーリーに添えます。
このレッスンでは、自習室の予約を例に、ストーリーと受け入れ条件を書いて、動くシステムで確かめます。
このレッスンのゴール
メモ
受け入れ条件の付いたユーザーストーリーを、書ける。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| ユーザーストーリー | 使う人の望みを、誰が、何を、なぜで書いた1文 | |
| 受け入れ条件 | ストーリーが完成したと言える目印 | 同じ時間は二重に予約できない |
| 前提 | 操作の前の状態 | |
| 操作 | 利用者がすること | |
| 結果 | 操作のあとに起きること。見て確かめられる | |
| 役割 | システムを使う人の立場 | 学生、職員 |
学生が入力するセルは、このプレビューでは空白です。
ストーリーは3つの部分でできている
型は「〈役割〉として、〈したいこと〉をしたい。なぜなら〈理由〉だから。」です。
役割には、「システム」ではなく、人の立場を書きます。理由があると、作る人は、別のやり方でも望みに応えられるか考えられます。
例: 3つの部分を見分ける
| 役割 | したいこと | 理由 |
|---|---|---|
| 学生 | 空いている時間に自習室を予約したい | 勉強する席を確保したいから |
| 職員 | 部屋ごとの予約の一覧を見たい | 使われ方を確かめたいから |
| 学生 | 予約を取り消したい | 行けなくなった席を他の人に譲りたいから |
学生が入力するセルは、このプレビューでは空白です。
受け入れ条件は前提と操作と結果で書く
受け入れ条件は、ストーリーが完成したと言える目印です。1つの条件を、3つの部分で書くと、確かめやすくなります。
前提は始めの状態、操作は利用者がすること、結果は見て確かめられる変化です。1つのストーリーに、2つから4つの条件を付けます。
例: 予約の受け入れ条件
| 前提 | 操作 | 結果 |
|---|---|---|
| 部屋Aの9時が空いている | 学生が、部屋Aの9時を予約する | 予約が1件増える |
| 部屋Aの9時が予約済み | 別の学生が、同じ部屋と時間を予約する | 予約は断られ、件数は変わらない |
| 部屋Aの9時が予約済み | 学生が、部屋Aの10時を予約する | 予約が1件増える |
学生が入力するセルは、このプレビューでは空白です。
受け入れ条件を動くシステムで確かめる
ラボの API で、予約の表を使って確かめます。表には、同じ部屋と時間を二重に登録できない決まりを付けます。
3つの Run が、上の表の3つの条件に当たります。返ってくる番号を見て、条件が守られたかを判断します。
予約の表を作る
PGPASSWORD=shop psql -h db -U shop -c "drop table if exists bookings; create table bookings (id serial primary key, room text not null, slot int not null, student text not null, unique (room, slot))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
API に読み直させる
PGPASSWORD=shop psql -h db -U shop -c "notify pgrst, 'reload schema'"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
空いている時間を予約する
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"room":"Study-A","slot":9,"student":"Sato"}' "http://api:3000/bookings"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
同じ部屋と時間をもう一度予約する
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"room":"Study-A","slot":9,"student":"Suzuki"}' "http://api:3000/bookings"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
同じ部屋の別の時間を予約する
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"room":"Study-A","slot":10,"student":"Suzuki"}' "http://api:3000/bookings"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
予約の一覧を読む
curl -s -w "\n" "http://api:3000/bookings?order=id"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
受け入れ条件は「ちゃんと動くこと」と書けば十分だと考えがちです。これでは、誰も合格か不合格かを決められません。前提と操作と結果を、見て確かめられる言葉で書きます。
例: 動きと条件を照らし合わせる
| 条件 | Run の返事 | 判断 |
|---|---|---|
| 空いている時間を予約すると、1件増える | 201 | 守られている |
| 同じ部屋と時間は、断られる | 409 | 守られている |
| 同じ部屋の別の時間は、予約できる | 201 | 守られている |
学生が入力するセルは、このプレビューでは空白です。