順序が契約なら集合一致テストを使わず、上流の不定順を境界で確定する
テスト設計
画像処理
設計判断
判断
運用
画像検出、並列処理、外部 API などが返す配列は、要素の組み合わせが正しくても順序が安定しているとは限らない。下流が配列 index を使って関連付ける、入力順で表示・登録するなど、順序自体が契約なら、上流の返却順をそのまま意味のある順序として扱わない。
採用するのは、意味を付与する境界で決定的なキーを選び、一度だけ整列してから ID 採番や対応付けを行う方式である。画面上の検出物なら座標、バッチなら入力 sequence など、利用者が期待する順序に対応するキーを使う。後段ごとに個別に sort すると契約が分散し、対応付け済みデータだけを並べ替えて別要素とずらす危険がある。
テストでも順序が契約なら、部分集合一致や要素ごとの存在確認ではなく、配列全体を順序込みで完全一致させる。集合一致は「各ペアは正しいが配列は逆順」という不具合を green にする。期待値側や実測値側をテスト内で sort するのも、production が順序契約を守っていない事実を隠すため避ける。
一方、順序に意味がない集合なら部分集合一致が正しい。厳密化の判断点は、下流の index、表示順、送信順、再現可能性が仕様に含まれるかどうかである。
検証
少なくとも2要素を、上流が期待順と逆に返し得る入力で実行する。各要素の関連付けが正しいだけでなく、返却配列が定義した順序そのものになっていることを完全一致で確認する。テストを集合一致から完全一致へ変えたとき既存実装が赤になるなら、テストの厳格化ではなく未定義だった順序契約を発見した可能性を調べる。