DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Звіт з лабораторної роботи №5 з дисципліни «Тестування програмних засобів»

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

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

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

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

Про що ця робота

У звіті розглядається методика тестування «білого» ящика на прикладі реалізації математичної функції експоненти мовою Java. Наведено лістинги класів інтерфейсу, реалізації, юніт-тестів та логування.

У роботі розглядаються

  • Тестування програмного забезпечення
  • Тестування білого ящика
  • Модульне тестування
  • JUnit
  • Ряд Тейлора
  • Мова програмування Java

Зміст і розділи

  1. Тема
  2. Мета
  3. Виконання роботи
  4. Приклад тестування «білого ящика»
  5. Програмний код, що тестується
  6. Результати тестування
  7. Висновок
Для кого:Студенти технічних спеціальностей, викладачі та розробники програмного забезпечення.
Викладачі:Бачинський Р.В.

Ключові поняття

тестування білого ящикамодульне тестуванняjunitпотік керуванняпотік данихмутаційне тестуванняряд тейлораjavaкласінтерфейс

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт з лабораторної роботи №5 з дисципліни “ Тестування програмних засобів ” Львів 2012 Тема: Тестування «білого» ящика. Мета: розглянути метод тестування «білого» ящика, продемонструвати методику на конкретному прикладі. Виконання роботи: Тестування «білого» ящика – це метод тестування програмного забезпечення, при якому тестується внутрішня структура роботи програми, на відміну від функціональності програми. Методика тестування базується на тому, що розробник тестів має доступ до логіки роботи коду програми. Тобто розробник розуміє внутрішню архітектуру програми й може писати код, що пов'язаний з бібліотеками ПЗ, що тестується. Тести базуються на покритті коду, гілок, умов виконання. Юніт-тести є прикладами тестування «білого» ящика. Синоніми: тестування прозорого, відкритого, скляного ящика, структурні тести, структурне тестування. Тестування «білого ящика» - це методика аналізу вихідного коду програми. Існує три різновиди тестування: тестування на основі потоку керування програми, на основі потоку даних та мутаційне тестування. При використанні першого типу тестується логіка програми, що представлена у вигляді графа керування: вершинами є оператори, а гілками - переходи між ними. При тестування на основі потоку даних увага приділяється взаємозв'язкам між змінними. Виділяються вершини, у яких змінна ініціалізується та в яких використовується, і вивчаються переходи й взаємозв'язки між такими вершинами. Мутаційне тестування полягає у внесенні несправностей у вихідний код програми та порівняння роботи вихідної програми та програми мутанта. Оскільки здійснити вичерпне структурне тестування вкрай важко, необхідно вибрати такі критерії його повноти, які допускали б їхню просту перевірку й полегшували б цілеспрямований підбір тестів. Зупинимося на цьому докладніше. Тестування «білого ящика» перевіряє внутрішню логіку програми, що дозволяє локалізувати несправності. На жаль, із зростанням розміру вихідного коду програми повноцінне тестування стає все складнішим. А спуск по представленій ієрархічній структурі взаємозв'язків критеріїв приводить до пропущення певного типу помилок і, відповідно, до втрати якості. Можливості застосування тестування для різних фаз тестування обмежені. Якщо для модульного тестування, в силу невеликих розмірів вихідного коду, представлені методи застосовні, хоча й з тими або іншими зазначеними вище складностями й обмеженнями, то для інтеграційного й системного тестування сфера застосування наведених класичних методів украй обмежена в силу різкого зростання вихідного коду або взагалі відсутності такого. Приклад тестування «білого ящика» В наступному прикладі ми будемо тестувати клас MyMathematicalClass, а саме конкретний метод exp(int x). При тестуванні, використовуватимемо різні набори вхідних даних для кожного випадку, а також помилкові вхідні дані. Результати тестування конкретних значень виводитимуться на консоль. Тестування проводитиметься в середовищі Eclipse з використанням фреймворку JUnit. Програмний код, що тестується package ua.edu.lp.ki_44.[ім’я автора приховано]; /** * 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.[ім’я автора приховано]; /** * 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.[ім’я автора приховано].test; import java.util.Random; import junit.framework.Assert; import org.junit.Test; import ua.edu.lp.ki_44.[ім’я автора приховано].IMath; import ua.edu.lp.ki_44.[ім’я автора приховано].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.[ім’я автора приховано].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.[ім’я автора приховано].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 Результати тестування Висновок: На цій лабораторній роботі я освоїв методику тестування «білого» ящика.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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