Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТРПП пособие Шишов.doc
Скачиваний:
145
Добавлен:
17.11.2018
Размер:
3.25 Mб
Скачать

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

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

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

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

13.1. Классификация неисправностей и ошибок в программе

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

Субъективные неисправности в свою очередь делятся на проектные и интерактивные.

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

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

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

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

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

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

Примеры синтаксических ошибок:

  • пропуск знака пунктуации;

  • несогласованность скобок;

  • неправильное формирование оператора;

  • неверное образование имен переменных;

  • неверное написание служебных слов;

  • отсутствие условий окончания цикла;

  • отсутствие описания массива и т.п.

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

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

Приведем примеры ошибок в организации программы и ошибок в алгоритме.

Логические ошибки:

  • неверное указание ветви алгоритма после проверки некоторого условия;

  • неполный учет возможных условий;

  • пропуск в программе одного или более блоков алгоритма.

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

  • неправильное указание начала цикла;

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

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

  • бесконечный цикл.

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

  • неправильное задание тип данных;

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

  • неправильное редактирование данных.

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

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

  • ошибочное указание одной переменной вместо другой.

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

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

  • массивы неправильно описаны;

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

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

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

  • неверное определение порядка действий;

  • деление на нуль;

  • извлечение квадратного корня из отрицательного числа;

потеря значащих разрядов числа.

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

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

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

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

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

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