ソフトウェアのテスト容易性とは、ソフトウェア成果物(ソフトウェアシステム、モジュール、要件、設計文書など)が、特定のテスト環境においてテストをどの程度容易にサポートできるかを示す指標です。成果物のテスト容易性が高いほど、テストによってシステム内の欠陥(もしあれば)を発見しやすくなります。
形式的には、テスト可能なシステムとテスト不可能なシステムがある。この分類は、入力「I」を受け取るテスト対象システムの機能「S」に対して、計算可能な関数述語「V」が存在し、入力Iが与えられたときにSが有効な出力を生成する場合、Vは真となり、そうでない場合は偽となる。この関数「V」は、入力Iを持つシステムの検証関数として知られている。
多くのソフトウェアシステムはテスト不可能、あるいはすぐにテストできない。例えば、GoogleのReCAPTCHAは、画像に関するメタデータが一切ないため、テスト可能なシステムとは言えない。しかし、表示される各画像にタグが別の場所に保存されていれば、ReCAPTCHAはすぐにテストできる。このメタ情報があれば、システムをテストすることが可能だ。
したがって、テスト容易性は、テスト対象ソフトウェアとテスト目標、使用されるテスト手法、およびテストリソース(すなわち、テストコンテキスト)との相互依存性から生じる外在的な特性として捉えられることが多い。テスト容易性は(ソフトウェアのサイズのように)直接測定することはできないものの、カプセル化、結合度、凝集度、冗長性といった他の重要なソフトウェア特性と高い相関関係にあるため、ソフトウェア成果物の内在的な特性として考慮されるべきである。
「テスト容易性」と優れた設計との相関関係は、凝集度が弱く、結合度が強く、冗長性があり、カプセル化が不十分なコードはテストが難しいことからもわかる。[ 1 ]
テスト容易性が低いほど、テストにかかる労力は増加する。極端な場合、テスト容易性の欠如は、ソフトウェアの一部またはソフトウェア要件のテスト自体を妨げる可能性がある 。
経験的仮説に適用される特性であるテスト容易性は、2つの要素から構成されます。ソフトウェアテストの労力と有効性は、以下を含む多くの要因に依存します。
ソフトウェアコンポーネント(モジュール、クラス)のテスト容易性は、次のような要因によって決まります。
ソフトウェアコンポーネントのテスト容易性は、以下の方法で向上させることができます。
要件がテスト可能であるためには、以下の基準を満たす必要があります。
要件を公理として扱うと、テスト可能性は関数の存在を主張することによって扱うことができる。(ソフトウェア)入力が出力を生成する、 したがってしたがって、理想的なソフトウェアはタプルを生成しますこれは入出力セットですは仕様を意味します。
それでは、テスト入力をしてみましょう。出力を生成する、それがテストタプルですさて、問題はまたはセットに含まれている場合、テストタプル合格すればテストは終了し、そうでなければシステムはテスト入力に不合格となります。したがって、仕様セットのセット指示関数 の概念に効果的に変換する関数を作成できるかどうかを把握することが極めて重要です。。
その考えによれば、仕様のテスト可能性関数存在は単に主張されるだけでなく、厳密に証明されなければならない。したがって、代数的な整合性がなければ、そのような関数は存在せず、したがって、仕様はテスト可能とはみなされなくなる。