
- •Здесь Вы найдете ответы на вопросы 2, 4, 11
- •2 Тестирование и отладка
- •2.1 Стратегии и методы тестирования
- •2.1.1 Ручной контроль
- •2.2 Методы стратегии ‘белого ящика’
- •2.2.1 Метод покрытия операторов
- •2.2.2 Метод покрытия решений (покрытия переходов)
- •Метод покрытия условий
- •2.2.4 Критерий решений (условий)
- •2.2.5 Метод комбинаторного покрытия условий.
- •Методы стратегии ‘черного ящика’
- •Метод эквивалентного разбиения
- •2.3.1.1 Выделение классов эквивалентности
- •2.3.1.2 Построение тестов
- •Метод анализа граничных значений
- •Метод тестирования таблицы решений
- •Отладка
- •3.1. Общее описание ошибок программ
- •Кодирования
- •3.2. Методы отладки
Отладка
Отладкой называется процесс выявления природы ошибки программы и исправления ошибок, после того, как ошибки были обнаружены в процессе тестирования.
Для выполнения отладки необходимы знания специфики управления используемыми техническими средствами, операционной системы, среды и языка программирования, природы и проявлений различных ошибок и методик отладки. Отладка психологически дискомфортна, т.к. приходится искать собственные ошибки, да еще и в условиях ограниченного времени.
3.1. Общее описание ошибок программ
В зависимости от этапа разработки, на котором проявляются ошибки, различают:
синтаксические ошибки, фиксируемые компилятором, транслятором, интерпретатором);
ошибки компоновки, выявляемые компоновщиком (редактором связей) при объединении модулей;
ошибки выполнения, обнаруживаемые операционной системой, аппаратными средствами или пользователем при тестировании программы.
Из перечисленных наиболее простыми являются синтаксические ошибки, т.к. транслятор часто указывает место локализации ошибки и развернутый комментарий о характере ошибки. Следует иметь в виду, что чем лучше формализованы правила синтаксиса языка, тем больше ошибок из общего количества можно обнаружить в процессе компиляции. В связи с этим свойством говорят о языках с защищенным синтаксисом и с незащищенным синтаксисом. К первым, безусловно, относится Pascal, а ко вторым – Си со всеми его модификациями. Чего стоит хотя бы возможность выполнения присваивания в условном операторе Си, например:
if (c=n) x=0; /* (здесь c присваивается значение n, после чего результат операции сравнивается с нулем. Если программист хотел выполнить присваивание c=n, то эта ошибка будет выявлена только при тщательном тестировании программы).
Ошибки компоновки возникают при разрешении внешних ссылок, когда при обращении из одного модуля к другому модуль не обнаруживается или не стыкуются списки параметров в операторах вызова и описания. В большинстве случаев такие ошибки быстро локализуются и устраняются.
Наибольшей головной болью программиста являются ошибки выполнения. Проявляться эти ошибки могут следующим образом:
в виде сообщения о переполнении разрядной сетки, делении на ноль, нарушении адресации и т.п. (такие ошибки обнаруживаются схемами контроля выполнения машинных команд);
в виде сообщения о нарушении защиты памяти, попытке записи на устройства, защищенные от записи, отсутствии нужного файла и т.п. (такие ошибки обнаруживает операционная система);
“зависание” компьютера;
несовпадение полученных результатов тестирования с ожидаемыми.
Причины ошибок выполнения очень разнообразны, поэтому их локализация может оказаться крайне сложной. На рисунке 2.7 приводится классификация ошибок этапа выполнения.
Сложность отладки увеличивается из-за влияния следующих факторов:
возможность взаимовлияния ошибок;
возможность одинакового проявления разных ошибок;
отсутствие повторяемости проявлений некоторых ошибок от запуска к запуску – так называемые стохастические ошибки;
иногда при внесении операторов отладки исчезает или изменяется внешнее проявление ошибки.
Из всех этапов проектирования логики программных модулей этап отладки является наименее формализованным. В нем выделяют две задачи:
определение природы ошибки;
исправление ошибки.
Решение первой из этих задач занимает около 95 % времени, затрачиваемых на отладку. Поэтому любые средства ускорения процесса определения местоположения ошибки в программе имеют важное значение.
Ошибки выполнения
Ошибки определения данных
Ошибки накопления погрешностей
о
Логические ошибки
шибки
передачи
не учитывается
ошибки
ограничение
преобразования
разрядной сетки
ошибки
перезаписи
не применялись
неправильные
данные
способы