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

Види тестування

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

• постановка задачі для тесту;

• проектування тесту;

• написання тестів;

• тестування тестів;

• виконання тестів;

• вивчення результатів тестування.

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

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

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

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

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

IF (A + B + C) / 3 = A,

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: