2015-09-02 4 views
0

Возможно ли найти ошибку при тестировании белого ящика, которое невозможно найти при тестировании черного ящика?Может ли тестирование черного ящика уловить все ошибки, которые улавливает проверка белого ящика?

Если да, то почему?

Как я понимаю, это невозможно, но я хотел бы знать наверняка.

ответ

1

Я могу дать это.

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

Но на самом деле обеспечить каждый возможный ввод для каждого возможного действия нелегко (или вообще невозможно вместе). Другими словами, очень сложно написать тест для каждого возможного пути в коде приложения, даже не увидев код. Тестирование белого ящика намного эффективнее в поиске странных случаев, потому что вы можете увидеть реализацию. Очень простой пример заключается в том, что вы знаете граничные случаи в конкретной инструкции if.

Давайте предположим, что у вас есть очень основная программа, которая имеет фрагмент кода:

if (input < 0) { 
    print("Input is negative"); 
} else if (input >= 0 && input <= 60) { 
    print("Input is between 0 and 60, inclusive"); 
} else if (input > 60 && input < 70) { 
    print("Input is between 50 and 70, exclusive); //error 
} else { 
    print("Blah"); 
} 

С белой коробкой тестировании очень легко охватить все отрасли. Вы знаете, что набор [-1, 5, 65, 80], например, ударит по всем ветвям, а затем вы найдете ошибку в третьей ветви. С тестирование черного ящика вы не представляете, каковы условия отрасли. Вы можете догадаться, что [0, 5] ударят по всем ветвям. Или вы можете догадаться, что [0, 1, 56, 67, 454, 45454, 454545454] ударят по всем ветвям. Чтобы убедиться, что вы ударили по всем ветвям, и ни у кого из них нет ошибок, вам придется вводить все числа, что невозможно.

Я не говорю, что каждое приложение имеет полное покрытие кода, это далеко не так. Но вернемся к оригинальному вопросу:

Возможно ли найти ошибку при тестировании белого ящика, которое невозможно найти при тестировании черного ящика?

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

Смежные вопросы