Що це не було заплановано! Пошук логічних помилок

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

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

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

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

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

Натисніть клавішу F5 для запуску програми. У першому текстовому полі введіть 10 (10 хвилин), у другому текстовому полі введіть 5 (5 миль) і натисніть кнопку Button1.

З'явиться вікно повідомлення з текстом "Середня швидкість 0.03333334"; проте якщо за 10 хвилин було пройдено 5 миль, то правильною відповіддю повинно бути значення 30 миль в годину.

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

В останньому прикладі логіка програми явно невірна. Відповідно до результату швидкість менше однієї милі в годину, а не 30 миль на годину, як слід було б очікувати - але де ж помилка?

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

Щоб задати точку зупину і перевірити код по кроках

На кордоні форми повинна відобразитися червона точка і код повинен бути підсвічений червоним, що позначає точку зупину.

Натисніть клавішу F5 для повторного запуску програми. У першому текстовому полі введіть 10. а в другому - 5. Потім натисніть кнопку Button1.

Програма призупиняється при досягненні точки зупину. Рядок hours = minutes / 60 підсвічується жовтим.

Перевірте значення змінних, утримуючи над ними миша. Значення hours має дорівнювати 0. а значення minutes - 10.

Натисніть клавішу F8 для виконання рядки hours = minutes / 60 і перейдіть на наступний рядок.

Перевірте значення змінних в рядку MsgBox ( "Average speed" GetMPH (hours, miles)). Значення hours тепер має дорівнювати 0.166666672. а значення miles - 5.0.

Натисніть клавішу F8 знову, щоб виконати поточний рядок.

Зверніть увагу, що відбувається перехід до рядка Function GetMPH.

Перевірте значення змінних в цьому рядку. Значення miles тепер одно 0.166666672. а значення hours - 5.0. що суперечить попередньому рядку. Помилка знайдена.

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

У попередній процедурі значення змінних miles і hours помінялися місцями. Ви можете зрозуміти причину?

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

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

Видаліть точку зупину, натиснувши на червону крапку на поле в лівій частині вікна.

Натисніть клавішу F5 для запуску програми. У першому текстовому полі введіть 10. а в другому - 5. Потім натисніть кнопку Button1.

На цей раз у вікні повідомлення відображається правильний результат: "Середня швидкість 30".

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