Мiнiстерство освiти і науки, молоді та спорту України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Лабораторна робота №2
з диcципліни: «Тестування програмного забезпечення»
на тему: «Тестування стратегією «чорного ящика»
Мета: навчитись проводити тестування математичної функції за стратегією «чорного ящика».
Завдання:
протестувати математичну функцію з відомим інтерфейсом і закритою внутрішньою структурою на можливість виникнення наступних помилок:
Ділення на 0.
Корінь квадратний з від’ємного числа
Переповнення типів.
Теоретичні відомості.
"Чорний ящик" - тестування функціональної поведінки програми з точки зору зовнішнього світу (текст програми не використовується).
Під «чорним ящиком» розуміється об'єкт дослідження, внутрішнє влаштування якого невідоме. Поняття «чорний ящик» запропоновано У. Р. Ешбі. У кібернетиці воно дозволяє вивчати поведінку систем, тобто їх реакцій на різноманітні зовнішні впливи і в той же час абстрагуватися від їх внутрішнього устрою. Схемне побудова входів X (x 1, x 2 ,..., x n), виходів Y (y 1, y 2 ,..., y m), які характеризуються функцією переходу (δ) та функції виходу (λ) «чорного» ящика.
Маніпулюючи тільки лише з входами і виходами, можна проводити певні дослідження.
Тестування з стратегії чорного ящика
У цій стратегії програма розглядається як чорний ящик . Метою тестування ставиться з'ясування обставин, в яких поведінка програми не відповідає специфікації . Для виявлення всіх помилок в програмі необхідно виконати вичерпне тестування, тобто тестування на всіляких наборах даних . Для більшості програм таке неможливо, тому застосовують розумне тестування, при якому тестування програми обмежується невеликим підмножиною всіляких наборів даних. При цьому необхідно вибирати найбільш підходящі підмножини, підмножини з найвищою імовірністю виявлення помилок.
Властивості правильно обраного тесту
Зменшує більше, ніж на одне число інших тестів, які повинні бути розроблені для розумного тестування.
Покриває значну частину інших можливих тестів, що певною мірою свідчить про наявність чи відсутність помилки до і після обмеженого кількості тестів.
Методи стратегії чорного ящика
Еквівалентна розбиття.
Аналіз граничних значень.
Аналіз причинно-наслідкових зв'язків.
Припущення про помилку.
Розглянемо докладніше кожен з цих методів:
Еквівалентна розбиття
Основу методу складають два положення:
Вихідні дані необхідно розбити на кінцеве число класів еквівалентності. В одному класі еквівалентності містяться такі тести, що, якщо один тест з класу еквівалентності виявляє деяку помилку, то будь-який інший тест з цього класу еквівалентності повинен виявляти цю ж помилку.
Кожен тест повинен включати, по можливості, максимальну кількість класів еквівалентності, щоб мінімізувати загальне число тестів.
Розробка тестів цим методом здійснюється у два етапи: виділення класів еквівалентності і побудова тесту.
Класи еквівалентності виділяються шляхом вибору кожної вхідної умови, які беруться за допомогою технічного завдання або специфікації і розбиваються на дві і більше групи.
Виділення класів еквівалентності є евристичним способом, проте існує ряд правил:
Якщо вхідна умова описує область значень, наприклад «Ціле число приймає значення від 0 до 999», то існує один правильний клас еквівалентності і два неправильних.
Якщо вхідна умова описує число значень, наприклад «Число рядків у вхідному файлі лежить в інтервалі (1 .. 6)», то також існує один правильний клас та два неправильних.
Якщо вхідна умова описує безліч вхідних значень, то визначається кількість правильних класів, дорівнює кількості елементів у множині вхідних значень. Якщо вхідна умова описує ситуацію «повинно бути», наприклад «Перший символ має бути заголовним», тоді один клас правильний і один неправильний.
Якщо є підстави вважати, що елементи всередині одного класу еквівалентності можуть програмою трактуватися по-різному, необхідно розбити даний клас на підкласи. На цьому кроці тестує на основі таблиці повинен скласти тести, покривають собою всі правильні і неправильні класи еквівалентності. При цьому укладач повинен мінімізувати загальне число тестів.
Визначення тестів:
Кожному класу еквівалентності присвоюється унікальний номер.
Якщо ще залишилися не включені в тести правильні класи, то пишуться тести, які покривають максимально можливу кількість класів.
Якщо залишилися не включені в тести неправильні класи, то пишуть тести, які покривають тільки один клас.
Аналіз граничних значень
Граничні умови - це ситуації, що виникають на вищих і нижніх межах вхідних класів еквівалентності.
Аналіз граничних значень відрізняється від еквівалентного роздроблення наступним:
Вибір будь-якого елемента в класі еквівалентності в якості представницького здійснюється таким чином, щоб перевірити тестом кожний кордон цього класу.
При розробці тестів розглядаються не тільки вхідні значення (простір входів), але й вихідні (простір виходів).
Метод вимагає певної міри творчості та спеціалізації в розглянутій задачі.
Існує декілька правил:
Побудувати тести з неправильними вхідними даними для ситуації незначного виходу за межі області значень. Якщо вхідні значення повинні бути в інтервалі [-1.0 .. +1.0], Перевіряємо -1.0, 1.0, -1.000001, 1.000001.
Обов'язково писати тести для мінімальної і максимальної межі діапазону.
Використовувати перші два правила для кожного з вхідних значень (використовувати пункт 2 для всіх вихідних значень).
Аналіз граничних значень, якщо його застосовано правильно, дозволяє виявити велику кількість помилок. Однак визначення цих меж для кожного завдання може бути окремою важким завданням. Також цей метод не перевіряє комбінації вхідних значень.
Аналіз причинно-наслідкових зв'язків
Етапи побудови тесту:
Специфікація розбивається на робочі ділянки.
У специфікації визначаються безліч причин і наслідків. Під причиною розуміється окрема вхідна умова або клас еквівалентності. Слідство являє собою вихідна умова або перетворення системи. Тут кожну причину і слідству присвоюється номер.
На основі аналізу семантичного (смислового) змісту специфікації будується таблиця істинності, у якій послідовно перебираються всілякі комбінації причин і визначаються наслідки для кожної комбінації причин.
Таблиця забезпечується примітками, які задають обмеження і описують комбінації, які неможливі. Недоліком цього підходу є погане дослідження граничних умов.
Припущення про помилку
Програміст з великим досвідом вишукує помилки без всяких методів, але при цьому він підсвідомо використовує метод припущення про помилку. Даний метод в значній мірі заснований на інтуїції. Основна ідея методу полягає в тому, щоб скласти список, який перераховує можливі помилки і ситуації, в яких ці помилки могли проявитися. Потім на основі списку складаються тести.
Хід роботи.
Лістинг програми автоматичного тестування математичної функції:
private void Calc()
{
Random r1 = new Random(DateTime.Now.Millisecond);
Random r2 = new Random(DateTime.Now.Millisecond);
int x1=0, x2=0;
int min = 0, max = 1000;
if (radioButton1.Checked)
{
try
{
min = Convert.ToInt32(textBox1.Text);
max = Convert.ToInt32(textBox2.Text);
}
catch
{
MessageBox.Show("Неправельно введені дані");
return;
}
}
else
{
if (textBox5.Text != "")
try
{
max = Convert.ToInt32(textBox5.Text);
}
catch
{
MessageBox.Show("Неправельно введені дані");
return;
}
}
for (int i = min, j = max, k=1; i < max; i++, j--,k++)
{
if (radioButton3.Checked)
{
x1 = r1.Next(r2.Next(100 * i)) * r1.Next(r2.Next(100 * i));
x2 = r1.Next(r2.Next(100 * i)) * r1.Next(r2.Next(100 * i));
}
if (radioButton2.Checked)
{
try
{
x1 = r1.Next(Convert.ToInt32(textBox4.Text) - Convert.ToInt32(textBox3.Text)) + Convert.ToInt32(textBox3.Text);
x2 = r1.Next(Convert.ToInt32(textBox4.Text) - Convert.ToInt32(textBox3.Text)) + Convert.ToInt32(textBox3.Text);
}
catch
{
MessageBox.Show("Неправельно введені дані");
return;
}
}
if (radioButton1.Checked)
{
x1 = i;
x2 = j;
}
listView3.Items.Add(new ListViewItem(new[] { k.ToString(), x1.ToString(), x2.ToString(), Lab1.math((double)x1, (double)x2).ToString() }));
}
}
Результати роботи програми автоматичного тестування:
Висновок: в даній лабораторній роботі, я ознайомився з стратегією тестування «чорного ящика». В процесі тестування було виявлено, що всі можливі помилки в програмі, а саме ділення на 0, отримання корення квадратного з відємного числа, переповнення типів, коректно обробляються і функція повертає значення NaN або безмежність. Еталонний тест показав що всі результати співпадають з еталоном окрім комплексних чисел.