過去問のデータをもとに、模擬試験を端末の中で自動で作る仕組みがあります。
新しく作っていた「国内旅行業務取扱管理者」のアプリで、おかしなことが起きました。模擬試験の「国内旅行実務」は38問のはずなのに、34問しか作られず、4問が空白になっていました。
原因は、問題の選び方にありました。模擬試験を作るときは、出題が偏らないように「過去の試験で何問目だったか」という位置を見て、位置ごとに1問ずつ選んでいます。国内旅行実務のある分野では、過去の試験1回分に問題が最大22問しかありません。それなのに、模擬試験では1回26問出す設定にしていました。番号が22種類しかないので、22問選んだところで止まってしまいます。足りない4問が空白になっていたわけです。
在庫の数は足りていました。過去5年分で105問あるので、26問ずつでも4回分作れます。実際、何回分作れるかの計算は、番号を気にせず在庫の数だけで行っていました。「回数を決める側」は番号を気にせずかき集める前提なのに、「問題を選ぶ側」は番号ごとに1問ずつしか選ばない。この食い違いが不足の正体でした。
ほかの資格でも同じことが起きていないか、公開中のものを含めた55の資格すべてで、同じ再現を流しました。問題が見つかったのは、国内旅行のほかに1つだけでした。公開済みの「中小企業診断士」です。
中小企業診断士は少し事情が違います。この試験の問題文には「第5問」のような番号が書かれていて、模擬試験も本番と同じ番号順に並べています。そのため、1回の模擬試験の中で同じ番号が重ならないよう、分野をまたいで番号を管理しています。ところが分野を順番に選んでいくので、先の分野が後の分野でしか使えない番号を取ってしまうことがあります。そうなると後の分野の候補がなくなり、2〜3問欠けた回ができていました。どの回が欠けるかは、作るたびに変わります。
直し方は2つ考えました。1つは、番号が足りないときは番号を問わず在庫から補う方法です。もう1つは、全分野の番号を同時に割り当てて、取り合いが起きないようにする方法です。前者だけだと、中小企業診断士では同じ番号の問題が多くの回で並んでしまいます。後者だけだと、国内旅行は番号の種類がそもそも足りないので直りません。
そこで、両方を順番に行う形にしました。まず全分野へ、番号が重ならないよう同時に割り当てます。それでも足りない分だけ、番号を問わず補います。回数の決め方は変えていません。かき集めれば作れる、という前提に、選ぶ側を合わせた形です。
再現で確かめると、56アプリすべてで不足がなくなりました。国内旅行は全回38問、中小企業診断士も全科目・全回で決めたとおりの問題数になりました。中小企業診断士では、最後の2回だけ、別の年度の同じ番号の問題が並ぶことがあります。在庫を使い切っていく終盤なのでやむを得ないと判断し、回数は今の8回のままにしました。
国内旅行はまだ公開前なので、この修正を入れて出せば済みます。中小企業診断士は公開済みなので、すでに作られた模擬試験をどうするかを考えました。アップデートで強制的に作り直すと、利用者全員の模擬試験の記録が消えてしまいます。欠けているのは1回あたり2〜3問で、問題が壊れているわけではありません。そこで強制はせず、気になる方には回選択画面の「シャッフル」で作り直せることを告知で案内することにしました。過去問を追加するときにも自動で作り直されるので、そのときに全員に反映されます。
修正は ver.1.26.79 で公開します。