要求とは何か
要求とは、システムに求められることを、はっきり書いた文です。要求があいまいだと、作る人と使う人で、できあがりの想像が食い違います。
大学の図書館が、本の貸出を記録するシステムを作るとします。「貸出がすぐ終わること」だけでは、何秒なら合格か、誰にも決められません。
このレッスンでは、あいまいな希望を、合格か不合格かを決められる要求に書き直します。
このレッスンのゴール
メモ
あいまいな希望を、確かめられる要求に書き直せる。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| ニーズ | 利用者の困りごとや望み | 貸出をもっと早く済ませたい |
| 要求 | システムがすることや守ることを書いた文 | |
| 機能要求 | システムが何をするかを書いた要求 | |
| 非機能要求 | どれだけ速く、安全に動くかを書いた要求 | |
| テストできる | 合格か不合格かを、数や事実で決められる | |
| ステークホルダー | システムに関わる人。使う人、作る人、頼む人 |
学生が入力するセルは、このプレビューでは空白です。
ニーズと要求は別のもの
ニーズは、人の困りごとです。要求は、そのニーズに応えるために、システムがすることを書いた文です。
要求は2種類に分けられます。機能要求は、システムが何をするかです。非機能要求は、速さや安全さのように、どう動くかです。
例: ニーズから要求へ
| 誰の | ニーズ | 要求 | 種類 |
|---|---|---|---|
| 学生 | 借りた本の返す日を忘れる | システムは、貸出ごとに返却日を記録する | 機能 |
| 司書 | 同じ本を二重に貸したくない | 貸出中の本は、もう一度貸し出せない | 機能 |
| 司書 | 混んだ昼休みも待ちたくない | 貸出の登録は、2秒以内に終わる | 非機能 |
| 学生 | 他の人の貸出を見られたくない | 学生は、自分の貸出だけを見られる | 機能 |
学生が入力するセルは、このプレビューでは空白です。
テストできない言葉は要求にならない
「すぐ」「なるべく」「使いやすい」「十分」は、人によって意味が違います。これらの言葉だけでは、合格か不合格かを決められません。
直し方は、数を入れることです。または、見て確かめられる事実に変えます。「すぐ」は「2秒以内」にします。
動くシステムを見て要求を確かめる
要求は、紙の上だけでなく、動くシステムでも確かめます。ラボには、データベースと Web API があります。
まず、図書館の貸出の表を作ります。表の決まりが、システムの守る要求になります。順に Run してください。
貸出の表を作る
PGPASSWORD=shop psql -h db -U shop -c "drop table if exists loans; create table loans (id serial primary key, member text not null, book text not null, due_days int not null default 14); insert into loans (member, book) values ('Sato', 'Databases'), ('Suzuki', 'Networks')"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
API に読み直させる
PGPASSWORD=shop psql -h db -U shop -c "notify pgrst, 'reload schema'"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
貸出の一覧を読む
curl -s -w "\n" "http://api:3000/loans?order=id"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
観察したことが要求になる
次の2つの Run は、システムに2通りの貸出を頼みます。1つは本の名前がなく、もう1つは返す日の数を書きません。
返事の番号を見て、システムが守っている決まりを言葉にします。それが、確かめられる要求の元になります。
本の名前がない貸出
curl -s -w "\n%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"member":"Tanaka"}' "http://api:3000/loans"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
返す日数を書かない貸出
curl -s -w "\n%{http_code}\n" -X POST -H "Content-Type: application/json" -H "Prefer: return=representation" -d '{"member":"Tanaka","book":"Algorithms"}' "http://api:3000/loans"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
要求は、画面や部品の名前で書けば十分だと考えがちです。「ボタンを青にする」は作り方であって、要求ではありません。要求は、利用者に何が起きるかを書きます。
例: 観察から要求を書く
| 観察したこと | 書いた要求 |
|---|---|
| 本の名前がないと、400が返る | 貸出には、必ず本の名前が要る |
| 返す日数がなくても、貸出が作られ、14が入る | 返す日数を省くと、14日になる |
| 作られた貸出の番号は、システムが付ける | 貸出の番号は、利用者が決めない |
学生が入力するセルは、このプレビューでは空白です。