Як називаються помилки в комп'ютерній програмі та процес їх налагодження
Виконання програми з метою виявлення помилок називається тестуванням. Локалізація та виправлення помилок називається налагодженням.
Налагодження - це процес локалізації та виправлення помилок, виявлених під час тестування програмного забезпечення. Локалізацією називають процес визначення оператора програми, виконання якого викликало порушення нормального обчислювального процесу. Для виправлення помилки необхідно визначити її причину, т. е. визначити оператор чи фрагмент, які мають помилку. Причини помилок можуть бути очевидні, і дуже глибоко приховані.
Загалом складність налагодження обумовлена такими причинами:
• вимагає від програміста глибоких знань специфіки управління технічними засобами, що використовуються, операційної системи, середовища та мови програмування, реалізованих процесів, природи та специфіки різних помилок, методик налагодження та відповідних програмних засобів;
• психологічно дискомфортна, оскільки необхідно шукати власні помилки та, як правило, в умовах обмеженого часу;
• можливий взаємовплив помилок у різних частинах програми, наприклад, за рахунок затирання області пам'яті одного модуля іншим через помилки адресації;
• відсутні чітко сформульовані методики налагодження.
Синтаксичні помилки. Синтаксичні помилки відносять до групи найпростіших, оскільки синтаксис мови, як правило, строго формалізований, і помилки супроводжуються розгорнутим коментарем із зазначенням її розташування. Визначення причин таких помилок, як правило, праці не становить, і навіть за нечіткого знання правил мови за кілька прогонів вдається видалити всі помилки цього типу.
Слід мати на увазі, що чим краще формалізовані правила синтаксису мови, тим більше помилок із загальної кількості може виявити компілятор і відповідно менше помилок виявлятиметься на наступних етапах. У зв'язку з цим говорять про мови програмування із захищеним синтаксисом та незахищеним синтаксисом. До перших, безумовно, можна віднести Pascal, що має дуже простий і чітко визначений синтаксис, який добре перевіряється при компіляції програми, до других - Сі з усіма його модифікаціями. Чого варта хоча б можливість виконання присвоєння в умовному операторі Сі, наприклад:
if (с = п) х-0; /* у цьому випадку не перевіряться рівність з і n, а виконується присвоювання значення п, після чого результат операції порівнюється з нулем, якщо програміст хотів виконати не присвоювання, а порівняння, то ця помилка буде виявлена тільки на етапі виконання при отриманні результатів, що відрізняються від очікуваних */
Помилки компонування.Помилки компонування, як випливає з назви, пов'язані з проблемами, виявленими при вирішенні зовнішніх посилань. Наприклад, передбачено звернення до підпрограми іншого модуля, а при об'єднанні модулів цю підпрограму не знайдено або не стикуються списки параметрів. У більшості випадків такі помилки також вдається швидко локалізувати і усунути.
Помилки виконання. До непередбачуваної групи відносяться помилки виконання. Насамперед вони можуть мати різну природу і відповідно по-різному виявлятися. Частина помилок виявляється та документується операційною системою. Виділяють чотири способи прояву таких помилок:
• "зависання" комп'ютера як просте, коли вдається завершити програму без перезавантаження операційної системи, так і "важке", коли для продовження роботи необхідне перезавантаження;
• розбіжність отриманих результатів з очікуваними.
Причини помилок виконання дуже різноманітні, а тому локалізація може виявитися вкрай складною. Всі можливі причини помилок можна розділити на такі групи:
• неправильне визначення вихідних даних,
• накопичення похибок результатів обчислень (рис. 11.2).
Неправильне визначення вихідних даних відбувається, якщо виникають будь-які помилки при виконанні операцій введення-виводу: помилки передачі, помилки перетворення, помилки перезапису та помилки даних. Причому використання спеціальних технічних засобів та програмування із захистом від помилок дозволяє виявити та запобігти лише частині цих помилок, про що, безумовно, не слід забувати.
Мал. 11.2. Класифікація помилок етапу виконання з можливих причин
Логічні помилки мають різну природу. Так вони можуть випливати з помилок, допущених при проектуванні, наприклад, при виборі методів, розробці алгоритмів або визначенні структури класів, а можуть бути безпосередньо внесені при кодуванні модуля. До останньої групи відносять:
• помилки некоректного використання змінних, наприклад, невдалий вибір типів даних, використання змінних до їх ініціалізації, використання індексів, що виходять за межі визначення масивів, порушення відповідності типів даних при використанні явного або неявного перевизначення типу даних, розташованих у пам'яті при використанні нетипізованих змінних, відкритих масивів, об'єднань, динамічної пам'яті , адресної арифметики тощо;
• помилки обчислень, наприклад, некоректні обчислення над неарифметичними змінними, некоректне використання цілочисленної арифметики, некоректне перетворення типів даних у процесі обчислень, помилки, пов'язані з незнанням пріоритетів виконання операцій для арифметичних та логічних виразів тощо;
• помилки міжмодульного інтерфейсу, наприклад, ігнорування системних угод, порушення типів та послідовності при передачі параметрів, недотримання єдності одиниць виміру формальних та фактичних параметрів, порушення області дії локальних та глобальних змінних;
• інші помилки кодування, наприклад, неправильна реалізація логіки програми під час кодування, ігнорування особливостей чи обмежень конкретної мови програмування.
Накопичення похибок результатів числових обчислень виникає, наприклад, при некоректному відкиданні дробових цифр чисел, некоректному використанні наближених методів обчислень, ігноруванні обмеження розрядної сітки уявлення речових чисел в ЕОМ тощо.
Усі зазначені вище причини виникнення помилок слід пам'ятати у процесі налагодження. Крім того, складність налагодження збільшується також внаслідок впливу наступних факторів:
• опосередкований прояв помилок;
• можливості взаємовпливу помилок;
• можливості отримання зовні однакових проявів різних помилок;
• відсутності повторюваності проявів деяких помилок від запуску до запуску – звані стохастичні помилки;
• можливості усунення зовнішніх проявів помилок у досліджуваній ситуації при внесенні деяких змін до програми, наприклад, при включенні до програми діагностичних фрагментів може анулюватися або змінити зовнішній прояв помилок;
• написання окремих частин програми різними програмістами.
Опора дерев'яної одностійкової та способи зміцнення кутових опор: Опори ПЛ – конструкції, призначені для підтримування проводів на потрібній висоті над землею, водою.
Механічне утримання земляних мас: Механічне утримання земляних мас на схилі забезпечують контрфорсними спорудами різних конструкцій.
Поперечні профілі набережних та берегової смуги: На міських територіях берегоукріплення проектують з урахуванням технічних та економічних вимог, але особливого значення надають естетичним.
Налагодження програми - один з найскладніших етапів розробки програмного забезпечення, що вимагає глибокого знання:
• специфіки управління технічними засобами, що використовуються,
• середовища та мови програмування,
• природи та специфіки різних помилок,
• методик налагодження та відповідних програмних засобів.
Налагодження - це процес локалізації та виправлення помилок, виявлених під час тестування програмного забезпечення. Локалізацією називають процес визначення оператора програми, виконання якого викликало порушення нормального обчислювального процесу. Доявши виправлення помилки необхідно визначити її причину, тобто визначити оператор або фрагмент, що містять помилку. Причини помилок можуть бути очевидні, і дуже глибоко приховані.
Загалом складність налагодження обумовлена такими причинами:
• вимагає від програміста глибоких знань специфіки управління технічними засобами, що використовуються, операційної системи, середовища та мови програмування, реалізованих процесів, природи та специфіки різних помилок, методик налагодження та відповідних програмних засобів;
• психологічно дискомфортна, оскільки необхідно шукати власні помилки та, як правило, в умовах обмеженого часу;
• можливий взаємовплив помилок у різних частинах програми, наприклад, за рахунок затирання області пам'яті одного модуля іншим через помилки адресації;
• відсутні чітко сформульовані методики налагодження.
Відповідно до етапу обробки, на якому виявляються помилки, розрізняють (рис. 10.1):
синтаксичні помилки - помилки, що фіксуються компілятором (транслятором, інтерпретатором) при виконанні синтаксичного та частково семантичного аналізу програми; помилки компонування – помилки, виявлені компонувальником (редактором зв'язків) при об'єднанні модулів програми;
помилки виконання - помилки, виявлені операційною системою, апаратними засобами чи користувачем під час виконання програми.
Синтаксичні помилки. Синтаксичні помилки відносять до групи найпростіших, оскільки синтаксис мови, як правило, строго формалізований, і помилки супроводжуються розгорнутим коментарем із зазначенням її розташування. Визначення причин таких помилок, як правило, праці не становить, і навіть за нечіткого знання правил мови за кілька прогонів вдається видалити всі помилки цього типу.
Слід мати на увазі, що чим краще формалізовані правила синтаксису мови, тим більше помилок із загальної кількості може виявити компілятор і, відповідно, менше помилок виявлятиметься на наступних етапах. У зв'язку з цим говорять про мови програмування із захищеним синтаксисом та незахищеним синтаксисом. До перших, безумовно, можна віднести Pascal, що має дуже простий і чітко визначений синтаксис, який добре перевіряється при компіляції програми, до других - Сі з усіма його модифікаціями.Чого варта хоча б можливість виконання присвоєння в умовному операторі Сі, наприклад:
if (c = n) x = 0; /* в даному випадку не перевіряться рівність з і n, а виконується присвоювання значення n, після чого результат операції порівнюється з нулем, якщо програміст хотів виконати не присвоювання, а порівняння, то ця помилка буде виявлена тільки на етапі виконання при отриманні результатів, відрізняються від очікуваних */
Помилки компонування. Помилки компонування, як випливає з назви, пов'язані з проблемами,
виявленими під час дозволу зовнішніх посилань. Наприклад, передбачено звернення до підпрограми іншого модуля, а при об'єднанні модулів цю підпрограму не знайдено або не стикуються списки параметрів. У більшості випадків такі помилки також вдається швидко локалізувати і усунути.
Помилки виконання. До непередбачуваної групи ставляться помилки виконання. Насамперед вони можуть мати різну природу, і відповідно по-різному виявлятися. Частина помилок виявляється та документується операційною системою. Виділяють чотири способи прояву таких помилок:
• "зависання" комп'ютера, як просте, коли вдається завершити програму без перезавантаження операційної системи, так і "важке", коли для продовження роботи необхідне перезавантаження;
• розбіжність отриманих результатів з очікуваними.
Причини помилок виконання дуже різноманітні, а тому локалізація може виявитися вкрай складною. Всі можливі причини помилок можна розділити на такі групи:
• неправильне визначення вихідних даних,
• накопичення похибок результатів обчислень (рис. 10.2).
Не в е р н о е п о д е л е н н ня й с х о д н е д н н их відбувається, якщо виникають будь-які помилки при виконанні операцій введення-виводу: помилки передачі, помилки перетворення, помилки перезапису та помилки даних. Причому використання спеціальних технічних засобів та програмування із захистом від помилок (див.§ 2.7) дозволяє виявити та запобігти лише частині цих помилок, про що безумовно не слід забувати.
Л о г і ч е с к і е про ш і б к і мають різну природу. Так вони можуть випливати з помилок, допущених при проектуванні, наприклад, при виборі методів, розробці алгоритмів або визначенні структури класів, а можуть безпосередньо внесені при кодуванні модуля.
До останньої групи відносять:
помилки некоректного використання змінних, наприклад, невдалий вибір типів даних, використання змінних до їх ініціалізації, використання індексів, що виходять за межі визначення масивів, порушення відповідності типів даних при використанні явного або неявного перевизначення типу даних, розміщених у пам'яті при використанні нетипізованих змінних, відкритих масивів , об'єднань, динамічної пам'яті, адресної арифметики тощо;
помилки обчислень , наприклад, некоректні обчислення над неарифметичними змінними, некоректне використання цілісної арифметики, некоректне перетворення типів даних у процесі обчислень, помилки, пов'язані з незнанням пріоритетів виконання операцій для арифметичних та логічних виразів, тощо;
помилки міжмодульного інтерфейсу, наприклад, ігнорування системних угод, порушення типів та послідовності при передачі параметрів, недотримання єдності одиниць виміру формальних та фактичних параметрів, порушення області дії локальних та глобальних змінних;
інші помилки кодування, наприклад, неправильна реалізація логіки програми під час кодування, ігнорування особливостей або обмежень конкретної мови програмування.
На к о п о л е н н ня по гріш н н о с т а й результатів числових обчислень виникає, наприклад, при некоректному відкиданні дробових цифр чисел, некоректному використанні наближених методів обчислень, ігноруванні обмеження розрядної сітки подання речових чисел у ЕОМ тощо.
Усі зазначені вище причини виникнення помилок слід пам'ятати у процесі налагодження. Крім того, складність налагодження збільшується також внаслідок впливу наступних факторів:
опосередкованого прояву помилок;
можливості взаємовпливу помилок;
можливості отримання зовні однакових проявів різних помилок;
відсутності повторюваності проявів деяких помилок від запуску до запуску – звані стохастичні помилки;
можливості усунення зовнішніх проявів помилок у досліджуваній ситуації при внесенні деяких змін у програму, наприклад, при включенні до програми діагностичних фрагментів може анулюватися або змінити зовнішній прояв помилок;
написання окремих частин програми різними програмістами.
Налагодження програми у будь-якому випадку передбачає обмірковування та логічне осмислення всієї наявної інформації про помилку.Більшість помилок можна знайти за непрямими ознаками за допомогою ретельного аналізу текстів програм та результатів тестування без отримання додаткової інформації. При цьому використовують різні методи:
Метод ручного випробування. Це - найпростіший і природний метод цієї групи. При виявленні помилки необхідно виконати тестовану програму вручну, використовуючи тестовий набір, під час роботи з яким було виявлено помилку.
Метод дуже ефективний, але не застосовується для великих програм, програм зі складними обчисленнями і в тих випадках, коли помилка пов'язана з неправильним уявленням програміста про виконання деяких операцій.
Цей метод часто використовують як складову частину інших методів налагодження.
Найвідповідальніший етап – виявлення симптомів помилки. Організовуючи дані про помилку, доцільно записати все, що відомо про її прояви, причому фіксують як ситуації, в яких фрагмент з помилкою виконується нормально, так і ситуації, в яких помилка проявляється. Якщо в результаті вивчення даних жодних гіпотез не з'являється, то потрібна додаткова інформація про помилку. Додаткову інформацію можна отримати, наприклад, у результаті виконання подібних тестів.
У процесі докази намагаються з'ясувати, чи всі прояви помилки пояснює дана гіпотеза, якщо не всі, або гіпотеза не вірна, або кілька помилок.
Метод дедукції. За методом дедукції спочатку формують безліч причин, які б викликати цей прояв помилки. Потім аналізуючи причини, виключають ті, що суперечать наявним даним. Якщо всі причини виключені, слід виконати додаткове тестування досліджуваного фрагмента. Інакше найімовірнішу гіпотезу намагаються довести.Якщо гіпотеза пояснює отримані ознаки помилки, то помилку знайдено, інакше – перевіряють наступну причину (рис. 10.4).
Метод зворотного простеження. Для невеликих програм ефективне застосування методу зворотного простеження. Починають із точки виведення неправильного результату. Для цієї точки будується гіпотеза про значення основних змінних, які можуть призвести до отримання наявного результату. Далі, виходячи з цієї гіпотези, роблять пропозиції про значення змінних у попередній точці. Процес продовжують, доки виявлять причину помилки.
У програмуванні баг (англ. bug - жук) - жаргонне слово, що зазвичай означає помилку в комп'ютерній програмі або системі, яка видає несподіваний або неправильний результат. Більшість багів виникають через помилки, допущені розробниками програми в її вихідному коді, або в її дизайні. Також деякі баги виникають через некоректну роботу компілятора, що виробляє некоректний код. Програму, яка містить велику кількість багів та/або баги, що серйозно обмежують її працездатність, називають нестабільною або, жаргонною мовою, «глючною», «глюкнутою», «забагованою», «бажною», «баг(а)нутою» (англ. . unstable, buggy).
Термін «баг» зазвичай використовується щодо помилок, що виявляють себе на стадії роботи програми, на відміну, наприклад, від помилок проектування або синтаксичних помилок. Звіт, що містить інформацію про баг також називають звітом про помилку або звітом про проблему (англ. bug report). Звіт про критичну проблему (англ. crash), що викликає аварійне завершення програми, називають креш-репортом (англ. crash report).
«Баги» локалізуються та усуваються в процесі тестування та налагодження програми.
Багом також називають певний вид маркеру на індикаторах.
Етимологія
Легенда про метелика та день тестувальника
Широко поширена легенда, що 9 вересня 1945 року вчені Гарвардського університету, що тестували обчислювальну машину Mark II Aiken Relay Calculator, знайшли метелика, що застряг між контактами електромеханічного реле, і Грейс Хоппер вимовила цей термін. Вилучена комаха була вклеєна скотчем у технічний щоденник, з супровідним написом: "First actual case of bug being found" (англ. «перший реальний випадок, коли жук був знайдений»). Вважається, що цей кумедний факт започаткував використання слова "debugging" у значенні "налагодження програми", проте, швидше за все, фраза є каламбуром.
Запис у тех.
Насправді цей випадок стався 9 вересня 1947 року, а не 1945 року. Знаменитий метелик було передано до музею обчислювальної техніки, де він і зберігається досі. Під його стендом є напис, який говорить, що цей метелик став першим з виявлених багів в історії комп'ютерної техніки. З того часу це слово стало широко використовуватися комп'ютерниками у всьому світі. А того дня, коли комаха була виявлена, вирішено було зробити професійним святом усіх тестувальників.
Історичні факти
Тим часом, слово «bug» у сучасному значенні вживалося задовго до цього персоналом телеграфних та телефонних компаній щодо несправностей з електрообладнанням та радіотехнікою. Протягом Другої світової війни словом bugs називалися проблеми з радарною електронікою. У 1878 році Томас Едісон писав:
Це повторювалося знову і знову з усіма моїми винаходами.Першим кроком була інтуїція, за нею йшов спалах, потім виникали перешкоди - і вони зникали, потім виникали Баги - так називаються маленькі недоліки і труднощі - і необхідні місяці постійного пошуку, досліджень та важкої праці до успіху чи невдачі.
Це буде добре, якщо ви в усіх моїх мітингах. Першим кроком є intuition, і буває з бурхливим, нескінченним варіаціям — це мислення, і «це є», що «Bugs»—як і такі дрібні дуги й варіації, які називаються — вивчають їх, вивчають і вивчають intense watching і твори є реquisite перед комерційним успіхом або failure is certainly reached. [1]
Вживання
Популярний вислів "Це не баг, це фіча" слід розуміти буквально: це не помилка, це передбачена особливість роботи програми. Так як до програмного забезпечення застосовуються подібні закони про авторське право, що і до текстових публікацій, то помилка в програмі юридично є лише думкою автора.
Пошук та виправлення помилок
Для налагодження програми (англ. debugging) розробниками програмного забезпечення використовуються спеціальні програми-відладчики (англ. debugger). Наприклад, в операційній системі Windows можна використовувати програму WinDbg з Microsoft Debugging Tools for Windows. Для GNU/Linux та інших UNIX-подібних операційних систем існує відладчик GDB (GNU Debugger).
Звіти про помилки
Наприклад, в операційну систему Windows вбудовано утиліту Dr. Watson, яка за умовчанням відловлює помилки в додатках користувача і надсилає звіт на спеціальний сервер компанії Microsoft. Також як приклад можна навести аналогічні бібліотеки Breakpad [2] і CrashRpt [3] .
Освоїти роботу з вбудованим налагоджувачем, вивчити категорії помилок, способи їх виявлення та усунення.
Тестування та налагодження програми
Чим більше досвіду має програміст, тим менше помилок у коді він робить. Але, хочете вірте, хочете ні, навіть найдосвідченіший програміст все ж таки припускається помилок. І будь-яке сучасне середовище розробки програм повинно мати власні інструменти для налагодження додатків, а також для своєчасного виявлення та виправлення можливих помилок. Програмні помилки на програмістському сленгу називають багами (англ. bug - жук), а програми налагодження коду - дебаггерами (англ. debugger - Відладчик). Lazarus, як сучасне середовище розробки додатків, має власний вбудований відладчик, роботу з яким ми розберемо на цій лекції.
Помилки, які може допустити програміст, умовно поділяються на три групи:
- Синтаксичні
- Часу виконання (run-time errors)
- Алгоритмічні
Синтаксичні помилки
Мал. 27.1. Знайдена компілятором синтаксична помилка - немає оголошення змінної i
Подібні помилки можуть виникнути при неправильному написанні директиви або імені функції (процедури); при спробі звернутися до змінної чи константи, яку не оголошували (рис. 27.1); при спробі викликати функцію (процедуру, змінну, константу) з модуля, який був підключений у розділі uses ; за інших аналогічних недоглядів програміста.
Помилки часу виконання
Помилка виконання може виникнути не тільки при завантаженні програми, але і під час її роботи. Наприклад, якби спроба читання неіснуючого файлу була зроблена не при завантаженні програми, а при натисканні на кнопку, то програма нормально запустилася б і працювала, поки користувач не натисне на цю кнопку.
У цьому прикладі програміст припустився типової для початківців помилки - не звільнив клас TStringList. Це не призведе до збою або аварійного завершення програми, але в результаті можна марно витратити багато пам'яті. Звичайно, ця пам'ять буде звільнена після вивантаження програми (за цим стежить операційна система), але витік пам'яті під час виконання програми теж може призвести до неприємних наслідків, споживаючи все більше і більше ресурсів і надмірно навантажуючи процесор. У таких випадках після роботи з об'єктом програмісту потрібно не забувати звільняти пам'ять:
Однак, помилки часу виконання можуть трапитися і під час роботи з об'єктом. Якщо є такий ризик, програміст повинен не забувати про можливість опрацювання виняткових ситуацій. В даному випадку вищенаведений код правильніше буде оформити таким чином:
Отже, щоб уникнути помилок часу виконання програміст повинен не забувати робити перевірку на правильність введення користувачем допустимих значень, укладати небезпечний код в блоки try…finally…end або try…except…end , робити перевірку на існування файлу, що відкривається, функцією FileExists і взагалі дотримуватися передбачливості всіх слабких місцях програми. Не покладайтеся на користувача, адже недарма кажуть, що якщо в програмі можна припуститися помилки, користувач цю можливість неодмінно знайде.
Алгоритмічні помилки
Якщо ви не припустилися ні синтаксичних помилок, ні помилок часу виконання, програма скомпілювалася, запустилася і працює нормально, це ще не означає, що в програмі немає помилок. Переконатись у цьому можна лише у процесі її тестування.
Тестування - процес перевірки працездатності програми шляхом введення до неї різних, навіть навмисно помилкових даних, і наступної контрольної перевірки результату, що виводиться.
Якщо програма працює правильно з одними наборами вихідних даних, і неправильно з іншими, це свідчить про наявність алгоритмічної помилки. Алгоритмічні помилки іноді називають логічними, зазвичай пов'язані з неправильною реалізацією алгоритму програми: замість "+" помилково поставили "-", замість "/" - "*", замість розподілу значення на 0,01 розділили на 0,001 і т.п. Такі помилки зазвичай не виявляються під час компіляції, програма нормально запускається, працює, а при аналізі результату з'ясовується, що він неправильний. При цьому компілятор не вкаже програмісту на помилку – щоб знайти та усунути її, доводиться аналізувати код, покроково "прокручувати" його виконання, стежачи за результатом. Такий процес називається налагодження.
Помилки у програмах
Помилки в програмах можуть допускатися від початкового етапу складання алгоритму розв'язання задачі до остаточного оформлення програми. Різновидів помилок досить багато. Розглянемо деякі групи помилок та відповідні приклади:
Розглянемо докладніше деякі з вищенаведених видів помилок.
Синтаксичні помилки
Синтаксичні помилки найчастіше виявляють вже на етапі трансляції. На жаль, багато помилок інших видів транслятор виявити не в змозі, т.к. йому не відомий задуманий чи необхідний результат роботи програми.
Відсутність повідомлень транслятора про синтаксичні помилки є необхідною умовою правильності програми, але не може свідчити про те, що вона дасть правильний результат.
Прикладами синтаксичних помилок є:
- відсутність знаку пунктуації;
- невідповідність кількості відчиняючих та закриваючих дужок;
- неправильно сформований оператор;
- неправильний запис імені змінної;
- помилка у написанні службових слів;
- відсутність умови закінчення циклу;
- відсутність опису масивів тощо.
Синтаксична помилка "Не заданий ідентифікатор":
Помилки, які не виявляє транслятор
У разі правильного написання операторів у програмі може бути велика кількість помилок, які транслятор не може виявити. Розглянемо приклади таких помилок:
- після перевірки заданої умови неправильно вказано галузь алгоритму;
- неповний перелік можливих умов під час вирішення завдання;
- один або більше блоків алгоритму у програмі пропущено.
- неправильно вказано початок циклу;
- неправильно вказані умови закінчення циклу;
- неправильно вказано кількість повторень циклу;
- використання нескінченного циклу.
Помилки введення-виведення; помилки при роботі з даними:
- неправильно заданий тип даних;
- організовано зчитування меншого чи більшого обсягу даних, ніж потрібно;
- неправильно відредаговано дані.
Помилки у використанні змінних:
- використовуються змінні, для яких не вказані початкові значення;
- помилково вказано одну змінну замість іншої.
Помилки під час роботи з масивами:
- пропущено попереднє обнулення масивів;
- неправильний опис масивів;
- індекси масивів йдуть у помилковому порядку.
Помилки в арифметичних операціях:
- неправильне використання типу змінної (наприклад, для збереження результату поділу використовується ціла змінна);
- неправильно визначено порядок дій;
- виконується поділ на нуль;
- під час розрахунку виконується спроба вилучення квадратного кореня з негативного числа;
- не враховуються значні розряди числа.
Помилка в арифметичних операціях «Поділ на нуль»:
Всі описані вище помилки можна виявити методом тестування.
Супровід програми
Супроводженням програм називають роботи з обслуговування програм у процесі їх експлуатації.
У разі багаторазового використання розробленої програми для вирішення різних завдань певного класу потрібне проведення таких додаткових робіт, як:
- при виявленні помилок роботи програми вони мають виправлятися;
- у разі зміни вимог експлуатації необхідна модифікація програми;
- виконання доопрацювання програми з метою вирішення конкретних завдань;
- виконання додаткових тестових розрахунків;
- внесення виправлень до робочої документації;
- покращення програми і т.д.
При проведенні робіт із супроводу багатьох програм вартість цього супроводу перевищує половину витрат, які припадають на весь період існування програми (від розробки початкового алгоритму до морального її старіння).
Програма, яка призначена для тривалої експлуатації, повинна супроводжуватись відповідною документацією та інструкцією щодо її використання.
