C. blog
Dominion Randomizer 2.1.2 のお話。May 15th, 2014
このアプリのソースコードを弄るのは、実に半年ぶりである。What's new は こちら に譲るとして、ここでは、1 年以上前から報告があり、今回ようやく修正できた問題についてお話したい。
昨年 3 月ごろから、「使用しない設定にしているカードが選出される」と云うバグは報告されていた。だが、これではどこに問題があるのか推測しようがない。わたしの方で問題を再現しようとしてもうまくいかない。このアプリでは、取り敢えず何の制限も設けずカードを選出して、それが不使用に設定されていたらもう一度ランダマイズする、と云う方法を取っているのだが、この「不使用なカードをふるい落とす」部分を何度読み返しても問題は見当たらない。
しばらくして、「陰謀のカードで特に多く発生している印象です」とのご報告をいただいた。この時点で原因に気付けばよかったのだが、カードを選出し使用不使用を判定する一連の機構(つまりランダマイザの演算部分)に問題があると思い込んでいたわたしには、この情報は何の助けにもならなかった。演算部分が問題なら、どのセットで多く発生するなどということはありえず、したがって報告者の主観的な「印象」にすぎないのだろうとこの時は判断したのである(全く以て申し訳ない限りです)。
そのまま 1 年と少し経った今日、別のバグ報告をメールにて受け取った。曰く、「"建て直し"と"盗賊"の選出率がゼロになっているようだ」。これを聞いて、最初に疑ったのがカード名と ID を対応させるディクショナリであった。結果的にこの問題の原因は全く異なったところにあった(論理和を取るべき条件式が論理積になっており、そのため常に偽となる if 文があった)のだが、先述のバグの原因としてこのディクショナリに目を向けるには充分であった。
そこで、ふと思い立ち長らく見ていなかった App Store のレビューをチェックした。すると、ふた月ほど前にこんなのが来ているではないか。
"・バグがあります。
→サプライ選択で、選んだカードと実際に選出されるカードにズレがあります。
具体的には、"陰謀"で、選んだカードの一つ上の行のカードがシャッフルに出てきます(「銅細工師」を選ぶと「男爵」が出てくる、等)。"
こうなるともう原因は明白である。ディクショナリを片っ端から調べていくと、果たして設定画面に陰謀のカードリストを表示する際に参照されるディクショナリから「中庭」が抜け落ちていた。つまり、カード設定の画面には「中庭」の項目が存在しなかったのだが、カード設定を NSUserDefaults から引き出す際にはリストの 2 行目の設定を「中庭」のものとして読み込んでいたために、「中庭」以降の25枚のカードで、「使用するに設定したカードと実際に出てくるカードが違う」現象が起きていたのであった。
こうして、開発以来 1 年半に渡ってソースコードに潜んでいたバグは駆除されたわけである。しかし、「中庭」はディクショナリの中で比較的前の方に位置する(詳しく云うと 2 番目。これより前にいるのは「執事」だけである)カードであったため「執事」を除く陰謀のほぼ全カードに影響したのであって、もしこれが後ろから 2 番目のカードであったらいつまで気付かれずに放置されていたやらと考えると不安極まりない。確認したところ他のセットに同様の問題はないようだが、同様でない問題があるやもしれぬ。何かしらお気付きの方はメールをください。
それにしても、昨日の報告者さんと云い、レビューの方と云い、よくこんなわかりにくいバグにお気付きになられたものだ。ありがたやありがたや。
ブログトップ
Copyright 2013-2014 Circle Citrusworks, All Rights Reserved.