- •Лабораторна робота №1
- •Теоретичні відомості
- •Порядок виконання роботи
- •Контрольні питання
- •Лабораторна робота №2
- •Теоретичні відомості
- •Порядок виконання роботи
- •Контрольні питання
- •Додаток а
- •Лабораторна робота №3
- •Теоретичні відомості
- •Порядок виконання роботи
- •Контрольні питання
- •Лабораторна робота №4
- •Лабораторна робота №5
Лабораторна робота №5
Тема роботи: тестування методом чорного ящика
Мета роботи: проаналізувати методи тестування програмних продуктів, оцінити різні методи з точки зору детективності й покриваючої здатності тестів.
Теоретичні відомості
Тестування за принципом «чорного ящика»
Одним із способів перевірки програм є стратегія тестування, що називається стратегією "чорного ящика" або тестуванням з управлінням за даними. У цьому випадку програма розглядається як "чорний ящик" і таке тестування має на меті з'ясування обставин, в яких поведінка програми не відповідає специфікації.
Для виявлення всіх помилок в програмі необхідно виконати повне тестування, тобто тестування на всіх можливих наборах даних. Для тих же програм, де виконання команди залежить від передуючих їй подій, необхідно перевірити і всі можливі послідовності.
Очевидно, що побудова вичерпного вхідного тесту для більшості випадків неможлива. Тому, зазвичай виконується "розумне" тестування, при якому тестування програми обмежується прогонами на невеликій підмножині всіх можливих вхідних даних. Природно при цьому доцільно вибрати найбільш підходящу підмножину (підмножина з найвищою ймовірністю виявлення помилок).
Правильно вибраний тест підмножини повинен володіти наступними властивостями:
1) зменшувати, причому більш ніж на одиницю число інших тестів, які повинні бути розроблені для досягнення заздалегідь визначеної мети «прийнятного» тестування;
2) покривати значну частину інших можливих тестів, що в деякій мірі свідчить про наявність або відсутність помилок до і після застосування цієї обмеженої множини значень вхідних даних.
Стратегія "чорного ящика" включає в себе такі методи формування тестових наборів:
• еквівалентне розбиття;
• аналіз граничних значень;
• аналіз причинно-наслідкових зв'язків;
• припущення про помилку.
Еквівалентне розбиття
Основу методу складають два положення:
1. Вихідні дані програми необхідно розбити на кінцеве число класів еквівалентності, так щоб можна було припустити, що кожен тест, що є представником деякого класу, еквівалентний будь-якому іншому тесту цього класу. Іншими словами, якщо тест будь-якого класу виявляє помилку, то припускається, що всі інші тести цього класу еквівалентності теж виявлять цю помилку і навпаки.
2. Кожен тест повинен включати по можливості максимальну кількість різних вхідних умов, що дозволяє мінімізувати загальне число необхідних тестів.
Перше положення використовується для розробки набору "цікавих" умов, які повинні бути протестовані, а друге - для розробки мінімального набору тестів.
Розробка тестів методом еквівалентного розбиття здійснюється в два етапи:
• виділення класів еквівалентності;
• побудова тестів.
Виділення класів еквівалентності
Класи еквівалентності виділяються шляхом вибору кожної вхідної умови (зазвичай це пропозиція або фраза з специфікації) та розбиттям його на дві або більше групи. Для цього використовується таблиця наступного вигляду:
|
Вхідна умова |
Правильні класи еквівалентності |
Неправильні класи еквівалентності |
|
|
|
|
Правильні класи включають правильні дані, неправильні класи - неправильні дані.
Виділення класів еквівалентності є евристичним процесом, однак при цьому існує ряд правил:
• Якщо вхідні умови описують область значень (наприклад «ціле дане може приймати значення від 1 до 999»), то виділяють один правильний клас 1X999 і два неправильних X <1 і X> 999.
• Якщо вхідна умова описує число значень (наприклад, «в автомобілі можуть їхати від одного до шести чоловік»), то визначається один правильний клас еквівалентності і два неправильних (жодного і більше шести осіб).
• Якщо вхідна умова описує безліч вхідних значень і є підстави вважати, що кожне значення програміст трактує особливо (наприклад, «відомі способи пересування на автобусі, вантажівці, таксі, мотоциклі або пішки»), то визначається правильний клас еквівалентності для кожного значення і один неправильний клас (наприклад «на причепі»).
• Якщо вхідна умова описує ситуацію "повинно бути" (наприклад, «першим символом ідентифікатора повинна бути буква»), то визначається один правильний клас еквівалентності (перший символ - буква) і один неправильний (перший символ - не буква).
• Якщо є будь-яка підстава вважати, що різні елементи класу еквівалентності трактуються програмою неоднаково, то даний клас розбивається на менші класи еквівалентності.
Побудова тестів
Цей крок полягає у використанні класів еквівалентності для побудови тестів. Цей процес включає в себе:
• Призначення кожному класу еквівалентності унікального номера.
• Проектування нових тестів, кожен з яких покриває як можна більше число непокритих класів еквівалентності, до тих пір, поки всі правильні класи не будуть покриті (тільки не загальними) тестами.
• Запис тестів, кожен з яких покриває один і тільки один із непокритих неправильних класів еквівалентності, до тих пір, поки всі неправильні класи не будуть покриті тестами.
Розробка індивідуальних тестів для неправильних класів еквівалентності обумовлено тим, що певні перевірки з помилковими входами приховують або замінюють інші перевірки з помилковими входами.
Недоліком методу еквівалентного розбиття в тому, що він не досліджує комбінації вхідних умов.
Аналіз граничних значень
Граничні умови - це ситуації, що виникають на, вище або нижче меж вхідних класів еквівалентності. Аналіз граничних значень відрізняється від еквівалентного роздроблення наступним:
• Вибір будь-якого елементу в класі еквівалентності в якості представницького при аналізі граничних умов здійснюється таким чином, щоб перевірити тестом кожний кордон цього класу.
• При розробці тестів розглядаються не тільки вхідні умови (простір входів), але і простір результатів.
Застосування методу аналізу граничних умов вимагає певного ступеня творчості та спеціалізації в розглянутій проблемі. Тим не менш, існує кілька загальних правил цього методу:
• Побудувати тести для кордонів області та тести з неправильними вхідними даними для ситуацій незначного виходу за межі області, якщо вхідна умова описує область значень (наприклад, для області вхідних значень від -1.0 до +1.0 необхідно написати тести для ситуацій -1.0, +1.0, -1.001 і +1.001).
• Побудувати тести для мінімального і максимального значень умов і тести, більші і менші цих двох значень, якщо вхідна умова задовольняє дискретному ряду значень. Наприклад, якщо вхідний файл може містити від 1 до 255 записів, то перевірити 0, 1, 255 і 256 записів.
• Використовувати правило 1 для кожної вихідної умови. Причому, важливо перевірити межі простору результатів, оскільки не завжди кордони вхідних областей представляють такий же набір умов, як і кордони вихідних областей. Не завжди також можна отримати результат поза вихідної області, але, тим не менш, варто розглянути цю можливість.
• Використовувати правило 2 для кожної вихідної умови.
• Якщо вхід або вихід програми є впорядкована множина (наприклад, послідовний файл, лінійний список, таблиця), то зосередити увагу на першому і останньому елементах цієї множини.
• Спробувати свої сили в пошуку інших граничних умов.
Аналіз граничних умов, якщо він застосований правильно, є одним з найбільш корисних методів проектування тестів. Однак слід пам'ятати, що граничні умови можуть бути ледь вловимі і визначення їх пов'язане з великими труднощами, що є недоліком цього методу. Другий недолік пов'язаний з тим, що метод аналізу граничних умов не дозволяє перевіряти різні поєднання вихідних даних.
Аналіз причинно-наслідкових зв'язків.
Метод аналізу причинно-наслідкових зв'язків допомагає системно вибирати високорезультативні тести. Він дає корисний побічний ефект, дозволяючи виявляти неповноту і неоднозначність вихідних специфікацій.
Для використання методу необхідно розуміння булевської логіки (логічних операторів - і, або, не). Побудова тестів здійснюється в кілька етапів.
1) Специфікація розбивається на «робочі» ділянки, так як таблиці причинно-наслідкових зв'язків стають громіздкими при застосуванні методу до великих специфікацій. Наприклад, при тестуванні компілятора в якості робочої ділянки можна розглядати окремий оператор мови.
2) У специфікації визначаються безліч причин і безліч наслідків. Причиною є окрема вхідна умова або клас еквівалентності вхідних умов. Наслідком є вихідна умова або перетворення системи. Кожним причині і наслідку приписується окремий номер.
3) На основі аналізу семантичного (смислового) змісту специфікації будується таблиця істинності, в якій послідовно перебираються всі можливі комбінації причин і визначаються наслідки кожної комбінації причин. Таблиця забезпечується примітками, які задають обмеження і описують комбінації причин і / або наслідків, які є неможливими через синтаксичні або зовнішні обмеження. Аналогічно, при необхідності будується таблиця істинності для класу еквівалентності.
Примітка. При цьому можна використовувати такі прийоми:
• По можливості виділяти незалежні групи причинно-наслідкових зв'язків в окремі таблиці.
• Істина позначається "1". Брехня позначається "0". Для позначення байдужих станів умов застосовувати позначення "Х", яке припускає довільне значення умови (0 або 1).
4) Кожний рядок таблиці істинності перетвориться в тест.
Недолік методу - неадекватно досліджує граничні умови.
Припущення про помилку
Часто програміст з великим досвідом вишукує помилки "без всяких методів". При цьому він підсвідомо використовує метод "припущення про помилку". Процедура методу припущення про помилку в значній мірі заснована на інтуїції. Основна ідея методу полягає в тому, щоб перерахувати в деякому списку можливі помилки або ситуації, в яких вони можуть з'явитися, а потім на основі цього списку скласти тести. Іншими словами, потрібно перерахувати ті спеціальні випадки, які можуть бути не враховані при проектуванні.
Приклад застосування методів тестування «чорним ящиком»
Нехай необхідно виконати тестування програми, що визначає точку перетину двох прямих на площині. Попутно, вона повинна визначати паралельність прямої одній із осей координат.
В основі програми лежить вирішення системи лінійних рівнянь:
Ax + By = C і Dx + Ey = F.
Використовуючи метод еквівалентного розбиття, отримуємо для всіх коефіцієнтів один правильний клас еквівалентності (коефіцієнт - дійсне число) і один неправильний (коефіцієнт - не дійсне число). Звідки можна запропонувати 7 тестів:
1) всі коефіцієнти - дійсні числа;
2) - 7) по черзі кожен з коефіцієнтів - не дійсне число.
За методом граничних умов:
можна вважати, що для вихідних даних граничні умови відсутні (коефіцієнти - "будь-які" дійсні числа);
для результатів - отримуємо, що можливі варіанти: єдине рішення, прямі зливаються (безліч рішень), прямі паралельні (відсутність рішень). Отже, можна запропонувати тести, з результатами всередині області:
1) результат - єдине рішення ( 0);
2) результат - безліч рішень ( = 0 и x=y=0);
3) результат - відсутність рішень ( = 0, но x0 или y0);
і з результатами на кордоні:
= 0,01;
= -0,01;
= 0, x = 0,01, y = 0;
= 0, y = -0,01, x = 0.
За методом аналізу причинно-наслідкових зв'язків:
Визначаємо безліч умов.
а) для визначення типу прямої:
-
Для
визначення типу та існування першої
прямої;
-
Для
визначення типу та існування другої
прямої;
б) для визначення точки перетину:
= 0
x = 0
y = 0
Виділяємо три групи причинно-наслідкових зв'язків (визначення типу та існування першої лінії, визначення типу та існування другої лінії, визначення точки перетину) і будуємо таблиці істинності.
|
A=0 |
B=0 |
C=0 |
Результат |
|
0 |
0 |
X |
прямая общего положения |
|
0 |
1 |
0 |
прямая, параллельная оси ОХ |
|
0 |
1 |
1 |
ось ОХ |
|
1 |
0 |
0 |
прямая, параллельная оси ОУ |
|
1 |
0 |
1 |
ось ОУ |
|
1 |
1 |
Х |
множество точек плоскости |
Така ж таблиця будується для другої прямої.
|
= 0 |
x = 0 |
y = 0 |
Ед. реш. |
Мн.реш. |
Реш. нет |
|
0 |
X |
X |
1 |
0 |
0 |
|
1 |
0 |
X |
0 |
0 |
1 |
|
1 |
X |
0 |
0 |
0 |
1 |
|
1 |
1 |
1 |
0 |
1 |
0 |
Кожен рядок цих таблиць перетвориться в тест. При можливості (з урахуванням незалежності груп) беруться дані, відповідні рядкам одразу двох або всіх трьох таблиць.
У результаті до вже наявних тестів додаються:
1) перевірки всіх випадків розташування обох прямих - 6 тестів по першій прямій вкладаються в 6 тестів по другій прямій так, щоб варіанти не збігалися, - 6 тестів;
2) виконується окрема перевірка неспівпадіння умови x = 0 або y = 0 (в залежності від того, який тест був обраний за методом граничних умов) - тест також можна поєднати з попередніми 6 тестами;
За методом припущення про помилку додамо тест:
всі коефіцієнти - нулі.
Всього отримали 20 тестів за всіма чотирма методиками. Якщо ще спробувати вкласти незалежні перевірки, то можливо число тестів можна ще скоротити. (Не забудьте для кожного тесту заздалегідь вказувати результат!).
Загальна стратегія тестування
Всі методології проектування тестів можуть бути об'єднані в загальну стратегію. Це виправдано тим, що кожен метод забезпечує створення певного набору тестів, але жоден з них сам по собі не може дати повний набір тестів. Прийнятна стратегія полягає в наступному:
1. Якщо специфікація складається з комбінації вхідних умов, то почати рекомендується з застосування методу функціональних діаграм.
2. У будь-якому випадку необхідно використовувати аналіз граничних значень.
3. Визначити правильні і неправильні класи еквівалентності для вхідних і вихідних даних і доповнити, якщо це необхідно, тести, побудовані на попередніх кроках.
4. Для отримання додаткових тестів рекомендується використовувати метод припущення про помилку.
Порядок виконання роботи:
1. Ознайомитися з теоретичними відомостями по стратегіях тестування.
2. Розробити програму визначення виду трикутника, заданого довжинами його сторін: рівносторонній, рівнобедрений, прямокутний, різнобічний.
3. Підготувати тести за методиками стратегії "чорного ящика".
4. Тести звести в таблицю.
|
Номер тесту |
Призна-чення тесту |
Значення вхідних даних |
Результат, що очікується |
Реакція програми |
Висновок |
|
|
|
|
|
|
|
5. Виконати тестування. Занести в таблицю результати.
6. Зробити висновок про роль тестування з використанням стратегії «чорного ящика».
7. Оформити звіт по лабораторній роботі, який повинен включати:
1. Постановку задачі.
2. Алгоритм програми.
3. Таблицю тестування програми.
4. Висновки за результатами тестування.
5. Відповіді на контрольні питання.
8. Здати і захистити роботу.
Контрольні питання
1. Можливості застосування стратегії тестування «чорний ящик».
2. Переваги і недоліки стратегії «чорного ящика».
3. Методи формування тестових наборів.
