Отладка алгоритма
Отладка алгоритма — это поиск причин неправильной работы алгоритма и исправление найденных ошибок. Для этого алгоритм выполняют по шагам на специально выбранных входных данных и сравнивают полученный результат с ожидаемым.
Сначала задают тестовые данные — такие входные значения, для которых заранее можно определить правильный ответ. Затем выполняют формальное исполнение алгоритма: записывают значения переменных, выполненные команды и состояние результата после каждого важного шага. Такая запись называется трассировкой.
Если итог оказался неверным, сравнивают трассировку с ожидаемым ходом решения. Момент, после которого состояние стало неправильным, помогает выполнить локализацию ошибки. После исправления алгоритм проверяют повторно на прежнем тесте и на новых тестах, чтобы убедиться, что исправление не создало другую ошибку.
Пример отладки
Алгоритм должен найти сумму чисел от 1 до \(n\), но при \(n=3\) выдаёт 5 вместо 6. Трассировка показывает: после добавления 1 сумма равна 1, после добавления 2 — 3, после добавления 3 она должна стать 6. Если последний шаг пропущен, ошибка находится в условии цикла или в границе диапазона. Исправив цикл с перебора до \(n-1\) на перебор до \(n\), алгоритм проверяют снова.
Основные приёмы
- проверять обычный тест с небольшими значениями;
- использовать граничные случаи: 0, 1, минимальное и максимальное значения;
- проверять особые случаи: пустые данные, одинаковые элементы, уже упорядоченный набор;
- изменять только одну часть алгоритма за раз и повторять тестирование.
Отладка отличается от оптимизации алгоритма. Отладка исправляет неправильную работу, а оптимизация делает уже правильный алгоритм быстрее или экономнее по памяти. Методы отладки алгоритма — это конкретные способы выполнения такой проверки.
Что нужно сделать, если результат теста оказался неверным?
Главное
- Отладка включает обнаружение, локализацию и исправление ошибок алгоритма.
- Трассировка показывает выполнение алгоритма по шагам и изменения его состояния.
- После исправления алгоритм повторно проверяют на граничных и специальных тестах.