概要
テスト容易性とは、効果的に 効率的に検証を行える能力のこと。
効果的とは、より網羅的にMECEに隅々まで品質の検証ができていること。
効率的とは、より低コストで品質の検証ができていること。
背景
システムのサイズ感が大きくなればその分だけテストしなければいけない範囲は拡大する。
そのため、上記の効果的効率的が困難になってしまうというリスクが付きまとう。
そこでアーキテクチャ自体をテスト容易(正しさの評価検証が容易)な設計にすることが求められる。
どうすれば
図のようにテスト対象のa、bがあった際に両方行うってことは、重複部分の検証が無駄に行われるということ。
したがって、テスト容易性のためには概念の重複があると検証コストの無駄遣い、
効率性の低下をその分招くということである。
さらに単一責務原則に従っていないとか、interface分離原則に従っていないものの
要素を後日再設計した際には、再度検証しなくてはいけないことになる。
また、テスト容易性はその特徴から構造がMECEでクリーンであれば容易になることから、
保守性との相関関係があることが容易に想像できる。
保守性が向上 ⇒ テスト容易性も向上
テスト容易性が向上 ⇒ 保守性も向上(こちらの証明はまだ微妙なので後述)
これは品質特性のトレードオフ文献システム品質属性の実装 |マイクロソフト学習 (microsoft.com)にも記載があるとおりである。
また、モジュール間の依存関係が強いほどテストはしにくい。
テストしにくい箇所があるとそこがボトルネックになりかねないし、
モジュールが大きい単位のままだと検証した際に問題発生したらどこに問題があるのか?
判別が難しいため、以下の2つが必要条件としてあることが望ましい。
・小さい単位での検証ができる仕組み つまりカプセル化
・極力依存関係を疎にしておくこと
つまりオープンクローズドにしておくことがテスト効率性を下げないポイントである。
テスト容易⇒保守性高いの証明
検証がしやすいということは、時間もコストも網羅性も優れてるってことなので、
いまのアーキテクチャに問題がある場合、テストの容易性が徐々に下がっていくはず。
それをメトリクス解析ツールで常に計測しておくことで、
【テスト容易性が下がってる ⇒ 保守性が下がってきている】という事実として観測ができる。
【テスト容易性が下がってる ⇒ 保守性が下がってきている】てことと
【保守性が向上 ⇒ テスト容易性向上】てことから、
テスト容易性が高い ⇒ 保守性高い を証明できることになる。
まとめ
以上のことから、UAFでMECEに則って作成しておくことは、
変更容易性の高いアーキテクチャを実現するだけでなく、低コストで検証しやすいことも
同時に実現できるということである。
これは逆に言えば、テスト容易性がしにくくなってきている
変更する際にやたら時間がかかっているなどといったメトリクスデータが取れた場合には、
いまのアーキテクチャが徐々に劣化し始めてきているサインでもあるということ。
なので、早急に構造の見直し具体的には
・重複概念が発生していないか?
・カプセル化は正常にされているか? などの再検討が求められる。