Файл: Практична робота №2.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 19.04.2024

Просмотров: 9

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Практична робота №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. кількість таких елементів. Знайдені номери виводити в порядку їх спадання.

  9. Даний масив розміру N і цілі числа K і L (1 < K < L < N). Знайти суму елементів масиву з номерами від K до L включно.

  10. Даний масив розміру N і цілі числа K і L (1 < K < L < N). Знайти середнє арифметичне елементів масиву з номерами від K до L включно.

  11. Даний масив розміру N і цілі числа K і L (1 < K < L < N). Знайти середнє арифметичне всіх елементів масиву, окрім елементів з номерами від K до L включно.

  12. Даний цілочисельний масив розміру N. Перевірити, чи чергуються в нім парні і непарні числа. Якщо чергуються, то вивести 0, якщо ні, то вивести порядковий номер першого елементу, що порушує закономірність.

  13. Даний масив ненульових цілих чисел розміру N. Перевірити, чи чергуються в нім позитивні і негативні числа. Якщо чергуються, то вивести 0, якщо ні, то вивести порядковий номер першого елементу, що порушує закономірність.

  14. Даний масив A розміру N. Знайти максимальний елемент з його елементів з непарними номерами: A1, A3, A5 . .

  15. Даний масив розміру N. Знайти номер його першого локального мінімуму (локальний мінімум — це елемент, який менше будь-якого зі своїх сусідів).

  16. Даний масив розміру N. Знайти максимальний з його локальних мінімумів (локальний мінімум — це елемент, який менше будь-якого зі своїх сусідів).

  17. Даний масив розміру N. Знайти мінімальний з його локальних максимумів (локальний максимум — це елемент, який більше будь-якого зі своїх сусідів).

  18. Даний масив розміру N. Знайти кількість ділянок, на яких його елементи убувають.

  19. Даний масив розміру N. Знайти кількість його проміжків монотонності (тобто ділянок, на яких його елементи зростають або убувають).

  20. Дано число R і масив A розміру N. Знайти елемент масиву, який найбільш близький до R (тобто такий елемент AK, для якого величина |AK - R| є мінімальною).

  21. Даний цілочисельний масив розміру N, всі елементи якого впорядковані (за збільшенням або по убуванню). Знайти кількість різних елементів в даному масиві.

  22. Даний цілочисельний масив розміру N, що містить рівно два однакові елементи. Знайти номери однакових елементів і вивести ці номери в порядку зростання.

  23. Даний масив розміру N. Знайти номери двох найближчих елементів з цього масиву (тобто елементів з найменшим модулем різниці) і вивести ці номери в порядку зростання.

  24. Дано число R і масив розміру N. Знайти два різні елементи масиву, сума яких найбільш близька до R, і вивести ці елементи в порядку зростання їх індексів.


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

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

    2. Яка різниця між предикатними і операторними вузлами?

    3. Як визначити регіони потокового графа або цикломатичну складність?

    4. Які основні властивості та функції базової множини?

    5. Як обчислити|вичислятимемо| цикломатичну| складність графа?

    6. Що таке дуги, вузли, шляхи?

    7. Яка різниця між шляхом і дугою?

    8. Які способи обчислення цикломатичну| складність графа, ви знаєте?

    9. Що таке незалежний шлях потокового графа?