ISPPO_HW_6

0
месяц назад
месяц назад
README.md

Отладка программных продуктов на Python


Задание 1. Отладка с помощью
print()
и
logging

Исправленный код

В исходном коде были две ошибки:

  1. Логическая ошибка: Цикл
    range(1, n)
    не включает число
    n
    , поэтому факториал считался неверно (для 5 получалось 24 вместо 120). Исправлено на
    range(1, n + 1)
    .
  2. Отсутствие обработки типов: Передача строки вызывала скрытую ошибку или некорректное поведение. Добавлена проверка типа.

Вывод

Модуль

logging
значительно удобнее
print()
, так как позволяет гибко управлять уровнем детализации (DEBUG, INFO, ERROR) без удаления кода и автоматически добавляет метки времени и уровень важности.
print()
требует ручного удаления или комментирования отладочных строк перед релизом, что повышает риск ошибок. Для серьезных проектов
logging
является стандартом благодаря возможности записи в файлы и ротации логов.


Задание 2. Работа с отладчиком
pdb

Код с точкой останова

Описание процесса отладки

При запуске скрипта выполнение приостанавливается на строке с

pdb.set_trace()
.

  1. Команда
    l
    (list) показала контекст кода вокруг текущей строки.
  2. Команда
    n
    (next) позволила выполнить строку и перейти к началу цикла.
  3. Внутри цикла с помощью команды
    p i
    и
    p result
    отслеживались значения переменных на каждой итерации. Было замечено, что при использовании
    range(1, n)
    переменная
    i
    никогда не достигала значения
    n
    , что подтвердило логическую ошибку.
  4. Команда
    c
    (continue) завершила выполнение программы.

Вывод

Инструмент

pdb
оказался полезнее логирования тем, что позволил интерактивно исследовать состояние программы "здесь и сейчас", не перезапуская её многократно с разными уровнями логов. Возможность проверять произвольные выражения и изменять переменные на лету ускоряет поиск причин некорректного поведения алгоритма.


Задание 3. Использование интегрированной среды разработки (IDE)

  • Скриншот 1: screenshot_1
  • Скриншот 2: screenshot_2
  • Скриншот 3: screenshot_3

Преимущества IDE

IDE предоставляет визуальный интерфейс для отслеживания переменных и стека вызовов, что делает процесс отладки интуитивно понятным и быстрым по сравнению с консольным вводом команд в `pdb**. Графическое отображение изменений значений в реальном времени позволяет мгновенно выявлять аномалии в логике программы без необходимости вручную печатать имена переменных.


Задание 4. Обработка исключений и трассировка

Модифицированный код

Анализ трассировки

Вывод

traceback.print_exc()
предоставляет полную цепочку вызовов функций, ведущих к ошибке, включая имена файлов, номера строк и код, который вызвал исключение. Это позволяет точно локализовать место сбоя даже в сложных проектах с глубокой вложенностью вызовов. Кроме того, сообщение об ошибке (
ValueError: ...
) сразу указывает на причину (неверный тип или значение), что ускоряет исправление кода.

Вывод

Использование блока

try-except
в сочетании с
traceback
превращает аварийное завершение программы в контролируемый процесс, предоставляя разработчику исчерпывающую диагностическую информацию. Это критически важно для создания надежных приложений, которые должны корректно реагировать на некорректный ввод пользователя, а не просто "падать".