Лабораторная работа № 8. Тестирование и отладка программ
Теоретические сведения
Сообщение об ошибке
После возникновения ошибки, интерпретатор Python выводит сообщение с информацией для программиста. На изображении показаны важные элементы сообщения:
Чтобы сделать описание ошибок подробным и более понятным учащемуся, рекомендуется использовать модуль под названием friendly.
Если вы захотите в дальнейшем использовать модуль friendly в своей работе, его нужно установить на ваш компьютер. Для этого нужно открыть командную строку и набрать команду pip install friendly.
Список ошибок
В таблице перечислены имена часто появляющихся ошибок и описание причин их появления.
| Имя ошибки | Пояснение |
|---|---|
SyntaxError |
Ошибка в синтаксисе: пропущен необходимый символ, не хватает открывающей или закрывающей скобки и т.д. |
NameError |
В выражении используется переменная, которой ещё не было присвоено значение. Возможна опечатка в имени переменной, функции, класса. |
ValueError |
Функция ожидала аргумент другого типа. Например в функцию int передана строка, которая не содержит целое число. |
TypeError |
В выражении используются несовместимые типы. Например попытка сложить строку и число. Или в функцию передано неправильное количество аргументов. Для проверки типа переменной можно использовать функцию type(). |
IndexError |
Попытка получить элемент из списка, или символ из строки по индексу, которого нет в последовательности. |
Исправление синтаксических ошибок
- Убедитесь, что для имён переменных не используются служебные слова языка.
- В начале нового блока расположено двоеточие (после
for,while,if,def,class). - Соблюдены правила использования отступов.
- Строки обладают парными кавычками.
- Для каждой открывающей скобки есть своя закрывающая –
(),{},[].
Исправление ошибок времени выполнения
Программа ничего не выводит на экран
Убедитесь, что описанные в программе функции или методы классов вызываются, для получения результата и вывода их на экран с помощью print.
Программа выполняется без остановки
Это может произойти за-за бесконечного цикла. Чтобы найти цикл, который не завершается, разместите перед каждым циклом в программе print c сообщением “Начало цикла N”, а после цикла - “Конец цикла N”, где N - номер цикла по-порядку. Таким образом можно определить, какой из циклов в программе выполняется бесконечно:
Когда бесконечный цикл найден, разместите в конце цикла print с выводом переменной цикла и условия завершения цикла (для while):
В примере выше получим следующее:
...
1 True
1 True
1 True
...
Исходя из вывода становится понятно, что условие завершения цикла никогда не становится ложным, так как не изменяется значение переменной x. Исправленная программа выглядит следующим образом:
Задания для самостоятельной работы
Задание 1. Тестирование программ
Предложите набор тестовых данных для проверки корректности работы функции triangle(a, b, c), которая по введённым длинам сторон треугольника a, b и c вернёт одно из следующих значений: не треугольник, разносторонний, равнобедренный, равносторонний.
В текстовые поля формы вводите различные комбинации входных данных, которые позволят проверить корректность работы функции.
Полоска Покрытие тестами полностью заполнится после того. как будут проверены все тестовые кейсы.
Задание 2. Тестирование программ по вариантам
Решите задачу вашего варианта. Вводите в текстовые поля формы различные комбинации входных данных, которые позволят проверить корректность работы функции. Полоска Покрытие тестами полностью заполнится после того, как будут проверены все тестовые случаи.
Предложите набор тестовых данных для проверки корректности работы функции solve(a, b, c), которая по коэффициентам a, b и c проверяет наличие действительных корней уравнения
\[ ax^2 + bx + c = 0. \]
Функция возвращает одно из следующих значений: корней нет, корни есть, некорректные данные (если значения не заданы, не являются числами или a = 0, то есть уравнение не квадратное).
Предложите набор тестовых данных для проверки корректности работы функции check_date(day, month, year), которая проверяет существование даты по числу day, месяцу month и году year. Год — любое целое число. Учитывайте количество дней в каждом месяце и високосные годы: год високосный, если он кратен 4, но не кратен 100, либо кратен 400.
Функция возвращает одно из следующих значений: дата корректна, дата некорректна, некорректные данные (если значения не заданы или не являются целыми числами).
Предложите набор тестовых данных для проверки корректности работы функции ring(x, y, r1, r2), которая определяет, принадлежит ли точка с координатами (x, y) кольцу с центром в начале координат, внутренним радиусом r1 и внешним радиусом r2. Точки на границах кольца ему принадлежат. Радиусы должны удовлетворять условию
\[ 0 < r_1 < r_2. \]
Функция возвращает одно из следующих значений: в кольце, не в кольце, некорректные данные (если значения не заданы, не являются числами или радиусы заданы неверно).
Предложите набор тестовых данных для проверки корректности работы функции grade(lab, exam), которая по баллам за лабораторные работы lab (от 0 до 60) и баллам за экзамен exam (от 0 до 40) определяет результат. Баллы — целые числа. Функция возвращает зачёт, если за экзамен набрано не менее 20 баллов и сумма баллов не менее 50, иначе — незачёт.
Если значения не заданы, не являются целыми числами или выходят за допустимые пределы, функция возвращает некорректные данные.
Предложите набор тестовых данных для проверки корректности работы функции password(s), которая проверяет пароль s. Пароль считается надёжным, если его длина не меньше 8 символов, и он содержит хотя бы одну букву и хотя бы одну цифру; иначе пароль считается слабым.
Пустой пароль и пароль, содержащий пробельные символы, недопустимы — в этом случае функция возвращает недопустимый пароль.
Предложите набор тестовых данных для проверки корректности работы функции delivery(weight, distance), которая по массе посылки weight (в кг) и расстоянию доставки distance (в км) выбирает способ доставки. Посылка доставляется курьером, если её масса не больше 10 кг и расстояние не больше 100 км; в остальных случаях — транспортной компанией.
Если значения не заданы, не являются числами или не больше нуля, функция возвращает некорректные данные.
Предложите набор тестовых данных для проверки корректности работы функции bmi(mass, height), которая по массе тела mass (в кг) и росту height (в см) вычисляет индекс массы тела
\[ \text{ИМТ} = \dfrac{\text{mass}}{(\text{height} / 100)^2} \]
и возвращает норма, если ИМТ не меньше 18,5 и меньше 25, и не норма в остальных случаях.
Если значения не заданы, не являются числами или не больше нуля, функция возвращает некорректные данные.
Предложите набор тестовых данных для проверки корректности работы функции solve(a, b, c), которая по коэффициентам a, b и c проверяет наличие действительных корней уравнения
\[ ax^2 + bx + c = 0. \]
Функция возвращает одно из следующих значений: корней нет, корни есть, некорректные данные (если значения не заданы, не являются числами или a = 0, то есть уравнение не квадратное).
Предложите набор тестовых данных для проверки корректности работы функции check_date(day, month, year), которая проверяет существование даты по числу day, месяцу month и году year. Год — любое целое число. Учитывайте количество дней в каждом месяце и високосные годы: год високосный, если он кратен 4, но не кратен 100, либо кратен 400.
Функция возвращает одно из следующих значений: дата корректна, дата некорректна, некорректные данные (если значения не заданы или не являются целыми числами).
Предложите набор тестовых данных для проверки корректности работы функции ring(x, y, r1, r2), которая определяет, принадлежит ли точка с координатами (x, y) кольцу с центром в начале координат, внутренним радиусом r1 и внешним радиусом r2. Точки на границах кольца ему принадлежат. Радиусы должны удовлетворять условию
\[ 0 < r_1 < r_2. \]
Функция возвращает одно из следующих значений: в кольце, не в кольце, некорректные данные (если значения не заданы, не являются числами или радиусы заданы неверно).
Предложите набор тестовых данных для проверки корректности работы функции grade(lab, exam), которая по баллам за лабораторные работы lab (от 0 до 60) и баллам за экзамен exam (от 0 до 40) определяет результат. Баллы — целые числа. Функция возвращает зачёт, если за экзамен набрано не менее 20 баллов и сумма баллов не менее 50, иначе — незачёт.
Если значения не заданы, не являются целыми числами или выходят за допустимые пределы, функция возвращает некорректные данные.
Предложите набор тестовых данных для проверки корректности работы функции password(s), которая проверяет пароль s. Пароль считается надёжным, если его длина не меньше 8 символов, и он содержит хотя бы одну букву и хотя бы одну цифру; иначе пароль считается слабым.
Пустой пароль и пароль, содержащий пробельные символы, недопустимы — в этом случае функция возвращает недопустимый пароль.
Предложите набор тестовых данных для проверки корректности работы функции delivery(weight, distance), которая по массе посылки weight (в кг) и расстоянию доставки distance (в км) выбирает способ доставки. Посылка доставляется курьером, если её масса не больше 10 кг и расстояние не больше 100 км; в остальных случаях — транспортной компанией.
Если значения не заданы, не являются числами или не больше нуля, функция возвращает некорректные данные.
Предложите набор тестовых данных для проверки корректности работы функции bmi(mass, height), которая по массе тела mass (в кг) и росту height (в см) вычисляет индекс массы тела
\[ \text{ИМТ} = \dfrac{\text{mass}}{(\text{height} / 100)^2} \]
и возвращает норма, если ИМТ не меньше 18,5 и меньше 25, и не норма в остальных случаях.
Если значения не заданы, не являются числами или не больше нуля, функция возвращает некорректные данные.
Задание 3. Отладка программ
Распакуйте архив Задание3.zip. Последовательно открывайте программы из архива в редакторе IDLE. Исправьте синтаксические и семантические ошибки в программах. Убедитесь, что решение соответствует условию задачи.
Задание 4. Функция triangle()(sam04.py)
Реализуйте функцию из Задания 1. Проверьте работоспособность функции на предложенных вами тестовых данных.
Задание 5. Функция по вариантам (sam05.py)
Реализуйте функцию из Задания 2. Проверьте работоспособность функции на предложенных вами тестовых данных.
