Лабораторні роботи ТПЗ 1-8

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
КН
Кафедра:
Електронні обчислювальні машини

Інформація про роботу

Рік:
2012
Тип роботи:
Лабораторна робота
Предмет:
Тестування програмних засобів

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт з лабораторної роботи №5 з дисципліни “ Тестування програмних засобів ” Львів 2012 Тема: Тестування «білого» ящика. Мета: розглянути метод тестування «білого» ящика, продемонструвати методику на конкретному прикладі. Виконання роботи: Тестування «білого» ящика – це метод тестування програмного забезпечення, при якому тестується внутрішня структура роботи програми, на відміну від функціональності програми. Методика тестування базується на тому, що розробник тестів має доступ до логіки роботи коду програми. Тобто розробник розуміє внутрішню архітектуру програми й може писати код, що пов'язаний з бібліотеками ПЗ, що тестується. Тести базуються на покритті коду, гілок, умов виконання. Юніт-тести є прикладами тестування «білого» ящика. Синоніми: тестування прозорого, відкритого, скляного ящика, структурні тести, структурне тестування. Тестування «білого ящика» - це методика аналізу вихідного коду програми. Існує три різновиди тестування: тестування на основі потоку керування програми, на основі потоку даних та мутаційне тестування. При використанні першого типу тестується логіка програми, що представлена у вигляді графа керування: вершинами є оператори, а гілками - переходи між ними. При тестування на основі потоку даних увага приділяється взаємозв'язкам між змінними. Виділяються вершини, у яких змінна ініціалізується та в яких використовується, і вивчаються переходи й взаємозв'язки між такими вершинами. Мутаційне тестування полягає у внесенні несправностей у вихідний код програми та порівняння роботи вихідної програми та програми мутанта. Оскільки здійснити вичерпне структурне тестування вкрай важко, необхідно вибрати такі критерії його повноти, які допускали б їхню просту перевірку й полегшували б цілеспрямований підбір тестів. Зупинимося на цьому докладніше. Тестування «білого ящика» перевіряє внутрішню логіку програми, що дозволяє локалізувати несправності. На жаль, із зростанням розміру вихідного коду програми повноцінне тестування стає все складнішим. А спуск по представленій ієрархічній структурі взаємозв'язків критеріїв приводить до пропущення певного типу помилок і, відповідно, до втрати якості. Можливості застосування тестування для різних фаз тестування обмежені. Якщо для модульного тестування, в силу невеликих розмірів вихідного коду, представлені методи застосовні, хоча й з тими або іншими зазначеними вище складностями й обмеженнями, то для інтеграційного й системного тестування сфера застосування наведених класичних методів украй обмежена в силу різкого зростання вихідного коду або взагалі відсутності такого. Приклад тестування «білого ящика» В наступному прикладі ми будемо тестувати клас MyMathematicalClass, а саме конкретний метод exp(int x). При тестуванні, використовуватимемо різні набори вхідних даних для кожного випадку, а також помилкові вхідні дані. Результати тестування конкретних значень виводитимуться на консоль. Тестування проводитиметься в середовищі Eclipse з використанням фреймворку JUnit. Програмний код, що тестується package ua.edu.lp.ki_44.sopushynskyy; /** * MyMathematicalClass implements some mathematical functions * * * */ public class MyMathematicalClass implements IMath { /** * exp - method implements mathematical Exp(x) function * * @param x - power of e * @return e^x * * */ public double exp(int x) { double ch = 1; double zn = 1; double sum = 0; double k = 1.0; int mn; if (x >= 0) mn = x; else mn = -x; //розкладаємо в ряд тейлора for (int i = 0; ch / zn > Double.MIN_NORMAL; i++) { sum = sum + k * (ch / zn); zn = zn * (i + 1); ch = ch * mn; } if (x >= 0) return sum; else return 1.0 / sum; } } //---------------------------------------------------------------------------------------- package ua.edu.lp.ki_44.sopushynskyy; /** * Public Interface IMath * * Interface is used to create classes to * calculate mathematical functions. * * */ public interface IMath { /** * exp - exponent function * * @param x - * calculate mathematical functions. * */ public double exp(int x); } //---------------------------------------------------------------------------------------- package ua.edu.lp.ki_44.sopushynskyy.test; import java.util.Random; import junit.framework.Assert; import org.junit.Test; import ua.edu.lp.ki_44.sopushynskyy.IMath; import ua.edu.lp.ki_44.sopushynskyy.MyMathematicalClass; /** * TestMathClass class implement test case for MyMathematical class * * */ public class TestMathClass { @Test public void testExp() { IMath m = new MyMathematicalClass(); Random r = new Random(); int random; boolean isPassed = true; Log.logFailed(String.format("test exp function\n")); Log.logPassed(String.format("test exp function\n")); // test for param greater than 0 for (int i = 0; i < Constants.TEST_NUMBER; i++) { random = r.nextInt(99) + 1; if (m.exp(random) != m.exp(random)) { Log.logFailed(String.format( "failed: param: %d actual: %f expected: %f\n", random, m.exp(random), m.exp(random))); isPassed = false; } else { Log.logPassed(String.format( "passed: param: %d actual: %f expected: %f\n", random, m.exp(random), m.exp(random))); } if (m.exp(-random) != m.exp(-random)) { Log.logFailed(String.format( "failed: param: %d actual: %f expected: %f\n", -random, m.exp(-random), m.exp(-random))); isPassed = false; } else { Log.logPassed(String.format( "passed: param: %d actual: %f expected: %f\n", -random, m.exp(-random), m.exp(-random))); } } // test for 0-value if (m.exp(0) != Math.exp(0)) { Log.logFailed(String.format( "failed: param: %d actual: %f expected: %f\n", 0, m.exp(0), m.exp(0))); isPassed = false; } else { Log.logPassed(String.format( "passed: param: %d actual: %f expected: %f\n", 0, m.exp(0), m.exp(0))); } if (!isPassed) Assert.fail("Failed on some params. See log files for more information."); } } //---------------------------------------------------------------------------------------- package ua.edu.lp.ki_44.sopushynskyy.test; /** * Class contains some constants for testing IMath * interface implementations * * */ public class Constants { //TEST_NUMBER contains test number for //mathematical functions public static final int TEST_NUMBER = 10; //Log name for passed tests public static final String PASSED_LOG = "d:\\lab5_passed.log"; //Log name for failed tests public static final String FAILED_LOG = "d:\\lab5_failed.log"; } //---------------------------------------------------------------------------------------- package ua.edu.lp.ki_44.sopushynskyy.test; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; /** * Log implements log messaging for tests class created with singleton template * * */ public class Log { public static void ClearLogs() { FileOutputStream erasor; try { erasor = new FileOutputStream(Constants.PASSED_LOG); erasor.write("".getBytes()); erasor.close(); erasor = new FileOutputStream(Constants.FAILED_LOG); erasor.write("".getBytes()); erasor.close(); } catch (FileNotFoundException e) { System.out.print("getLog: file not found\n"); e.printStackTrace(); } catch (IOException e) { System.out.print("getLog: IOException\n"); e.printStackTrace(); } } /** * method to write message to passed log file * * @param msg * the given message * */ public static void logPassed(String msg) { PrintWriter out; try { out = new PrintWriter(new BufferedWriter(new FileWriter( Constants.PASSED_LOG, true))); out.print(msg); out.close(); } catch (FileNotFoundException e) { System.out.print("logPassed: cant find file\n"); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * method to write message to failed log file * * @param msg * the given message * */ public static void logFailed(String msg) { PrintWriter out; try { out = new PrintWriter(new BufferedWriter(new FileWriter( Constants.FAILED_LOG, true))); out.print(msg); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } Результати тестування    Рис. 1 Результати тестування Висновок: На цій лабораторній роботі я освоїв методику тестування «білого» ящика.
Антиботан аватар за замовчуванням

28.03.2013 20:03-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!