Підручник з Delphi 4
Тестування та налагодження йдуть пліч-о-пліч, так що більшість програмістів просто не сприймають їх як окремі етапи розробки програм. Однак шлях до успіху лежить через поділ процесу налагодження та тестування на два різні етапи роботи над програмою, і вам слід чітко уявляти собі, що мета тестування – визначити наявність (або відсутність) помилок. У той час як мета налагодження – визначити місце розташування помилок та усунути їх. Оскільки цілі цих двох етапів розробки програм різні, різні та використовувані для цього методи та інструменти.
Створення надійної програми Найкращий шлях виключити помилки в програмі - захиститися від них ще під час написання коду. Надійний додаток — додаток, який створюється з можливістю легко і просто налагоджувати його. Ось основні поради, які допоможуть вам зменшити кількість помилок під час розробки програм.
DataSet: = GetData; //Отримання даних для сортування. TestResultSet:= Sort_Tortoise(DataSet); //Повільно та надійно. ResultSet:= Sort_Hare(DataSet); //Швидко та ризиковано. якщо CompareData(ResultSet, TestResultSet) then //Результати збіглися? Raise Exception.Create('Сортування в DataSorting некоректна');
Якщо визначено символ Debug, код набуває такого вигляду.
DataSet: = GetData; //Отримання даних для сортування. TestResultSet: = Sort_Tortoise (DataSet); //Повільно та надійно. ResultSet: = Sort Hare (DataSet); //Швидко та ризиковано. якщо CompareData(ResultSet, TestResultSet) then //Результати збіглися? Raise Exception.Create('Сортування в DataSorting некоректна');
Якщо символ Debug не визначено під час створення комерційного варіанта програми, код вироджується в алгоритм швидкого сортування без додаткових перевірок
DataSet: = GetData; //Отримання даних для сортування. Re5ultSet:= Sort_Hare(DataSet); //Швидко та ризиковано.
Як бачите, використання умовної компіляції — простий спосіб створення як налагоджувальної, так і комерційної версій програми Ви можете визначити символ умовної компіляції двома шляхами. Перший - глобальне визначення символу в опціях проекту. Виберіть Project/Options та у діалоговому вікні ProjectOptions, у вкладці Directories/Conditionals, введіть символ у полі Conditional defi nes. На рис 2.1 показано визначення двох символів (Debug та Alpha) Клацніть на кнопці ОК для підтвердження вашого введення
Порада: Змінивши символи умовної компіляції, перекомпілюйте проект за допомогою команди Project/Build All, щоб врахувати внесені зміни.
Інший метод визначення символу умовної компіляції - вставити у вихідний код директиву.
Ймовірно, ви не захочете возитися з кожним файлом, що входить до проекту, і віддасте перевагу визначити символ глобально. Однак можлива ситуація, коли, увімкнувши символ умовної компіляції глобально, ви захочете вимкнути його в деяких модулях . Для цього використовуйте у файлі директиву
Вона відключає дію директиви Debug, доки не зустрінеться відповідна директива $DEFINE або кінець поточного файлу . Звичайно, ви можете використовувати ці директиви як завгодно часто і в тих місцях, де вважаєте за потрібне. Крім директив умовної компіляції, є ще чимало інших директив, які можуть використовуватися у налагоджувальній версії програми. Я говорю "можуть", оскільки ці директиви можуть внести певні відмінності в код комерційної та тестової версій, так що будьте обережні при їх застосуванні. Ці опції перераховані у вкладці Compiler діалогового вікна Project Options, наведеного на рис. 2.2. 2.1. Використання діалогового вікна Project Options визначення символів умовної компіляції

Нижче наведено опис цих опцій.
Використання директиви Assert Оператор Assert - новий оператор у Delphi 4. Насправді це просто тест на логічну істину/брехню. При використанні цього оператора ви переконуєтесь, що логічний вираз істинний, якщо при виконанні вираз стає хибним, генеруєтьсявиняткова ситуація. Синтаксис використання оператора такий:
Ви можете використовувати перевірку, наприклад, на початку процедури для з'ясування коректності параметрів, як показано нижче.
procedure Foo(Count: Cardinal); begin Assert(Count end;
Якщо вираз виявиться хибним, з'явиться повідомлення про помилку, подібне до показаного на рис. 2.3. Звичайно ж, у вас вже крутиться на мові питання, чим це відрізняється від конструкції if. else. Справа в тому, що керувати генерацією коду для оператора Assert дуже легко та просто за допомогою директиви компілятора. Для використання описаних можливостей використовуйте директиву $ASSERTIONS ON або $С+, а для відключення дії Assert—$ASSERTIONS OFF або $С - (при цьому компілятор ігнорує оператори Assert і код для них не генерується).

Оскільки ви явно захочете включити цю можливість у налагоджувальну версію та виключити її з комерційної, використовуйте код, подібний до наведеного нижче.
Який тип виразу може використовуватися в операторі Assert? Будь-якого (звичайно, якщо воно повертає логічне значення). Однак тут є свої маленькі підводні камінці, про які легко подряпатися. Уявіть собі, що у вас є деяка функція, наприклад, яка з'ясовує, скільки разів вона була викликана.
function CountMe: Integer; const ReferenceCount: Integer = 0; begin Inc(ReferenceCount); Result:= ReferenceCount; end;
Припустимо, що ви викликаєте в оператора Assert. Таким чином, у комерційній версії, яка ігнорує всі оператори Assert, кількість викликів функції буде не такою, як у версії налагодження. Тож будьте уважні та обережні.
Модульне тестування Тема модульного тестування велика і різноманітна, іписати про неї можна багато, але я обмежуся буквально кількома словами. До речі, коли йдеться про модульне тестування, слово модуль не має відношення до концепції модулів Delphi і має на увазі функцію, підсистему або інший добре визначений програмний модуль. Коротко кажучи, ідея модульного тестування полягає в розбивці програми на функціональні одиниці та тестуванні кожної з них окремо. Це часто означає написання одного або декількох невеликих додатків-оболонок, мета створення яких - відпрацювати один із модулів вашого додатка. Ваше завдання - виявити всі можливі помилки, оскільки повідомлення про внутрішні помилки програми, допустимі в тестових версіях, неприпустимі в комерційних. Повідомлення про помилки під час роботи комерційної версії програми еквівалентні повідомленню, наведеному на рис. 2.4
