0.98M

1_5. Методы отладки (1)

1.

МДК 01.02. Поддержка и тестирование
программных модулей
Лекция 5-6. Тема:
«Методы отладки»
Преподаватель: Кусков Федор Витальевич

2.

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

3.

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

4.

Способы обнаружения ошибки:
Аналитический – имея достаточное представление о
структуре программы, просматриваем текст вручную,
без прогона (запуска программы);
Экспериментальный – прогоняем программу,
используя отладочную печать и средства трассировки и
анализируем результаты её работы.

5.

Принципы локализации ошибок:
Большинство ошибок обнаруживается без запуска
программы (внимательный просмотр текста).
Если отладка зашла в тупик и обнаружить ошибку не
удается, лучше отложить программу.
Использование отладочных механизмов среды
разработки: трассировка, промежуточный контроль
значений.
Избегать эксперименты по типу «А что будет, если
изменить плюс на минус» всеми силами.

6.

Принципы исправления ошибок:
Там, где найдена одна ошибка, возможно, есть и
другие;
Вероятность, что ошибка найдена правильно, никогда
не равна 100%;
Наша задача – найти саму ошибку, а не ее симптом.

7.

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

8.

Отладка программы всегда предполагает обдумывание и логическое
осмысление всей имеющейся информации об ошибке. Большинство
ошибок можно обнаружить, тщательно анализируя текст программы и
результаты тестирования.
Методы отладки программного обеспечения можно
классифицировать следующим образом:
1. силовые методы (использование дампа памяти, использование
отладочной печати в тексте программы, использование
автоматических средств отладки)
2. метод ручного тестирования;
3. метод индукции;
4. метод дедукции;
5. метод обратного прослеживания.

9.

1. Виды силовых методов
Использование дампа (распечатки) памяти.

10.

1. Виды силовых методов
Использование отладочной печати в коде программы
произвольно и в большом количестве.

11.

1. Виды силовых методов
Использование автоматических средств отладки
трассировки с отслеживанием промежуточных
значений переменных.

12.

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

13.

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

14.

3. Метод дедукции - анализ программы от общего к
частному.
1. Сначала формируют множество причин, которые могли бы
вызвать данное проявление ошибки
2. Затем, анализируя причины, исключают те, которые
противоречат имеющимся данным.
3. Если все причины исключены, то необходима дополнительная
информация об ошибке и следует выполнить дополнительное
тестирование исследуемого фрагмента. В противном случае
наиболее вероятную гипотезу пытаются доказать.
4. Если гипотеза объясняет полученные признаки ошибки, то
ошибка найдена, иначе проверяют следующую причину.

15.

4. Метод обратного прослеживания.
Используется для небольших программ.
1. Определяется точка вывода неправильного результата.
2. Затем строится гипотеза о значениях основных
переменных, которые могли бы привести к получению
этого результата.
3. Исходя из этой гипотезы, делают предположения о
значениях переменных в предыдущей точке.
4. Процесс продолжают, пока не обнаружат причину
ошибки.

16.

17.

18.

Исходный код программы
на языках Python и C++

19.

Примеры тестов для отладки программы
№ теста
А
В
С
Ожидаемый
результат
Фактический
результат
1
9
4
-1
9
???
2
-2
8
4
8
???
3
90
0
95
95
???
4
9
9
9
???
???

20.

Результат
теста 1
№ теста
А
В
С
1
9
4
-1
Ожидаемый
результат
Фактический
результат
9
9

21.

Результат
теста 2
№ теста
А
В
С
2
-2
8
4
Ожидаемый
результат
Фактический
результат
8
8
Неправильный
текст в выводе

22.

Результат
теста 3
№ теста
А
В
С
3
90
0
95
Ожидаемый
результат
Фактический
результат
95
0

23.

Трассировка
переменными
и
промежуточное
наблюдение
за
Добавляем промежуточную печать или наблюдение за
переменными:
• вывод a, b, c после ввода (проверяем, правильно ли
получили данные)
• вывод значения каждого из условий (проверяем,
правильно ли записали условия

24.

25.

Результат
теста 2
№ теста
А
В
С
2
-2
8
4
Ожидаемый
результат
Фактический
результат
8
8

26.

Результат
теста 3
№ теста
А
В
С
3
90
0
95
Ожидаемый
результат
Фактический
результат
95
95

27.

Исходный код программы
на языках Python и C++

28.

Метод индукции
Судя по результатам, ошибка возникает, когда максимальное число второе или третье.
Просматриваем все, относящееся к переменным b и с.
Со вводом никаких проблем не замечено, а что касается вывода -то
мы быстро натыкаемся на замену b на с.
print('Наибольшим оказалось третье число -’, b)
Исправляем b на с
Как видно, не выявленные ошибки в программе остаются.
Просматриваем условия в ifах: все, что относится к максимальному b
(максимум с получается "в противном случае"), и обнаруживаем
пресловутую проблему "a>c" вместо "b>c".
Программа отлажена.

29.

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

30.

Обратное движение по алгоритму
Зная, что ошибка возникает при выводе результатов, рассматриваем
код, начиная с операторов вывода. Сразу же находим лишнюю b в
операторе
print('Наибольшим оказалось третье число -’, b)
Далее, смотрим по конкретной ветке условного оператора, откуда
взялся результат.
Для значений -2, 8, 4 расчет идет по ветке с условием
if(b>a and a>c)...
где мы тут же обнаруживаем искомую ошибку.
English     Русский Правила