Что такое отладка

Отладка (англ. debugging) — это исследование, анализ причин и исправление ошибок в программном обеспечении. После того как было произведено тестирование продукта, происходит устранение ошибок — это и называют в современным мире «отлаживанием».

Отладка в программировании

Какие бывают ошибки

Ошибки в процессе компиляции программ:

Ошибки, возникающие в языках программирования, требующих компиляции, обычно обнаруживаются компилятором — программой, преобразующей текст на языке программирования в машинный код. Если компилятор сообщает о нескольких ошибках, то отладку следует начать с исправления самой первой, так как именно она может быть причиной возникновения других ошибок.

В случае интерпретируемых языков программирования, таких как Python, текст программы постепенно переводится в машинный код и сразу же выполняется. Поэтому при обнаружении ошибки часть программы может уже быть выполнена.

Ошибка в компоновке:

Ошибка в компоновке возникает, когда возникает проблема с разрешением внешних ссылок. Она обнаруживается компоновщиком, отвечающим за связи между модулями программы.

Приведу небольшой пример: когда программа требует использовать определенную подпрограмму, но в результате процесса компоновки она не может быть найдена. Устранение ошибок в компоновке не представляет сложностей и может быть выполнено достаточно легко.

Ошибки во время выполнения (RUNTIME Error):

Ошибки, которые возникают в процессе выполнения программы и обнаруживаются операционной системой, аппаратными устройствами или самими пользователями. Они считаются неожиданными и проявляются после успешной компиляции и компоновки программы.

Можно выделить четыре типа таких ошибок:

  1. Сообщения об ошибках, которые зафиксированы схемами контроля машинных команд. Примерами могут быть переполнение разрядной сетки (когда результат операции не помещается в выделенную область памяти), деление на ноль, нарушение адресации и другие подобные ситуации.
  2. Сообщения об ошибках, которые зафиксированы операционной системой и обычно документированы. Это может быть нарушение защиты памяти, отсутствие файла с заданным именем, попытка записи на устройство, защищенное от записи и т.д.
  3. Прекращение работы компьютера или его зависание. Это могут быть как простые ошибки, требующие только перезагрузки компьютера, так и более сложные ситуации, при которых необходимо выключать ПК.
  4. Получение результатов, отличающихся от ожидаемых. В этом случае программа может работать стабильно, но выдавать некорректный результат, который пользователь воспринимает как верный.

Ошибки во время выполнения можно классифицировать на три основные группы:

  1. Возможные ошибки определения данных или неправильного определения исходных данных могут возникать в процессе выполнения операций ввода-вывода. К этой категории ошибок можно отнести ошибки преобразования, ошибки данных и ошибки перезаписи. Обычно использование специализированных технических средств для отладки, таких как API-логгеры, логи операционной системы, профилировщики и т.д., а также программирование с учетом защиты от ошибок позволяет обнаружить и решить только некоторую часть подобных ситуаций.
  2. Возникновение логических ошибок обусловлено неправильным выбором методов, разработкой алгоритмов, определением структуры данных и кодированием модулей. В данную категорию включаются следующие виды ошибок:
    1. некорректное использование переменных, к которому относится неправильное выбор типов данных, использование индексов, выходящих за пределы определения массивов, использование переменных до присвоения им начального значения и нарушение соответствия типов данных.
    2. ошибки вычислений, которые возникают из-за некорректной работы с переменными и ошибочного преобразования типов данных в процессе вычислений.
    3. ошибки взаимодействия между модулями или межмодульного интерфейса, при которых нарушаются типы и последовательность передачи параметров, области действия локальных и глобальных переменных, а также несоблюдение единства единиц измерения формальных и фактических параметров.
    4. неправильная реализация логики при программировании.
  3. Ошибки при накоплении погрешностей возникают из-за неправильного округления, пренебрежения ограничениями разрядной сетки, а также использования приближенных методов вычислений и других факторов.

Методы отладки ПО

Метод ручного тестирования:

Процесс отладки программы включает в себя ручное тестирование с использованием специального набора тестов, наличие ошибки в котором требует исправления.

Так выглядит процесс отладки ручного тестирования:

алгоритм отладки по методу ручного тестирования
Алгоритм отладки по методу ручного тестирования (юмор или жиза?)

Несмотря на то, что этот подход является эффективным, его применение ограничено для больших программ или программ с сложными вычислениями. Ручное тестирование выполняется как часть комплексных методов отладки.

Метод индукции:

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

На этапе отладки программы формулируются гипотезы, каждая из которых проверяется. Если гипотеза подтверждается, информация об ошибке детализируется, а если нет, то выдвигаются новые гипотезы.

Наглядный процесс отладки методом индукции:

Алгоритм отладки по методу индукции
Алгоритм отладки по методу индукции

Важно, чтобы выдвинутая гипотеза объясняла все проявления ошибки. Если она объясняет только часть проявлений, то либо гипотеза ошибочна, либо ошибок несколько.

Метод дедукции:

Метод дедукции является одним из эффективных подходов к выявлению возможных ошибок. Специалисты начинают с составления широкого списка потенциальных причин, которые могли спровоцировать возникновение ошибки. Затем происходит тщательный анализ каждой причины, иные предположения исключаются в том случае, если они противоречат имеющимся данным.

Процесс отладки методом дедукции:

Алгоритм отладки по методу дедукции
Алгоритм отладки по методу дедукции

В случае исключения всех потенциальных причин, специалисты проводят дополнительное тестирование с целью подтвердить свои выводы. Если же после анализа остается одна или несколько наиболее вероятных причин, специалисты стремятся доказать их последовательность и уровень влияния на возникновение ошибки.

Метод обратного прослеживания:

Это насыщенный смыслом подход, непременно приносящий плоды в случае коротких программ. Путь к результату, которым мы будем довольны, начинается с нахождения точки вывода. Именно здесь зарождается гипотеза о причинах, скрытых в основных переменных, которые могут оказаться проклятием нашей ошибки.

Шаг за шагом эта гипотеза превращается в предположения о значениях переменных в более ранних точках нашего творения. Так продолжается процесс, пока мы не отыщем ту самую ошибку, которая бесстыдно усердствует в недрах кода.

Логотип курса Python-разработчик от Eduson Academy

Python-разработчик

Eduson Academy

Онлайн-курс

С трудоустройством

4 370 / мес

Длит.: от 9 мес

Лого курса Разработчик от Skillbox

Разработчик

Skillbox

Профессия

С трудоустройством

5 175 / мес

Длит.: 12 мес

Отладка в современных IDE

Отладка программного кода — важный этап в разработке приложений, с помощью которого разработчики могут контролировать выполнение программы и проверять ее состояние. Ранее отладчики были представлены отдельными программами с командными интерфейсами, однако с развитием технологий появились более совершенные инструменты. Большинство современных IDE включают в себя встроенные отладчики, что позволяет выполнять отладку в той же среде, где происходит написание кода.

Одной из ключевых функций отладчика является пошаговое выполнение программы. Этот набор связанных функций позволяет разработчику выполнить код поэтапно, что особенно полезно при отслеживании и исправлении ошибок. В ходе пошагового выполнения можно проверять значения переменных на каждом шаге, а также сравнивать фактические и ожидаемые значения, что помогает выявить логические или семантические ошибки в коде.

Помимо этого, отладчик позволяет управлять выполнением программы и вносить изменения в ее состояние. Благодаря этому разработчики могут активно участвовать в процессе отладки, искать и исправлять ошибки, что в итоге повышает качество и надежность программных продуктов. В современных IDE отладчики интегрированы непосредственно с редактором кода, что облегчает процесс отладки и повышает эффективность работы разработчика.

Шаг с заходом (step into):

Команда проводит последовательное выполнение инструкции, затем временно приостанавливает процесс, чтобы проверить состояние программы с использованием отладчика. Если в выполняемом операторе имеется обращение к функции, шаг внутрь позволяет программе перейти в начало вызываемой функции, где она останавливается.

Шаг с обходом (step over):

Эта команда позволяет выполнить следующую инструкцию программы. Однако, в отличие от команды step into, которая заходит в вызовы функций и выполняет их строка за строкой, команда step over полностью выполняет функцию, не останавливаясь, и возвращает управление после ее выполнения. Таким образом, команда step over позволяет пропустить функции, если программист уверен, что они уже исправлены, или не заинтересован в их отладке в данный момент.

Шаг с выходом (step out):

В отличие от step into и step over, команда step out не выполняет следующую строку кода, а сразу выполняет все оставшиеся строки кода в текущей функции. По завершении функции, управление возвращается разработчику. Это очень полезная команда, которая помогает избежать отладки ненужных функций, в которые специалист случайно попал.

Обычно, при пошаговом выполнении отладки можно двигаться только вперед. Иногда возникает ситуация, когда мы пропускаем место, которое необходимо проверить. Если это происходит, то приходится перезапускать отладку заново.

Некоторые отладчики (например, GDB 7.0, Visual Studio Enterprise Edition 15.5 и более поздние версии) имеют возможность вернуться на шаг назад. Это очень удобная функция, особенно когда мы пропустили целевую часть кода или требуется повторно проверить уже выполненную инструкцию.

Небольшое видео о том что такое отладка.

Поделитесь этим постом в социальных сетях
Ридлей Эдельман

Ведущий многопрофильный эксперт во многих областях

Оцените автора
( 3 оценки, среднее 5 из 5 )
Задайте вопрос или оставьте свой комментарий

Нажимая на кнопку "Отправить комментарий", Вы автоматически принимаете политику конфиденциальности данного ресурса.