Тема. Тестування «білого ящика»
План
1. Особливості тестування.
2. Переваги та недоліки тестування.
3. Способи тестування.
1.
Особливості тестування «білого ящика»
Відома: внутрішня структура програми.
Досліджуються: внутрішні елементи програми і зв'язки між ними.
Об'єктом
тестування тут є не зовнішня, а
внутрішня поведінка програми. Перевіряється
коректність побудови всіх елементів програми і правильність їх взаємодії один з
одним. Зазвичай аналізуються
керуючі зв'язки елементів, рідше — інформаційні зв'язки. Тестування
за принципом "білого ящика" характеризується ступенем, в якому тести виконують або покривають логіку
(вихідний текст)
програми.
Зазвичай
тестування «білого ящика» засноване на аналізі керуючої структури програми. Програма вважається повністю
перевіреною, якщо проведено вичерпне тестування
маршрутів (шляхів) її графа управління.
У цьому випадку формуються тестові варіанти,
в яких:
v Гарантується перевірка всіх незалежних
маршрутів програми.
v Знаходяться гілки True, False для всіх
логічних рішень.
v Виконуються всі цикли (в межах їх кордонів і діапазонів).
v Аналізується правильність внутрішніх структур
даних.
2. Переваги
та недоліки тестування
Недоліки тестування
«білого ящика»:
ü Кількість незалежних маршрутів може бути дуже
велика.
ü Повне тестування маршрутів не гарантує
відповідності програми вихідним вимогам до неї.
ü У програмі можуть бути пропущені деякі
маршрути.
ü Не можна виявити помилки, поява яких залежить
від даних.
Переваги тестування
«білого ящика» пов’язані з
тим, що принцип «білого ящика» дозволяє врахувати особливості програмних помилок:
ü Кількість помилок мінімально в «центрі» і
максимально на «периферії» програми.
ü Попередні припущення про ймовірність потоку
керування або даних у програмі часто бувають некоректними. У результаті типовим може стати
маршрут, модель обчислень за яким опрацьована слабо.
ü Під час запису алгоритму програмного забезпечення у вигляді
тексту на мові програмування можливе внесення типових помилок
трансляції (синтаксичних і семантичних).
ü Деякі результати в програмі залежать не від
вихідних даних, а від внутрішніх станів програми.
Кожна з
цих причин є аргументом для проведення тестування за принципом «білого ящика».
3. Способи тестування
Спосіб тестування базового шляху
Тестування базового шляху — це спосіб, який заснований на принципі «білого ящика». Автор цього способу — Том Мак-Кейб (1976).
Спосіб тестування базового шляху дає
можливість:
ü Отримати оцінку комплексної складності
програми.
ü Використовувати цю оцінку для визначення
необхідної кількості тестових варіантів.
Тестові
варіанти розробляються для перевірки базових безліч шляхів (маршрутів) у програмі. Вони гарантують одноразове виконання
кожного оператора програми під час тестування.
Потоковий граф
Для
представлення програми використовується потоковий граф.
Перерахуємо його особливості:
ü Граф будується відображенням керуючої
структури програми. У ході
відображення закривають дужки умовних операторів і операторів циклів
розглядають як окремих (фіктивних) операторів.
ü Вузли (вершини) потокового графу відповідають лінійним ділянкам програми, включають
один або кілька операторів програми.
ü Дуги потокового графу відображають потік управління у програмі
(передачі управління між операторами). Дуга
— це орієнтоване ребро.
Розрізняють
операторні і предикатні вузла. З
операторного вузла виходить одна дуга, а з предикатного — дві дуги.
Предикативні вузли відповідають простим умовам у програмі. Складена умова програми відображається в декількох
предикатних вузлах. Складовим називають умова, в якому
використовується одна чи кілька булевих операцій.
Замкнуті області, утворені
дугами і вузлами, називають регіонами.
Навколишнє середовище граф розглядається як додатковий регіон.
Цикломатична складність.
Цикломатична складність — метрика програмного
забезпечення, яка забезпечує кількісну оцінку логічної складності програми.
У способі тестування базового шляху цикломатична
складність визначає:
ü Кількість незалежних шляхів у базовій програми.
ü Верхню оцінку кількості тестів, яке гарантує
одноразове виконання всіх операторів.
Незалежним
називається будь-який шлях, який вводить новий оператор
обробки або нову умову. У
термінах потокового графа незалежний шлях повинен містити дугу, що не входить в
раніше певні шляхи.
Кроки способу тестування базового шляху.
На основі тексту програми
формується потоковий граф:
1. Нумеруються оператори тексту.
2. Проводиться відображення пронумерованого
тексту програми у вузли і вершини потокового графа.
Визначається цикломатична складність потокового графа — по кожній з
трьох формул.
Готуються тестові
варіанти, які ініціюють виконання кожного шляху.
Кожен
тестовий варіант формується в наступному вигляді:
Вихідні дані (ВД):
Очікувані результати (ОЧ. РЕЗ.):
Вихідні
дані повинні вибиратися так, щоб предикатні вершини забезпечували потрібні
перемикання — запуск тільки тих операторів, які перераховані в конкретному
шляху, причому в необхідному порядку.
Реальні
результати кожного тестового варіанта порівнюються з очікуваними результатами. Після виконання всіх тестових
варіантів гарантується, що всі оператори програми виконані щонайменше один раз.
Важливо
відзначити, що деякі незалежні шляху не можуть перевірятися ізольовано. Такі шляхи повинні перевірятися під час тестування іншого шляху (як частина іншого тестового
варіанта).
Способи тестування умов
Мета
цього сімейства способів тестування — будувати тестові варіанти для перевірки
логічних умов програми. При цьому
бажано забезпечити охоплення операторів з усіх гілок програми.
Спосіб
тестування умов орієнтований на тестування кожної умови в програмі. Методика тестування умов мають дві гідності. По-перше, досить просто виконати вимірювання
тестового покриття умови. По-друге, тестове покриття умов у програмі — це
фундамент для генерації додаткових тестів програми.
Метою
тестування умов є визначення не тільки помилок в умовах, але й інших помилок у програмах. Якщо
набір тестів для програми A ефективний для виявлення помилок в умовах, що
містяться в A, то ймовірно, що це набір також ефективний для виявлення інших
помилок в A. Крім того, якщо
методика тестування ефективна для виявлення помилок в умовах, то ймовірно, що
ця методика буде ефективна для виявлення помилок в програмі.
Тестування циклів.
Цикл —
найбільш поширена конструкція алгоритмів, використовуваних в ПЗ. Тестування циклів проводиться за
принципом «білого ящика», під час перевірки циклів
основна увага звертається на правильність
конструкцій циклів.
Розрізняють
4 типи циклів: прості, вкладені, об'єднані, неструктуровані.
Прості цикл.
Для
перевірки циклів з кількістю повторень n може використовуватися
один з наступних наборів тестів:
·
прогін всього
циклу;
·
тільки один
прохід циклу;
·
два проходи
циклу;
·
m проходів
циклів, де m <n;
·
n —1, n, n +1
проходів циклу.
Вкладені цикли
Зі збільшенням рівня вкладеності циклів кількість
можливих шляхів різко зростає. Це призводить до нездійсненної
кількості тестів. Для скорочення кількості тестів
застосовується спеціальна методика, в якій використовуються такі поняття, як
осяжний і вкладені цикли.
Кроки тестування:
ü Вибирається самий внутрішній цикл. Встановлюються мінімальні значення
параметрів всіх інших циклів.
ü Для внутрішнього циклу проводяться тести
простого циклу. Додаються тести
для виключених значень і значень, що виходять за межі робочого діапазону.
ü Переходять у наступний за порядком осяжний
цикл. Виконують його тестування. При цьому зберігаються мінімальні
значення параметрів для всіх зовнішніх (осяжний) циклів і типові значення для
всіх вкладених циклів.
ü Робота триває до тих пір, поки не будуть
протестовані всі цикли.
Об'єднані цикли
Якщо
кожен із циклів незалежний від інших, то використовується техніка тестування простих циклів. За наявності залежності (наприклад, кінцеве
значення лічильника першого циклу використовується як початкове значення
лічильника другого циклу) використовується методика вкладених циклів.
Неструктуровані цикли
Неструктуровані
цикли тестуванню не підлягають. Цей
тип циклів має бути перероблений за допомогою структурованих програмних
конструкцій.
Питання для самоконтролю:
1. Назвіть особливості
тестування «білого ящика».
2. Які переваги тестування?
3. Які недоліки тестування?
4. Які Ви знаєте способи тестування?