「現れないこと」を守るテストには、守る対象が実在したというポジティブコントロールを対で置く
テスト
設計判断
検証
判断
運用
原則
機密値・個人情報・禁止語が出力へ現れないことを回帰テストで守るときの判断。
問題の型
安全性の表明が「出力に X が含まれない」という否定形だけで構成されていると、入力側が壊れたときにテストが黙って通り続ける。X を仕込むはずの seed ・ fixture ・前提条件が壊れて X がそもそも存在しなくなっても、否定形のアサーションは当然に成立するからである。
たちの悪さは、壊れ方が「赤」ではなく「永久に緑」であること。守っているつもりの検知器が何も検証していない状態が、誰にも気づかれずに続く。ヘルパーの統合やリファクタで前提の一行が落ちる、というただの整理が引き金になる。
判断
否定形の安全性表明には、「守る対象が確かにそこにあった」という肯定形の表明を対で置く。センチネル値を仕込んだなら、仕込んだ直後にそれを読み戻して一致を表明する。1・2行で済み、これがあると前提が壊れたときに静かな緑ではなく赤になる。
同じ発想は否定形一般に効く。「エラーが出ないこと」を見るなら対象処理が実行されたことを、「遷移しないこと」を見るなら操作が届いたことを、別途表明する。
確かめ方
検知器を信じる前に、守る対象を意図的に漏らせる変異を当てて落ちることを見る(検知力の実証)。合わせて、前提を壊す変異(seed の仕込みを外す)でも落ちることを見ると、肯定側と否定側の両方に感度があることを確かめられる。
適用条件
守る対象が重大なほど割に合う。逆に、否定形が軽い補助的なチェックなら、ポジティブコントロールのコストが見合わないこともある。