В прошлом уроке мы посчитали, во что бизнесу обходится «дефект», который проскочил до выпуска. Но слово «дефект» там использовалось для всей ситуации целиком, а на деле за одной короткой историей прячутся три разных момента, которые важно научиться различать: где именно кто-то ошибся, что из-за этого сломалось в коде, и что в итоге увидел пользователь. Разберём это на похожем случае: разработчику поручили сделать поле 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 — похожие, но не одинаковые понятия, и тестирование оказывается лишь частью более широкой картины контроля качества. Разберём это в следующем уроке.
