You are on page 1of 6

Лабораторна робота №2

Тема: Тестування методом «Білого ящика».

Мета: отримати практичні навички виконання методів аналізу коду: визначення


цикломатичної складності потокового графу, побудувати множини лінійних шляхів.

1 Теоретичний розділ.

1.1 Визначення потокового графа.

Для представлення програми використовується потоковий граф. Особливості потокового графа:

1. Граф будується відображенням структури програми, що управляє. При відображенні


структури закриваючі дужки умовних операторів і операторів циклів (end if; end loop)
розглядаються як окремі (фіктивні) оператори.
2. 2. Вузли (вершини) потокового графа відповідають лінійним ділянкам програми,
включають один або декілька операторів програми.
3. 3. Дуги потокового графа відображують потік управління в програмі (передачі управління
між операторами). Дуга — це орієнтоване ребро.
4. 4. Розрізняють операторні і предикативні вузли. З операторного вузла виходить одна дуга, а
з предикативного — дві дуги.
5. Предикативні вузли відповідають простим умовам в програмі. Складена умова програми
відображується в декілька предикативних вузлів. Складеним називають умову, в якій
використовується одна або декілька булевих операцій (OR, AND).
6. Замкнуті області, утворені дугами і вузлами, називають регіонами.
7. Що оточує граф є середовище як додатковий регіон.

Наприклад, фрагмент програми

if а OR b

then x

else в

end if;

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


відображується в перетворений потоковий граф (рис. 2).

Рисунок 1. Пряме відображення в потоковий граф


Рисунок 2. Перетворений потоковий граф

Наприклад, показаний тут граф має три регіони — Rl, R2, R3.

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

1. виконувати доки немає EOF


2. читати запис;
3. якщо запис пустий;
4. то видалити запис;
5. інакше якщо поле а >= поля b
6. то видалити b;
7. інакше видалити а;
7а кінець якщо;
7а кінець якщо;
7b кінець виконувати;
8. кінець стискування;

Рисунок 3. Перетворений потоковий граф процедури стискування

Цей потоковий граф має чотири регіони.

1.2 Порядок визначення цикломатичної складності.

Цикломатична складність - метрика ПЗ, яка забезпечує кількісну оцінку логічної складності
програми. У способі тестування базового шляху цикломатична складність визначає:
 кількість незалежних шляхів в базовій множини програми;
 верхню оцінку кількості тестів, яка гарантує однократне виконання всіх операторів.
Незалежним називається будь-який шлях, який вводить нового оператора обробки або нову
умову. В термінах потокового графа незалежний шлях повинен містити дугу, що не входить в
раніше відомі шляхи.

Шлях починається в початковому вузлі, а закінчується в кінцевому вузлі графа. Незалежні


шляхи формуються в порядку від найкоротшого до найдовшого.

Перерахуємо незалежні шляхи для потокового графа з прикладу 1, що перед цим розглядали:

Шлях 1: 1-8.

Шлях 2: 1-2-3-7а-7b-1-8.

Шлях 3: 1-2-4-5-7а-7b-1-8.

Шлях 4: 1-2-4-6-7а-7b-1-8.

Відмітимо, що кожна нова дорога включає нову дугу.

Всі незалежні шляхи графа утворюють базову множину.

Властивості базової множини:

1) тести, що забезпечують його перевірку, гарантують:


 однократне виконання кожного оператора;
 виконання кожної умови по True-гілки і по False-гілки;

2) потужність базової множини дорівнює цикломатичної складності потокового графа.

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

Цикломатична складність обчислюється одним з трьох способів:

1) цикломатична складність дорівнює кількості регіонів потокового графа;

2) цикломатична складність визначається по формулі

V(G)=E-N+2, де Е - кількість дуг, N - кількість вузлів потокового графа;

3) цикломатична складність формується по формулі V(G)=p+ 1, де р - кількість предикативних


вузлів в потоковому графові G.

Обчислимо цикломатичну складність графа з прикладу 1, який розглядали, кожним з трьох


способів:

1) потоковий граф має 4 регіони;

2) V(G) = 11 дуг - 9 вузлів + 2 = 4;

3) V(G) = 3 предикативних вузла +1=4.


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

2 Практичний розділ

Програма, що підлягає тестуванню, складається відповідно до завдання для лабораторної роботи


Виконання роботи передбачає наступну послідовність дій:
1. Побудова потокового графа програми;
2. Визначення цикломатичної складність потокового графа;
3. Побудова базової множини незалежних лінійних шляхів;
4. Складання тестових варіантів;
5. Виконання тестування;
6. Оформлення результатів тестування.
Якщо в програмі немає помилок, то штучно вводяться помилки для перевірки ефективності
тестування
У звіт по лабораторній роботі включаються:
1. Текст програми;
2. Потоковий граф;
3. Розрахунок цикломатичної складності;
4. Множина незалежних лінійних шляхів;
5. Тестові варіанти;
6. Результати тестування.
7. У висновках до роботи описати помилки – мутації, якщо вони були виявлені.
Зазначити шляхи їх усунення.

Кожен тест необхідно супроводити відповідним скрін-шотом.

2.2 Завдання для самостійного виконання

1. Даний масив A ненульових цілих чисел розмірністю 10. Вивести значення


першого з тих його елементів AK, які менші від останнього елементу. Якщо таких
елементів немає, то вивести 0.
2. Даний цілочисельний масив A розміру 10. Вивести порядковий номер
останнього з тих його елементів AK, які більші від першого, але менші від
останнього елементу. Якщо таких елементів немає, то вивести 0.
3. Даний цілочисельний масив розміру N. Знайти кількість різних елементів в
даному масиві.
4. Дано число R і масив розміру N. Знайти два сусідні елементи масиву, сума
яких найбільш близька до R, і вивести ці елементи в порядку зростання їх індексів.
5. Даний масив розміру N. Знайти кількість ділянок, на яких його елементи
зростають.
6. Даний масив розміру N. Знайти номери тих елементів масиву, які більше свого
правого сусіда, і кількість таких елементів. Знайдені номери виводити в порядку їх
зростання.
7. Даний масив розміру N. Знайти номери тих елементів масиву, які більше свого
лівого сусіда, і кількість таких елементів. Знайдені номери виводити в порядку їх
спадання.
8. Даний масив розміру N і цілі числа K і L (1 < K < L < N). Знайти суму
елементів масиву з номерами від K до L включно.
9. Даний масив розміру N і цілі числа K і L (1 < K < L < N). Знайти середнє
арифметичне елементів масиву з номерами від K до L включно.
10.Даний масив розміру N і цілі числа K і L (1 < K < L < N). Знайти середнє
арифметичне всіх елементів масиву, окрім елементів з номерами від K до L
включно.
11.Даний цілочисельний масив розміру N. Перевірити, чи чергуються в нім парні
і непарні числа. Якщо чергуються, то вивести 0, якщо ні, то вивести порядковий
номер першого елементу, що порушує закономірність.
12.Даний масив ненульових цілих чисел розміру N. Перевірити, чи чергуються в
нім позитивні і негативні числа. Якщо чергуються, то вивести 0, якщо ні, то вивести
порядковий номер першого елементу, що порушує закономірність.
13.Даний масив A розміру N. Знайти максимальний елемент з його елементів з
непарними номерами: A1, A3, A5 . .
14.Даний масив розміру N. Знайти номер його першого локального мінімуму
(локальний мінімум — це елемент, який менше будь-якого зі своїх сусідів).
15.Даний масив розміру N. Знайти максимальний з його локальних мінімумів
(локальний мінімум — це елемент, який менше будь-якого зі своїх сусідів).
16.Даний масив розміру N. Знайти мінімальний з його локальних максимумів
(локальний максимум — це елемент, який більше будь-якого зі своїх сусідів).
17.Даний масив розміру N. Знайти кількість ділянок, на яких його елементи
убувають.
18.Даний масив розміру N. Знайти кількість його проміжків монотонності (тобто
ділянок, на яких його елементи зростають або убувають).
19.Дано число R і масив A розміру N. Знайти елемент масиву, який найбільш
близький до R (тобто такий елемент AK, для якого величина |AK - R| є мінімальною).
20.Даний цілочисельний масив розміру N, всі елементи якого впорядковані (за
збільшенням або по убуванню). Знайти кількість різних елементів в даному масиві.
21.Даний цілочисельний масив розміру N, що містить рівно два однакові
елементи. Знайти номери однакових елементів і вивести ці номери в порядку
зростання.
22.Даний масив розміру N. Знайти номери двох найближчих елементів з цього
масиву (тобто елементів з найменшим модулем різниці) і вивести ці номери в
порядку зростання.
23.Дано число R і масив розміру N. Знайти два різні елементи масиву, сума яких
найбільш близька до R, і вивести ці елементи в порядку зростання їх індексів.

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

1. Що таке потокой граф?


2. Яка різниця між предикатними і операторними вузлами?
3. Як визначити регіони потокового графа або цикломатичну складність?
4. Які основні властивості та функції базової множини?
5. Як обчислити цикломатичну складність графа?
6. Що таке дуги, вузли, шляхи?
7. Яка різниця між шляхом і дугою?
8. Які способи обчислення цикломатичну складність графа, ви знаєте?
9. Що таке незалежний шлях потокового графа?

You might also like