Когда Python закрывает глаза
Такой тест крайне важен. Мы хотим показать вам, почему Вы не должны его пропускать. Посмотрите на код:
temperature = float(input('Enter current temperature:'))
if temperature > 0:
print("Above zero")
elif temperature < 0:
prin("Below zero")
else:
print("Zero")
Мы намеренно ввели ошибку в код - надеемся, что Ваши зоркие глаза сразу ее заметили. Да, мы удалили только одну букву, и, по сути, действительный вызов функции print()
превращается в явно недопустимое выражение "prin()
". В области видимости нашей программы нет такой функции, как "prin()
", но действительно ли это очевидно для Python?
Запустите код и введите 0
.
Как видите, код завершает свое выполнение без каких-либо препятствий.
Как такое возможно? Почему Python упускает из виду такую очевидную ошибку разработчика?
Можете ли Вы найти ответы на эти фундаментальные вопросы?
Тесты, тестирование и тестировщики
Ответ проще, чем Вы можете ожидать, и к тому же немного разочаровывающий. Python - как Вы точно знаете - это интерпретируемый язык. Это означает, что исходный код анализируется и выполняется одновременно. Следовательно, Python может не успеть проанализировать строки кода, которые не подлежат исполнению. Как сказал старый разработчик: "Это фича, а не баг" (разг. от англ. - it's a feature, not a bug) (пожалуйста, не используйте эту фразу для оправдания странного поведения Вашего кода).
Теперь Вы понимаете, почему прохождение всех путей исполнения так важно и неизбежно?
Предположим, Вы завершили свой код и все тесты прошли успешно. Вы доставляете свой код тестировщикам и - к счастью! - они нашли в нем какие-то ошибки. Мы используем выражение "к счастью" совершенно сознательно. Вы должны признать, что, во-первых, тестировщики - лучшие друзья разработчика. Не относитесь к обнаруженным ими ошибкам как к преступлению или злокачественному новообразованию; и, во-вторых, каждая ошибка, которую обнаруживают тестировщики, не затрагивает пользователей. Оба фактора ценны и заслуживают вашего внимания.
Вы уже знаете, что Ваш код содержит ошибку или ошибки (последнее более вероятно). Как их найти и как исправить код?