Разделы презентаций


Тестирование и отладка ПС 2

Содержание

08/13/2019СодержаниеИнтеграционное тестированиеАвтоматизация тестирования

Слайды и текст этой презентации

Слайд 1Тестирование и отладка ПС (часть 2)
Отвагин Алексей Владимирович, доцент

каф. ЭВМ, к.т.н., а. 505-5

Тестирование и отладка ПС (часть 2) Отвагин Алексей Владимирович, доцент каф. ЭВМ, к.т.н., а. 505-5

Слайд 208/13/2019
Содержание
Интеграционное тестирование
Автоматизация тестирования

08/13/2019СодержаниеИнтеграционное тестированиеАвтоматизация тестирования

Слайд 308/13/2019
Характеристика интеграционного тестирования
Действия: проверка взаимодействия модулей посредством интерфейсов
Цель: выявление ошибок

в интерфейсе или кооперации модулей
Условие: модули уже протестированы

08/13/2019Характеристика интеграционного тестированияДействия: проверка взаимодействия модулей посредством интерфейсовЦель: выявление ошибок в интерфейсе или кооперации модулейУсловие: модули уже

Слайд 408/13/2019
Схема интеграционного тестирования
ПС представлено композицией модулей
Модули уже протестированы автономно
Тестируются интерфейсы
Системное

поведение не оценивается
Создается граф вызовов процедур
Для тестирования модуля P необходимо
Все

субмодули (потомки) реализованы (реальный код или имитация)
Реализован один или все родители модуля (реальный код или драйвер)
08/13/2019Схема интеграционного тестированияПС представлено композицией модулейМодули уже протестированы автономноТестируются интерфейсыСистемное поведение не оцениваетсяСоздается граф вызовов процедурДля тестирования

Слайд 508/13/2019
Метод большого взрыва
Сразу собрать все модули в одну программу
Надежда на

результаты автономных тестов
Требуется небольшое количество тестов
Тяжело локализовать ошибки

08/13/2019Метод большого взрываСразу собрать все модули в одну программуНадежда на результаты автономных тестовТребуется небольшое количество тестовТяжело локализовать

Слайд 608/13/2019
Нисходящий метод
Начинаем с основного модуля: Main
Все модули, к которым обращается

Main, заменены заглушкой:
Простая заглушка
Имитатор поведения
Легко программируется
Для проверки взаимодействия: фиктивный возврат
Проверка

вычислений: имитатор функции
08/13/2019Нисходящий методНачинаем с основного модуля: MainВсе модули, к которым обращается Main, заменены заглушкой:Простая заглушкаИмитатор поведенияЛегко программируетсяДля проверки

Слайд 708/13/2019
Нисходящий метод (продолжение)
Следующая итерация: модуль A
Требуются новые заглушки
(количество и качество

заглушек могут меняться)
На каждый модуль требуется новый сеанс тестирования
Легко локализовать

ошибки
08/13/2019Нисходящий метод (продолжение)Следующая итерация: модуль AТребуются новые заглушки(количество и качество заглушек могут меняться)На каждый модуль требуется новый

Слайд 808/13/2019
Восходящий метод
Начинаем с модуля нижнего уровня: E
Заменяем вызывающий модуль драйвером:
Имитирует

вызовы реального модуля
Сложно программировать:
Ограничения по времени
Трудности реализации сложных стратегий
Требуется много

драйверов
Драйвер может изменять поведение
Требуется много сеансов тестирования
Легко локализовать ошибки
08/13/2019Восходящий методНачинаем с модуля нижнего уровня: EЗаменяем вызывающий модуль драйвером:Имитирует вызовы реального модуляСложно программировать:Ограничения по времениТрудности реализации

Слайд 908/13/2019
Сэндвич
Смесь восходящего и нисходящего подходов
Требует заглушек и драйверов
Тестируем интерфейсы между

уже протестированными участками или подграфами
Количество сеансов тестирования среднее
Труднее локализовать ошибки

08/13/2019СэндвичСмесь восходящего и нисходящего подходовТребует заглушек и драйверовТестируем интерфейсы между уже протестированными участками или подграфамиКоличество сеансов тестирования

Слайд 1008/13/2019
Схема интеграционного теста
Входные значения/действия + настройка драйвера/заглушки/модуля + ожидаемый вывод

(вызовы, действия, результаты)
В созданном графе структуры программы:
Путь между модулями:

p1/p2/p3
Структура вызовов и возвратов:
Main < C < F > C > Main
08/13/2019Схема интеграционного тестаВходные значения/действия + настройка драйвера/заглушки/модуля + ожидаемый вывод (вызовы, действия, результаты)В созданном графе структуры программы:

Слайд 1108/13/2019
Автоматизация тестирования
Подходы к тестированию могут быть обобщены
Развитие open-source привело к

созданию множества доступных средств автоматизации
Созданы среды для многих популярных языков

JUnit, Cunit и др.
08/13/2019Автоматизация тестированияПодходы к тестированию могут быть обобщеныРазвитие open-source привело к созданию множества доступных средств автоматизацииСозданы среды для

Слайд 1208/13/2019
Модульное тестирование (unit testing)
Модуль – наименьшая единица кода, разрабатываемая одним

программистом
Модульные тесты пишутся на том же языке, что и тестируемый

код
Модульные тесты пишутся теми же самыми программистами, которые написали код
Среда тестирования собирает тесты в наборы и позволяет их пакетное выполнение

08/13/2019Модульное тестирование (unit testing)Модуль – наименьшая единица кода, разрабатываемая одним программистомМодульные тесты пишутся на том же языке,

Слайд 1308/13/2019
Неисправности и ошибки
Неисправность (failure) – наличие в коде устранимой погрешности,

выявленной assert()
Ошибка (error) – наличие в коде погрешности, вызывающей системную

ошибку или исключение
08/13/2019Неисправности и ошибкиНеисправность (failure) – наличие в коде устранимой погрешности, выявленной assert()Ошибка (error) – наличие в коде

Слайд 1408/13/2019
Основы JUnit
Класс, который тестируется – класс продукта
Класс, который тестирует –

класс теста
Каждому классу продукта соответствует собственный класс теста
Классы тестов объединяются

в набор (suite)
08/13/2019Основы JUnitКласс, который тестируется – класс продуктаКласс, который тестирует – класс тестаКаждому классу продукта соответствует собственный класс

Слайд 1508/13/2019
Пример Largest
Пример определяет наибольшее число в списке значений
Например, [7, 8,

9] ? 9
public class Largest {
/**
* Return the largest element

in a list.
*
* @param list A list of integers
* @return The largest number in the given list
*/
public static int Largest(int[] list)
{
int index, max=Integer.MAX_VALUE;
for (index = 0; index < list.length-1; index++) {
if (list[index] > max) {
max = list[index];
}
}
return max;
}
}
08/13/2019Пример LargestПример определяет наибольшее число в списке значенийНапример, [7, 8, 9] ? 9public class Largest {/*** Return

Слайд 1608/13/2019
Тест для Largest
import junit.framework.*;
public class TestLargest extends TestCase {
public TestLargest(String

name) { super(name);
}
public void testSimple() {
assertEquals(9, Largest.largest(new int[] {7,8,9}));
}
}

08/13/2019Тест для Largestimport junit.framework.*;public class TestLargest extends TestCase {	public TestLargest(String name) { 	super(name);	}public void testSimple() {	assertEquals(9, Largest.largest(new

Слайд 1708/13/2019
Интерфейс JUnit
Существует три пользовательских интерфейса для JUnit TestRunner:
TextUI: Обеспечивает текстовый

вывод в stdout.
AwtUI: Обеспечивает вывод на основе графического интерфейса пользователя,

используя AWT из Java.
SwingUI: Обеспечивает вывод на основе графического интерфейса пользователя, используя комплект компонентов графического интерфейса пользователя Swing из Java.
java junit.USERINTERFACE.TextRunner classfile
08/13/2019Интерфейс JUnitСуществует три пользовательских интерфейса для JUnit TestRunner:TextUI: Обеспечивает текстовый вывод в stdout.AwtUI: Обеспечивает вывод на основе

Слайд 1808/13/2019
Вывод для Largest
There was 1 failure:
1) testSimple(TestLargest)junit.framework.AssertionFailedError:
expected: but was:
at TestLargest.testSimple(TestLargest.java:11)
Причина:
int

index, max=Integer.MAX_VALUE;

08/13/2019Вывод для LargestThere was 1 failure:1) testSimple(TestLargest)junit.framework.AssertionFailedError:	expected: but was:at TestLargest.testSimple(TestLargest.java:11)Причина:int index, max=Integer.MAX_VALUE;

Слайд 1908/13/2019
Тест порядка в списке Largest
import junit.framework.*;
public class TestLargest extends TestCase

{
public TestLargest(String name) { super(name);
}
public void testSimple() {
assertEquals(9, Largest.largest(new int[]

{7,8,9}));
}
}
public void testOrder() {
assertEquals(9, Largest.largest(new int[] {9,8,7}));
assertEquals(9, Largest.largest(new int[] {7,9,8}));
assertEquals(9, Largest.largest(new int[] {7,8,9}));
}
08/13/2019Тест порядка в списке Largestimport junit.framework.*;public class TestLargest extends TestCase {	public TestLargest(String name) { 	super(name);	}public void testSimple()

Слайд 2008/13/2019
Вывод для Largest
There was 1 failure:
1) testOrder(TestLargest)junit.framework.AssertionFailedError:
expected: but was:
at TestLargest.testOrder(TestLargest.java:10))
Причина:
for

(index = 0; index < list.length-1; index++) {

08/13/2019Вывод для LargestThere was 1 failure:1) testOrder(TestLargest)junit.framework.AssertionFailedError:expected: but was:at TestLargest.testOrder(TestLargest.java:10))Причина:for (index = 0; index < list.length-1; index++)

Слайд 2108/13/2019
Тесты разных списков Largest
public void testDups() {
assertEquals(9, Largest.largest(new int[] {9,7,9,8}));
}

public

void testOne() {
assertEquals(1, Largest.largest(new int[] {1}));
}

public void testNegative() {
int []

negList = new int[] {-9, -8, -7};
assertEquals(-7, Largest.largest(negList));
}
08/13/2019Тесты разных списков Largestpublic void testDups() {assertEquals(9, Largest.largest(new int[] {9,7,9,8}));}public void testOne() {assertEquals(1, Largest.largest(new int[] {1}));}public void

Слайд 2208/13/2019
Вывод для Largest
There was 1 failure:
1) testNegative(TestLargest)junit.framework.AssertionFailedError:
expected: but was:
at TestLargest.testNegative(TestLargest.java:16)
Причина:
int

index, max=0;

08/13/2019Вывод для LargestThere was 1 failure:1) testNegative(TestLargest)junit.framework.AssertionFailedError:expected: but was:at TestLargest.testNegative(TestLargest.java:16)Причина:int index, max=0;

Слайд 2308/13/2019
Набор тестов Largest
import junit.framework.*;
public class TestLargest extends TestCase {
public TestLargest(String

name) {
super(name);
}

protected void setUp() {
}

protected void tearDown() {
}

public static

Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new TestLargest ("testSimple"));
suite.addTest(new TestLargest ("testOrder"));
suite.addTest(new TestLargest ("testDups"));
suite.addTest(new TestLargest ("testOne"));
suite.addTest(new TestLargest ("testNegative"));
}
}


08/13/2019Набор тестов Largestimport junit.framework.*;public class TestLargest extends TestCase {	public TestLargest(String name) { 	super(name);	}protected void setUp() {}protected void

Слайд 2408/13/2019
Содержание тестов
Каждый тест содержит совокупность методов assert(), определенных в классе

Assert
Методы assert() полиморфны и определяют атомы тестирования


08/13/2019Содержание тестовКаждый тест содержит совокупность методов assert(), определенных в классе AssertМетоды assert() полиморфны и определяют атомы тестирования

Слайд 2508/13/2019
Пример BinString
Пример вычисляет сумму кодов символов в строке и возвращает

ее двоичное представление в виде строки
Например, “” = 0 =

“0”
“d” = 100 = “1100100”
“Add” = 265 = “100001001”
08/13/2019Пример BinStringПример вычисляет сумму кодов символов в строке и возвращает ее двоичное представление в виде строкиНапример, “”

Слайд 2608/13/2019
Исходный текст программы
public class BinString {
public BinString() {}
public String convert(String

s) {
return binarise(sum(s));
}
public int sum(String s) {
if(s=="") return 0;
if(s.length()==1) return

((int)(s.charAt(0)));
return ((int)(s.charAt(0)))+sum(s.substring(1));
}
public String binarise(int x) {
if(x==0) return "";
if(x%2==1) return "1"+binarise(x/2);
return "0"+binarise(x/2);
}}
08/13/2019Исходный текст программыpublic class BinString {	public BinString() {}public String convert(String s) {return binarise(sum(s));}public int sum(String s) {if(s==

Слайд 2708/13/2019
Таблица соответствия функций

08/13/2019Таблица соответствия функций

Слайд 2808/13/2019
Тесты для примера BinString
import junit.framework.*;
public class BinStringTest extends TestCase {
private

BinString binString;

public BinStringTest(String name) {
super(name);
}

protected void setUp() {
binString = new

BinString();
}

public void testSum () {
int expected = 0;
assertEquals(expected, binString.sum(""));
expected = 100;
assertEquals(expected, binString.sum("d"));
expected = 265;
assertEquals(expected, binString.sum("Add"));
}
08/13/2019Тесты для примера BinStringimport junit.framework.*;public class BinStringTest extends TestCase {private BinString binString;public BinStringTest(String name) {super(name);}protected void setUp()

Слайд 2908/13/2019
Тесты для примера BinString (2)
public void testBinarise () {
String expected

= "101";
assertEquals(expected, binString.binarise(5));
expected = "11111100";
assertEquals(expected, binString.binarise(252));
}
public void testConvert() {
String expected

= "1000001";
assertEquals(expected, binString.convert("A"));
}
}
08/13/2019Тесты для примера BinString (2)public void testBinarise () {String expected =

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика