Почему нельзя избежать тестирования кода
Хотя здесь мы собираемся подвести итог нашим соображениям об исключениях, не думайте, что это все, что Python может предложить, чтобы помочь Вам просить прощения. Механизм исключений Python намного сложнее, и его возможности позволяют создавать расширенные стратегии обработки ошибок. Вернемся к этим вопросам - обещаем. Не стесняйтесь проводить свои эксперименты и самостоятельно разбирать исключения.
Теперь мы хотим рассказать Вам о второй стороне непрекращающейся борьбы с ошибками - неизбежном уделе жизни разработчика. Поскольку Вы не можете избежать ошибок в своем коде, Вы всегда должны быть готовы найти и уничтожить их. Не прячьте голову в песок - игнорирование ошибок не заставит их исчезнуть.
Важной обязанностью разработчиков является тестирование вновь созданного кода, но Вы не должны забывать, что тестирование - это не способ доказать, что код не содержит ошибок. Как это ни парадоксально, единственное, что может гарантировать тестирование, - это то, что Ваш код содержит ошибки. Не думайте, что после успешного теста можно расслабиться.
Второй важный аспект тестирования программного обеспечения - сугубо психологический. Уже много лет известна истина, что авторы - даже надежные и знающие себя - не могут объективно оценивать и проверять свои работы . Вот почему каждому писателю нужен редактор, а каждому программисту - тестировщик. Некоторые говорят - немного злобно, но правдиво - что разработчики тестируют код, чтобы показать свое совершенство, а не найти проблемы, которые могут их расстроить. У тестировщиков нет таких дилемм, поэтому их работа более эффективна и прибыльна.
Конечно, это не освобождает Вас от внимательности и осторожности. Проверьте свой код как можно лучше. Не усложняйте работу тестировщиков.
Ваша основная обязанность - убедиться, что Вы проверили все пути выполнения, которые может пройти Ваш код. Звучит загадочно? Ничего подобного!
Отслеживание путей выполнения
Предположим, Вы только что закончили писать этот фрагмент кода:
temperature = float(input('Enter current temperature:'))
if temperature > 0:
print("Above zero")
elif temperature < 0:
print("Below zero")
else:
print("Zero")
В коде есть три независимых пути выполнения - Вы их видите? Они определяются операторами if-elif-else
. Конечно, пути выполнения могут быть построены с помощью множества других операторов, таких как циклы или даже блоки try-except
. Если Вы собираетесь честно протестировать свой код и хотите крепко спать и не видеть кошмаров (кошмары об ошибках могут иметь разрушительные последствия для производительности разработчика), Вы обязаны подготовить набор тестовых данных, который заставит Ваш код согласовывать все возможные пути. В нашем примере набор должен содержать как минимум три значения с плавающей запятой: одно положительное, одно отрицательное и нулевое.