Стратегия тестирования по принципу «Белого ящика»

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

«Белый ящик» — тестирование кода на предмет логики работы программы и корректности её работы с точки зрения компилятора того языка, на котором она писалась.

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

Техника Белого ящика включает в себя следующие методы тестирования:

  1. покрытие операторов
  2. покрытие решений
  3. покрытие условий
  4. покрытие решений и условий
  5. комбинаторное покрытие условий

Покрытие операторов[править | править вики-текст]

Критерии покрытия операторов подразумевает выполнение каждого оператора программы по крайней мере один раз.

Рассмотрим пример:

void func(int a, int b, float x) {
    if ((a > 1) && (b == 0)) x = x/a;  // пути с (истина) и b (ложь)
    if (a == 2 || x > 1) x++;          // пути e (истина) и d (ложь)
}

Чтобы выполнить каждый оператор не менее одного раза, нужно составить единственный тест со следующими значениями входных данных (a = 2 b = 0 x = 3).

Данный подход обладает недостатками. Вот, например, если в условии x > 1 программист допускает ошибку и пишет x < 1 или x > - 1, то с помощью нашего теста эта ошибка не будет обнаружена.

Покрытие решений[править | править вики-текст]

В соответствии с этим критерием необходимо составить такое число тестов, при которых каждое условие в программе примет как истинное значение, так и ложное значение.

Покрытие условий[править | править вики-текст]

Данный критерий является более эффективным по сравнению с предыдущими.

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

Однако этот критерий не всегда приводит к выполнению каждого оператора по крайней мере один раз. Поэтому к этому критерию добавляется дополнительное условие, каждый оператор должен быть выполнен хотя бы один раз.

  1. a = 2 ; b = 0 ; x = 4       a—-c—-e
  2. a = 1 ; b = 1 ; x = 1       a—-b—-d

Если после составления тестов у нас останутся не покрытые операторы, то мы должны дополнить свой набор тестов таким образом чтобы каждый оператор выполняется не менее одного раза.

Покрытие условий и решений[править | править вики-текст]

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

Хотя метод и является достаточно мощным и позволяет находить достаточно большое количество ошибок, он имеет и недостатки:

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

Комбинаторное покрытие условий[править | править вики-текст]

Этот критерий требует, чтобы все возможные комбинации результатов условий в каждом решении, а также каждый оператор выполнился по крайней мере один раз. В нашем примере должны быть покрыты восемь комбинаций:

  1. а > 1, b = 0.
  2. a > 1, b ≠ 0.
  3. а ≤ 1, b = 0.
  4. a ≤ l, b ≠ 0.
  5. а = 2, x > 1.
  6. a = 2, x ≤ l.
  7. а ≠ 2, x > 1.
  8. a ≠ 2, x ≤ l.

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

Для покрытия этих восьми комбинаций достаточно 4 теста.

  1. a = 2; b = 0; x = 4       a—-c—-e
  2. a = 0; b = 0; x = 0       a—-b—-d
  3. a = 2; b = 1; x = 0       a—-b—-e
  4. a = 0; b = 1; x = 2       a—-b—-e

(Заметим, что эти 4 теста не покрывают всех путей, они пропускают путь а—-с—-d.)

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

  1. вызывает выполнение всех результатов каждого решения, по крайней мере, один раз
  2. выполняет каждый оператор по крайней мере один раз.

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

Ссылки[править | править вики-текст]