ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

複数人が複数の参加の申し込みするシステムで発生したバグ

1回の申し込みで、複数人が複数の講義への参加の申し込みを同時に受け付けるシステムがあります。
管理用の画面から、参加する講義を追加しようとしたら、思った通りに追加ができませんでした。

具体的な現象

参加を予定していなかった講義に参加をしたくなり、追加で参加の情報を登録しようとして選択して変更ボタンを押すと、上限人数に到達したとして、変更できませんでした。

原因

講義ごとに上限人数の設定があります。
2人追加で参加を登録しようとしていて、数人余裕がある状態です。

調べてみると、追加の操作をしたデータは、1回の申し込みで20人同時に申し込まれていて、追加しようとしているセミナーには追加前から何人か申し込まれていました。
そこに、さらに追加で2人を申し込もうとしたところ、追加前から申し込まれていた人数と追加の2人の合計が、空いている人数の上限を超えたために、上限人数に到達したと判定していました。

正しくは、追加前から申し込まれていた人数は加えず、2人追加で上限を超えないか判定しなければなりません。
追加だけでなく、削除も考え、増減両方の配慮が必要です。

f:id:AJYA:20180723123714p:plain
unsplash-logoAlvaro Reyes

対策

対策としては、
・講義ごとの当初の申し込み数を保持しておいて、変更時の申し込み数と差分を求めて上限を超えないか判定する。
・変更時に、変更をしようとしているデータ以外の申し込み数を求めて、変更をしようとしているデータの申し込み数を加算して、上限を超えないか判定する。
という方法が考えられます。

どちらの方法が実装として楽かはわかりませんが、上記の2番目の方法を選びそうです。
1番目の方法は手間がかかるような気がしました。