- •Здесь Вы найдете ответы на вопросы 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. Методы отладки
ПроектированияКодирования
уменьшения
погрешности
неприменимый метод некорректная работа с переменными
неверный алгоритм некорректные вычисления
неверная структура нарушение сопряжения модулей
данных неверно реализован алгоритм
другие другие
Рис. 2.7. Классификация ошибок выполнения по возможным причинам
3.2. Методы отладки
Обдумывание и логическое осмысление имеющейся информации об ошибке в большинстве случаев позволяет обнаруживать ошибку по косвенным признакам. При этом используют методы:
ручного тестирования;
индукции;
дедукции;
обратного прослеживания.
Метод ручного тестирования – наиболее простой и естественный метод из этой группы (но, пожалуй, наиболее нелюбимый студентами). Заключается метод в выполнении программы вручную с использованием тестового набора, при прогоне которого была обнаружена ошибка. Метод очень эффективен, но не применим для больших программ, программ со сложными вычислениями и в том случае, когда ошибка связана с неверным представлением программиста о выполнении некоторых операций в компьютере.
Метод индукции включает:
определение данных тестирования, имеющих отношение к ошибке;
анализ от частного к общему позволит выявить закономерности в данных пункта 1);
в результате анализа (п.2) выдвигается гипотеза о причине ошибки;
для подтверждения гипотезы 3 разрабатывается один или больше тестов, которые должны либо подтвердить, либо опровергнуть гипотезу;
если дополнительные тесты подтверждают гипотезу, можно приступать к исправлению ошибки, а вот если не подтверждают, то требуется в лучшем случае возврат к п.3, а в худшем - к п.2.
Для больших программ необходимо определить фрагмент программы, в котором может быть локализована ошибка. Наиболее сложным в этом отношении является случай “зависания” компьютера. В таком случае может помочь анализ последних полученных результатов и действий пользователя (а что будет, если программа не выдает никаких сообщений о своих действиях и не требует вмешательства оператора?).
Самым ответственным в этом методе является пункт 1. При его выполнении целесообразно записать все, что известно о проявлениях ошибки, включая и те ситуации, когда ошибка не проявляется. Если изучение этих данных никаких гипотез не появляется, то необходима дополнительная информация об ошибке. Обратите внимание на то, что в процессе доказательства гипотезы необходимо выяснить, все ли проявления ошибки объясняет данная гипотеза. Если не все проявления ошибки гипотезой объясняются, то либо неверна гипотеза, либо ошибок не одна, а больше.
Альтернативный метод дедукции заключается в:
перечисление возможных причин или гипотез:
использование данных тестирования для исключения некоторых возможных причин;
уточнение выбранной наиболее вероятной гипотезы, возможно с использованием дополнительных тестов;
доказательство выбранной гипотезы совпадает с п.4 и п.5 метода индукции.
Метод обратного прослеживания эффективен для небольших программ. Выявляется точка вывода неправильных результатов. Для этой точки строится гипотеза о значениях основных переменных, которые могли бы привести к получению имеющегося результата. Далее, исходя из этой гипотезы, делают предположения о значениях переменных в предыдущей точке. Процесс продолжают до тех пор, пока не обнаружат причину ошибки.
Название некоторых методов и применяемая при их описании терминология напоминают о криминалистике и не напрасно, ибо есть аналогия между этими методами и расследованием преступления.