В серии: Библиотека alt м. В. Сысоева, И. В. Сысоев


Ошибки, выявляемые разработчиком


Download 0.87 Mb.
bet39/40
Sana23.04.2023
Hajmi0.87 Mb.
#1387407
TuriКнига
1   ...   32   33   34   35   36   37   38   39   40
Bog'liq
Боши Лекция Парадигма и методы программирование

3.4.3 Ошибки, выявляемые разработчиком


Их ещё можно назвать логическими. Это такие ошибки, когда ваша программа работает, но выдаёт что-то не то. Это наиболее сложный тип ошибок, потому что их нужно не только устранять, но и выявлять самостоятельно, а для этого необходимо думать.
Вернёмся к нашей программе расчёта суммы квадратов последовательных целых чисел:

Рис. 3.3. Пример логической ошибки, которая может быть выявлена только разработчиком.

N = s = 0

(

(’Введите N: ’))

i




(N):

s = s + i*2
(s)
В окне интерпретатора вы увидите:
Введите N: 5
20
Казалось бы, всё неплохо: программа работает и выдаёт что-то разумное. Но не спешите радоваться, ведь на самом деле 02 +12 +22 +32 +42 = 30, а вовсе не 20, как выдала наша программа (рис. 3.3). В чём же проблема?
Для выявления логических ошибок применяется такой приём, как тестирование. Вы уже неосознанно прибегали к нему ранее. Тестирование — это составление входных данных для программы, для которых вы можете сами составить выходные. Совокупность набора входных данных и соответствующих им выходных данных называется «тестом». В нашем случае весь тест — это два числа: входу 5 соответствует выход 30. Для сложных программ тесты будут сложнее и больше, и их понадобится не один, а много, чтобы охватить как можно больше разных вариантов поведения программы.
Когда факт наличия ошибки установлен, нужно найти конкретное место, где она возникла и устранить её. Для этого используется отладка. Отладка — это пошаговое исполнение программы с выводом промежуточных результатов, которое позволяет определить, в промежутке между какими операторами произошла логическая ошибка. В компилируемых языках программирования таких, например, как Pascal и С, для отладки применяется специализированная программаотладчик. В интепретируемых языках, в частности в Python, в этом нет большой необходимости, поскольку программа и так выполняется пошагово, и вы можете вывести любые данные в любой момент с помощью стандартной функции print. При отладке важно суметь сформулировать гипотезу: «что нужно проверить»?
Иногда это удаётся не с первого раза. Попробуем рассмотреть это на нашем примере. Итак, первая гипотеза: счётчик i принимает не те значения, попробуем выводить его значения в цикле:
N = ( (’Введите N: ’)) s = 0 i (N):
(i)
s = s + i*2
(s)
Получим:
Введите N: 5
0
1
2
3
4
20
Как видим, со счётчиком всё в порядке. Тогда проверим, всё ли в порядке с очередным элементом суммы:
N = ( (’Введите N: ’)) s = 0 i (N):
s = s + i*2
(i*2)
(s)
Получим:
0
2
4
6
8
20
Мы получили последовательность 0, 2, 4, 6, 8, в то время как должны были получить 0, 1, 4, 9, 16, значит, наше предположение подтвердилось: очередной элемент суммы вычисляется неверно. Честно говоря, уже на этапе написания отладочного вывода можно было заметить, что i*2 это не совсем то, что нужно, ведь вместо возведения в степень мы написали умножение (забыли одну звёзодчку).
В более сложных программах, однако, вам часто придётся проверять по нескольку гипотез и выводить значительное число отладочной информации, чтобы обнаружить точную причину ошибки. Помните: отладка — это мощный и эффективный способ борьбы с логическими ошибками, но работает он только тогда, когда вы способны внятно сформулировать гипотезу, т.е. определить, что проверять. Если начать выводить всё подряд, вы быстро потеряетесь в отладочной информации и ничего не сможете найти.
Некоторые наиболее распространённые ошибки были проклассифицированы нами в виде схемы, приведённой на рис. 3.4. Схема не претендует на полноту, но будет полезна для начинающих во многих типичных случаях.

Download 0.87 Mb.

Do'stlaringiz bilan baham:
1   ...   32   33   34   35   36   37   38   39   40




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling