実データを持ち込めない領域は判定ロジックを純粋関数へ切り出して合成データでCI化する
テスト
CI
判断
運用
個人情報を含む実検体(実写真・実機スクリーンショット・顧客データ)でしか再現しない不具合を直すと、検証がリポジトリ外/gitignore 下のローカルテストに閉じ、CI は新しい挙動の退行を一切検知できない状態になる。変更を revert しても CI は green のままなので、検知器のない改善が積み上がる。
対処
判定ロジックのうち実データを必要としない部分を純粋関数へ切り出し、合成データで committed テストにする。画像認識であれば、輝度や統計を扱う前段は実画像が要るが、矩形の重なり・包含・抑制の優先順位・トラックの生存判定といった座標ロジックは合成の矩形で完全に検証できる。
運用としては2層にする。
- committed テスト(CI): 合成データで書ける不変式。退行検知の本体。
- ローカル専用テスト(gitignore): 実検体での回帰スイープ。手元の確認用と割り切り、CI の代替とみなさない。
判定の勘所
- 「実データがないと検証できない」は多くの場合切り出しをしていないだけ。どこまでが純粋な計算かを見極める。
- 実検体を除外設定に入れるときは、除外の事実と「CI では何が検証されていないか」を明示する。暗黙のまま進むと、レビューでは検証済みに見えて実際は無検知になる。
- 閾値だけを緩める修正は特に危険で、合成データの反例(境界帯を漂う入力、間欠的に閾値を越える入力)を先に作ってから触る。