テスト肥大化

テストコードが過剰に増加し、維持コストが高くなる状態。テストが肥大化していること自体が問題なのではなく、構造的な問題のシグナルとして読み取るべき指標。

テスト肥大化のメカニズム

偶有的複雑性由来の肥大化

Structureが弱いと(不正な状態が型で排除されていないと)、テストで検証すべき状態空間が広がる。型で制約できた状態空間のぶん、テストが増える。

これは偶有的複雑性から生まれるテストケースの増加であり、Make Illegal States Unrepresentableによって削減できる。

単一インターフェースへの関心事過剰集中

1つのインターフェースが多すぎる関心事を引き受けているとき、そのインターフェースのテストが爆発的に増える。入出力パターンが多くなるため。

テスト肥大化のシグナルとして読む

テストが肥大化するのは、一つのインターフェースが多すぎる関心事を引き受けている兆候。

テストの肥大化を見たとき、問うべき問いは:

本質的複雑性の局所化との関係

構造が良ければ、本質的複雑性(ドメインに内在する複雑性)は特定モジュール内に局所化される。モジュール内ではテストが多くなるかもしれないが、プロダクト全体から見れば肥大化していない。

テストの肥大化はテストの問題ではなく、構造の問題のシグナルである。

対処法

  1. 型で制約できるものは型に移すMake Illegal States Unrepresentable
  2. インターフェースを分割する関心の分離
  3. 実装詳細テストをインターフェーステストに置き換えるインターフェーステスト

関連