Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
7
Добавлен:
30.05.2020
Размер:
134.66 Кб
Скачать

4 Фази тестування

Реалізація тестування розділяється на три етапи:

Створення тестового набору (test suite) шляхом ручної розробки або автоматичної генерації для конкретного середовища тестування (testing environment).

Прогін програми на тестах, керований тестовим монітором (test monitor, test driver [IEEE Std 829-1983]) з одержанням протоколу результатів тестування (test log).

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

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

Простий приклад

Розглянемо питання тестування на прикладі простої програми (Приклад 2.6) мовою С. Текст цієї програми й деяких інших трохи видозмінений з метою зробити ілюстрацію описуваних фактів більше прозорої.

// Функція обчислює ненегативну ступінь n числа x

double Power(double x, int n){

double z=1; int i;

for (i=1;n>=i;i++)

{z = z*x;};

return z;}

2.6.1. Приклад простої програми мовою С

Рис. 2.2. Керуючий граф програми

Керуючий граф програми (КГП) на Рис. 2.2 відображає потік керування програми. Нумерація вузлів графа відповідає кожній з дій програми..

5 Керуючий граф програми

Керуючий граф програми (КГП) - граф G(V,A), де V(V1,... Vm) - безліч вершин (операторів), A(A1,... An) - безліч дуг (керувань), що з'єднують оператори-вершини.

Шлях - послідовність вершин і дуг УГП, у якій будь-яка дуга виходить із вершини Vi і приходить у вершину Vj, наприклад: (3,4,7), (3,4,5,6,4,5,6), (3,4), (3,4,5,6)

Гілка - шлях (V1, V2, ... Vk), де V1 - або перший, або умовний оператор програми, Vk - або умовний оператор, або оператор виходу із програми, а всі інші оператори - безумовні, наприклад: (3,4) (4,5,6,4) (4,7). Шляхи, що розрізняються хоча б числом проходжень циклу - різні шляхи, тому число шляхів у програмі може бути не обмежене. Гілки - лінійні ділянки програми, їх кількість скінченна.

Існують реалізовані й нереалізовані шляхи в програмі, у нереалізовані шляхи у звичайних умовах потрапити не можна.

float H(float x,float y)

{

float H;

1 if (x*x+y*y+2<=0)

2 H = 17;

3 else H = 64;

4 return H*H+x*x;

}

2.7. Приклад опису функції з реалізованими й нереалізованими шляхами

Наприклад, для функції Приклад 2.7 шлях (1,3,4) реалізуємо, шлях (1,2,4) не реалізуємо в умовах нормальної роботи. Але при збоях навіть нереалізований шлях може реалізуватися.

6 Основні проблеми тестування

Розглянемо два приклади тестування:

Нехай програма H(x:int, y:int) реалізована в машині з 64 розрядними словами, тоді потужність множині тестів ||(X,Y)||=2**64

Це означає, що комп'ютеру, що працює на частоті 1Ггц, для прогону цього набору тестів (за умови, що один тест виконується за 100 команд) буде потрібно ~ 3K років.

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

Цей тривіальний приклад вимагає прогону нескінченної множині послідовностей вхідних значень із різними інтервалами спрацьовування схвата (Приклад 2.8).

#include <stdio.h>

/* Прочитати значення датчика */

int ReadSensor(int Sensor)

{

/* ...читання значення датчика */

printf("...reading sensor value\n");

return Sensor;

}

/* Відкрити схват */

void OpenHand()

{

/* ...відкриваємо схват */

printf("...opening hand\n");

}

/* Закрити схват */

void CloseHand()

{

/* ...закриваємо схват */

printf("...closing hand\n");

}

void main(void)

{

int s;

while (1)

{

printf("Enter Sensor value (0/1)");

scanf("%d",&s);

if (ReadSensor(s))

{

OpenHand();

CloseHand();

}

}

}

2.8.1. Фрагмент програми спрацьовування схвата

Рис. 2.3. Тестова послідовність сигналів датчика схвата

Звідси вивід:

  • Тестування програми на всіх вхідних значеннях неможливо.

  • Неможливе тестування й на всіх шляхах.

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

Вимога до тестів - програма на кожному з них повинна зупинятися, тобто не зациклюватися. Чи можна заздалегідь гарантувати останов на будь-якому тесті?

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

Завдання про вибір кінцевого набору тестів (X,Y) для перевірки програми в загальному випадку нерозв'язні.

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

Контрольні питання

  1. Яку аналогію можна провести між формулою та програмним кодом?

  2. В чому полягає сенс формального обґрунтування істинності формул?

  3. До чого зводиться даний метод в найпростішому випадку?

  4. Чи має метод значиму перевагу?

  5. В чому полягає інтерпретаційний підхід?

  6. В чому незручність використання методу?

  7. Що таке налагодження ПЗ?

  8. Що таке процес трансляції програми?

  9. Дайте визначення статичного тестування.

  10. Дайте визначення динамічного тестування.

  11. Хто такий або що таке оракул?

  12. Які методи протоколювання проміжних обчислень ви можете назвати?

  13. Що таке Контрольна точка?

  14. Що таке режим «останову»?

  15. Дайте визначення траси.

  16. Дайте визначення дампу.

  17. Перерахуйте та коротко охарактеризуйте фази тестування.

  18. В чому полягає основна проблема тестування?

  19. Дайте визначення Керуючого графу програми.

  20. Дайте визначення Шляху.

  21. Дайте визначення Гілки – шляху.

12

Соседние файлы в папке Тестування