Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичні вказівки до лабораторної роботи.doc
Скачиваний:
5
Добавлен:
23.08.2019
Размер:
1.41 Mб
Скачать

5 Хід виконання роботи:

5.1. Як основу для виконання завдання взяти програмний код, реалізований у лабораторній роботі № 1 відповідно до завдання викладача.

5.2. Як схему програми взяти діаграму дії (UML activity), реалізовану в ході виконання лабораторної роботи № 1, а також граф керування по метриці Маккейба.

5.3. Позначити буквами або цифрами галузі алгоритму на графі керування або діаграмі дій (UML activity).

5.4. Виписати шляхи алгоритму, які повинні бути перевірені тестами для даного методу тестування.

5.5. Записати тести, які дозволять пройти по шляхах алгоритму.

5.6. Протестувати розроблену Вами програму. Результати оформити у вигляді таблиць. Виводи за результатами тестування: кількість виявлених помилок у програмі; б) час, витрачений на тестування програми; який тест привів до виявлення помилки..

Питання до захисту роботи:

Дайте визначення Мм-шляху Відповідь_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Як оцінити складність інтеграційного тестування у випадку объектно-ориентированного програмування?

Відповідь_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

На якому етапі розробки ПО застосовується інтеграційне тестування?

Відповідь_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Висновок

______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

Лабораторна робота № 7 модульне тестування в java

1 Тема роботи: Огляд методу модульного тестування ПЗ

2 Мета роботи: Знайомство з методами й техніками модульного тестування на реальних прикладах програмного коду, виконаного на різних мовах програмування таких як Java, C# й C++.

3 Опис робочого місця: На кожному робочому місці повинен бути комп`ютер з операційною системою Windows.

4 Теоретичний матеріал:

Модульне тестування або як його ще називають UNIT-тестування характеризується наступними особливостями:

  • Модульне тестування - це тестування програми на рівні окремо взятих модулів, функцій або класів.

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

  • Модульне тестування проводиться за принципом "білого ящика“.

  • Модульне тестування звичайно має на увазі створення навколо кожного модуля певного середовища .

Воно дозволяє виявляти помилки:

  • На рівні модульного тестування найпростіше виявити дефекти, пов'язані з алгоритмічними помилками й помилками кодування алгоритмів.

  • Помилки, пов'язані з невірним трактуванням даних, некоректною реалізацією інтерфейсів, сумісністю, продуктивністю й т.п. звичайно виявляються на більше пізніх стадіях тестування.

Для різних середовищ програмування застосовуються різні підходи до модульного тестування:

  • Java - Junit;

  • C# - NUnit;

  • C++ - CppUnit;

  • PHP - PHPUnit

  • JavaScript - JQuery, Qunit.

Приклад застосування бібліотеки JUnit

Бібліотека JUnit спрощує й багато в чому автоматизує процес написання тестів і найчастіше дуже знижує необхідність використати стандартний вивід або ж отладчик для тестування класів.

Для демонстрації основних можливостей JUnit Framework, розглянемо примітивний клас мовою Java і будемо його тестировать. Цей клас буде мати два методи - знаходження факторіала й суми двох чисел:

public class MathFunc {

private int variable;

public MathFunc() {

variable = 0;

} public MathFunc(int var) {

variable = var;

}

public int getVariable() {

return variable;

}

public void setVariable(int variable) {

this.variable = variable;

}

public long factorial() {

long result = 1;

if (variable > 1) {

for (int i=1; i<=variable; i++)

result = result*i;

}

return result;

}

public long plus(int var) {

long result = variable + var;

return result;

}

}

Для написання тестового класу нам потрібно створити спадкоємця junit.framework.TestCase. Напишемо стільки тестових методів, скільки захочемо:

public class TestClass extends TestCase {

public void testFactorialNull() {

MathFunc math = new MathFunc();

assertNotNull(math);

assertTrue(math.factorial() == 1);

}

Метод assertTrue перевіряє, чи є результат вираження вірним. Деякі інші методи, які можуть придатися - assertEquals, assertFalse, assertNull, assertNotNull, assertSame.

Для того, щоб об'єднати тести, можна скористатися класом TestSuite з його методами addTest або addTestSuite.

  • addTest - дозволяє додавати окремі тести із класу до загального набору

  • addTestSuite - дозволяє додати весь клас із усіма його тестами до загального набору.

Нарешті, для запуску всіх тестів можна скористатися плагином JUnit для Eclipse або інший IDE, де вибрати відповідний клас або пакет класів і вибрати RunJUnit Tests. Також можна запустити тести й без використання IDE. Для цього потрібно скористатися класом TestRunner. Существуюет текстовий варіант junit.textui.TestRunner (вивід результатів відбувається на консоль) і графічний - junit.swingui.TestRunner або junit.awtui.TestRunner. Відповідно необхідно написати наступний метод main:

public class AllTests {

/**

* If no arguments supplied, then text ui is used.

* <ul>

* <li>-t argument for text ui</li>

* <li>-s argument for swing ui</li>

* </ul>

*/

public static void main(String[] args) {

if ((args.length == 0) || (args[0].equals("-t")))

junit.textui.TestRunner.run(AllTests.suite());

else if (args[0].equals("-s"))

junit.swingui.TestRunner.run(AllTests.class);

}

public static Test suite() {

TestSuite suite = new TestSuite("Test for MathFunc");

//$JUnit-BEGIN$

suite.addTestSuite(TestClass);

//$JUnit-END$

return suite;

}

}

public void testFactorialPositive() {

MathFunc math = new MathFunc(5);

assertEquals(120, math.factorial());

}

public void testPlus() {

MathFunc math = new MathFunc(45);

assertTrue(math.plus(123) == 168);

}

}

Приклад запуску тестів JUnit у середовищі Eclipse

Перед початком роботи необхідно додати бібліотеку junit.jar до маршруту побудови проекту. Інсталяція Eclipse уже містить у собі JUnit у підключенні org.junit. Щоб додати бібліотеку JUnit у ваш проект треба:

  1. Створіть проект "JUnitTest"

  2. Відкрити сторінку настроювання маршруту побудови проекту (у контекстному меню проекту) і выберать пунтк меню Properties > Java Build Path).

  3. Перемкнутися на закладку Libraries.

  4. Додати junit.jar, що втримується в org.junit у каталозі підключень, як зовнішній JAR для вашого проекту.

Щоб подивитися вихідний код JUnit, треба приєднати junitsrc.zip до junit.jar. Архів вихідного коду розташований в org.eclipse.jdt, вихідний код підключення – в src/ org.junit_3.8. 1.

Коли проект JUnitTest одержав доступ до класів Junit, можна починати писати ваш перший тест. На першому кроці реалізуємо тест як підклас TestCase. Це можна зробити або, використовуючи стандартний Майстер Class, або спеціальний Майстер Test Case. Алгоритм ваших дій такий:

  1. Відкрити Майстер New (File > New > JUnit Test Case).

  2. Увести ім'я вашого класу тесту "TestFailure" (мал. 2.1):

  3. Клацнути на Finish для створення класу тесту.

Рисунок 7.1 - Додавання нового тесту

По-друге, додаємо метод тестування в клас TestFailure. Швидкий спосіб створення тестового методу можна виконати за допомогою шаблона test. Щоб це зробити, уведіть "test" й Ctrl+Space для активізації контентной допомоги й виберіть шаблон "test". Зміните ім'я створюваного методу на testFailure і викличте метод fail(). Також зміните модифікатор видимості, щоб цей метод тестування був відкритим.

public void testFailure() {

fail();

}

Щоб запустити TestFailure, активізуйте в панелі інструментів і виберіть Run as > JUnit Test. Ви можете проинспектировать результати тесту в поданні JUnit. Це подання показує вам хід виконання й стан тесту - мал. 2.2.

Рисунок 7.2 - Запуск тесту

Подання показується в поточній перспективі, коли б ви не запустили виконання тесту. Зручною класифікацією для подання JUnit уважати його швидким поданням. Подання JUnit має дві закладки: одна показує вам список помилок, а інше показує вам комплект тесту у вигляді дерева. Ви можете переходити від помилки до відповідного вихідного коду подвійним щигликом на відповідному рядку в трасі помилки.

Розуміючи JUnit як швидке подання, видалите оператор fail() у методі testFailure(), так що тест обходиться, і запустите знову тест знову. Ви можете запустити знову тесту або двічі клацнувши на кнопці Rerun у панелі інструментів подання, або запустивши знову програму, що була останньої запущена активізацією що випадає Run. Зараз тест успішний. Оскільки тест успішний, подання JUnit не спливає, але індикатор успішності показується на іконці подання Junit, а рядок стану показує результат тесту. Як нагадування про перезапуск вашого тесту, іконка подання декорується "*", коли змінюєте вміст робочого місця після запуску:.

- Успішний запуск тесту.

- Успішний запуск тесту, але вміст робочого місця був змінений після останнього запуску.

Крім виконання тесту, описаного вище, ви можете також:

  • Виконувати тест у проекті, вихідній папці або пакеті - Виберіть проект, пакет, або вихідну папку й запустите всі включені тести за допомогою Run as > JUnit Test. Ця команда знаходить всі тести усередині проекту, вихідної папки або пакета й виконує їх.

  • Виконувати єдиний метод тесту - Виберіть метод тесту в Outline або Package Explorer і за допомогою Run as > JUnit Test обраний метод буде виконаний.

  • Виконувати єдиний тест - Виберіть тест у поданні JUnit і виконаєте Rerun з контекстного меню.

Якщо хочете передати параметри або настроїти установки для виконання тесту, ви відкриваєте діалог Launch Configuration. Виберіть Run... у меню, що випадає, Run у панелі інструментів - рис 7.3.

Рисунок 7.3 - Запуск тесту на виконання

У цьому діалозі ви можете задати виконуваний тест, його аргументи, його classpath для часу виконання й середовище Java часу виконання.

У випадку помилки тесту ви можете додержуватися таких кроків для налагодження його:

  1. Клацніть двічі на елементі помилки в трасі стека в поданні Junit, щоб відкрити відповідний файл у редакторі.

  2. Установите крапку останова на початок методу тесту.

  3. Виберіть варіант тесту й виконаєте Debug As>JUnit Test із що випадає Debug.

Конфігурація запуску JUnit має опцію "залишити в живих". Якщо ваша Java VM підтримує "гарячу заміну коду " ви можете виправити код і запустити знову тест без перезапуску повного виконання тесту. Щоб дозволити цю опцію, виберіть прапорець Keep JUnit running after a test run when debugging у конфігурації запуску JUnit.

В JUnit Майстер TestSuite допомагає вам у створенні комплекту тесту. Ви можете вибирати ряд класів, які повинні становити комплект.

  1. Відкрийте Майстер New

  2. Виберіть Java > JUnit > JUnit Test Suite і клацніть на Next.

  3. Уведіть ім'я класу вашого комплекту тесту (за згодою використається "AllTests", що з'являється за замовчуванням) – мал. 2.4.

  4. Виберіть класи, які повинні бути включені в комплект. Ми зараз маємо тільки один клас тесту, але ви можете додавати в комплект пізніше.

Рисунок 7.4 - Створення комплекту тестів

Ви можете додати або видалити класи тесту з комплекту тесту двома способами:

  • Вручну, редагуванням файлу комплекту тесту.

  • Перезапуском Майстра й вибором нового набору класів тесту.

Примітка: Майстер поміщає 2 маркери, //$JUnit-BEGIN$ й //$JUnit-END$, у створений клас комплекту тесту, які дозволяють Майстрові змінювати існуючі класи комплекту тесту. Редагувати код між маркерами не рекомендується.

Довідкова інформація

Ієрархія класів JUnit:

  1. o java.lang.Object

    1. o org.junit.Assert

    2. o org.junit.Assume

    3. o java.lang.Throwable (implements java.io.Serializable)

    4. o java.lang.Error

    5. o java.lang.AssertionError

    6. o org.junit.ComparisonFailure

    1. o org.junit.Test.None

Annotation Type Hierarchy

  1. o org.junit.Test (implements java.lang.annotation.Annotation)

  2. o org.junit.Ignore (implements java.lang.annotation.Annotation)

  3. o org.junit.BeforeClass (implements java.lang.annotation.Annotation)

  4. o org.junit.Before (implements java.lang.annotation.Annotation)

  5. o org.junit.AfterClass (implements java.lang.annotation.Annotation)

  6. o org.junit.After (implements java.lang.annotation.Annotation)

Для перевірки правильності виконань методу в JUnit передбачена група методів Assert, що перевіряють умови й у випадку розбіжності отмечающие тест не пройденим.

Опис методів:

Method Summary

static void

assertArrayEquals(byte[] expecteds, byte[] actuals) Asserts that two byte arrays are equal.

static void

assertArrayEquals(char[] expecteds, char[] actuals) Asserts that two char arrays are equal.

static void

assertArrayEquals(int[] expecteds, int[] actuals) Asserts that two int arrays are equal.

static void

assertArrayEquals(long[] expecteds, long[] actuals) Asserts that two long arrays are equal.

static void

assertArrayEquals(java.lang.Object[] expecteds, java.lang.Object[] actuals) Asserts that two object arrays are equal.

static void

assertArrayEquals(short[] expecteds, short[] actuals) Asserts that two short arrays are equal.

static void

assertArrayEquals(java.lang.String message, byte[] expecteds, byte[] actuals) Asserts that two byte arrays are equal.

static void

assertArrayEquals(java.lang.String message, char[] expecteds, char[] actuals) Asserts that two char arrays are equal.

static void

assertArrayEquals(java.lang.String message, int[] expecteds, int[] actuals) Asserts that two int arrays are equal.

static void

assertArrayEquals(java.lang.String message, long[] expecteds, long[] actuals) Asserts that two long arrays are equal.

static void

assertArrayEquals(java.lang.String message, java.lang.Object[] expecteds, java.lang.Object[] actuals)

Asserts that two object arrays are equal.

static void

assertArrayEquals(java.lang.String message, short[] expecteds, short[] actuals) Asserts that two short arrays are equal.

static void

assertEquals(double expected, double actual) Deprecated. Use assertEquals(double expected, double actual, double epsilon) instead

static void

assertEquals(double expected, double actual, double delta) Asserts that two doubles or floats are equal to within a positive delta.

static void

assertEquals(long expected, long actual) Asserts that two longs are equal.

static void

assertEquals(java.lang.Object[] expecteds, java.lang.Object[] actuals) Deprecated. use assertArrayEquals

static void

assertEquals(java.lang.Object expected, java.lang.Object actual) Asserts that two objects are equal.

static void

assertEquals(java.lang.String message, double expected, double actual) Deprecated. Use assertEquals(String message, double expected, double actual, double epsilon) instead

static void

assertEquals(java.lang.String message, double expected, double actual, double delta) Asserts that two doubles or floats are equal to within a positive delta.

static void

assertEquals(java.lang.String message, long expected, long actual) Asserts that two longs are equal.

static void

assertEquals(java.lang.String message, java.lang.Object[] expecteds, java.lang.Object[] actuals) Deprecated. use assertArrayEquals

static void

assertEquals(java.lang.String message, java.lang.Object expected, java.lang.Object actual) Asserts that two objects are equal.

static void

assertFalse(boolean condition) Asserts that a condition is false.

static void

assertFalse(java.lang.String message, boolean condition) Asserts that a condition is false.

static void

assertNotNull(java.lang.Object object) Asserts that an object isn't null.

static void

assertNotNull(java.lang.String message, java.lang.Object object) Asserts that an object isn't null.

static void

assertNotSame(java.lang.Object unexpected, java.lang.Object actual) Asserts that two objects do not refer to the same object.

static void

assertNotSame(java.lang.String message, java.lang.Object unexpected, java.lang.Object actual)

Asserts that two objects do not refer to the same object.

static void

assertNull(java.lang.Object object) Asserts that an object is null.

static void

assertNull(java.lang.String message, java.lang.Object object) Asserts that an object is null.

static void

assertSame(java.lang.Object expected, java.lang.Object actual) Asserts that two objects refer to the same object.

static void

assertSame(java.lang.String message, java.lang.Object expected, java.lang.Object actual) Asserts that two objects refer to the same object.

static

<T> void

assertThat(java.lang.String reason, T actual, org.hamcrest.Matcher<T> matcher) Asserts that actual satisfies the condition specified by matcher.

static <T> void

assertThat(T actual, org.hamcrest.Matcher<T> matcher) Asserts that actual satisfies the condition specified by matcher.

static void

assertTrue(boolean condition) Asserts that a condition is true.

static void

assertTrue(java.lang.String message, boolean condition) Asserts that a condition is true.

static void

fail() Fails a test with no message.

static void

fail(java.lang.String message) Fails a test with the given message.

Функція fail() примусово відзначає тест не пройденим. Використається, якщо ми реалізуємо якусь перевірку самостійно й вона не отлавливается функцією assert.