Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Математики 1 курс 2 семестр.doc
Скачиваний:
7
Добавлен:
19.11.2019
Размер:
1.8 Mб
Скачать

6. Тестування програми

Існує думка, що мета тестування - переконатися в правильності роботи програми. Це поширена помилка. Насправді мета тестування - знайти в програмі помилки.

Різниця між цими підходами («переконатися в правильності» або «знайти помилки») не тільки у формулюванні. Різниця - у психологічному підході до складання тестів.

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

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

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

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

Всі методи тестування можна розділити на дві групи: тестування за принципом «чорного ящика» і за принципом «білого ящика».

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

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

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

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

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

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

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

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

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

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