Відлагодження і тестування

Цей етап рішення задачі вимагає частих контактів з ЕОМ. Спілкування користувачів з ЕОМ залежить від режимів проходження програм через машину, які забезпечує операційна система (ОС): пакетна (конвеєрна) обробка і інтерактивна обробка (діалог).

Дуже рідко програма після першого введення в комп'ютер (незалежно від режиму обробки в ОС) починає видавати бажані результати, оскільки спроектовані фахівцем структура даних, алгоритм і програма зазвичай містять помилки. Їх треба виявити, усвідомити і виправити. Процес виявлення і виправлення всіх помилок в програмі, допущених на попередніх етапах рішення задачі, а також процес встановлення факту правильного функціонування програми в ЕОМ, називається відлагодженням програми. Основне завдання відлагодження − якнайшвидша локалізація всіх помилок при мінімальних витратах машинного часу. Цей процес вельми трудомісткий, такий, що вимагає великої розумової напруги; витрати машинного часу можуть бути значними. Відлагодження є дуже важливим етапом рішення задачі на ЕОМ, тому даний процес повинен бути наперед продуманий і ретельно спланований.

Процес відлагодження складається з наступних основних кроків:

1) перевірка синтаксичної правильності тексту програми;

2) автономне відлагодження частин програми;

3) комплексне відлагодження програми і алгоритму в цілому.

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

Автономне відлагодження служить для перевірки роботи алгоритму. Для спрощення відлагодження програм підвищеної складності їх доцільно розчленовувати на незалежні частини (модулі, сегменти). Мови високого рівня дозволяють транслювати і відлагоджувати такі автономні частини окремо, до об'єднання їх в загальну програму. При відлагоджуванні частин програми спочатку перевіряються лінійні ділянки, тобто послідовності операторів мови без циклів і переходів, потім логіка, тобто вибір потрібної гілки алгоритму у разі альтернатив, управління числом повторень в циклах, безумовні переходи і т.п. Для проведення автономного відлагодження необхідно підготувати набір контрольних прикладів − тестів відлагодження, які слугують зразками для порівняння з машинними результатами. Тести обчислюються традиційним способом, тобто вручну із залученням таблиць спеціальних математичних функцій (наприклад, функцій Бесселя, Ханкеля). З точки зору об'єму обчислень тести повинні бути по можливості простими і в той самий час вони повинні забезпечувати перевірку всіх логічних особливостей алгоритму.

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

Автономне відлагодження дозволяє виявити основну масу помилок (близько 80%). Проте витрати часу на пошук кожної помилки, що залишилася, у великих програмах з складною логічною структурою може зростати в 10-20 разів. Тому загальна трудомісткість відлагодження програм може бути в кілька разів вища за трудомісткість автономного відлагодження

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

Завершує комплексне відлагодження розрахунок (прогін) одного-двох контрольних варіантів модельованого на ЕОМ дослідницького завдання, конкретні рішення для яких відомі або легко прогнозуються. Основне завдання тепер – переконатися в повній працездатності і ефективності чисельного методу (дискретній моделі). Звичайні наступні види помилок: неповний облік діапазонів змінних, неправильна оцінка точності початкових, проміжних даних і одержуваних результатів обробки; невірний облік кореляції між різними змінними; неадекватне визначення формалізованих умов в постановці завдання і т.д. Таким чином, процес усунення подібних помилок можна трактувати як уточнення, деталізацію і доопрацювання початкової постановки завдання.

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