Ошибка, дефект, отказ. Тестирование против отладки

В прошлом уроке мы посчитали, во что бизнесу обходится «дефект», который проскочил до выпуска. Но слово «дефект» там использовалось для всей ситуации целиком, а на деле за одной короткой историей прячутся три разных момента, которые важно научиться различать: где именно кто-то ошибся, что из-за этого сломалось в коде, и что в итоге увидел пользователь. Разберём это на похожем случае: разработчику поручили сделать поле email при регистрации на нашем учебном полигоне обязательным.

Чему научишься за этот урок:
— разложить любой инцидент на три отдельных понятия: ошибку, дефект и отказ;
— объяснить, почему не каждый дефект сразу приводит к отказу;
— различить тестирование и отладку (debugging) как две разные роли с разными задачами.

Три понятия вместо одного «дефекта»

Ошибка (error) — это неверное действие человека, обычно ещё до того, как в дело вступает код. Разработчик прочитал требование «email обязателен» и на автомате решил, что это значит просто «поле не должно быть пустым», а не «в поле должен быть корректный адрес с символом «@»». Это решение и есть ошибка: неверное понимание задачи, которое произошло в голове человека.

Дефект (defect, в обиходе — баг) — это уже конкретный изъян в коде, который появился из-за той ошибки. В нашем случае в коде проверки формы регистрации просто нет условия «содержит ли поле символ «@»»: разработчик и не подумал его писать, ведь он с самого начала понял задачу иначе. Дефект — это то, что теперь физически лежит в исходном коде.

Отказ (failure) — это видимое неправильное поведение программы, когда дефект сработал в реальной ситуации. Пользователь вводит при регистрации что попало вместо email, например просто «привет», а форма это пропускает. Позже человек пытается восстановить пароль, письмо отправлять некуда, и восстановить доступ к аккаунту не получается. Вот это уже отказ: реальная, видимая проблема, с которой столкнулся живой человек.

Важный нюанс: дефект не обязательно сразу превращается в отказ. Если бы все без исключения пользователи полигона случайно вводили email именно с «@» по привычке, дефект в коде так и лежал бы незамеченным, ничем себя не проявляя. Дефекты нередко годами лежат в редко используемых участках кода и срабатывают только тогда, когда находится подходящая ситуация.

  ОШИБКА                 ДЕФЕКТ                   ОТКАЗ
+---------------+     +----------------+      +-----------------+
| разработчик   | --> | в коде нет     | -->  | пользователь     |
| решил: "email |     | проверки на    |      | регистрируется   |
| обязателен" = |     | символ "@" при |      | без email и не   |
| просто не     |     | регистрации    |      | может восстано-  |
| пустое поле   |     |                |      | вить пароль      |
+---------------+     +----------------+      +-----------------+

  дефект срабатывает отказом не всегда и не сразу —
  может годами лежать незамеченным в редком участке кода

Тестирование против отладки (debugging)

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

Это принципиально разные роли с разными навыками. Тестировщик должен уметь предположить, где программа может повести себя не так, как задумано, и точно описать проблему так, чтобы её можно было воспроизвести. Разработчик должен уметь читать и менять код, чтобы устранить причину. Одно без другого не работает: если тестировщик не опишет отказ понятно, разработчику будет нечего чинить; если разработчик не исправит дефект, отказ повторится у следующего пользователя.

Практика на полигоне

Разберём случай целиком, шаг за шагом, на нашем учебном продукте — образовательной платформе с регистрацией. Разработчику дали требование «email обязателен при регистрации». Он реализовал проверку «поле не должно быть пустым», но не добавил проверку на «@», потому что понял требование именно так. Тестировщик зарегистрировал тестового пользователя с email вида «просто текст» — система это приняла. Позже этот пользователь запросил восстановление пароля: письмо отправлять было некуда, доступ к аккаунту оказался потерян.

Итог:
— ошибка, дефект и отказ — разные звенья одной цепочки, а не синонимы слова «баг»;
— дефект появляется из ошибки, но проявляется отказом не всегда и не сразу;
— тестирование находит и описывает отказ, отладка ищет и исправляет сам дефект в коде — это разные роли.

Контрольный вопрос. Что из перечисленного точнее всего описывает «ошибку» (error) в цепочке ошибка → дефект → отказ?

АНеверное действие человека — например, разработчик неправильно понял требование
БКонкретный изъян, который уже находится в коде программы
ВВидимое неправильное поведение программы, которое заметил пользователь

Подсказка: Это происходит в голове человека, ещё до того, как дело доходит до кода.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Что такое «дефект» (defect) в этой цепочке?

АКонкретный изъян в коде программы, который появился из-за чьей-то ошибки
БНеверное решение человека на этапе понимания задачи
ВСитуация, которую увидел и на себе испытал пользователь

Подсказка: Это то, что физически лежит в исходном коде, а не в мыслях человека и не в опыте пользователя.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Что такое «отказ» (failure) в этой цепочке?

АВидимое неправильное поведение программы, когда дефект сработал в реальной ситуации
БРешение человека, которое привело к появлению изъяна в коде
ВСам изъян, который лежит в исходном коде и пока ничем себя не проявляет

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

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Какие из утверждений про дефект и отказ верны (выбери все подходящие)?

Выберите все верные варианты.

АНе каждый дефект сразу приводит к отказу
БДефект может годами лежать в редко используемом участке кода, ничем себя не проявляя
ВКаждый дефект гарантированно вызовет отказ уже при первом запуске программы
ГОтказ может произойти в программе, у которой в коде нет ни одного дефекта

Подсказка: В уроке прямо сказано, что происходит с дефектом, если ситуация для его срабатывания долго не наступает.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Как называется специалист, который читает код, ищет в нём место с дефектом и исправляет его? Ответь одним словом.

Подсказка: Это не тот, кто описывает отказ, а тот, кто меняет сам код.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Задание. Разработчик прочитал требование «email обязателен при регистрации» и решил, что это значит просто «поле не должно быть пустым» — про символ «@» он не подумал. Как одним словом называется то, что сейчас произошло, — по терминологии из этого урока? Ответь одним словом.

Подсказка: Это событие произошло в голове человека, ещё до того, как он написал хоть строчку кода.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Задание. В коде формы регистрации на нашем полигоне нет проверки на символ «@» — разработчик её попросту не написал. Как одним словом называется то, что сейчас произошло, — по терминологии из этого урока? Ответь одним словом.

Подсказка: Это уже то, что находится в самом исходном коде, а не в мыслях человека.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Задание. Пользователь зарегистрировался на полигоне с email вида «привет» вместо настоящего адреса, а позже не смог восстановить пароль — письмо отправлять было некуда. Как одним словом называется то, что сейчас произошло, — по терминологии из этого урока? Ответь одним словом.

Подсказка: Это то, что увидел и на себе испытал живой пользователь, а не то, что скрыто в коде или в чьей-то голове.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Задание. Опишите в 2-3 предложениях, почему дефект «в коде нет проверки на символ «@»» мог долгое время не приводить ни к одному отказу, если бы почти все пользователи полигона по привычке всегда вводили email именно с «@».

Критерий приёмки: принято, если объяснено, что дефект проявляется отказом только тогда, когда реально встречается подходящая ситуация (например, кто-то вводит email без «@»), а до этого момента изъян в коде просто никак себя не проявляет.

Подсказка: Подумай, при каком именно условии этот конкретный изъян в коде вообще может кому-то помешать.

✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.

Онлайн-проверка ответа появится позже

Задание. Тестировщик на нашем полигоне заметил и подробно описал: «при регистрации без символа «@» в email восстановление пароля потом не работает». Кто должен искать точное место в коде, где допущена ошибка проверки, и исправлять его? Ответь одним словом.

Подсказка: Тестирование описывает, что именно сломалось для пользователя; отладка — это поиск причины внутри кода и её устранение.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Чем тестирование принципиально отличается от отладки (debugging)?

АТестирование находит и описывает отказ, отладка ищет дефект в коде и исправляет его
БЭто два названия одного и того же процесса
ВТестированием и отладкой всегда занимается один и тот же человек одновременно

Подсказка: Вспомни, какие два разных навыка и какие две разные роли были описаны в уроке.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Что дальше

Мы научились различать ошибку, дефект и отказ и увидели, что тестирование и отладка — это разные задачи с разными исполнителями. Но вокруг слова «тестирование» есть ещё путаница: верификация, валидация, QA, QC — похожие, но не одинаковые понятия, и тестирование оказывается лишь частью более широкой картины контроля качества. Разберём это в следующем уроке.

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева