В серии: Библиотека alt м. В. Сысоева, И. В. Сысоев
Ошибки, выявляемые разработчиком
Download 0.87 Mb.
|
Боши Лекция Парадигма и методы программирование
3.4.3 Ошибки, выявляемые разработчикомИх ещё можно назвать логическими. Это такие ошибки, когда ваша программа работает, но выдаёт что-то не то. Это наиболее сложный тип ошибок, потому что их нужно не только устранять, но и выявлять самостоятельно, а для этого необходимо думать. Вернёмся к нашей программе расчёта суммы квадратов последовательных целых чисел: Рис. 3.3. Пример логической ошибки, которая может быть выявлена только разработчиком.
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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling