11. Отладка программного обеспечения. Классификация ошибок, методы отладки программного обеспечения

Ответ на вопрос в сканворде (кроссворде) «Этап устранения ошибок в программе», 7 букв (первая — о, последняя — а):

Отладка, или debugging, — это поиск (локализация), анализ и устранение ошибок в программном обеспечении, которые были найдены во время тестирования.

Ответ на вопрос в сканворде (кроссворде) «Этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки», 7 букв (первая — о, последняя — а):

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

Отладчик Visual Studio — очень эффективное средство. Прежде чем приступать к его использованию, следует ознакомиться с базовыми терминами, такими как отладчик, отладка и режим отладки. Когда позднее мы будем вести речь о поиске и устранении ошибок, мы будем иметь в виду то же самое.

Методы отладки программного обеспечения

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

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

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

Вот как выглядит процесс:

11. Отладка программного обеспечения. Классификация ошибок, методы отладки программного обеспечения

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

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

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

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

11. Отладка программного обеспечения. Классификация ошибок, методы отладки программного обеспечения

Отладка по методу дедукции

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

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

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

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

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

Данный метод часто используют как составную часть других методов отладки.

Метод основан на тщательном анализе симптомов ошибки, которые могут проявляться как неверные результаты вычислений или как сообщение об ошибке. Если компьютер просто «зависает», то фрагмент проявления ошибки вычисляют, исходя из последних полученных результатов и действий пользователя. Полученную таким образом информацию организуют и тщательно изучают, просматривая соответствующий фрагмент программы. В результате этих действий выдвигают гипотезы об ошибках, каждую из которых проверяют. Если гипотеза верна, то детализируют информацию об ошибке, иначе — выдвигают другую гипотезу. Последовательность выполнения отладки методом индукции показана на рис. 10.3 в виде схемы алгоритма.

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

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

По методу дедукции вначале формируют множество причин, которые могли бы вызвать данное проявление ошибки. Затем анализируя причины, исключают те, которые противоречат имеющимся данным. Если все причины исключены, то следует выполнить дополнительное тестирование исследуемого фрагмента. В противном случае наиболее вероятную гипотезу пытаются доказать. Если гипотеза объясняет полученные признаки ошибки, то ошибка найдена, иначе — проверяют следующую причину (рис. 10.4).

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

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

МКОУ «СОШ №2 ст. Преградная»

Хачко Ирина Александровна

Основные этапы процесса разработки программы

Как проконтролировать текст программы до выхода на компьютер?

  • Просмотр
  • Проверка
  • Прокрутка

Для чего нужны отладка и тестирование?

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

Тестирование — это испытание, проверка правильности работы программы в целом либо ее составных частей.

В чем заключается отладка?

Что такое тест и тестирование?

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

Тестирование может показать лишь наличие ошибок,

но не их отсутствие.

Вычислять эталонные результаты нужно обязательно до,

а не после получения машинных результатов.

Какими должны быть тестовые данные?

Пример. Система тестов для задачи нахождения корней квадратного уравнения ах2 + Ьх + с = 0

Из каких этапов состоит процесс тестирования?

Проверка в экстремальных условиях.

Проверка в нормальных условиях.

Проверка в исключительных ситуациях.

Характерные ошибки программирования

Неправильная постановка задачи

Правильное решение неверно сформулированной задачи

Выбор алгоритма, приводящего к неточному или неэффективному решению задачи

Неполный учет ситуаций, которые могут возник­нуть, логические ошибки

Непонимание порядка выполнения оператора

Нарушение правил, определяемых языком про­граммирования

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

Ошибки в данных

Неудачное определение возможного диапазона из­менения данных

Перепутаны близкие по написанию символы, на­пример цифра 1 и буквы I , 1

Неверное считывание входных данных, неверное за­дание форматов данных

Является ли отсутствие синтаксических ошибок свидетельством правильности программы?

  • пропуск знака пунктуации;
  • несогласованность скобок;
  • неправильное формирование оператора;
  • неверное образование имен переменных;
  • неверное написание служебных слов;
  • отсутствие условий окончания цикла;
  • отсутствие описания массива и т. п.
  • неверное указание ветви алгоритма после проверки некоторого условия;
  • неполный учет возможных условий;
  • пропуск в программе одного или более блоков алгоритма.

Ошибки в циклах:

  • неправильное указание начала цикла;
  • неправильное указание условий окончания цикла;
  • неправильное указание числа повторений цикла;
  • бесконечный цикл.

Ошибки ввода-вывода, ошибки при работе с данными:

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

Ошибки в использовании переменных:

  • использование переменных без указания их начальных значений;
  • ошибочное указание одной переменной вместо другой.

Ошибки при работе с массивами:

  • массивы предварительно не обнулены;
  • массивы неправильно описаны;
  • индексы следуют в неправильном порядке.

Ошибки в арифметических операциях:

  • неверное указание типа переменной (например, целочисленного вместо вещественного);
  • неверное определение порядка действий;
  • деление на нуль;
  • извлечение квадратного корня из отрицательного числа;
  • потеря значащих разрядов числа.

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

Сопровождение программ — это работы, связанные с обслуживанием программ в процессе их эксплуатации.

Тестовые данные

Обеспечение проверки всех возможных условий возникновения ошибок должно ложится на правильно подобранные тестовые данные:

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

Рассмотрим на примере систему тестовых данных для задачи нахождения корней квадратного уравнения ax^2+bx+c=0:

Как выполняется отладка в современных IDE

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

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

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

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

Команда выполняет очередную инструкцию, а потом приостанавливает процесс, чтобы с помощью отладчика было можно проверить состояние программы. Если в выполняемом операторе есть вызов функции, 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 и более поздних версий) есть возможность вернуться на шаг назад. Это полезно, если пропущена цель либо нужно повторно проверить выполненную инструкцию.

Fatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 13732440 bytes) in /var/www/u1306671/data/www/blog.skillfactory.ru/wp-includes/class-wpdb.php on line 2432

WordPress › Ошибка

Определение 2

ОТЛА́ДИТЬ,
-ла́жу, -ла́дишь; причастие страдательное прошедшего времени отла́женный, -жен, -а, -о; совершенный вид, переходный глагол
(несовершенный вид отлаживать). Специальное Отрегулировать работу какого-либо механизма, приготовить механизм к действию.
Отладить спуск у капкана. ◆ Я хорошо отладил и смазал свой максим, и он работал довольно исправно. Дегтярев, Моя жизнь.

Когда следует использовать отладчик

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

Пошаговая отладка программы

Любая достаточно объемная программа требует отладки, состоящей в поиске и устранении ошибок. Интегрированная среда разработки содержит все необходимые средства для устранения любых типов ошибок и контроля за ходом выполнения программы. В ней предусмотрены средства, позволяющие выполнять программы в пошаговом режиме, следить за изменением значений переменных или выражений и выполнять трассировку (регистрировать вызовы) процедур.

В разрабатываемой вами программе могут присутствовать различные типы ошибок. Обычно различают ошибки трех типов:

1. Ошибки при компиляции. Такие ошибки возникают в неправильно составленных программных конструкциях. Примерами подобных ошибок могут служить неполные пары инструкций (например, If. End If или For. Next) или ошибки, нарушающие правила языка Visual Basic (например, ошибочно записанные ключевые слова, пропущенные разделители или неверные типы данных). К ошибкам при компиляции относятся также ошибки синтаксиса, являющиеся результатом нарушения правил грамматики или пунктуации. Примерами этого типа ошибок являются неполные пары скобок или неверное количество аргументов, передаваемых в функцию.

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

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

Ошибки первого типа обычно выявляются на стадии компиляции или на стадии написания текста программы. Редактор Visual Basic автоматически проверяет синтаксис инструкции после нажатия клавиши Enter, и в случае ошибки выдается соответствующее сообщение.

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

Отладка программы в пошаговом режиме

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

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

ПРИМЕЧАНИЕ: Интегрированная среда разработки может находиться в одном из следующих режимов: режим конструирования формы (в этом режиме создаются формы), режим выполнения (переход в него осуществляется сразу после запуска программы), режим прерывания (при приостановке выполнения программы мы переходим в режим прерывания, позволяющий выполнять отладку программ)

Для прерывания выполнения программы можно воспользоваться одним из следующих способов:

· Добавить в процедуру инструкцию Stop.

· Установить точку останова.

· Запустить программу не через команды меню Run (Запуск), а используя команды меню Debug (Отладка) (см. раздел «Меню Debug»).

Выполнение программы будет прервано также при возникновении ошибки выполнения. В этом случае появится окно диалога (рис. 6.1), в котором приведен код ошибки и дана физическая интерпретация ее возникновения.

Рис 6.1 Окно диалога с сообщением об ошибке

Нажатие в этом окне кнопки Debug (Отладка) приводит к прерыванию выполнения программы и вызову окна редактора Visual Basic, в котором курсор будет установлен в строку кода с обнаруженной ошибкой.

Установка точки останова

Точка останова — это строка программы, на которой автоматически приостанавливается выполнение программы. Для установки точки останова выполните следующее:

1. Войдите в окно программы и установите курсор в строке, где требуется остановить программу.

Рис 6.2 Установка точки останова

ПРИМЕЧАНИЕ:При отладке программ часто используется область, расположенная вдоль левого края окна программы. Эта область носит название полосы индикатора (Margin Indicator Bar). В ее полях отображаются различные индикаторы, используемые при отладке програм.

СОВЕТ:Установить точку останова можно также и другим, более быстрым способом: щелкните кнопкой мыши на поле полосы индикатора напротив той строки, в которой требуется установить точку останова.

Снятие точки останова

Пошаговая отладка программы

Пошаговую отладку программы можно производить в разных режимах:

1. В случае необходимости реализации поочередного выполнение каждой строки программы, включая строки всех вызываемых процедур, нажмите кнопку Step Into (Шаг с заходом) на панели инструментов Debug (Отладка) или одноименную команду в меню Debug (Отладка) или клавишу F8.

ПРИМЕЧАНИЕ:Чтобы использовать команду Step Into (Шаг с заходом), не обязательно запускать и приостанавливать выполнение программы. Достаточно установить курсор в окне программы на процедуру, которую требуется отладить в пошаговом режиме, и выполнить команду Step Into (Шаг с заходом).

2. Если нет необходимости заходить в вызываемые процедуры, нажмите кнопку Step Over (Шаг с обходом) на панели инструментов Debug (Отладка). Можно воспользоваться одноименной командой меню Debug (Отладка) или комбинацией клавиш Shift+F8. В результате вызываемые процедуры будут выполняться без их пошаговой отладки.

3. Для выхода из процедуры можно воспользоваться кнопкой или командой Step Out (Шаг с выходом) , а также нажать клавиши Ctrl+Shift+F8. При этом текущая процедура будет выполнена до конца и программа перейдет на строку, следующую за ее вызовом.

Отла́дка — этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится:

  • узнавать текущие значения переменных;
  • выяснять, по какому пути выполнялась программа.

Существуют две взаимодополняющие технологии отладки:

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

Режим отладки и выполнение приложения

При первом запуске приложения в Visual Studio его можно запустить, нажав кнопку с зеленой стрелкой

11. Отладка программного обеспечения. Классификация ошибок, методы отладки программного обеспечения

11. Отладка программного обеспечения. Классификация ошибок, методы отладки программного обеспечения

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

Если у вас открыт проект, выберите в раскрывающемся списке Отладка элемент Выпуск.

11. Отладка программного обеспечения. Классификация ошибок, методы отладки программного обеспечения

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

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

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

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

Термин debugging (с англ – отладка) дословно обозначает «вылавливание жучков». Он появился в 1945 г. после случая, когда компьютер «Марк-1» прекратил работу вследствие попадания в его электрические цепи мотылька, который заблокировал одно из реле вычислительной машины.

Помощь со студенческой работой на тему Отладка и тестирование программы

Процесс тестирования зачастую делится на 3 этапа:

  • Проверка в нормальных условиях – проведение тестирования на основе данных, характерных для реальных условий функционирования программы.
  • Проверка в экстремальных условиях. В тестовые данные входят граничные значения области изменения входных переменных, воспринимающиеся программой как правильные данные. Типичные примеры таких значений: очень маленькие или очень большие числа; отсутствие данных; граничные объемы данных (например, массив из слишком малого или слишком большого числа элементов).
  • Проверка в исключительных ситуациях проводится на значениях данных, которые лежат за пределами допустимой области изменений.

При подготовке тестовых данных и проведении тестирования нужно учитывать следующие моменты:

  • каким будет результат работы программы, которая не рассчитана на обработку отрицательных или нулевых значений переменных, в случае обработки таких данных?
  • каков будет результат работы программы, которая обрабатывает массивы, если число их элементов превысит величину, указанную в объявлении массива?
  • что произойдет в случае слишком малых или слишком больших чисел?
Читать также:  Где-то прочитал, что финны взяли на вооружение советскую систему образования, отказались от ЕГЭ (ЕНТ)- они что, глупее других европейцев?

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

Следующие шаги

Из этой статьи вы узнали общие принципы отладки приложений. Теперь вы можете приступить к знакомству с процессом отладки в Visual Studio и написанию кода с меньшим количеством ошибок. В следующих статьях приводятся примеры кода на C#, но основные понятия применимы ко всем языкам, поддерживаемым средой Visual Studio.

Тестирование и отладка программного обеспечения (ПО)

Тестирование и отладка – два противоположных, но взаимосвязанных процесса, выполняются многократно. В этой статье дается только общее представление об этих процессах (скорее на примере структурного программирования). Понятно, что требования к тестированию игр или управлению воздушными полетами принципиально разные.

Основные термины

Тестирование (testing) – процесс выполнения программы с целью найти ошибки. Может выполняться как с компьютером, так и без него (общий термин). Доказательство (proof) – попытка найти в программе ошибки путем доказательств на основе математических теорем о правильности программы безотносительно к внешней программной среде (вид тестирования). Контроль (verification) – попытка найти ошибки, выполняя программу в тестовой или моделируемой среде (вид тестирования). Испытание (validation) – попытка найти ошибки, выполняя программу в заданной программной среде (вид тестирования). Аттестация (certification) – авторитетное подтверждение правильности программы (итоговое тестирование, для критичного ПО).

Отладка (debugging) – средство установления точной природы ошибок, процесс, противоположный тестированию, ведет к устранению ошибок.

Виды тестирования

Автономное тестирование, тестирование модуля (module testing) – контроль отдельного модуля в изолированной среде (например, с помощью ведущей программы), инспекция текста модуля на сессии программистов, которая иногда дополняется математическим доказательством правильности модуля. Тестирование сопряжений (integration testing) – контроль сопряжений между частями системы, как между компонентами в комплексе, так и между модулями отдельного компонента (например, у заглушки). Комплексное тестирование (system testing) – контроль и/или испытание системы по отношению к исходным целям. Является процессом контроля, если оно выполняется в моделируемой среде, и процессом испытания в реальной среде.

ПРИНЦИПЫ (аксиомы) тестирования

  • Хорош тот тест, для которого высока вероятность обнаружения ошибки.
  • Невозможно тестировать собственную программу.
  • Необходимая часть тестов – описание выходных документов.
  • Избегайте не воспроизводимых тестов.
  • Готовьте тесты как для правильных, так и для неправильных данных.
  • Не тестируйте «с лету».
  • Детально изучайте результаты каждого теста.
  • По мере обнаружения все большего числа ошибок в некотором модуле или программе, растет вероятность обнаружения в ней еще большего числа ошибок.
  • Тестируют программу — лучшие умы.
  • Считают тестируемость главной задачей разработчиков программы.
  • Не изменяй программу, чтобы облегчить тестирование.
  • Тестирование должно начинаться с постановки целей.
  • Не гордитесь тестом, который не обнаружил ни одной ошибки.
  • При планировании разработки выделяйте не менее 50% времени на тестирование и отладку, тогда у вас появится шанс закончить работу в срок.
  • Другой человек не будет испытывать уважения к вашим способностям писать правильный код. Поэтому, когда нет возможности передать тестирование другому разработчику, следует отстраниться от своей разработки и отнестись к ней как чужой (такой психологический настрой).
  • Если вы не описали заранее ожидаемые результаты, то даже неумышленно можно истолковать фактические результаты как верные.
  • Не воспроизводимые тесты – тесты, которые нельзя повторить нужное количество раз.
  • Обязательно в наборе тестов должны быть входные данные, которые могут не соответствовать смыслу задачи (смотри пример с формулой Герона), либо формату вводимых данных.
  • Тестирование «с лету» подразумевает, что тесты не следует придумывать после написания кода, это следует делать заранее.
  • Группируйте ошибки тестирования, постарайтесь понять их природу.
  • Рекомендация относится к коллективной разработке, когда менее опытный программист делает много ошибок в своем коде программы.
  • Тестирование – творческий процесс, автор тестов должен понимать технологию тестирования и иметь собственный опыт программирования.
  • Например, методология структурного программирования обеспечивает обозримость ПО за счет деления его на модули и стандартизации их взаимодействия. Полезными свойствами программного кода является осмысленный выбор идентификаторов объектов наличие комментариев.
  • Вы можете изменить программу в процессе отладки. Важно – не забыть восстановить полезный код.
  • Для каждого процесса тестирования начинайте с определения цели.

Связь процесса тестирования с процессом проектирования ПО

В процессе проектирования ПО обычно принимаются следующие решения:

  • Требования к ПО (область применения, назначение, условия эксплуатации);
  • Цели создания ПО (решение определенных задач);
  • Внешние спецификации «что должно делать ПО» (функции и требования к ним)
  • Архитектура системы;
  • Структура программы (разбиение на программные модули);
  • Внешние спецификации модуля (функции модуля);
  • Логика модуля (алгоритмы);

Как вы видите, процесс непосредственного кодирования не включен в проектирование.

Процессы тестирования (в скобках указаны номера связанных с ними процессов проектирования):

1. Автономный тест (6, 7) 2. Тест сопряжений (4, 5) 3. Тест функций (3) 4. Комплексный тест (2) 5. Тест приемлемости (1)

Тестирование ПО включает

1) постановку задачи; 2) проектирование тестов; 3) написание тестов; 4) тестирование тестов; 5) выполнение тестов; 6) изучение результатов тестирования.

Два крайних подхода к проектированию тестов

«Черный ящик» — недостижимый идеал: проверить все возможные комбинации и значения входных данных. «Белый ящик» — связывание теста только с логикой программы:

Две стратегии тестирования

Восходящее тестирование – от отдельных модулей по мере их готовности (в том числе отдельных функций) к тестированию форм и ПО в целом. Нисходящее тестирование начинается с тестирования структуры ПО и с последующим тестированием модулей. Реально используются комбинации обеих стратегий в зависимости от сложности ПО.

Критерии выбора стратегии тестирования

Время до полной сборки программы Время реализации скелета программы Имеющийся инструментарий проектирования Мера параллелизма ранних этапов реализации Возможность проверки в реальных условиях эксплуатации

После цикла тестирования начинается цикл отладки программы.

Самое сложное – понять по результатам тестирования причину ошибки. Ошибка в модуле (например, в методе обработки некоторого события) может быть связана как с логикой обработки данных, так и с ошибкой сопряжений (при передаче параметров). Ошибки вызова форм приложения могут быть связаны с неверно выбранным способом их взаимодействия.

Далее выдвигается гипотеза, которая проверяется после изменения программного кода.

Важно, что после этого следует снова выполнить (полное или частичное) тестирование, так как любое изменение кода может внести новые ошибки.

Случайное

Термин отладка может иметь разные значения, но в первую очередь он означает устранение ошибок в коде. Делается это по-разному. Например, отладка может выполняться путем проверки кода на наличие опечаток или с помощью анализатора кода. Код можно отлаживать с помощью профилировщика производительности. Кроме того, отладка может производиться посредством отладчика.

Отладчик — это узкоспециализированное средство разработки, которое присоединяется к работающему приложению и позволяет проверять код. В документации по отладке для Visual Studio именно это обычно подразумевается под отладкой.

В современных системах программирования (например, Turbo C, Turbo Pascal, Turbo Basic и др.) отладку осуществляет зачастую специальное программное средство – отладчик, который позволяет исследовать внутреннее поведение программы.

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

При выполнении отладки программы нужно придерживаться следующих правил:

  • на начальном этапе проведения отладки нужно использовать простые тестовые данные;
  • возникающие ошибки устранять строго по очереди;
  • помнить, что причина ошибок – не машина. Современные ПК и программы-трансляторы наделены достаточно высокой надежностью.

Тест и тестирование

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

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

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

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

Отладка программы — один их самых сложных этапов разработки программного обеспечения.

9.1. Классификация ошибок

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

В соответствии с этапом обработки, на котором проявляются ошибки, различают (рис. 9.1):

синтаксические ошибки — ошибки, фиксируемые компилятором (транслятором, интерпретатором) при выполнении синтаксического и частично семантического анализа программы;

ошибки компоновки — ошибки, обнаруженные компоновщиком (редактором связей) при объединении модулей программы;

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

11. Отладка программного обеспечения. Классификация ошибок, методы отладки программного обеспечения

Рис. 9.1. Классификация ошибок по этапу обработки программы

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

Читать также:  Программа для обнаружения и устранения ошибок

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

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

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

• появление сообщения об ошибке, зафиксированной схемами контроля выполнения машинных команд,

• появление сообщения об ошибке, обнаруженной операционной системой,

• несовпадение полученных результатов с ожидаемыми.

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

• неверное определение исходных данных,

• накопление погрешностей результатов вычислений.

Неверное определение исходных данных происходит, если возникают любые ошибки при выполнении операций ввода-вывода.

Логические ошибки имеют разную природу. Так они могут следовать из ошибок, допущенных при проектировании, например, при выборе методов, разработке алгоритмов или определении структуры классов, а могут быть непосредственно внесены при кодировании модуля. К последней группе относят:

• ошибки некорректного использования переменных,

• ошибки межмодульного интерфейса,

• другие ошибки кодирования.

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

11. Отладка программного обеспечения. Классификация ошибок, методы отладки программного обеспечения

9.2. Методы отладки программного обеспечения

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

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

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

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

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

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

9.3. Методы и средства получения дополнительной информации

Для получения дополнительной информации об ошибке можно выполнить добавочные тесты или использовать специальные методы и средства

• интегрированные средства отладки,

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

Данный метод не очень эффективен и в настоящее время практически не используется.

Интегрированные средства отладки.

Большинство современных сред программирования (Delphi, Builder C++, Visual Studio и т. д.) включают средства отладки, которые обеспечивают максимально эффективную отладку. Они позволяют:

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

• предусматривать точки останова,

• выполнять программу до оператора указанного курсором и т.п..

Отладка с использованием независимых отладчиков.

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

9.4. Общая методика отладки программного обеспечения

Суммируя все сказанное выше, можно предложить следующую методику отладки программного обеспечения, написанного на универсальных языках программирования для выполнения в операционных системах MS DOS и Win32:

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

Если ошибка не найдена или система просто «зависла», переходят ко второму этапу.

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

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

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

4 этап — исправление ошибки — внесение соответствующих изменений во все операторы, совместное выполнение которых привело к ошибке.

5 этап — повторное тестирование — повторение всех тестов с начала, так как при исправлении обнаруженных ошибок часто вносят в программу новые.

Что искали другие

ОТЛА́ДКА,
-и, ж. Спец.
Действие по значению глагола отладить—отлаживать.
Отладка оружия. Отладка механизмов.

Виды ошибок

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

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

Ошибки компоновки

Ошибки связаны с разрешением внешних ссылок. Выявляет компоновщик (редактор связей) при объединении модулей программы. Простой пример — ситуация, когда требуется обращение к подпрограмме другого модуля, но при компоновке она не найдена. Ошибки также просто найти и устранить.

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

  • сообщение об ошибке, которую зафиксировали схемы контроля машинных команд. Это может быть переполнение разрядной сетки (когда старшие разряды результата операции не помещаются в выделенной области памяти), «деление на ноль», нарушение адресации и другие;
  • сообщение об ошибке, которую зафиксировала операционная система. Она же, как правило, и документирует ошибку. Это нарушение защиты памяти, отсутствие файла с заданным именем, попытка записи на устройство, защищенное от записи;
  • прекращение работы компьютера или зависание. Это и простые ошибки, которые не требуют перезагрузки компьютера, и более сложные, когда нужно выключать ПК;
  • получение результатов, которые отличаются от ожидаемых. Программа работает стабильно, но выдает некорректный результат, который пользователь воспринимает за истину.

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

Ошибки определения данных или неверное определение исходных данных. Они могут появиться во время выполнения операций ввода-вывода.

К ним относятся:

  • ошибки преобразования;
  • ошибки данных;
  • ошибки перезаписи.

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

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

В эту группу входят:

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *