- •Загальний план специфікації вимог до пз
- •Загальний огляд процесу відлагодження
- •Типові помилки при відлагодженні програм
- •Рекомендації щодо знаходження помилки
- •Рекомендації щодо виправлення помилок
- •«Агресивне» відлагодження
- •Відлагодження помилок при компіляції програм
- •1. Елементарні структури даних
- •1.1. Масив
- •1.2 Лінійний список.
- •2. Більш складні структури даних
- •2.1 Граф
- •2.2 Дерево
- •1.3 Купа
- •Визначення ооп
- •Фундаментальні поняття
- •Переваги ооп
- •Недоліки ооп
- •Типи відносин між класами
- •Агрегація
- •Асоціація
- •Успадкування
- •Метакласи
- •Шаблон «Абстрактна фабрика» (Abstract Factory)
- •Шаблон «Будівельник» (Builder)
- •Шаблон «Фабричний метод» (Factory Method)
- •Шаблон «Прототип» (Prototype)
- •Шаблон «Одинак» (Singleton)
- •1. Технологія com(Component Object Model)
- •2. Технологія rscom від «r-Style Softlab»
- •3. Технологія corba
- •4. Технологія JavaBeen.
- •5. Технологія ejb
- •1.1 Умовні оператори
- •1.1.1 Однорядкова конструкція оператора If / Then / Else:
- •1.1.3 Розгалуження обчислень за кількома умовами If /Then /ElseIf /EndIf:
- •1.1.4. Оператор Select Case:
- •1.2 Елементи екранних форм для організації розгалужень
- •1.3 Оператори циклу
- •1.3.1 Оператор циклу з лічильником For…Next
- •1.3.2. Оператор циклу For Each...Next
- •1.3.3. Оператор циклу з передумовою While...Wend
- •1.3.4 Оператор циклу Do...Loop
- •1.4 Оператори безумовної передачі керування
- •1.4.1 Оператор безумовного переходу Goto:
- •1.4.2 Оператор виходу зі структурного блоку Exit :
- •Статичні масиви
- •Динамічні масиви
- •Присвоювання масивів
Загальний огляд процесу відлагодження
На практиці, відлагодження (debugging) – це зупинка та аналіз стану програми в певні моменти часу, можливість покрокового їх виконання та відслідковування значень змінних, стеку викликів функцій (Call Stack), допоміжного виводу тощо. Програмні засоби, які дозволяють виконувати ці дії, називаються відлагоджувачами (debuggers).
Примусова зупинка програм в визначених точках досягається за допомогою так званих точок переривання (breakpoint). При виконанні операції, яка помічена точкою переривання, відлагоджувач автоматично призупиняє виконання програми.
Основні операції відлагоджувача:
-
Зупинка (Break/Pause). Призупиняє виконання програми і відображає поточний рядок виконання.
-
Вихід (Stop/Terminate). Примусово завершує програму і припиняє процес відлагодження.
-
Продовження виконання (Continue). Продовжує виконувати програму до її завершення або до досягнення наступної точки переривання.
-
Наступний крок (Step Over). Виконує наступну операцію, не заглиблюючись у її внутрішню реалізацію.
-
Крок всередину (Step Into). Переходить до ділянки коду, в якому описана реалізація функції і дозволяє відлагоджувати цю ділянку.
-
Крок назовні (Step Out/Step Return). Виконує поточну функцію до кінця, після чого призупиняє програму в функції, яка лежить рівнем вище в стеку виклику.
-
Виконання програми до заданого рядка (Run To Line). Виконує програму, доки не буде досягнутий заданий рядок.
Типові помилки при відлагодженні програм
Найчастішою помилкою програміста є невикористання всієї доступної йому інформації для побудови правильних гіпотез щодо некоректності його програм. Це призводить до того, що програміст часто опирається на часткові та нераціональні рішення, які вирішують лише симптоми, а не справжню проблему.
-
Намагання виправити помилку вгадуванням.
-
Прагнення не «тратити час» на осмислення суті проблеми.
-
Вирішення проблеми найпростішим та найтривіальнішим рішенням.
-
Списання помилок в програмі на помилки компілятора, збої в роботі комп’ютера, віруси та інші «надприродні» проблеми.
Рекомендації щодо знаходження помилки
-
Використовувати всі наявні дані для формулювання правильних гіпотез.
-
Підібрати такий тестовий випадок, на якому проблема відтворюється.
-
Випробувати код модульними тестами (unit tests).
-
Використовувати весь доступний інструментарій.
-
Постаратися відтворити проблему кількома різними способами.
Рекомендації щодо виправлення помилок
-
Зрозуміти проблему, перш ніж починати виправляти її.
-
Розуміти всю програму, не тільки проблему.
-
Не поспішати, розслабитись.
-
Перед виправленням зберегти оригінальну версію коду.
-
За один раз вносити тільки одну зміну, змінювати код тільки усвідомлюючи мету цих змін.
-
Перевірити, чи виправлений код працює коректно.
-
Перевірити код на присутність подібних помилок.
«Агресивне» відлагодження
«Агресивним» відлагодженням називається техніка, яка може бути неефективною щодо часу чи зусиль, але може гарантовано вирішити проблему.
-
Виконати повторне проектування і/або перегляд проблемної ділянки коду.
-
Відкинути ділянку коду і переписати її заново.
-
Стерти всю програму чи окремий модуль, і переписати її заново.
-
Скомпілювати код з повною відлагоджувальною інформацією.
-
Скомпілювати код з найбільшим рівнем зауважень компілятора, виправити код таким чином, щоб всі зауваження зникли.
-
Створити середовище для автоматичного тестування і виконувати тести тривалий час, наприклад, всю ніч.
-
При відлагодженні переступити через велику частину коду і зосередитись на ділянці коду, що може спричинити помилку.
-
Доповнити код командами допоміжного виводу чи логування.
-
Максимально відтворити конфігурацію апаратного забезпечення кінцевого користувача.
-
Новий код вносити малими порціями, ретельно тестуючи кожну з них.