Практична робота 4
Тема: Тестування програм методами «чорного
ящика»
Навчальна мета: проаналізувати
методи тестування програмних продуктів, оцінити різні методи з точки зору детективності й покриваючої здатності тестів, оволодіти методикою експериментальних досліджень.
Розвивальна мета: розвивати
пізнавальні можливості, самостійність, самовдосконалення, увагу, пам’ять,
здібності.
Виховна мета: виховувати зацікавленість дисципліною, прагнення отримати
нові знання самостійно, зосередженість, вміння пояснювати та
узагальнювати.
Тип заняття: практична робота.
Теоретичні відомості
1. Тестування за
принципом «чорного ящика»
Одним із способів перевірки програм є стратегія тестування, званих
стратегією " чорного ящика" або тестуванням з керуванням за даними. У
цьому випадку програма розглядається як "чорний ящик " і таке
тестування має на меті з'ясування обставин , в яких поведінка програми не відслідковує
специфікації .
Для виявлення всіх помилок в програмі необхідно виконати вичерпним
тестування, тобто тестування на всіх можливих наборах даних. Для тих же програм,
де виконання команди залежить від попередніх їй подій, необхідно перевірити і
всі можливі послідовності .
Очевидно, що побудова вичерпного вхідного тесту для більшості
випадків неможливо. Тому, зазвичай виконується " розумне " тестування,
при якому тестування програми обмежується прогонами на невеликій підможині всіх можливих
вхідних даних. Природно при цьому доцільно вибрати найбільш підходящю підмножину ( підмножина з
найвищою імовірністю виявлення помилок) .
Правильно вибраний тест підмножини повинен володіти такими властивостями :
1) зменшувати, причому більш ніж на одиницю число інших тестів,
які повинні бути розроблені для досягнення заздалегідь визначеної мети «прийнятного
» тестування:
2) покривати значну частину інших можливих тестів, що в деякій
мірі свідчить про наявність або відсутність помилок до і після застосування
цього обмеженого безлічі значень вхідних даних.
Стратегія "чорного ящика" включає в себе такі методи
формування тестових наборів:
• еквівалентне розбиття;
• аналіз граничних значень;
• аналіз причинно - наслідкових зв'язків;
• припущення про помилку.
1.1. Еквівалентна
розбиття
1.1.1. Основу методу
складають два положення:
1. Вихідні дані програми необхідно розбити на кінцеве число класів еквівалентності,
так щоб можна було припустити, що кожен тест, являється представником
деякого класу, еквівалентний
будь-якого іншого тесту цього класу. Іншими словами, якщо тест якого небуть класу виявляє
помилку, то припускається, що всі інші тести цього класу еквівалентності теж виявлять цю
помилку і навпаки.
2. Кожен тест повинен включати по можливості максимальну кількість
різних вхідних умов , що дозволяє мінімізувати загальне
число необхідних тестів.
Перше положення використовується для розробки набору "
цікавих " умов які повинні бути протестовані, а другий - для розробки
мінімального набору тестів.
Розробка тестів методом еквівалентного розбиття
здійснюється в два етапи:
• виділення класів еквівалентності ;
• побудова тестів.
1.1.2. Виділення класів еквівалентності
Класи еквівалентності виділяються шляхом
вибору кожної вхідної умови (зазвичай це пропозиція або фраза з специфікації )
і розбиттям його на дві або більше груп . Для цього використовується таблиця
наступного вигляду:
Вхідна умова |
Правильні
класи еквівалентності |
Неправильні класи еквівалентності |
|
|
|
Правильні класи включають правильні дані,
неправильні класи - Неправильні дані .
Виділення класів еквівалентності є
евристичним процесом, всеодно при цьому існує ряд правил:
• Якщо вхідні умови описують область значень
(наприклад «ціле дане може приймати
значення від 1 до 999 »), то виділяють один правильний клас 1£X£999 і два неправильних X < 1 і X > 999 .
• Якщо вхідна умова описує число значень
(наприклад, « в автомобілі можуть їхати від одного до шести чоловік »), то
визначається один правильний клас еквівалентності і два неправильних ( ні
одного і більше шести осіб).
• Якщо вхідна умова описує безліч вхідних
значень і є основаніє вважати, що кожне значення програміст трактує особливо
(наприклад, відомі способи пересування на автобусі, вантажівки, ТАКСІ,
мотоциклі або ПІШКИ »), то визначається правильний клас еквівалентності для кожного
значення і один неправильний клас (наприклад « на причепі »).
• Якщо вхідна умова описує ситуацію « повинно
бути» (наприклад , « першим символом ідентифікатора повинна бути буква »), то
визначається один правильний клас еквівалентності ( перший символ - буква) і
один неправильний (перший символ - не буква ) .
• Якщо будь-яку підставу вважати, що різні елементи класу еквіваленталентності
трактуються програмою неоднаково, то даний клас розбивається на менші класи
еквівалентності.
1.1.3. побудова
тестів
Цей крок полягає у використанні класів еквівалентності для
побудови тестів. Цей процес включає в себе:
• Призначення кожному класу еквівалентності унікального номера.
• Проектування нових тестів, кожен з яких покриває як можна більше
число непокритих класів еквівалентності, до тих пір, поки всі правильні класи
не будуть покриті (тільки не загальними) тестами.
• Запис тестів, кожен з яких покриває один і тільки один з непокритих
неправильних класів еквівалентності, до тих пір поки всі неправильні класи не
будуть покриті тестами.
Розробка індивідуальних тестів для неправильних класів
еквівалентності обумовлено тим, що певні перевірки з помилковими входами приховують або замінюють
інші перевірки з помилковими входами.
Недоліком методу еквівалентних розбиття в тому, що він не
досліджує комбинации вхідних умов.
1.2. Аналіз
граничних значень
Граничні умови - це ситуації, що виникають на, вище або нижче меж
вхідних класів еквівалентності. Аналіз граничних значень відрізняється від еквівалентного
роздроблення наступним :
• Вибір будь-якого елементу в класі еквівалентності в якості
представник при аналізі граничних умов
здійснюється таким чином , щоб перевірити тестом кожний кордон цього класу.
• При розробці тестів розглядаються не тільки вхідні умови, але і простір результатів.
Застосування методу аналізу граничних умов вимагає певної міри
творчості та спеціалізації в розглянутої проблеми. Тим не менш, існує кілька
загальних правил цього методу:
• Побудувати тести для кордонів області та тести з неправильними
вхідними даними для ситуацій незначного виходу за межі області, якщо вхідна умова описує область
значень (наприклад, для області вхідних значень від -1.0 до +1.0 необхідно
написати тести для ситуацій -1.0, +1.0, -1.001 і +1.001) .
• Побудувати тести для мінімального і максимального значень умов і
тести, великого й цих двох значень, якщо вхідна умова задовольняє дискретному
ряду значень. Наприклад, якщо вхідний файл може містити від 1 до 255 записів, то перевірити 0 ,
1 , 255 і 256 записів .
• Використовувати правило 1 для кожної вихідної умови. Причому,
важливо перевірити межі простору результатів, оскільки не завжди кордону
вхідних областей представляють такий же набір умов, як і кордони вихідних
областей. Не завжди також можна отримати результат поза вихідний області, але тим
не менш, варто розглянути цю можливість.
• Використовувати правило 2 для кожної вихідної умови.
• Якщо вхід або вихід програми є упорядкований безліч (наприклад,
послідовний файл, лінійний список, таблиця ), то зосередити увагу на першому і
останньому елементах цієї множини.
• Спробувати свої сили в пошуку інших граничних умов.
Аналіз граничних умов, якщо він застосований правильно, є одним з
найбільш корисних методів проектування тестів. Однак слід пам'ятати, що
граничні умови можуть бути ледь вловимі і визначення їх пов'язане з великими
труднощами, що є недоліком цього методу. Другий недолік пов'язаний з тим, що
метод аналізу граничних умов не дозволяє перевіряти різні поєднання вихідних
даних.
1.3. Аналіз
причинно - наслідкових зв'язків
Метод аналізу причинно-наслідкових зв'язків допомагає системно
вибирати високо результативних тести. Він дає корисний побічний ефект, дозволяючи знаходити неповноту і
неоднозначність вихідних специфікацій.
Для використання методу необхідне розуміння булевою логіки (
логічних операторів - і, або, ні ). Побудова
тестів здійснюється в кілька етапів.
1) Специфікація розбивається на «робочі»
ділянки, так як таблиці причинно- наслідкових зв'язків стають громіздкими при
застосуванні методу до великих
специфікаціям. Наприклад , при тестуванні
компілятора як робочого
участка можна розглядати окремий оператор мови .
2 ) У специфікації визначаються безліч причин і безліч наслідків .
Причина є окрема вхідна умова або клас еквівалентності вхідних усло-вий .
Слідство є вихідна умова або перетворення системи . Кожним причи -ні і слідству
приписується окремий номер .
3) На основі аналізу семантичного ( смислового ) змісту
специфікації будується таблиця істинності , в якій послідовно перебираються всі
можли -ні комбінації причин і визначаються слідства кожної комбінації причин .
Таб - особи забезпечується примітками , які задають обмеження і описують комбі
- нації причин та / або наслідків , які є неможливими через синтаксич -ських
або зовнішніх обмежень. Аналогічно , при необхідності будується таблиця
істинності для класу еквівалентності .
Примітка . При цьому можна використовувати такі прийоми:
• По можливості виділяти незалежні групи причинно -наслідкових
зв'язків в окремі таблиці.
• Істина позначається "1". Брехня позначається "0".
Для позначення байдужих перебуваючих умов застосовувати позначення " Х", яке передбачає
довільне значення умови ( 0 або 1 ) .
4) Кожний рядок таблиці істинності перетвориться в тест. При цьому
:
• по можливості слід поєднувати тести з незалежних таблиць;
• для класів еквівалентності вхідних умов додатково необхідно
Недолік методу - неадекватно досліджує граничні умови .
1.4. Припущення
про помилку
Часто програміст з великим досвідом вишукує помилки "без
всяких методів". При цьому він підсвідомо використовує метод "припущення
про помилку " . Процедура методу припущення про помилку в значній мірі
заснована на інтуїції. Основна ідея методу полягає в тому, щоб перерахувати в
деякому списку можливі помилки або ситуації , в яких вони можуть з'явитися, а
потім на основі цього списку скласти тести. Іншими словами, потрібно перерахувати
ті спеціальні випадки , які можуть бути не враховані при проектуванні .
2. Приклад
застосування методів тестування «чорним ящиком»
Нехай необхідно виконати тестування програми, що визначає точку
перетину двох прямих на площині. Попутно, вона повинна визначати паралельність
прямий однієї їх осей координат.
В основі програми лежить вирішення системи лінійних рівнянь :
Ax + By = C і Dx + Ey =
F.
2.1. Використовуючи метод
еквівалентних розбиття, отримуємо
для всіх коефіцієнтів один правильний клас еквівалентності ( коефіцієнт - дійсне число ) і один
неправильний (коефіцієнт - не матеріальне число). Звідки можна запропонувати 7
тестів :
1) всі коефіцієнти - дійсні числа;
2) - 7) по черзі кожен з коефіцієнтів - не матеріальне число.
2.2. За методом граничних умов: можна вважати,
що для вихідних даних граничні умови відсутні (коефіцієнти - "
будь-які" речові числа); для результатів - отримуємо , що можливі
варіанти: єдине рішення , прямі зливаються (безліч рішень ) , прямі паралельні
(відсутність рішень ) . Отже, можна запропонувати тести, за
результатами всередині області:
1 ) результат - єдине рішення (d ¹ 0);
2 ) результат - безліч рішень (d = 0 і dx=dy=0);
3 ) результат - відсутність рішень (d = 0, но dx¹0 або dy¹0);
і з результатами на кордоні :
1) d = 0,01;
2) d = -0,01;
3) d = 0, dx = 0,01, dy = 0;
4) d = 0, dy = -0,01, dx = 0.
2.3. За методом аналізу причинно
- наслідкових
зв'язків: Визначаємо безліч
умов.
а ) для визначення типу прямої:
Для визначення типу
та існування першої прямої;
Для визначення
типу та існування другої прямої;
б) для визначення точки перетину:
d = 0
dx = 0
dy = 0
Виділяємо три групи причинно - наслідкових зв'язків (визначення типу та існування першої лінії,
визначення типу та існування другої лінії, визначаєм точки перетину )
і будуємо таблиці істинності .
A=0 |
B=0 |
C=0 |
Результат |
0 |
0 |
X |
Пряма загального розміщення |
0 |
1 |
0 |
пряма, паралельна вісь ОХ |
0 |
1 |
1 |
вісь ОХ |
1 |
0 |
0 |
пряма, паралельна вісь ОУ |
1 |
0 |
1 |
вісь ОУ |
1 |
1 |
Х |
Безліч точок площини |
Така ж таблиця будується для другої прямої.
d = 0 |
dx = 0 |
dy = 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) виконується окрема перевірка неспівпадання умови dx = 0 або dy = 0 (залежно від того, який тест
був обраний за методом граничних умов ) - тест також можна поєднати з
попередніми 6 тестами ;
2.4. За методом припущення про
помилку додамо тест: всі коефіцієнти - нулі.
Всього отримали 20 тестів по всіх чотирьох методиками. Якщо ще
спробувати вкласти незалежні перевірки, то можливо число тестів можна ще
скоротити. (Не забудьте для кожного тесту заздалегідь вказувати результат !).
3. Загальна стратегія тестування
Всі методології проектування тестів можуть бути об'єднані в загальну
стратегію. Це виправдано тим, що кожен метод забезпечує створення визначеного
набору тестів, але жоден з них сам по собі не може дати повний набір тестів. Прийнятна стратегія
полягає в наступному:
1. Якщо специфікація складається з комбінації вхідних умов, то
почати рекомендуется з застосування методу функціональних діаграм.
2. У будь-якому випадку необхідно використовувати аналіз граничних
значень.
3. Визначити правильні і неправильні класи еквівалентності для
вхідних і вихідних даних і доповнити, якщо це необхідно, тести, побудовані на
попередніх кроках.
4 . Для отримання додаткових тестів рекомендується використовувати
метод припущення про помилку.
Порядок виконання роботи:
1. Ознайомитися з теоретичними відомостями по стратегіях
тестування.
2. У відповідності з варіантом завдання, підготувати тести за
методиками стратегії "чорного
ящика".
3. Пропоновані тести звести в таблицю.
Номер теста |
Назва теста |
Значения вихідних даних |
Очікуваний результат |
Реакція програми |
Висновок |
|
|
|
|
|
|
4. Розробити програму.
5. Виконати тестування. Занести в таблицю результати.
6. Зробити висновок про роль тестування з використанням стратегії
"чорного ящика" і можливості його застосування . Сформулювати його переваги і недоліки.
Варіанти завдань:
Завдання 1.
Розробити програму вирішення рівняння , де a , b , c - будь-які дійсні числа.
Завдання 2.
Розробити програму визначення сумарної довжини тіні, яку відкидають на вісь ОХ
відрізки, паралельні цієї осі і задані координатами x початку і кінця
відрізка :
Завдання 3.
Розробити програму дослідження рівнянь другого порядку з двома невідомими Ax2+2Bxy+Cy2+2Dx+2Ey+F=0. Програма
повинна визначати вид графика: еліпс, парабола, гіпербола, дві пересічні прямі, дві паралельні прямі, дві уявні прямі.
Примітка. Вид прямий втрого порядку визначається за двома дискримінантами
великому : і малому
.
Малий дискримінант для еліпса позитивний, для гіперболи від'ємний, для
параболи дорівнює нулю. Якщо великий дискримінант дорівнює нулю,
то лінія другого порядку розпадається на дві прямі :
для еліптичного виду - пересічні уявні прямі ( точки), для
гіперболіческого виду - пара пересічних дійсних прямих, для параболічеського виду
- дві паралельні прямі.
Завдання 4.
Розробити програму визначення виду трикутника, заданого довжинами
його сторін: рівносторонній, рівнобедрений, прямокутний, різнобічний.
Задача 5.
Розробити програму визначення виду чотирикутника, заданого координатами
вершин на площині: квадрат, прямокутник,
паралелограм, ромб, рівнобедрена трапеція, прямокутна трапеція, трапеція загального вигляду,
чотирьохкутник загального вигляду .
Завдання 6.
Розробити програму, що визначає взаємне
розташування прямих у пропросторі : паралельні, перетинаються, схрещуються і
окремо, розташування кожной прямої ( паралельна осі, перпендикулярна площина
або загального розміщення). Прямі задаються координатами
двох точок .
Примітка . Дві прямі лежать в одній площині , якщо
, Прямі паралельні якщо
,
де l=x2-x1, m=y2-y1, n=z2-z1 (верхній
індекс відповідає номеру прямої) .
Захист звіту з практичної роботи:
Звіт з практичної роботи повинен включати в себе:
1. Завдання.
2. Алгоритм програми.
3. Таблицю з результатами тестування.
4. Висновок.
Захист звіту з практичної роботи полягає в пред'явленні викладачу отриманих
результатів ( на екрані монітора ), демонстрації отриманих навиків і відповідях на питання викладача.