Похожие презентации:
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)...
где мы тут же обнаруживаем искомую ошибку.