Найти тему
Будни тестировщика

Что такое дефект?

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

Дефект — это любая ошибка в программе, которая становится причиной того, что тестируемая система выполняет одно из следующих условий:

1. Не соответствует заданным требованиям (функциональным или нефункциональным).

2. Возвращает неправильный результат.

3. Неожиданно прекращает работу (устойчивость системы является неявным требованием всех тестируемых систем).

Самый очевидный вид дефекта — система не соответствует требованиям. Если требования определяют, что программа должна делать что-то, а она это не делает, то это дефект. Хотя, как обсуждалось в посвященной требованиям главе, все написанное на естественном языке обязательно имеет некоторую неоднозначность. Разработчик, реализовавший новую функцию программы, мог иначе понимать требования, нежели тестировщик.

Примером системы, возвращающей неправильный результат, могла бы стать электронная таблица, показывающая, что 2 + 3 равняется 23, или графический редактор, в котором рисование начнется синим цветом после того, как пользователь выбрал красный цвет. Это может быть не определено требованиями (и, таким образом, может и не пересекаться с первым видом дефекта из списка выше).

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

Программное обеспечение может неожиданно прекратить работу, и это необязательно будет дефектом. Например, отправка сигнала SIGKILL (посредством команды kill -9 или подобной) процессу UNIX вызовет прекращение работы программы без запуска ее подпрограмм, отвечающих за завершение работы. Однако она вылетела не неожиданно — пользователь хотел этого и даже отправил сообщение, говорящее, что надо выполнить именно это! Причиной того, что пользователю пришлось отправить сигнал SIGKILL процессу, мог быть дефект, но то, что программа прекратила работу в таких условиях, дефектом не является. Если система вылетает из-за ошибки сегментации, неотловленного деления на ноль или разыменования нулевого указателя — все это рассматривается как дефекты. Они никогда не должны появляться в программе, даже если в требованиях не определяется, что "программа должна выполняться без каких-либо исключений нулевого указателя".

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