Тема 28(8):  Налагодження програм. 

План вивчення теми:

Д/з: опрацювати:

При створенні програми, яка могла б надійно працювати, більшість часу  витрачається не на її написання, а на пошук помилок і внесення виправлень.

Так повелося, що програмні помилки називають «багами» (від англ. Bug - жучок). 

Процес виявлення і усунення несправностей в англомовній літературі прийнято позначати терміном debugging, ми ж будемо називати його відлагодженням. 

Треба розрізняти помилки, що можуть виникнути. Вони бувають трьох типів: 

Щоб знаходити і виправляти їх швидше, має сенс навчитися їх розрізняти.

Синтаксичні помилки (syntax errors)

Будь-який транслятор зможе виконати програму тільки в тому випадку, якщо програма синтаксично правильна. Навіть якщо у вашій програмі Пітон знайде хоч би незначну друкарську помилку, він одразу виведе повідомлення про те, де він її знайшов, і завершить роботу.

Помилки виконання (runtime errors)

Другий тип помилок зазвичай виникає під час виконання програми (їх прийнято називати винятковими ситуаціями або, коротко - виключеннями, англійською exceptions). Такі помилки мають іншу причину. Якщо в програмі виникає виключення, то це означає, що у ході виконання сталося щось непередбачене: наприклад, програмі було передано некоректне значення, або програма спробувала розділити якесь значення на нуль, що є неприпустимим.

Змістові (семантичні) помилки (semantic errors)

Першою ознакою наявності у вашій програмі змістової помилки є те, що вона виконується успішно, тобто без виняткових ситуацій, але робить не те, що ви від неї чекаєте. У таких випадках проблема полягає в тому, що зміст написаної програми відрізняється від того, що ви мали на увазі. Пошук таких помилок - завдання непросте, оскільки доводиться проглядати результати роботу програми і розбирати, що програма робить насправді.

 

Процес відлагодження

Уміння відлагодити програму для програміста є важливою навичкою. Процес відлагодження вимагає великих інтелектуальних зусиль і концентрації уваги, але це одне з найцікавіших занять.

Відлагодження дуже нагадує роботу дослідника. Вивчаючи результати свого попереднього експерименту, ви робите деякі висновки, потім відповідно до них змінюєте програму, запускаєте її, і знову аналізуєте отримані результати. Якщо отриманий результат не співпадає з бажаним, то доводиться знову знати причини цього. Якщо ж ваша гіпотеза виявиться правильною, то можна на крок наблизитися до завершення роботи над програмою.

Тому для перевірки працездатності програми не досить перевірити її один раз - потрібно придумати всі можливі набори вхідних даних, які можуть якось вплинути на стійкість вашої системи. Такі набори вхідних даних називають граничними значеннями.

Отже, програмування - це процес поступового доопрацювання і відлагодження, доки програма не робитиме те, що ми хочемо.

Тому вже при складанні програми потрібно потурбуватися про те, щоб вона була наочною, легко читалася, і за інформацією, що видає програма,  можна було б без зусиль виявити помилки.

Для цього не завадить використовувати деякі правила.

Набір правил написання програм:

І ось, нарешті, ми переходимо власне до програмування. Не зашкодить, якщо  перевіряти працездатність прикладів на комп'ютері і поекспериментувати з ними.

Посилання на On-line-середовищe Python https://repl.it

Завдання №1

Спробуйте набрати наступний код та виправити помилки в ньому:

import math
a = float(input("Введіть число:'))
print("Корінь числа " + a + " = " + str(sqrt(a))

Які виключення можуть виникнути при виконанні даної програми?

Завдання №2

Розкоментуйте деякі рядки, щоб програма вивела на екран числа 12 і 2 (спочатку 12, а потім 2).

x = 2

y = 12

# x = x * 3

# y = x + y

# x = y - x

# y = y - x

print(x)

print(y)

Потрібно розкоментувати необхідні рядки і не міняти інші. 

Завдання №3

Закоментуйте кілька рядків, щоб на екран вивелось повідомлення:

2 плюс 3 дорівнює 5

Примітка: коментувати рядки з оголошенням змінних не можна. 

s = "23"
a = 3
b = 2
four = "чотири"
three = "3"

print("два", end="")
print(" плюс ", end="")
print(s, end="")
print(b, end="")
print(" плюс ", end="")
print("три", end="")
print(a, end="")
print(" дорівнює ", end="")
print("п'ять", end="")
print(a + b, end="")

Зразок програми з використанням оператора  try:

Написати програму для обчислення значення виразу: 

У програмному коді, щоб виключити ситуацію випадкового введення тесту замість чисел, використайте конструкцію: