4.3.5. Метод комбинаторного покрытия условий

Для повышения чувствительности в логических выражениях используются другой критерий: комбинаторное покрытие условий. Критерий требует создания такого числа тестов, чтобы все возможные комбинации результатов условия в каждом решении выполнялись по крайней мере один раз. Набор тестов, удовлетворяющих критерию комбинаторного покрытия условий, удовлетворяет также и критериям покрытия решений, покрытия условий и покрытия решений/условий.

По этому критерию в рассматриваемом примере должны быть покрыты тестами следующие восемь комбинаций:

  1. А > 1, B = 0.
  2. A > 1, В ≠ 0.
  3. A ≤ 1, В = 0
  4. A ≤ l, В ≠ 0.
  5. A = 2, X > 1.
  6. A = 2, X ≤ l.
  7. А ≠ 2, Х > 1.
  8. A ≠ 2, X ≤ l.

Для того чтобы протестировать эти комбинации, необязательно использовать все 8 тестов. Фактически они могут быть покрыты четырьмя тестами:

  • A=2, B=0, X=4 {покрывает а, д};
  • A=2, B=1, X=1 {покрывает б, е};
  • A=0,5, B=0, X=2 {покрывает в, ж};

То, что четырем тестам соответствуют четыре различных пути на рис. 18, 19 является случайным совпадением. На самом деле представленные выше тесты не покрывают всех путей, они пропускают путь acd. Например, требуется восемь тестов для тестирования следующей программы:

                    if((x == y) && (z == 0) && end)
                    j = 1;
                    else
                    i = 1;
                

хотя она покрывается лишь двумя путями. В случае циклов число тестов для удовлетворения критерию комбинаторного покрытия условий обычно больше, чем число путей.

Таким образом, для программ, содержащих только одно условие на каждое решение, минимальным является критерий, набор тестов которого:

  1. вызывает выполнение всех результатов каждого решения, по крайней мере, один раз;
  2. передает управление каждой точке входа (например, точке входа, case-единице) по крайней мере один раз (чтобы обеспечить выполнение каждого оператора программы по крайней мере один раз).

Для программ, содержащих решения, каждое из которых имеет более одного условия, минимальный критерий состоит из набора тестов, вызывающих выполнение всех возможных комбинаций результатов условий в каждом решении и передающих управление каждой точке входа программы, по крайней мере, один раз.

Слово «возможных» употреблено здесь потому, что некоторые комбинации условий могут быть нереализуемыми; например, в выражении (a>2) && (a<10) могут быть реализованы только три комбинации условий.