Завдання
1
.
За заданою блок-схемою алгоритму створити
програму, що реалізує цей алгоритм,
побудувати КГП та розробити тести, що
задовольняють наведені вище критерії,
виписати шляхи.
2. З поміж наведених нижче рисунків, обрати ті на яких зображено траєкторії покриття операторів, гілок, шляхів, умов, умо-гілок:
А) Б) В)
3) Для функції GD та її модифікації побудувати блок-схему та на ній відзначити шляхи для кожного з критеріїв які наведені в теоретичній частині лабораторної роботи.
Лабораторна 2. Тестування потоків даних
Група критеріїв
для даного методу побудована на принципах
досяжності й доступу до змінних. Будемо
вважати, що вираз
використовує змінні
для обчислювального процесу (Computational
use), що позначається як c-use, при цьому
даний вираз є визначення змінної у (def
у). Будемо вважати, що вираз
використовує змінні
як предикати (Predicate-use), що позначається
як p-use.
Шлях
вважається таким, що не містить визначень
змінної
,
якщо в ньому немає
.
Для вершини
та змінної
,
такої що
вираз
позначає набір
всіх вершин
таких, що
і шлях від
до
не містить визначень
.
Для вершини
та змінної
,
такої що
вираз
позначає набір
всіх ребер
,
таких що
і шлях від
до
не містить визначень
.
Розглянемо критерії тестування потоків даних програми.
Критерій “all-defs”
Даний критерій вимагає створення набору тестів, які б містили для кожної вершини і кожної змінної як мінімум один шлях, що не містить визначень х від до елемента з або . Критерій забезпечує перевірку правильної ініціалізації змінних, але не дає гарантій їхнього правильного використання в обчислювальному процесі. Це завдання ставиться поетапно перед наступними критеріями.
Критерій “all p-uses“
За даним критерієм вимагається створення набору тестів, які б містили для кожної вершини і кожної змінної як мінімум один шлях, що не містить визначень від до елемента .
Критерій “all c-uses“
Даний критерій вимагає створення набору тестів, які б містили для кожної вершини і кожної змінної як мінімум один шлях, що не містить визначень від до елемента .
Ці два критерії гарантують перевірку того факту, що використовувані змінні в предикатних виразах та в обчисленнях були проініціалізовані.
Критерій “all c-uses / some p-uses“
Наступне завдання полягає у відповіді на питання: чи використані всі ініціалізовані змінні в обчисленнях або хоча б у предикатних виразах. Критерій all c-uses / some p-uses вимагає створення набору тестів, які б містили для кожної вершини і кожної змінної як мінімум один шлях, що не містить визначень від до елемента або, якщо - порожня множина, хоча б шлях, що не містить визначень від до елемента з .
Критерій “all p-uses / some c-uses“
Даний критерій аналогічний попередньому, з тією різницею, що в ньому перевіряються входження шуканої змінної в предикатні вирази, а якщо таких не виявлено, то в обчислення.
Даний критерій вимагає створення набору тестів, які б містили для кожної вершини і кожної змінної як мінімум один шлях, що не містить визначень від до елемента або, якщо - порожня множина, хоча б шлях, що не містить визначень від до елемента з .
Критерій “all uses“ (всі використання)
Даний критерій є узагальнюючим для останніх двох критеріїв. Він вимагає створення набору тестів, які б містили для кожної вершини і кожної змінної як мінімум один шлях, що не містить визначень від до елемента і до всіх елементів з
Критерій “all du-paths”
Найбільшу повноту покриття забезпечує критерій all du-paths, він враховує всі можливі використання зазначеної змінної. Даний критерій вимагає створення набору тестів, які б містили для кожної і кожної змінної всі du-шляхи даного визначення.
Приклади. Проілюструємо побудову графу потоку даних. Розглянемо функцію:
void MinMax (int& Min, int& Max) { int Hilf; if (Min > Max) { Hilf = Max; Max = Min; Min = Hilf; } }
|
|
Для кожного вузла на графі управління зазначена відповідність із типовими структурами потоку даних (визначення, предикатні використання, використання в обчислювальному процесі). Розглянемо відповідності між вершинами потоку управління та потоку даних, що представлені в таблиці:
Як було зазначене вище, предикатне використання відповідає ребрам графу:
Побудуємо шляхи визначення-використання (предикатне та в обчислювальному процесі ):
Отже, були отримані всі необхідні дані для проведення структурного тестування на основі потоку даних.
