Начнем с того, чем оно не является.
1. Это не поиск всех без исключения дефектов.
2. Это не случайные нажатия по клавиатуре в надежде, что что-то сломается.
3. Даже не надейтесь, что что-то сломается. Точка.
4. Это не то, чем начинают заниматься после завершения программирования.
5. Это совсем, СОВСЕМ не то, что можно отложить до того момента, как пользователи начнут жаловаться.
На высоком уровне тестирование ПО является способом предоставления оценки качества программного обеспечения заинтересованным лицам (т. е. людям, напрямую заинтересованным в работе системы, - потребителям, пользователям и менеджерам). Хотя эти лица могут напрямую не беспокоиться о качестве ПО, они заинтересованы в управлении риском. Данный риск может принимать разнообразные формы. Для покупателей использование ПО несет риски потери данных, риски прекращения деятельность, риски того, что использование ПО принесет больше убытков, чем прибыли. Для внутренних заинтересованных лиц риски могут включать задержки с релизом ПО (или его невыходом вообще), потерей клиентов из-за выпуска некачественного ПО или даже судебные иски. Благодаря тестированию ПО вы сможете лучше оценить, какие риски несут заинтересованные лица.
Тестирование ПО позволяет непредвзято взглянуть на программный продукт. Разработчики известны тем, что - осознанно или неосознанно - относятся довольно просто к коду, который они пишут. Хотел бы я сказать, что, когда сам пишу код, избегаю этого и фокусируюсь на качестве ПО. Тем не менее зачастую мое общение с тем, кто тестирует мою программу, проходит примерно так:
Я: "Моя процедура вычисления квадратного корня работает! И работает в два раза быстрее, чем раньше!"
Тестировщик: "Хм... Когда я ввожу букву вместо числа, программа перестает работать".
Я: "О, я уверен, что никто не будет вводить буквы".
Тестировщик: "Когда я ввожу отрицательное число, программа перестает работать".
Я: "Да, мы не поддерживаем работу с комплексными числами. Поэтому я не делаю такую проверку".
Тестировщик: "Я ввожу 2.0 и получаю сообщение об ошибке, что программа не может работать с дробными числами".
Я: "Да, по идее, программа должна работать, но в данный момент она принимает в качестве данных только целые числа. Но пользователь должен знать об этом".
Тестировщик: "Хорошо, когда я ввожу 2, экран заполняется цифрами, идущими после запятой..."
Я: "Да, конечно! Квадратный корень двойки является иррациональным числом, поэтому расчет будет идти до тех пор, пока существует Вселенная! Просто введи любое положительное число, возведенное в квадрат".
Тестировщик: "Когда я печатаю 25, то программа выдает мне 3".
Я: "Да, пожалуй, здесь ошибка. Я тестировал программу только с 9, и она прошла все мои тесты!"
(...И так далее.)
Помните, что я тот, кто читает лекции по тестированию ПО. И даже я не могу не любить эти маленькие бедные функции, которые пишу. И работа тестировщика заключается в том, чтобы выбить из меня эту родительскую любовь. Я могу вырастить свою маленькую бедную функцию, но не могу предсказать, как она поведет себя, оказавшись в сложной ситуации.