他部署に依頼して作成されたシステムのチェックをしました。
文字の大きさが、ここはもう少し小さい方がいいのではと細かい部分の指摘しかないかと思いながら、上限を超えて登録されて登録されないか動作の確認をしたところ、上限を超えて登録されてしまいました。
単独で登録した場合は、上限になったら登録されませんでした。
同時に複数登録した場合に、上限を超えて登録されてしまいます。
同時に複数登録した場合だから、データベースのロックがされていないか、ロックの開始位置が正しくないと起きる現象だと思い、ソースコードを確認すると、データベースのロックの開始位置が正しくありませんでした。
上限を超えていないか判定する部分が、データベースのロック開始より前にあったために、同時に登録すると、どちらも上限を超えていないと判定してしまっていました。
上限になった場合に入力内容が消えてしまう
他部署に連絡する前にロックの開始位置を変えて再度同時に複数登録すると、上限を超えて登録されませんでした。
上限を超えたと判断した登録は、入力画面に戻されましたが、入力内容が消えてしまっていました。
ある項目の登録数が上限を超えたら、登録はさせませんが、選択肢を変更して登録してもらえばいいので、消えてしまうのは不便です。
再度ソースコードを確認すると、入力画面に戻す際のパラメータが不足しているのがわかりました。
発番がおかしい
データベースに発番された番号を登録するカラムがあるので、カラムの値を変更して登録をすると、発番が正しく行われて処理された箇所と、発番が正しく行われず処理された箇所があります。
ソースコードを確認すると、発番が正しく行われず処理された箇所は、MAXで最大値を求めています。
変更後のカラムの値が最大値となったために、発番が正しくありませんでした。
発番が正しく行われて処理された箇所は、COUNTで最大値を求めていたので正しい値となっています。
データベースへの接続を2回行っている
登録の上限のチェックがどこで行われているか調べている際に気がつきましたが、データベースへの接続が2回行われています。
後から登録の上限のチェックを追加したために、接続が必要と考えられて機能とともにデータベースへの接続を追加したようです。
データベースをロックしてから上限をチェックして、登録を完了しなければならないので、1回の接続で済ませなければなりません。
細々とソースコードをチェックする気はありませんでしたが、不具合を発端に、いろいろと気づきました。
今回たまたま気がついた不具合もあるので、検証で見つける方法を考えています。