Виды ошибок и способы их устранения

 

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

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

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

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

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

1. установление факта существования ошибки;

2. локализация ошибки;

3. устранение ошибки.

Существуют 2 метода обнаружения ошибок:

1. статическая (ручная) проверка, которая заключается в анализе программы без выполнения ее на ЭВМ;

2. тестирование - прогон на ЭВМ.

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

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

1. Получить реальные данные у потенциального пользователя.

2. Породить случайным образом наборы тестовых данных.

Ручная проверка

 

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

Статистика утверждает, что 70% ошибок можно устранить на этапе ручного тестирования.