Slide 61
Slide 61 text
62
/ 118
Kazuhiro SUZUKI @ JaSST’24 Hokkaido
さらにさらに‥
◼ ミューテーションテスト でテストをテストする!
⚫ プロダクトではなく、テストの有効性を検証するためのテスト。
プロダクトコードを故意に変異させ、その変異をテストスイートが検出できるかを見る。
⚫ テストの擬陰性を調べるものだが、変異の質が悪いと「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