- •1.Розробка системи оперативної довідки
- •1.1.Меню Help
- •1.2. Малюнок 1. Вікно довідки. Кнопка Help в екранній формі
- •1.4.Виклик контекстно-залежної довідки кнопкою What's This?
- •1.5. Малюнок 2. Екранна форма, у якій установлена кнопка виклику контекстної довідки. Використання html Help Workshop
- •1.5.1.Створення проекту системи оперативної довідки
- •Малюнок 3. Діалогове вікно New.
- •Малюнок 4. Діалогове вікно Existing Files.
- •1.5.2.Таблиця змісту
- •Малюнок 5. Вікно щойно створеного проекту.
- •Малюнок 6. Заповнення таблиці змісту.
- •1.5.3.Предметний покажчик
- •Малюнок 7. Заповнення контекстного вказівника.
- •1.5.4.Додавання в проект html-файлів розділів довідки
- •1.5.5. Малюнок 8. Заготівля html-файлу, оформлена html Help Workshop. Зв'язки між файлами розділів і url
- •1.6.Додавання і видалення файлів розділів довідки
- •Малюнок 9. Діалогове вікно Topіc Fіles.
- •1.7.Компіляція системи оперативної довідки
- •1.8.Контекстно-залежні розділи довідки
- •Малюнок 10. Діалогове вікно Options.
- •Малюнок 11. Wizard Selection
- •Малюнок 12. Вікно Application Builder.
- •1.8.1.Включення файлу відображення в проект системи оперативної довідки
- •1.8.2. Малюнок 13. Включення файлу відображення в проект системи оперативної довідки. Зв'язування HelpContextіD з html — файлами розділів довідки
- •1.8.3. Малюнок 14. Діалогове вікно для організації зв'язування файлів розділів довідки і HelpContextі у додатку. Розділи довідки, що викликаються кнопкою What's This?
- •Малюнок 15 Екранна форма Visual FoxPro, налаштована на використання довідки What's This?
- •1.9.Поширення готової системи оперативної довідки
- •2.Пошук і обробка помилок, тестування проекту
- •2.1.Проблема помилок у програмному продукті
- •2.2.Пошук помилок у програмному коді
- •2.2.1.Синтаксичні помилки
- •2.2.2.Логічні помилки
- •2.2.3.Виключення
- •2.3.Розбивка коду на модулі для мінімізації помилок
- •2.4.Помилки при передачі параметрів
- •2.5.Використання команд exіt і return
- •2.6.Обробка ушкоджених файлів
- •2.7.Тестування та налагодження додатків
- •2.7.1.Технологія тестування
- •2.7.2.Створення середовища для тестування
- •2.7.3.Створення тестових наборів даних, що забезпечують повноту накриття додатка
- •2.7.4.Документування тестових наборів
- •2.8.Методика перехоплення помилок
- •2.9.Налагоджувальник
- •Малюнок 16. Налагоджувальник Visual FoxPro.
- •2.9.1.Використання вікна Trace
- •Малюнок 17. Панель інструментів налагодження
- •Малюнок 18 Діалогове вікно Breakpoints
- •2.9.2.Використання вікна Locals
- •Малюнок 19. Діалогове вікно Locals
- •2.9.3.Використання вікна Watch
- •Малюнок 20. Діалогове вікно Watch.
- •2.9.4.Діалогове вікно Call Stack
- •2.9.5.Використання вікна Debug Output
- •2.9.6.Діалогове вікно Event Tracking
- •Малюнок 21. Діалогове вікно Event Tracking.
- •2.10.Використання Coverage Profiler
- •Малюнок 22. Додаток Coverage Profiler у режимі відображення покриття.
- •2.11. Малюнок 23. Додаток Coverage Profiler у режимі відображення профілю. Використання процедур обробки помилок
- •2.11.1.Використання методів обробки події error в об'єктах
- •3.Література
- •4.Перелік ілюстрацій
2.2.2.Логічні помилки
Це друга категорія помилок з нашого переліку. Знайти їх набагато важче, ніж синтаксичні. Вони ніколи не виявляються на стадії компіляції. Існують серйозні логічні помилки, що приводять до зупинки програми: наприклад, посилання на неіснуючий масив чи елемент неіснуючого масиву приведуть до припинення виконання програми в результаті логічної помилки. Можливо, що масив і оголошений в іншій процедурі (файлі програми), але має зону видимості тільки цього файлу, а тому і вважається неіснуючим в інших компонентах проекту. Коли Visual FoxPro виявляє звертання до неіснуючого масиву чи перемінної, виконання додатка припиняється.
Більшість логічних помилок приводить просто до невірних результатів виконання програми: наприклад, у деякому полі таблиці ви можете знайти кілька символів “зірочка” (****), що означає переповнення поля. У цьому випадку або розмір поля обраний невиправдано малим, або обчислене значення занадто велике. Звичайно, не завжди помилки мають такі драматичні наслідки. Якщо в звіті про продажі розрахований сумарний податок, що перевищує вартість придбаних товарів, то в компанії можуть виникнути проблеми. Ця помилка дуже просто виявляється при порівнянні сумарної вартості продажів до і після нарахування податків. З іншого боку, багато помилок (точніше, їхні наслідки) не так очевидні. Часто приходиться якимось незалежним способом перевіряти ще раз результати розрахунків. Припустимо, для розрахунку площі прямокутної земельної ділянки в акрах використовується наступне вираження: gnTotalAcres = (pnFront * pnSіde)/9/4480
Це на перший погляд цілком коректне вираження, що не викликає ніяких помилок при виконанні. Перемножується довжина і ширина, задані у футах. Результат — площа в квадратних футах. Потім він поділяється на 9 — кількість квадратних футів на квадратний ярд. А потім поділяється на кількість квадратних ярдів на акр, але цей показник набраний у програмі невірно — замість 4840 набране 4480. Глянувши на результат, ви навряд чи догадаєтеся, що у вираженні в програмі переплутані місцями дві цифри. Такого типу помилки дуже довго можуть залишатися в програмі (поки в один прекрасний день у компанію з продажу нерухомості, що користалася цією програмою, не прийдуть розсерджені клієнти…).
Інший розповсюджений тип логічних помилок, що виявляються важко, зв'язаний з використанням команди REPLACE. Припустимо, ви хочете змінити значення в деякім полі однієї таблиці, у той час як покажчик у поточній таблиці вказує на кінець файлу (EOF).
SELECT cust
IF! SEEK (m.pcCustId)
REPLACE order.cCustld WITH 'NONE'
ENDIF
На перший погляд здається, що в цьому фрагменті немає ніяких підводних каменів, але програма зупинилася. Після того як Visual FoxPro спробує знайти ідентифікатор покупця в таблиці cust і не зможе, що поточний покажчик буде вказувати на кінець таблиці. Хоча команда REPLACE і використовує явне ім'я псевдоніма для заміни значення cCustld у таблиці order, за замовчуванням область видимості для NEXT 1 у дійсності включає поточну робочу область, тобто cust, a аж ніяк не order. Оскільки в цій області покажчик указує на кінець таблиці (EOF), команда REPLACE виконана не буде. Вихід із ситуації в тім, щоб перед REPLACE6 вставити оператор SELECT order.
Оскільки Visual FoxPro не вимагає обов'язково вказувати ім'я псевдоніма робочої області перед ім'ям поля, іноді з тексту програми не ясно, виконується операція з полем таблиці чи з перемінною в пам'яті. Для присвоєння нового значення перемінної в пам'яті використовується вираження присвоєння зі знаком рівності (=), а для введення нового значення в поле таблиці — команда REPLACE. Якщо в розглянутому операторі використовувати вираження присвоєння, то виконавча система Visual FoxPro його спокійно “проковтне”, але результат буде дуже далекий від очікуваного, оскільки значення буде привласнено не полю таблиці, а перемінної в пам'яті з тим же ім'ям: cCustld = 'NONE'