Вирішення всіх питань та налагодження системи. Налагодження програми. Програма з нарахування заробітної плати та податків працівникам фірми

Мета роботи:

Здійснити тестування та налагодження розробленої раніше конкретної програми алгоритмічною мовою високого рівня.

Порядок виконання роботи та звітність.

Під час виконання лабораторної роботинеобхідно скласти набір тестів до розробленої раніше програми та провести її налагодження.

Складений набір тестів необхідно подати у звіті.

Теоретичні відомості.

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

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

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

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

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

Комплект тестів має бути таким:

Щоб перевірити всі варіанти зовнішнього ефекту програми та варіанти її внутрішньої роботи алгоритму;

Щоб усі гілки алгоритму були пройдені принаймні по одному разу.

Щоб проконтролювати граничні та вироджені випадки.

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

Процес тестування програми можна поділити на три етапи:

1. Перевірка у нормальних умовах.

2. Перевірка у екстремальних умовах.

3. Перевірка у виняткових ситуаціях.

Кожен із цих трьох етапів перевірки повинен гарантувати отримання правильних результатів при правильних вхідних даних та видачу повідомлень про помилки при неправильних вхідних даних.

Перевірка у нормальних умовах

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

Перевірка в екстремальних умовах

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

Перевірка у виняткових ситуаціях.

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

приклад тестів.

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

Сторони

Паралепіпеда

Примітка

Хороший нормальний тест d 1,7320508


Вступ 2

Визначення програмування. Етапи створення програми 3

Налагодження програми 6

Завдання 2 та 3 9

Завдання 4 та 5 12

Висновок 14

Список використаної літератури 15

Вступ

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

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

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

Для створення програми з'являється необхідність дотримуватись певних принципів та нових технологій програмування.

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

Визначення програмування. Етапи створення програми

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

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

Мова програмування – формальна знакова система, призначена запису програм. З часу створення перших програмованих машин людство придумало вже понад вісім з половиною тисяч мов програмування. Щороку їхня кількість поповнюється новими. Деякими мовами вміє користуватися лише невелика кількість їхніх власних розробників, інші стають відомими мільйонам людей. Професійні програмісти іноді застосовують у своїй роботі понад десяток різноманітних мов програмування.

У процесі створення будь-якої програми можна виділити таку послідовність етапів:

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

2 етап. Аналіз завдання та моделювання: метою цього етапу є математична модель або математична постановка. На цьому етапі виконуються такі пункти

1) Визначаються вихідні дані та їх типи.

2) Розв'язання задачі описується у вигляді аналітичних залежностей (рівняння, функції).

3) Визначаються кінцеві дані та його типи.

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

3 етап. Алгоритмізація задачі та складання блок-схеми: виконується на основі математичного опису програми. На даному етапіскладається алгоритм розв'язання задачі згідно з діями, що задаються обраним методом розв'язання. Процес обробки даних розбивається деякі відносно самостійні блоки, і встановлюється послідовність виконання блоків. Розробляється блок-схема алгоритму.

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

5 етап. Налагодження та тестування програми: полягає у пошуку та усуненні синтаксичних та логічних помилок у програмі.

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

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

Налагодження програми

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

Налагодження - це діяльність, спрямована на виявлення та виправлення помилок у програмі.

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

Налагодження = Тестування + Пошук помилок + Редагування.

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

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

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

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

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

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

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

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

  • Паскаль Налагодження програм

    Реферат >> Інформатика

    Логічні оператори та оператори циклу. Налагодження програм. Укорочена форма оператора if... if. Засоби середовища програмуваннядля налагодження програмСереда Borland Pascal ... кілька вбудованих інструментальних засобів налагодження програм. З деякими з них...

  • Програмащодо нарахування заробітної плати та податків працівникам фірми

    Реферат Економіка

    Програмного забезпечення: вивчення постановки задачі; програмуванняі налагодження програм; опис контрольного прикладу; спільно з... машинного часу при налагодження програмивизначаються шляхом множення фактичного часу налагодження програмина ціну...

  • Виконання та налагодження програмв інтегрованому середовищі програмування Turbo Pascal (MS-Dos)

    Лабораторна робота >> Інформатика, програмування

    Практичного використання інтегрованих середовищ програмуванняз метою виконання та налагодження программовою Паскаль. ТЕОРЕТИЧНІ... ВІДОМОСТІ Базовими компонентами системи програмуванняТурбо...

  • Мета лекції:ознайомитися з видами та способами контролю та тестування ПЗ, методами та засобами налагодження програм.

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

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

      передбачувані результати мають бути відомі до тестування;

      слід уникати тестування програми автором;

      необхідно досконально вивчати результати кожного тесту;

      необхідно перевіряти дії програми на невірні дані;

      необхідно перевіряти програму на несподівані побічні ефекти на неправильні дані.

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

    Існують два принципово різні підходи до формування тестових наборів: структурнийі функціональний. Структурний підхід базується на тому, що відома структура тестованого ПЗ, у тому числі його алгоритми (« скляний ящик»). Тести будуються для перевірки правильності реалізації заданої логіки у коді програми. Функціональнийпідхідґрунтується на тому, що структура ПЗ не відома (« чорний ящик»). І тут тести будують, спираючись на функціональні специфікації. Цей підхід називають також підходом, керованим даними,оскільки при його використанні тести будують на основі різних способів декомпозиції безлічі даних. Набори тестів, отримані відповідно до методів цих підходів, об'єднують, забезпечуючи всебічне тестування ПЗ.

    Ручний контрольвикористовують на ранніх етапах розробки. Всі проектні рішення аналізуються з точки зору їх правильності та доцільності якомога раніше, поки їх можна легко переглянути. Розрізняють статичнийі динамічнийпідходи до ручного контролю. При статичному підході аналізують структуру, керуючі та інформаційні зв'язки програми, її вхідні та вихідні дані. При динамічному- Виконують ручне тестування(Вручну моделюють процес виконання програми на заданих вихідних даних). Вихідними даними для таких перевірок є: технічне завдання, специфікації, структурна та функціональна схеми програмного продукту, схеми окремих компонентів, а для пізніших етапів – алгоритми та тексти програм, а також тестові набори. Доведено, що ручний контроль сприяє суттєвому збільшенню продуктивності та підвищенню надійності програм і за його допомогою можна знаходити від 30 до 70% помилок логічного проектування та кодування. Основними методами ручного контролю є: інспекції вихідного тексту, наскрізні перегляди, перевірка за столом, оцінки програм.

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

    Іншим способом перевірки програм є функціональне тестування: програма розглядається як « чорний ящик», Метою тестування є з'ясування обставин, коли поведінка програми не відповідає специфікації. Для виявлення всіх помилок необхідно виконати вичерпнетестування (при всіх можливих наборах даних), що для більшості випадків неможливе. Тому зазвичай виконують розумне» або « прийнятне» Тестування, що обмежується прогонами програми на невеликій підмножині всіх можливих вхідних даних. При функціональному тестуванні розрізняють такі методи формування тестових наборів: еквівалентне розбиття; аналіз граничних значень; аналіз причинно-наслідкових зв'язків; припущення про помилку.

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

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

    Налагодження - це процес локалізації(Визначення оператора програми, виконання якого викликало порушення обчислювального процесу) та виправлення помилок, виявлених при тестуванні ПЗ. Щоб виправити помилку, необхідно визначити її причину. Налагодження вимагає від програміста глибоких знань специфіки управління технічними засобами, що використовуються, операційної системи, середовища та мови програмування, реалізованих процесів, природи та специфіки помилок, методик налагодження та відповідних програмних засобів; психологічно дискомфортна (потрібно шукати власні помилки в умовах обмеженого часу); залишає можливість взаємовпливу помилок у різних частинах програми. Чітко сформульовані методики налагодження відсутні. Розрізняють:

      синтаксичні помилки– супроводжуються коментарем із зазначенням їхнього розташування, фіксуються компілятором (транслятором) при виконанні синтаксичного та частково семантичного аналізу;

      помилки компонування- Виявляються компонувальником (редактором зв'язків) при об'єднанні модулів програми;

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

      помилки визначення вихідних даних (помилки передачі, помилки перетворення, помилки перезапису та помилки даних);

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

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

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

        ручного тестування(при виявленні помилки потрібно виконати програму, що тестується, вручну, використовуючи тестовий набір, при роботі з яким була виявлена ​​помилка);

        індукції(заснований на ретельному аналізі симптомів помилки, які можуть виявлятися як неправильні результати обчислень або як повідомлення про помилку);

        дедукції(спочатку формують безліч причин, які могли б викликати цей прояв помилки, а потім аналізуючи причини, виключають ті, що суперечать наявним даним);

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

    Для отримання додаткової інформації про помилку виконують додаткові тести та використовують спеціальні методи та засоби: налагоджувальний висновок; інтегровані засоби налагодження; незалежні відладчики.

    Загальна методика налагодження програмних продуктів, написаних для виконання в операційних системах MS DOS та Win32:

    1 етап- Вивчення прояву помилки;

    2 етап –визначення локалізації помилки;

    3 етап- Визначення причини помилки;

    4 етап -виправлення помилки;

    5 етап -повторне тестування.

    Процес налагодження можна суттєво спростити, якщо дотримуватися основних рекомендацій структурного підходу до програмування:

      програму нарощувати «зверху-вниз», від інтерфейсу до обробних підпрограм, тестуючи її під час додавання підпрограм;

      виводити користувачеві дані для контролю і перевіряти їх на допустимість відразу після введення;

      передбачати виведення основних даних у всіх вузлових точках алгоритму (розгалуження, виклики підпрограм).

    Додаткову інформацію на тему можна отримати у .

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

    Налагодження програми - це спеціальний етап у створенні програми, що полягає у виявленні та усуненні програмних помилок, факт існування яких вже встановлено. Програмні помилки, Як правило, діляться на три види:

    1. Синтаксична помилка . Неправильне вживання синтаксичних конструкцій, наприклад, вживання оператора циклу For без того або Next.
    2. Семантична помилка . Порушення семантики тієї чи іншої конструкції, наприклад, передача функції параметрів, що не відповідають її аргументам.
    3. Логічна помилка . Порушення логіки програми, що веде до невірного результату. Це найважчий для "вилову" тип помилки, бо подібні помилки, як правило, криються в алгоритмах і вимагають ретельного аналізу і всебічного тестування.

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

    В кожній сучасної системипрограмування існує спеціальний засібналагодження програм - відладчик(debugger), який дозволяє в інтерпретації встановити контрольні точки, виконати окремі ділянки програми та подивитися результати роботи операторів. Звичайно, редактор Visual Basic має подібний засіб, з яким ми зараз і познайомимося. У вищеописаній програмі ми спеціально припустилися помилок, на прикладі яких і продемонструємо роботу відладчика VBA.

    Зауваження

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

    Перший крок налагодження – це запуск компілятора: Debug > compile <имяПроекта>. Компілятор, переглядаючи код програми, знайде помилку та видасть повідомлення: sub or Function not defined (Процедура або функція не визначено), виділивши місце помилки (creatitem) у тілі процедури.

    Отже, припущена синтаксична помилка, ми зробили друкарську помилку (замість createitem ввели creatitem), і компілятор став розцінювати це як виклик процедури користувача, яка ніде не оголошена. Швидко виправимо цю помилку, додавши злощасну е в код:

    Set tsk = Createltem(olTaskltem)

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

    Зауваження

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

    Запуск програми у VBA здійснюється різними способами. Вже згадувалась можливість запуску програми за допомогою натискання клавіші або за допомогою команди Run Sub\UserFormменю Run.Однак за такого виклику запускається активна процедура, тобто процедура, в якій знаходиться курсор. Іншим способом є виклик діалогового вікна Macrosз меню Tools. Вцьому вікні можна вибрати процедуру, що запускається, не роблячи її активною.

    Отже, ми запустили програму. Що ж відбувається? Відразу після запуску з'являється діалогове ВІКНО про помилку: Object variable or With block variable not set (об'єктна змінна або змінна блока with не визначена) та чотири варіанти продовження роботи з програмою (рис. 22.6):

    1. Continue.Продовжити виконання програми.
    2. End.Закінчити виконання програми.
    3. Debug.Перервати виконання програми та перейти в режим налагодження.
    4. Help.Вивести докладну довідку про помилку.

    Зауваження

    Хоча в цьому випадку кнопка Continueне активна, вона дуже корисна часом. Наприклад, при перериванні ходу програми комбінацією клавіш +тільки для перевірки контрольних значень у вікні Immediate,коли немає потреби переходити в режим налагодження, якщо всі значення є задовільними. Кнопка Endвикористовується для остаточного переривання ходу програми, як правило, коли помилка відразу видно і не потребує налагоджувальних засобів.

    Рис. 22.6.Діалогове вікно Run-time error "91"

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

    У нашому випадку сталася семантична помилка: неправильне надання змінної значення посилання на об'єкт. Для усунення цієї помилки необхідно додати оператор присвоєння set перед змінною tsk. Давайте ще раз запустимо програму. Цього разу вона успішно завершилася, дійшовши до кінця та видавши повідомлення "Завдання успішно доручено".

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

    Як бачите, всі параметри вірні, крім загадкового терміну закінчення завдання, який закінчується через 5 днів, у той час як у діалоговому вікні тривалість проекту дорівнювала 5 місяців!!!

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

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

    Рис. 22.7.

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

    Щоб створити точку зупинки, слід у процедурі, що налагоджується, встановити точку введення в будь-якому місці рядка коду VBA, перед виконанням якої ви хочете зупинити виконання процедури. Потім потрібно вибрати команду > Debug > Toggle Breakpoint або просто натиснути клавішу . У цьому рядок буде виділено коричневим кольором, але в лівому полі вікна коду з'явиться жирна коричнева точка. Для зняття точки зупинки потрібно ще раз повторити ті самі дії. Якщо навпроти оператора стоїть точка зупинки, це означає, що виконання програми буде призупинено передвиконанням цього оператора.

    Зауваження

    Є і простіший і, на наш погляд, природний спосіб установки точок зупинки: досить просто зробити клацання мишею по сірій смужці біля лівого краю відповідного рядка коду. Зняти цю точку можна повторним клацанням по жирній коричневій точці. Нарешті, якщо ви хочете зняти всі поставлені точки зупинки, зовсім необов'язково знімати всі ці точки поодинці. Досить користуватися командою меню > Debug > Clear All Breakpoints.

    Наші підозри викликали такі місця програми, в яких ми і розставили точки зупинки (мал. 22.8).

    • Ініціалізація змінної tsk (чому дорівнює значення за промовчанням).
    • Виклик стандартної функції NOW (чи повертається поточний час).
    • Встановлення дати закінчення завдання (чи правильно підсумовується).

    Після розміщення точок зупинки потрібно, як було сказано, вказати, значення яких змінних ми хотіли б спостерігати. Звичайно, ми вибрали значення полів tsk.startoate і tsk.DueDate. Для спостереження за декількома властивостями або змінними є спеціальні вікна Locals Window та Watch Window.Ці вікна можна відкрити за допомогою кнопок на панелі. Debugабо команд меню View.

    У вікні локальних змінних можна спостерігати за значенням всіх локальних змінних, що виконується в Наразіпроцедури, а вікно контрольних значень призначене постійного спостереження за обраними користувачем змінними чи властивостями. Щоб визначити контрольне значення, достатньо виділити у вікні модуля будь-яку змінну, вираз чи властивість та натиснути кнопку Quick Watchна панелі інструментів Debug.При цьому з'явиться діалогове вікно, в якому вказано ім'я підпрограми, вираз, а також його поточне значення (рис. 22.8).

    Натиснувши на розташовану в правій частині діалогового вікна кнопку Add, можна перемістити цей вираз до списку контрольних значень, що спостерігаються у вікні Watch.При цьому в момент зупинки програми, що налагоджується весь список спостережуваних виразів і їх значення будуть відразу ж видно у відповідному вікні, що розташовується зазвичай в нижній частині екрана. Додамо змінну tsk. star toate вищеописаним способом. Щоб спостерігати значення змінної, необхідно виконати таку дію.

    Рис. 22.8.Точки зупинки та діалогове вікно Quick Watch

    Приклад 22.8. Додавання змінної у вікно Add Watch

    (У вікні Watch)

    1R Add Watch... (рис. 22.9)

    Expression:= tsk.StartDate

    Procedure AssignTask

    Отже, точки зупинки розставлені, вікно Add Watchіз спостеріганими змінними активно, отже, із завмиранням серця переходимо до трасування програми. Отже, натискаємо клавішу Як і передбачалося, перед ініціалізацією змінної відбувається зупинка програми. Все правильно. Тепер давайте подивимося, як змінилися значення змінних. Add Watch: tsk.StartDate = 01:01:4501, tsk.StartDate = 01:01:4501, a duration = 5.

    Рис. 22.9.Діалогове вікно Add Watch

    Для одиничного перегляду значення змінної можна просто підвести до неї покажчик миші, і ви побачите підказку. Наприклад, тривалість = 5.

    Для подальшого покрокового виконання програми можна скористатися одним із трьох способів:

    1. Step Into.При натисканні клавіші виконується черговий оператор, після чого виконання програми зупиняється і програма стає доступною для коригування.
    2. Step Over.Натискання клавіш +здійснює виклик допоміжних процедур та функцій за один крок, що дає можливість не затримуватись на їх виконанні.
    3. Step Out.Ця комбінація клавіш ++дозволяє вийти з допоміжної процедури, що виконується, не чекаючи кінця її покрокового виконання.

    Отже, нам потрібно натиснути клавішу і подивитися, чому дорівнювало значення tsk.startDate. Як і слід було очікувати, змінної було надано значення 21.08.01. (поточна дата 21 серпня 2001). Отже, функція Now працює коректно.

    Значення змінної duration дорівнює 5, додаючи його значення поточної дати, ми додаємо не місяці (як хотілося б), а дні. Виправимо цю помилку, змінивши код помилкового рядка на наступний:

    DueDate = DateAdd("m", тривалість, .StartDate)

    Зауваження

    Вбудована функція DateAdd призначена для додавання або віднімання з дати вказаної кількості часових інтервалів.

    Наприкінці розповіді про відладчика ми вирішили на рис. 22.10 показати панель інструментів Налагодження(Debug) з кнопками, використовуваними при налагодженні, а табл. 22.1 навести коротку довідку з усіх використаних та невикористаних засобів відладчика.

    Рис. 22.10.Кнопки панелі Налагодження

    Команда Призначення
    CompileКомпіляція програми
    Run Sub/UserFormЗапуск процедури чи форми
    BreakПереривання виконання програми +
    ResetЗупинення виконання програми
    Toggle BreakpointsВстановити точку зупинки
    Clear All BreakpointsЗняти всі точки зупинки
    Step IntoКрок із заходом у допоміжні процедури
    Step OverКрок з обходом допоміжних процедур
    Step OutКрок з виходом із допоміжної процедури
    Step to CursorКрок до курсору. Запускає програму на виконання до рядка з курсором
    Set Next StatementДозволяє встановлювати наступний оператор, що виконується
    Show Next StatementПоказує наступний оператор.
    Immediate WindowВідображає вікно налагоджувальних результатів обчислення
    Locals WindowВідображає вікно локальних змінних процедур.
    Watch WindowВідображає вікно контрольних виразів програми
    Add WatchДодає вираз у вікно Watch
    Edit WatchВиправляє вираз у вікні Watch
    Quick WatchПереглядає значення виділеного виразу
    Call StackДозволяє показати стек викликів процедур у поточний момент. Ця кнопка дуже корисна під час роботи з рекурсивними процедурами
    Comment BlockДозволяє закоментувати виділений блок операторів
    Uncomment BlockСкасовує зроблені коментарі
    Toggle BookmarksВстановлює закладку
    Clear All BookmarksЗнімає всі закладки.
    FindВикликає діалогове вікно пошуку, за допомогою якого можна знайти ту чи іншу змінну, вираз і т. д.

    Таблиця 22.1.Засоби відладчика

    На жаль, не всі прийоми налагодження можна розглянути на нашому найпростішому прикладі.

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

    Помилки виконання

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

    Логічні помилки

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

    Існують дві взаємодоповнюючі технології налагодження.

    Ось що пишуть про ці два підходи до налагодження програми Брайан Керніган та Роб Пайк:

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

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

    Сліпе блукання у відладчику, швидше за все, непродуктивне. Корисніше використовувати відладчик, щоб з'ясувати стан програми, в якому вона робить помилку, потім подумати про те, як такий стан міг виникнути. Відладники можуть бути складними та заплутаними програмами, особливо для новачків, у яких вони викличуть скоріше здивування, ніж принесуть якусь користь…»

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

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

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

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

    Pascal

    Інтегрований налагоджувач Turbo Pascal

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

    Інтегрований відладчик Turbo Pascal має всі описані вище можливості і навіть більше. Він є вбудованою частиною інтегрованого вдосконаленого середовища Turbo Pascal (IDE): для використання пропонуються дві основні функції меню (Run, Debug), а також деякі клавіші для команд відладчика.

    Visual Studio

    Опис технології налагодження на прикладі Visual Studio C#

    У цьому розділі я спробую описати процес налагодження програми, написаної в середовищі « Visual Studio C# 2008 Express Edition». Всі помилки в коді програми, які я сам же знаходитиму зроблено спеціально.

    Мета: Розробити та налагодити програму «АйСчитайка», яка здійснюватиме пошук коренів квадратного рівняння.

    Розробка:

    1) створюємо новий проект

    2) пишемо інтерфейс користувача

    3) пишемо сам код програми.

    Через 10 хвилин я отримав:

    ( integer a, b, c; X11.Visible = false; X22.Visible = false; XX.Visible = false; xx1.Visible = false; xx1.Visible = false; xx2.Visible = false; neet.Visible = false; primer.Visible = false, a = Convert.ToInt32(aa.Value), b = Convert.ToInt32(bb.Value); ; if d > 0 ( X11.Visible = true; X22.Visible = true; double x1 = (b + Math.Sqrt(d)) / 2 * a; double x2 = (b - Math.Sqrt(d)) / 2 * a; xx1.Visible = true; xx2.Visible = true; xx1.Text = x1.ToString(); xx2.Text = x2.ToString();< 0) { neet.Visible = true; neet.Text = "нет корней" } if (d == 0) { XX.Visible = true; neet.Visible = true; double x = (-b / 2 * a); neet.Text = x.ToString(); } primer.Text = a + "X^2+" + b + "X+" + c + "=0"; primer.Visible = true; }

    Як бачимо на скріншоті. Компілятор навіть не дозволив запуститинаписану нами програму. І дбайливо підкреслив усі знайдені помилки.

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

    Після виправлення всіх синтаксичних помилок нам вдалося запустити програму.

    При спробі розрахунку з вхідними даними 2, 4, -6 ми отримуємо відповідь «немає коріння». Це неправильна відповідь. Прийдеться шукати логічні помилки. У цьому нам допоможе «відладчик».

    Розглянь наш проект. І помітимо рядки, де виконуються обчислення. Це рядки:

      1) double d = b * b + 4 * a * c;

      2) double x1 = (b + Math.Sqrt (d)) / 2 * a;

      3) double x2 = (b - Math.Sqrt (d)) / 2 * a;

      4) double x = (-b/2*a);

    Виділимо НАСТУПНОрядок після цих рядків, і натисніть клавішу F9. Це клавіша для створення «точки зупинки компіляції». Якщо виконання програми дійде до цієї точки, компіляція зупиниться, і ви введіть значення всіх змінних, які були в момент зупинки компіляції. Зняти «точку» можна просто виконавши клацання лівою кнопкою миші.

    Почнемо процес компіляції. Коли процес дійде до точки зупинки, ми побачимо значення змінних.

    Після змін. Ми знову запускаємо програму. І маємо вже коректне значення змінної d. Потім за допомогою кнопки f10, ми виконуємо програму далі, до наступних точок зупинки.

    Але наша програма, як і раніше, не коректно працює. Ми аналогічним способом знаходимо ще дві помилки.

      double x1 = (b + Math.Sqrt(d)) / 2 * a; замінюємо на double x1 = (-b + Math.Sqrt(d)) / 2*a;

      double x2 = (b - Math.Sqrt(d)) / 2 * a; замінюємо на double x2 = (-b - Math.Sqrt(d))/2*a;

    Після виправлення всіх помилок програма видає правильну відповідь.

    Ми «проганяємо» через програму якнайбільше тестів. Щоб розглянути усі можливі випадки.

    НАЛАДКА ЗАКІНЧЕНА! ПРОГРАМА ПРАЦЮЄ!

    Так має виглядати налагоджений код:

    ( int a, b, c; X11.Visible = false; X22.Visible = false; XX.Visible = false; xx1.Visible = false; xx1.Visible = false; xx2.Visible = false; neet.Visible = false; primer.Visible = false; a = Convert.ToInt32(aa.Value); b = Convert.ToInt32(bb.Value); c; if (d > 0) ( X11.Visible = true; X22.Visible = true; double x1 = (-b + Math.Sqrt(d)) / 2 * a; double x2 = (-b - Math.Sqrt (d)) / 2 * a; xx1.Visible = true; xx2.Visible = true; xx1.Text = x1.ToString(); xx2.Text = x2.ToString();< 0) { neet.Visible = true; neet.Text = "нет корней"; } if (d == 0) { XX.Visible = true; neet.Visible = true; double x = (-b / 2 * a); neet.Text = x.ToString(); } primer.Text = a + "X^2+" + b + "X+" + c + "=0"; primer.Visible = true; }

      Обов'язково коментувати код. Можливо вам це здасться необов'язковим, але це все-таки ДУЖЕ важлива річ. Можливо, ви захочете покращити свою програму через місяць, коли вже забули як вона працює. Або ви працюєте в команді, інший член команди не зможе зрозуміти ваш код, зіпсує його. Коментування коду дуже важливе.

      Ретельніше тестувати ваш код. Необхідно робити якнайбільше складні обчислення, нестандартні.

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

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

      Оптимізувати код.Не варто примушувати комп'ютер перераховувати 100мл. елементів масиву.

      Звертати увагу на всі помилки.Не варто не зважати на незначну на перший погляд помилку. Надалі це може призвести до плачевних наслідків.

      Чи не хвилюватися, не поспішає.

    Висновок

    Налагодження – головне заняття програміста.

    Налагодження - єдиний і найпотужніший спосіб знайти помилку у програмі.

    Зависає