Відлагодження програм та коментарі

Що таке відлагодження?

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

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

Існує три типи помилок, які можуть виникнути в програмах: синтаксичні помилки (syntax errors), помилки виконання (runtime errors) і семантичні помилки (semantic errors). Щоб знаходити і виправляти їх швидше, має сенс навчитися їх розрізняти.

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

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

Для більшості тих, хто читає текст синтаксичні помилки не становлять особливої проблеми. Наприклад, часто зустрічаються вірші без розділових знаків, але ми легко можемо їх прочитати, хоча це часто породжує неоднозначність їх інтерпретації. Але транслятори (і інтерпретатор Python не виняток) дуже прискіпливі до синтаксичним помилок.

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

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

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

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

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

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

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

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

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

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

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

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

Коментарі

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

Додавання коментарів

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

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

  • навіщо написана програма (її призначення); 
  • хто її написав; 
  • для кого вона призначена (цільова аудиторія); 
  • як вона влаштована і багато іншого. 

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

Однорядкові коментарі 

Будь-який рядок можна перетворити в коментар, помістивши перед ним символ # (іноді його ще називають знаком фунта):

# Ця стрічка являється коментарем у програмі на Python
print("А це вже не коментар!")

Якщо запустити цей код, вийде наступний результат: 

А це вже не коментар!

Другий рядок при запуску програми ігнорується.

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

Коментарі в кінці рядка 

Коментар можна помістити після рядка коду. Ось так:

long = 2 * math.pi * r # Визначаємо довжину кола

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

Багаторядкові коментарі 

Іноді коментар може зайняти кілька рядків. У цьому випадку на початку кожного рядка слід помістити символ #. Ось так:

# **************
# Це багаторядковий коментар
# в програмі написаній на мові Python.
# Для відокремлення його від основного тексту програми
# було використано рядки зірочок.
# **************

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

Потрійні лапки

Існує ще один спосіб створення елемента, який в Python буде функціонувати як багаторядковий коментар. Досить створити безіменний рядок і заключити його в потрійні лапки. Раніше говорилося про те, що потрійні лапки дозволяють об'єднати між собою групу текстових рядків. Значить, ви можете зробити так:

import math
r =
10
'''Це багаторядковий коментар
який буде ігноруватися інтерпретатором при
виконанні програми.
Тобто, тут ви можете написати все що завгодно!'''
long = 2 * math.pi * r
print(long)

Цей рядок не має імені і програма нічого з ним не «робить», ніякого впливу на роботу програми він не чинить. Тому такий рядок може використовуватися як  коментар, хоча, строго кажучи, в термінах мови Python коментарем він не являється.

При введенні коментарів в IDLE-редактор ви виявите, що вони виділяються окремими кольором. Це зроблено, щоб полегшити вам читання коду. Більшість редакторів коду виділяють коментарі кольором (як і інші частини коду).  Так як укладені в потрійні лапки рядки з точки зору інтерпретатора Python справжніми коментарями не є, вони будуть виділені іншим кольором. У IDLE вони зелені, оскільки за замовчуванням рядки виділяються саме цим кольором.

Стиль коментарів

Отже, тепер ви вмієте додавати коментарі. Але що в них писати? Так як на роботу програми вони не впливають, можна сказати, що це справа смаку. Фактично ви можете писати що завгодно (або взагалі нічого не писати). Але це не означає, що коментарі не мають значення. Більшість программістів починають усвідомлювати їх важливість в момент, коли, звернувшись до програми, створеної ними кілька тижнів, місяців або навіть років тому, виявляють, що не можуть нічого в ній зрозуміти! Іноді таке стається навіть з програмами, написаними буквально вчора. Зазвичай це відбувається через нестачу коментарів, що пояснюють принцип роботи програми. У момент створення коду все може здаватися абсолютно очевидним, але повернувшись до програми через деякий час, ви не зможете в ній розібратися. Жорстких правил написання коментарів не існує, але я раджу додавати їх стільки, скільки потрібно. Зрештою, чим більше, тим краще. Краще написати занадто багато коментарів, ніж занадто мало. Поступово ви підберете оптимальний обсяг і кількість коментарів.

Перетворення інструкції в коментар

Ще за допомогою коментарів можна на час виключити з програми частина коду. Адже всі коментарі ігноруються:

print("Ми вивчаємо", end = " ")
#print("програмування з", end = " ")
print("Python")

Рядок print("програмування з", end = " ") перетворюється в коментар. В результаті він не виконується, і слова «програмування з» на екран не виводяться. Це корисно при налагодженні програми, коли ви хочете запустити тільки деякі її частини. Досить помістити на початку рядка, який ви хочете виключити, знак # або укласти фрагмент такого коду в потрійні лапки.

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

Завдання для самостійного виконання

Завдання №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="")

Використана література:

  1. У. Сэнд, К. Сэнд "Hello World! Занимательное программирование.
  2. Программирование для детей / К.Вордерман, Дж. Вудкок, Ш. Макаманус
  3. JavaRush
  4. Фоксфорд.Учебник