ミューテーションテスト でテストをテストする! ⚫ プロダクトではなく、テストの有効性を検証するためのテスト。 プロダクトコードを故意に変異させ、その変異をテストスイートが検出できるかを見る。 ⚫ テストの擬陰性を調べるものだが、変異の質が悪いと「failさせる必要のないの変異」を生成し、 その結果ツールが「このテストの擬陰性を検出した」という擬陽性に陥る‥らしい(*1)。 ◼ プロパティベースドテスト でテストケースを増やす! ⚫ テストケースの入出力について、具体的な入出力値(example)ではなく、満たされるべき性質 (property)を指定することで、その性質を満たすようなテストケースを自動生成させる手法。 - Lucy Mair氏の例(*2): 2つのリストを連結する関数 c = concat(a, b) を考える。 たとえば、concat([0, 1, 2], [3, 4]) = [0, 1, 2, 3, 4] となる。この concat には、以下の性質がある。 > c の長さは a.length + b.length となる。 > a に含まれるすべての項目は c に含まれる。 > b に含まれる項目はすべて c に含まれる。 > 空のリストと連結すると、同じリストが返される a = concat(a, []) = concat([], a)。 テスト設計技術も進化が続いており、学んでいく必要がある。 (*1) 『Mutation Testingを活用して テスト品質を考える』参照のこと。 (*2) InfoQの記事より引用: 多くの入力パターンをテストできるProperty-based Testing