Как программисты и тестировщики находят и исправляют ошибки в коде
Как программисты и тестировщики находят и исправляют ошибки в коде
Разбираемся в основах дебаггинга — поиска и устранения ошибок в программе до того, как её финально протестируют и сделают доступной для пользователей.
Когда программист пишет код, он может случайно допустить ошибку, из-за которой программа не работает так, как должна. Отладка, или debugging, — это поиск и исправление таких ошибок.
Представим, что программист разработал калькулятор, который должен складывать два числа, но вместо правильного результата он всегда выводит «0». В этом случае запускают отладку, чтобы выяснить, почему программа работает неправильно, и исправляют ошибку в коде. Когда программист запускает отладку, он использует специальные инструменты, чтобы шаг за шагом выполнить код, пронаблюдать за его поведением и отследить значения переменных. Это позволяет точно определить, на каком этапе программа работает некорректно.
Отладка и тестирование программ — не одно и то же. Тестирование помогает проверить, работает ли программа правильно, а отладка — это исправление уже найденных проблем. Обычно отладкой занимаются разработчик или тестировщик-автоматизатор.
Во время отладки можно найти несколько типов ошибок:
● Синтаксические ошибки. Программа не запускается из-за неправильного написания кода — например, забыли закрыть скобку.
● Логические ошибки. Программа работает, но выполняет действия неправильно — например, должна умножать два числа, а вместо этого складывает их.
● Ошибки выполнения. Программа запускается, но при определённых условиях сбоит — например, пытается поделить число на ноль, что вызывает ошибку.
Тестировщики обычно занимаются отладкой, когда работают с автоматическими тестами — программами, которые проверяют правильность работы других программ. Простые ошибки могут исправить сами, если понимают код и видят очевидные баги. Например, тестировщик-автоматизатор пишет тесты для проверки калькулятора и обнаруживает, что функция умножения работает неправильно из-за опечатки. Он может запустить отладку, найти место с ошибкой и предложить исправление разработчикам.
Ошибки могут возникать и в самих автотестах, например из-за неверных условий, опечаток в коде, неправильной логики. В этом случае тестировщику-автоматизатору нужно действовать как разработчику: запустить отладку кода автотеста, чтобы проверить условия теста, разобраться, какие значения передаются и почему тест не проходит.
Писать автотесты учат на курсе «Инженер по тестированию: от новичка до автоматизатора». Студенты осваивают базу одного из языков программирования на выбор — Java или Python, учатся писать юнит-тесты, автоматизировать проверку UI и тестировать API. Все эти знания пригодятся для выполнения выпускного проекта: предстоит покрыть тестами приложение, написать тесты для API и юнит-тесты для отдельной функциональности.
● Ручной. Разработчик читает код и ищет в нём ошибки.
● Логирование, или добавление выводов. В код добавляют специальные команды, которые выводят информацию о состоянии программы. Например, в Python для логирования есть команда print() или библиотека logging. С ними получится отслеживать, какие данные используются и как выполняются команды.
Пример кода для вывода сообщений выводит сообщения о значениях переменных во время выполнения программы:
● С помощью автоматизированных инструментов. В современных средах разработки отладчики встроенные. С их помощью программисты и тестировщики могут отслеживать, как выполняется программа, останавливать выполнение кода на каждой строке и видеть, в каких его фрагментах есть ошибки.
● Профилирование. Специалисты анализируют время выполнения разных частей кода и таким образом выявляют, какие его фрагменты нужно оптимизировать.
● Метод обратного прослеживания (backtracking). Разработчик или тестировщик идут по цепочке выполнения программы в обратном порядке начиная с момента ошибки, анализируют последние изменения или шаги программы, чтобы понять, где и когда возникло некорректное поведение. Этот метод помогает найти корневую причину ошибки, шаг за шагом отслеживая выполнение кода до тех пор, пока не станет ясно, что пошло не так. Например, если программа внезапно завершилась, прослеживание может показать, какие действия привели к сбою.
Интегрированные среды разработки (Integrated Development Environments, IDE) — это инструменты, которые объединяют в одном приложении все необходимые компоненты для программирования: текстовый редактор, компилятор или интерпретатор, средства отладки, системы управления версиями кода (например, Git). Примеры современных IDE: Visual Studio Code, IntelliJ IDEA, Eclipse, PyCharm.
Отладка в IDE проще ручной благодаря встроенным инструментам — они позволяют программисту отслеживать выполнение программы в режиме реального времени. Ключевые отличия от простого вывода сообщений:
1. Точки останова (breakpoints) помогают приостановить выполнение программы в нужном месте и проанализировать текущее состояние переменных и код. Их можно расставить в ключевых частях программы, например при вызове метода или изменении поля, чтобы исследовать работу кода на каждом этапе и сразу видеть значения переменных без дополнительного вывода их в коде.
2. Пошаговое выполнение. IDE позволяют выполнять код построчно, что дает возможность точно определить, на каком этапе программа работает неправильно.
3. Просмотр состояния программы. Во время отладки IDE отображает значения всех переменных, которые можно проверить, а также состояние памяти и стека вызовов.
4. Интеграция с логированием. Многие IDE поддерживают встроенные инструменты для анализа логов, что помогает увидеть историю выполнения программы и ошибки.
Сравним удобство отладки в IDE PyCharm и PDB — встроенном отладчике Python.
Чтобы запускать отладку кода в IDE на конкретном языке, в некоторых IDE нужно установить расширение — например, VS Code Debugger для Visual Studio Code, которое поддерживает точки останова, пошаговое выполнение и просмотр переменных. А в IDE PyCharm отладчик встроенный, по возможностям такой же, как в Visual Studio Code, и не требует расширений.
1. Понимание проблемы. Прежде чем начинать исправление, важно точно знать, в чём ошибка. Полезно записать, что происходит и какой результат нужен. Например, система должна выводить список товаров в избранном по дате добавления, но он отображается в алфавитном порядке.
2. Работа с изолированным кодом. Полезно сосредоточиться на небольших частях кода,
проверяя их по очереди. Это облегчает поиск ошибок. Например, при отладке калькулятора можно сначала проверить, как программа складывает только два числа, чтобы исключить более сложные компоненты.
3. Анализ ошибок. Сообщения об ошибках, которые выводит система, часто дают подсказки о том, где искать проблему. Например, сообщение о делении на ноль сразу укажет на строку, где это происходит.
4. Добавление отладочных сообщений. Если непонятно, где именно программа ошибается, полезно добавить вывод промежуточных результатов. Например, можно вывести на экран значения переменных на каждом шаге выполнения программы, чтобы увидеть, где данные начинают вести себя неправильно.
Совет эксперта
Читать также: