ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.04.2024
Просмотров: 8
Скачиваний: 0
Практична робота №2
Тема: Тестування методом «Білого ящика».
Мета: отримати практичні навички виконання методів аналізу коду: визначення цикломатичної складності потокового графу, побудувати множини лінійних шляхів.
1 Теоретичний розділ.
1.1 Визначення потокового графа.
Для представлення програми використовується потоковий граф. Особливості потокового графа:
-
Граф будується відображенням структури програми, що управляє. При відображенні структури закриваючі|зачиняти| дужки умовних операторів і операторів циклів (end| if|; end| loop|) розглядаються|розглядують| як окремі (фіктивні) оператори.
-
2. Вузли (вершини) потокового графа відповідають лінійним ділянкам програми, включають один або декілька операторів програми.
-
3. Дуги потокового графа відображують|відображають| потік управління в програмі (передачі управління між операторами). Дуга — це орієнтоване ребро.
-
4. Розрізняють операторні і предикативні вузли. З|із| операторного вузла виходить одна дуга, а з|із| предикативного — дві дуги.
-
Предикативні вузли відповідають простим умовам в програмі. Складена|складова| умова програми відображується|відображає| в декілька предикативних вузлів. Складеним|складовим| називають умову, в якій використовується одна або декілька булевих операцій (OR|, AND|).
-
Замкнуті області, утворені дугами і вузлами, називають регіонами.
-
Що оточує граф є середовище як додатковий регіон.
Наприклад, фрагмент програми
if| а OR| b |
then| x |
else| в|у|
end| if|;
замість прямого відображення в потоковий граф вигляду|виду|, показаного на Рисунку 1., відображується|відображає| в перетворений потоковий граф (рис. 2).
Рисунок 1. Пряме відображення в потоковий граф
Рисунок 2. Перетворений потоковий граф Наприклад, показаний тут граф має три регіони — Rl|, R2|, R3|.
Приклад 1. Розглянемо процедуру стискування:
-
виконувати доки|поки| немає EOF|
-
читати запис;
-
якщо запис пустий;|
-
то видалити|віддаляти| запис;|
-
інакше якщо поле а >= поля b
-
|то видалити|віддаляти| b;
-
інакше видалити|віддаляти| а;
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 Практичний розділ
Програма, що підлягає тестуванню, складається відповідно до завдання|задавання| для лабораторної роботи
Виконання роботи передбачає наступну|слідуючу| послідовність дій:
-
Побудова|шикування| потокового графа програми;
-
Визначення цикломатичної| складність потокового графа;
-
Побудова|шикування| базової множини незалежних лінійних шляхів|колій|;
-
Складання тестових варіантів;
-
Виконання тестування;
-
Оформлення результатів тестування.
Якщо в програмі немає помилок, то штучно вводяться|запроваджують| помилки для перевірки ефективності тестування
У звіт по лабораторній роботі включаються:
-
Текст програми;
-
Потоковий граф;
-
Розрахунок цикломатичної| складності;
-
Множина незалежних лінійних шляхів|колій|;
-
Тестові варіанти;
-
Результати тестування.
-
У висновках до роботи описати помилки – мутації, якщо вони були виявлені. Зазначити шляхи їх усунення.
Кожен тест необхідно супроводити відповідним скрін-шотом.
2.2 Завдання для самостійного виконання
-
Даний масив A ненульових цілих чисел розмірністю 10. Вивести значення першого з тих його елементів AK, які менші від останнього елементу. Якщо таких елементів немає, то вивести 0.
-
Даний цілочисельний масив A розміру 10. Вивести порядковий номер останнього з тих його елементів AK, які більші від першого, але менші від останнього елементу. Якщо таких елементів немає, то вивести 0.
-
Даний цілочисельний масив розміру N. Знайти кількість різних елементів в даному масиві.
-
Дано число R і масив розміру N. Знайти два сусідні елементи масиву, сума яких найбільш близька до R, і вивести ці елементи в порядку зростання їх індексів.
-
Даний масив розміру N. Знайти кількість ділянок, на яких його елементи зростають.
-
Даний масив розміру N. Знайти номери тих елементів масиву, які більше свого правого сусіда, і кількість таких елементів. Знайдені номери виводити в порядку їх зростання.
-
Даний масив розміру N. Знайти номери тих елементів масиву, які більше свого лівого сусіда, і
-
кількість таких елементів. Знайдені номери виводити в порядку їх спадання.
-
Даний масив розміру N і цілі числа K і L (1 < K < L < N). Знайти суму елементів масиву з номерами від K до L включно.
-
Даний масив розміру N і цілі числа K і L (1 < K < L < N). Знайти середнє арифметичне елементів масиву з номерами від K до L включно.
-
Даний масив розміру N і цілі числа K і L (1 < K < L < N). Знайти середнє арифметичне всіх елементів масиву, окрім елементів з номерами від K до L включно.
-
Даний цілочисельний масив розміру N. Перевірити, чи чергуються в нім парні і непарні числа. Якщо чергуються, то вивести 0, якщо ні, то вивести порядковий номер першого елементу, що порушує закономірність.
-
Даний масив ненульових цілих чисел розміру N. Перевірити, чи чергуються в нім позитивні і негативні числа. Якщо чергуються, то вивести 0, якщо ні, то вивести порядковий номер першого елементу, що порушує закономірність.
-
Даний масив A розміру N. Знайти максимальний елемент з його елементів з непарними номерами: A1, A3, A5 . .
-
Даний масив розміру N. Знайти номер його першого локального мінімуму (локальний мінімум — це елемент, який менше будь-якого зі своїх сусідів).
-
Даний масив розміру N. Знайти максимальний з його локальних мінімумів (локальний мінімум — це елемент, який менше будь-якого зі своїх сусідів).
-
Даний масив розміру N. Знайти мінімальний з його локальних максимумів (локальний максимум — це елемент, який більше будь-якого зі своїх сусідів).
-
Даний масив розміру N. Знайти кількість ділянок, на яких його елементи убувають.
-
Даний масив розміру N. Знайти кількість його проміжків монотонності (тобто ділянок, на яких його елементи зростають або убувають).
-
Дано число R і масив A розміру N. Знайти елемент масиву, який найбільш близький до R (тобто такий елемент AK, для якого величина |AK - R| є мінімальною).
-
Даний цілочисельний масив розміру N, всі елементи якого впорядковані (за збільшенням або по убуванню). Знайти кількість різних елементів в даному масиві.
-
Даний цілочисельний масив розміру N, що містить рівно два однакові елементи. Знайти номери однакових елементів і вивести ці номери в порядку зростання.
-
Даний масив розміру N. Знайти номери двох найближчих елементів з цього масиву (тобто елементів з найменшим модулем різниці) і вивести ці номери в порядку зростання.
-
Дано число R і масив розміру N. Знайти два різні елементи масиву, сума яких найбільш близька до R, і вивести ці елементи в порядку зростання їх індексів.
Контрольні питання
-
Що таке потокой граф?
-
Яка різниця між предикатними і операторними вузлами?
-
Як визначити регіони потокового графа або цикломатичну складність?
-
Які основні властивості та функції базової множини?
-
Як обчислити|вичислятимемо| цикломатичну| складність графа?
-
Що таке дуги, вузли, шляхи?
-
Яка різниця між шляхом і дугою?
-
Які способи обчислення цикломатичну| складність графа, ви знаєте?
-
Що таке незалежний шлях потокового графа?