つくる 要件シート
4つを1枚にまとめる
この章で4つのものを書きました。機能要件、非機能要件、制約、非目標です。
今回は新しいことを覚えません。これまでの判断を1枚にまとめるだけです。
まとめる理由は、別々の紙に書いてあると矛盾に気づけないからです。
並べると見えるものがあります。
非機能要件に「ピーク200件/秒」と書いたのに、制約に「月5万円まで」と書いてあるとします。
この2つは同時に満たせないかもしれません。 別々の紙では気づけません。
1枚には、落とした発言も次の版へ回した要望も同じように載せます。読みやすさより、同じ議論を二度しないことを優先します。
「かもしれない」で止めない
並べて気づいたところで止めると、次の打ち合わせでも同じ話をします。
止めないために、1台が何件捌けるかを1つ置きます。
Python
capacity = {"qps_per_server": 40, "monthly_cost_per_server": 10000}
# 200 ÷ 40 = 5台。5台 × 1万円 = 月5万円当てずっぽうで構いません。当てずっぽうでも、置けば計算できます。
計算できれば「5台で月5万円」と言えます。言えれば「1台の性能を実際に測ろう」と次が決まります。
数字を置かないと、次が決まりません。
台数は切り上げる
200 ÷ 40 は 5 ですが、210 ÷ 40 は 5.25 です。
5台では足りないので6台になります。4分の1台は買えません。
我慢した結果はピーク時に出ます。捌けなかった10件は、予約に失敗した10人です。
余らせるのが無駄なのではなく、余らせないと足りないのがここの性質です。
演習
要件の数字と制約の数字を突き合わせて、必要な台数・月額と、両立しない組み合わせを出します。
要件
- nonfunctional のうち peak_qps を持つ要件の中から、peak_qps が一番大きいものを選ぶ。1つも無ければ servers と monthly_cost は 0、conflicts は空にする
- 必要な台数は peak_qps ÷ qps_per_server を切り上げた数。月額は 台数 × monthly_cost_per_server
- 月額が max_monthly_cost を超えたときだけ、conflicts に {"requirement": 要件名, "constraint": "月額予算", "reason": "予算超過"} を1件入れる
ヒント
編集 ゆめさく編集部