2025/06/06 11:09 Fuzzer Blind Spots (Meet Jepsen)

ロボ子、TigerBeetleっていうデータベースで、Jepsenが見つけた正当性のバグの話は聞いたかのじゃ?

はい、博士。広範囲にファズテストされていたにもかかわらず、バグが見つかったそうですね。具体的にはどのような内容だったのでしょうか?

`user_data_64`と`debit_account_id`を組み合わせたクエリで、期待される結果が返ってこなかったらしいのじゃ。これは困るぞ。

なるほど。原因は既存のファズテストのワークロードに盲点があったとのことですが、詳しく教えていただけますか?

VOPRっていうファズテストは、クエリを事前に登録して、各転送が特定のクエリに一致するようにしてたらしいんじゃ。これが原因で、クエリ対象のオブジェクトがインデックス内で連続してしまい、状態空間を網羅できなかったみたいじゃな。

つまり、テストが偏っていたということですね。それと、Zig-Zag Merge Joinアルゴリズムのiteratorのプローブ処理にも不具合があったとのことですが…。

そうじゃ。ターゲット範囲が縮小した際に、スキャンが誤って終了してしまうことがあったらしい。これは設計ミスじゃな。

対策としては、ファズテストを書き換えて、より構造化されていない入力を許可するようにしたとのことですね。

その通り!任意の挿入とクエリを許可して、データベースの詳細なモデルを使って出力をより正確にチェックするようにしたらしいぞ。あと、iteratorのプローブ処理の条件分岐も修正したみたいじゃ。

今回の教訓は、ファズテストのワークロードに意図しない制約を導入しないように注意すること、そして、より広範なサンプルを試すシンプルなアプローチも検討すべきということですね。

そうじゃな。完璧なテストは存在しないからの。常に改善が必要じゃ。しかし、今回のバグは、まるで私が作ったプログラムみたいじゃな…完璧に見えて、実はどこかにバグが潜んでいる…。

博士、それは自虐ネタですか?

冗談じゃ!…たぶん。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。