SlideShare a Scribd company logo
1 of 62
В. В. Кулямин Институт системного программирования РАН Тестирование на основе моделей
План Введение Сложность современных систем Тестирование и связанные понятия Тестирование на основе моделей Модели поведения Модели ситуаций Методы построения тестов Работы ИСП РАН 2
Сложность современных систем Software сложнее hardware (1968) 3
Сложность интерфейса 4
5 Сложность данных
6 Сложность поведения
Статистика ошибок Основная причина – сложность Среднее количество ошибок на 1000 строк кода – постоянно (???) 7
Риски, связанные с ошибками Космические аппараты Mariner I (1962) Фобос-1 (1988) Mars Climate Orbiter, Mars Polar Lander (1999) Инфраструктура AT&T long distance network crash (1990) Northeast Blackout (2003) OpenSSLrnd in Debian (2006-8) Heathrow Airport Terminal 5 baggage system (2008) Автомобили Toyota Prius (2005, 2010) Медицинское оборудование Therac-25 (1985-7) Авионика и военное оборудование Lockheed F-117 (1982) MIM-104 Patriot (1991) Ariane 5 (1996) USS Yorktown (1997) F-22 Raptor (2007) 8 Потерииндустрии США в 2001 году – 60 G$
Что делать? Не делать ошибок ,[object Object],Предотвращение ошибок Повышение уровня абстракции языков Устранение error-prone конструкций Стандартизация и документирование языков, интерфейсов и библиотек Выявление ошибок Верификация и валидация 	Тестирование на основе моделей – частный случай Исправление ошибок 9
Computer Science и Software Engineering Computer Science Алгоритм Одна четкая задача ее м.б. невозможно решить или можно решить идеально Можно устранить ошибки Основа – математика   Фундаментальная дисциплина Электродинамика Software Engineering Система Много неясных задач нужно решать неразрешимое и нельзя решить окончательно Ошибки есть всегда Основа – mix (???) Adhoc решения Микроэкономика Групповая и когнитивная психология Социология Инженерная дисциплина (???) Электротехника  10
Тестирование [SWEBOK 2004] Проверка соответствия тестируемой системы требованиям Верификация Альтернативы – валидация Другие мнения (Cem Caner) – любой анализ В ходе реальной работы этой системы Альтернативы 	Экспертиза, статический анализ, проверка моделей (model checking) дедуктивный анализ (theorem proving) В конечном наборе специально созданных ситуаций Другие мнения (IEEE 610.12-1990) Альтернативы 	Мониторинг (runtime verification, passive testing) 11
Цели тестирования Поиск ошибок Четкие результаты Гарантировать отсутствие ошибок нельзя Что делать, если ошибки не находятся? Когда можно прекратить тестирование? Оценка качества тестируемой системы (SUT) Объективные условия завершения Критерии полноты тестирования – как выбирать тесты Контроль развития системы Тесты – инструмент отслеживания изменений Организация тестов – как облегчить модификации 12
виды тестирования По проверяемым свойствам ISO 9126 Функциональность Надежность Производительность Нагрузочное Переносимость Удобство использования ,[object Object],Регрессионное Аттестационное (соответствия) По исполнителю При разработке Альфа Бета Приемочное По уровню Модульное Компонентное Интеграционное Функций (features) Системное По источнику тестов Структурное «Черного ящика» «Серого ящика» На отказ «Дымовое» Стрессовое По интерфейсу UI API Сообщения 13
Структура теста Тест – тестовая ситуация + проверка Тестовый вариант Инициализация Выполнение Проверка Финализация 14 public void testGetClients() {   Session s =SessionFactory.getSession(); s.beginTransaction();   List<Client> clients =s.createQuery("from Client").list();   Client jones=newClient("Mike", "Jones"); Assert.assertContains(clients, jones "Jones should be in clients"); s.rollbackTransaction(); }
Тестовые ситуации Обращение к тестируемой системе Воздействие Данные обращения Набор параллельных обращений Состояние системы Внешние условия 15 ,[object Object]
Отправка сообщенияSend( new ProductValueChangeMsg(74291, 485) );
Ввод командыprodupd -t -id 74291 -val 485
Нажатие на кнопку,[object Object]
Модели поведения Логико-алгебраические Различные логики 	Первого порядка, теории типов, временные, модальные, … Различные алгебраические структуры Исполнимые Различные автоматы FSM, LTS, расширенные, взаимодействующие, иерархические, временные, сети Петри, Statecharts, … Гибридные LTS ~ Алгебры процессов, модели стандартных термов Abstract State Machines Программные контракты с состоянием 17
модели поведения – арифметика x – 32-битное целое число abs(x) – (x ≥ 0) ? (x) : (-x) abs(x) ≥ 0 abs(–2147483648) =  Машинная целочисленная арифметика Z/232Z= {[-231], [-231+1], …, [-2], [-1], [0], [1], [2], …, [231-1]} +, –, * (34)! =  18 ? –2147483648 ? 0
модели поведения – SQRT x – число с плавающей точкой (double) sqrt(x) – квадратный корень pre : (x ≥ 0) post: (sqrt*sqrt = x) 	r = [sqrt(2)]double = 6369051672525773/252 	r*r = 2.0000000000000002734323463… post: abs(sqrt*sqrt – x) < ε = 3*10-16 	r = [sqrt(2105)]double = 6369051672525773 	abs(r*r – 2105) = 5545866846675497 post:   (x = 0)  (sqrt = 0)         &(x ≠ 0)  abs((sqrt*sqrt – x)/x) < ε 19
модели поведения – арктангенс x – число с плавающей точкой (double) atan(x) – арктангенс post:    (x = 0)  (atan = 0)         & (x ≠ 0)  abs((tan(atan) – x)/x) < ε (tan(atan(1050))  = 1.633123935319537...⋅1016 	[π/2]double = 884279719003555/249 	(π/2 - [π/2]double) = 6.1232339957367658…⋅10–17 20 π/2 π/2 atan(x) [π/2]double
Числа с плавающей точкой (IEEE 745) 21 1/2(n-k-1) –1 ulp k+1 n-1 0 1 k n, k 0 0 1 1 1 1 1 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 M E S знак экспонента мантисса B = 2(k–1) –1 Нормализованные:E> 0 & E < 2k –1X = (–1)S·2(E–B)·(1+M/2(n–k–1)) Денормализованные:E = 0X = (–1)S·2(–B+1)·(M/2(n–k–1)) Exceptional	:   E = 2k –1 M = 0  :   +, – M ≠ 0  :    NaN 2(–1)·1.1012 = 13/16 = 0,8125 0, -0 1/0 = +, (–1)/0 = – n = 32,   k = 8 	– float (single precision) n = 64,   k = 11 	– double n = 79,   k = 15	– extended double n = 128, k = 15	– quadruple 0/0 = NaN
Точная модель sqrt(IEEE 745) дает результат округления точного значения в соответствии с текущим режимом к ближайшему к +, к–, к 0 для +∞ дает +∞ и выставляет флаг DIVISION-BY-ZERO для -0 дает -0 (???!!!) для x < 0 дает NaNи выставляет флаг INVALID в случае неточного результата выставляет флаг INEXACT нигде не выставляет флаги OVERFLOW, UNDERFLOW 22
модели поведения – семафор Расширенный конечный автомат 23 create() /sid; owner := null lock(tid)/oktid; owner:=tid         waiting := new Queue          timer:= new TimerList trylock(tid, wt)/ oktid; owner:=tid [tid=owner]lock(tid)/lockedtid [tid≠owner]lock(tid)/failtid Free Locked [tid=owner]trylock(tid, wt)/lockedtid [tid≠owner]trylock(tid, wt)/timer[tid]:=wt,  		          waiting.push(tid)  destroy() [tid=owner]unlock(tid)/oktid; owner:=null timeout[tid]/failtid; waiting.remove(tid) [tid=owner & !waiting.empty()]unlock(tid)/ok;	owner:=waiting.pop(), timer[owner]:=0 [tid=owner & waiting.empty()]unlock(tid)/oktid; owner:=null
Расширенная сеть Петри P модели поведения – буфер-стек 24 (in) (in) (in) (in) /x2:=in /x3:=in /x1:=in /x4:=in 0 1 2 3 4 /x1 /x2 /x3 /x4 C
Модели поведения – список Абстрактный тип данных L – список объектов типа E Операции 	empty : Linsert : LNE  Lremove : LN  L size : L Nget : L  E Аксиомы empty.size()                      = 0 [0≤i≤X.size()]                        X.insert(i, e).size()            = X.size() + 1 [0≤i<X.size()]                        X.remove(i).size()             = X.size() – 1 [0≤i≤X.size()]                        X.insert(i, e).get(i)            = e [0<i≤X.size() & 0≤j<i]           X.insert(i, e).get(j)           = X.get(j) [0≤i<X.size() & i<j≤X.size()] X.insert(i, e).get(j)            = X.get(j-1) [0≤i≤X.size()]                        X.insert(i, e).remove(i)     ≡ X [0<i≤X.size() & 0≤j<i]           X.insert(i, e).remove(j)    ≡ X.remove(j). insert(i-1, e) [0≤i≤X.size() & i<j≤X.size()] X.insert(i, e).remove(j)     ≡ X.remove(j-1). insert(i, e) [0≤i≤X.size() & 0≤j≤i]           X.insert(i, e1).insert(j, e2)≡ X.insert(j, e2).insert(i+1, e1) [0<i<X.size() & 0≤j<i]          X.remove(i).remove(j)     ≡ X.remove(j). remove(i-1) 25
Модели ситуаций Составляющие Элементы тестовых ситуаций Действия и их наборы Данные и состояния Классификация ситуаций и их элементов, выделение однородных областей Важность и риски  Видымоделей ситуаций Доменные (на основе входных и выходных данных) Структурные (на основе затрагиваемых элементов SUT) Функциональные (на основе элементов требований) Проблемные (на основе возможных проблем и рисков, гипотез об ошибках) 26
Домены – комбинации подтипов 27
Домены – структура данных 28 k+1 0 1 k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 M E S знак экспонента мантисса S = 0 или S = 1 Денормализованныечисла   E = 0  M = 0    +0, –0 M ≠ 0    000001, 000101, 010100, 100000, 111111 Нормализованные числа       0 < E< 2k-1 E  000001, 000101,  011111, 100010, 111110 M 000000, 000001, 000110, 011001, 100110, 111111 Исключительные числа          E = 2k-1 M = 0    +∞, –∞ M ≠ 0    NaN 000001, 000101, 010100, 101000, 111111
Домены – интервалы однородности 29 max 0
Домены – подобласти ax2 + bx + с = 0 int solve(double a, double, b, double c, double *x1, double *x2) 30
структура потока управления Компоненты, классы, методы Инструкции Ветвления Цепочки блоков Цепочки вызовов Элементарные условия и их комбинации 31
Примеры критериев покрытия public Node ReplaceChild(Node nc, Node oc) { if(nc == null) throw new NullReferenceException("The new child is null"); if(oc == null || !Children.Contains(oc)) throw new DomException("Ref node is not a child of this node", NOT_FOUND_ERROR); if(  !(thisis Document) && nc.OwnerDocument != this.ownerDocument || this is Document && nc.OwnerDocument != this) throw new DomException("New child provided is from another document context", WRONG_DOCUMENT_ERROR); if(nc == this || Ancestors.Contains(nc)) throw new DomException("Cannot insert this node or its ancestor", HIERARCHY_REQUEST_ERROR); if(!(ncisISPImplDocumentFragment) && !this.IsAllowedChild(nc)) throw new DomException("Cannot insert ...", HIERARCHY_REQUEST_ERROR); if(this is Document && ncisDocumentType && !this.Children.Contains(nc) && this.HasDifferentChildOfType(typeof(DocumentType), oc)) throw newDomException("The second DocumentType cannot be inserted in a Document", HIERARCHY_REQUEST_ERROR); if(   this is Document && ncisDocumentType && !this.Children.Contains(nc) && !this.HasDifferentChildOfType(typeof(DocumentType), oc)      && HasDifferentNoncommentChildrenBefore(oldChild, newChild)) throw new DomException("DocumentType node cannot be inserted in a Document after non-comment nodes", UNKNOWN_ERROR); if(   this is Document && !(ncis Comment) && !(ncisDocumentFragment) && !(oldChildisDocumentType)       && HasDifferentDocumentTypeChildAfter(oldChild, newChild)) throw new DomException("Non-comment node cannot be inserted into a Document before DocumentType", UNKNOWN_ERROR); if(this is Document && ncis Element && !this.Children.Contains(nc) && this.HasDifferentChildOfType(typeof(Element), oc)) throw new DomException("The second Element cannot be inserted in a Document", HIERARCHY_REQUEST_ERROR); if(this.IsReadOnly) throw new DomException("This node is read-only", NO_MODIFICATION_ALLOWED_ERROR); if(nc.ParentNode != null && nc.ParentNode.IsReadOnly) throw new DomException("Parent of new child is ...", NO_MODIFICATION_ALLOWED_ERROR); if(ncisDocumentFragment) { foreach(Node niinnc.Children) { if(!this.IsAllowedChild(ni)) throw new DomException("Cannot insert ...", HIERARCHY_REQUEST_ERROR); if(this is Document && niisDocumentType && this.HasDifferentChildOfType(typeof(DocumentType), null)) throw new DomException("The second DocumentType cannot be inserted in a Document", HIERARCHY_REQUEST_ERROR); if(this is Document && niis Element && this.HasDifferentChildOfType(typeof(Element), null)) throw new DomException("The second Element cannot be inserted in a Document", HIERARCHY_REQUEST_ERROR); if(this is Document && !(niis Comment) && !(oldChildisDocumentType) && HasDifferentDocumentTypeChildAfter(oldChild, null)) throw new DomException("Non-comment node cannot be inseted into a Dcoument before DocumentType", UNKNOWN_ERROR);     }   } inti = this.Children.IndexOf(oc); if(!(ncisDocumentFragment) && nc != oc) { if(nc.ParentNode != null) nc.ParentNode.Children.Remove(nc); nc.parent = this; if(this.Children.Contains(nc)) this.Children.Remove(nc); this.Children.Insert(i, nc);   } else if(ncisDocumentFragment) { foreach(Node niinnc.Children) {ni.parent = this; this.Children.Insert(i++, ni); } nc.Children.Clear();   } if(nc != oc) {this.Children.Remove(oc); oc.parent = null; } returnoc; } 32
Структура потоков данных 33 DU-пары и DU-пути 1intgcd(inta, intb)  2  {  3    if(a == 0)  4returnb;  5    if(b == 0)  6returna;  7    if(a > 0 &&b < 0 ||a < 0 &&b > 0)  8b = -b;  9    10    while(b!= 0) 11    {  12      if(b > a&&a > 0 ||b < a&&a < 0) 13      {  14        a = b-a; 15        b = b-a; 16        a = a+b; 17      } 18     19      b = a-b; 20      a = a-b; 21    } 22   23    returna; 24  } 3 5 4 7 6 7’ 10 23 12 12’
Структура автоматов Состояния Переходы Цепочки переходов Простые пути Простые циклы с продолжением 34 0 1 2 3 4 5 6 7
Проблемная модель – мутанты Операторы мутации if(A) B else C  if(A) B  if(A) C  if(A) C else B  B  C Программа P  мутанты {P1, P2, …, Pn} устраняем эквивалентные выполняем тесты определяем «неубитых» мутантов 35 ,[object Object]
 X := Y
 X := Z
 X := Y – Z
 Y := Y + Z,[object Object]
Вероятностные методы Тестовые ситуации строятся на основе вероятностных распределений Модель ситуаций представляет собой распределения для различных элементов ситуаций По частоте использования По связанным рискам По отлаженности 37
Достоинства и недостатки Вероятностное тестирование ,[object Object]
Хорошо автоматизируется
Хорошо находятся случайные ошибки (опечатки)
Полнота полученного набора тестов непредсказуема
Плохо находятся серьезные ошибки
Исходные распределения часто неизвестны 38
Комбинаторные методы Тестовые воздействия разбиваются на некоторые элементы Тестовые ситуации строятся как всевозможные комбинации этих элементов по определенным правилам Дерево классификации Тестирование на основе грамматик Покрывающие наборы Пути в автоматах 39
Достоинства и недостатки Комбинаторное тестирование ,[object Object]
Хорошо автоматизируется
Более систематично, чем вероятностное
Некоторые виды ошибок находятся плохо
При учете многих факторов построение набора тестов требует гораздо больше ресурсов 40
Пример: Печать web-страницы 41 3·2·5·4·3·5 = 1800 вариантов
Решение 42 25 вариантов Покрытие пар – покрывающий набор силы 2 Можно построить комбинации всех троек – покрывающий набор силы 3 – 100 вариантов
Покрывающие наборы Покрывающий набор силы t для k параметров, имеющих значения n1, …, nk 	– матрица {Сij} i[1..N], j[1..k], Cij[1..nj] j1, …, jtjl[1..k] vj1, …, vjtvjl[1..njl] 	i[1..N] l[1..t] Сijl = vjl множество таких наборов – CA(t; n1, …, nk)  Однородные наборы 	– n1= … =nk=n, CA(t; k, n)  Минимальное число строк в однородном наборе 	– ~tntlog1+(k) Построение минимальных однородных наборов из CA(t; k, 2) или CA(2; k, n > 2) – NP-полная задача 43
Бинарные покрывающие наборы Алгоритм построения CA(2; k, 2) Выбрать N :k ≤ CN-1N/2 Можно построить набор из N строк 44
Геометрические конструкции Алгоритм построения CA(2; pk+1, pk) n=pk, p – простое Первый столбец (∞)– блоки по n одинаковых значений i Второй столбец (0) – все n значений j в каждом блоке В столбце с номером m1..(n-1) 	(i*m+j) в поле GF(pk)  45
Рекурсивные конструкции Алгоритм построения CA(2; mn+1, n=pk) из CA(2; m, n) Исходный набор {Aij} i[1..N], j[1..m] Вспомогательная матрица{Bij} i[1..z=(n2-n)], j[1..(n+1)] 46
Общие покрывающие наборы Неоднородные Переменной силы С ограничениями на сочетания значений Переборно-оптимизационные алгоритмы 47
Нацеленные методы Тестовые ситуации, определяемые критерием полноты, строятся прямо  48 Источники выделяемых ситуаций ,[object Object]

More Related Content

What's hot

Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в DjangoMoscowDjango
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очередиMikhail Kurnosov
 
Очень вкусный фрукт Guava
Очень вкусный фрукт GuavaОчень вкусный фрукт Guava
Очень вкусный фрукт GuavaEgor Chernyshev
 
C# Desktop. Занятие 03.
C# Desktop. Занятие 03.C# Desktop. Занятие 03.
C# Desktop. Занятие 03.Igor Shkulipa
 
Лекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьЛекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьMikhail Kurnosov
 
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#Olga Maksimenkova
 
Абстрактные типы данных, контейнеры и списки
Абстрактные типы данных, контейнеры и спискиАбстрактные типы данных, контейнеры и списки
Абстрактные типы данных, контейнеры и спискиOlga Maksimenkova
 
Лекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиЛекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиMikhail Kurnosov
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка DjangoVladimir Rudnyh
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Sergey Schetinin
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)Anton Bukov
 
Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиMikhail Kurnosov
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Mikhail Kurnosov
 
основы Java для_any_logic
основы Java для_any_logicосновы Java для_any_logic
основы Java для_any_logicKVPw
 
Метапрограммирование за гранью приличия
Метапрограммирование за гранью приличияМетапрограммирование за гранью приличия
Метапрограммирование за гранью приличияAlexander Schepanovski
 
Структурное обучение и S-SVM
Структурное обучение и S-SVMСтруктурное обучение и S-SVM
Структурное обучение и S-SVMromovpa
 
Learning from Swift sources, Иван Сметанин
Learning from Swift sources, Иван СметанинLearning from Swift sources, Иван Сметанин
Learning from Swift sources, Иван СметанинMail.ru Group
 
Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиMikhail Kurnosov
 

What's hot (20)

Производительность в Django
Производительность в DjangoПроизводительность в Django
Производительность в Django
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очереди
 
Очень вкусный фрукт Guava
Очень вкусный фрукт GuavaОчень вкусный фрукт Guava
Очень вкусный фрукт Guava
 
C# Desktop. Занятие 03.
C# Desktop. Занятие 03.C# Desktop. Занятие 03.
C# Desktop. Занятие 03.
 
Лекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьЛекция 4: Стек. Очередь
Лекция 4: Стек. Очередь
 
4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#4. Многомерные массивы и массивы массивов в C#
4. Многомерные массивы и массивы массивов в C#
 
Абстрактные типы данных, контейнеры и списки
Абстрактные типы данных, контейнеры и спискиАбстрактные типы данных, контейнеры и списки
Абстрактные типы данных, контейнеры и списки
 
Лекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиЛекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировки
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
 
Профилирование и отладка Django
Профилирование и отладка DjangoПрофилирование и отладка Django
Профилирование и отладка Django
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)
 
Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные списки
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Основы MATLAB. Лекция 1.
Основы MATLAB. Лекция 1.Основы MATLAB. Лекция 1.
Основы MATLAB. Лекция 1.
 
основы Java для_any_logic
основы Java для_any_logicосновы Java для_any_logic
основы Java для_any_logic
 
Метапрограммирование за гранью приличия
Метапрограммирование за гранью приличияМетапрограммирование за гранью приличия
Метапрограммирование за гранью приличия
 
Структурное обучение и S-SVM
Структурное обучение и S-SVMСтруктурное обучение и S-SVM
Структурное обучение и S-SVM
 
Learning from Swift sources, Иван Сметанин
Learning from Swift sources, Иван СметанинLearning from Swift sources, Иван Сметанин
Learning from Swift sources, Иван Сметанин
 
Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные списки
 

Viewers also liked

20130420 mathematics and_internet-advertizing_in_internet-viktor_lobachev
20130420 mathematics and_internet-advertizing_in_internet-viktor_lobachev20130420 mathematics and_internet-advertizing_in_internet-viktor_lobachev
20130420 mathematics and_internet-advertizing_in_internet-viktor_lobachevComputer Science Club
 
20080302 cryptography hirsch_lecture03
20080302 cryptography hirsch_lecture0320080302 cryptography hirsch_lecture03
20080302 cryptography hirsch_lecture03Computer Science Club
 
Arogyaka Rajmarg Dr. Shriniwas Kashalikar
Arogyaka Rajmarg Dr. Shriniwas KashalikarArogyaka Rajmarg Dr. Shriniwas Kashalikar
Arogyaka Rajmarg Dr. Shriniwas Kashalikarshivsr5
 
20091004 cryptoprotocols nikolenko_lecture04
20091004 cryptoprotocols nikolenko_lecture0420091004 cryptoprotocols nikolenko_lecture04
20091004 cryptoprotocols nikolenko_lecture04Computer Science Club
 
20091101 algorithmsfornphardproblems kulikov_lecture06
20091101 algorithmsfornphardproblems kulikov_lecture0620091101 algorithmsfornphardproblems kulikov_lecture06
20091101 algorithmsfornphardproblems kulikov_lecture06Computer Science Club
 
Nabidka Survio a Vyzkumy.knihovna.cz
Nabidka Survio a Vyzkumy.knihovna.czNabidka Survio a Vyzkumy.knihovna.cz
Nabidka Survio a Vyzkumy.knihovna.czKISK FF MU
 
ECLAP tutorial, see http://www.eclap.eu, social networking, aggregation, myst...
ECLAP tutorial, see http://www.eclap.eu, social networking, aggregation, myst...ECLAP tutorial, see http://www.eclap.eu, social networking, aggregation, myst...
ECLAP tutorial, see http://www.eclap.eu, social networking, aggregation, myst...Paolo Nesi
 
Эффективное продвижение на мобильных сайтах
Эффективное продвижение на мобильных сайтахЭффективное продвижение на мобильных сайтах
Эффективное продвижение на мобильных сайтахWapstart
 
Mobiilioppiminen on kokemuksellista
Mobiilioppiminen on kokemuksellistaMobiilioppiminen on kokemuksellista
Mobiilioppiminen on kokemuksellistaPauliina Venho
 
20071118 efficientalgorithms kulikov_lecture07
20071118 efficientalgorithms kulikov_lecture0720071118 efficientalgorithms kulikov_lecture07
20071118 efficientalgorithms kulikov_lecture07Computer Science Club
 
prof. Milan Konvit: Nove medium
prof. Milan Konvit: Nove mediumprof. Milan Konvit: Nove medium
prof. Milan Konvit: Nove mediumKISK FF MU
 
200801 Generating OpenMP and Pthreads code
200801 Generating OpenMP and Pthreads code200801 Generating OpenMP and Pthreads code
200801 Generating OpenMP and Pthreads codeJavier Gonzalez-Sanchez
 
20090913 algorithmsfornphardproblems kulikov_lecture02
20090913 algorithmsfornphardproblems kulikov_lecture0220090913 algorithmsfornphardproblems kulikov_lecture02
20090913 algorithmsfornphardproblems kulikov_lecture02Computer Science Club
 
Las tics en la Educacion por Cecilia Verdugo
Las tics en la Educacion por Cecilia VerdugoLas tics en la Educacion por Cecilia Verdugo
Las tics en la Educacion por Cecilia Verdugoceciliaverdugo
 
20080316 cryptography hirsch_lecture05
20080316 cryptography hirsch_lecture0520080316 cryptography hirsch_lecture05
20080316 cryptography hirsch_lecture05Computer Science Club
 
20080309 efficientalgorithms kulikov_lecture15
20080309 efficientalgorithms kulikov_lecture1520080309 efficientalgorithms kulikov_lecture15
20080309 efficientalgorithms kulikov_lecture15Computer Science Club
 

Viewers also liked (20)

20130420 mathematics and_internet-advertizing_in_internet-viktor_lobachev
20130420 mathematics and_internet-advertizing_in_internet-viktor_lobachev20130420 mathematics and_internet-advertizing_in_internet-viktor_lobachev
20130420 mathematics and_internet-advertizing_in_internet-viktor_lobachev
 
20080302 cryptography hirsch_lecture03
20080302 cryptography hirsch_lecture0320080302 cryptography hirsch_lecture03
20080302 cryptography hirsch_lecture03
 
Arogyaka Rajmarg Dr. Shriniwas Kashalikar
Arogyaka Rajmarg Dr. Shriniwas KashalikarArogyaka Rajmarg Dr. Shriniwas Kashalikar
Arogyaka Rajmarg Dr. Shriniwas Kashalikar
 
20091004 cryptoprotocols nikolenko_lecture04
20091004 cryptoprotocols nikolenko_lecture0420091004 cryptoprotocols nikolenko_lecture04
20091004 cryptoprotocols nikolenko_lecture04
 
20091101 algorithmsfornphardproblems kulikov_lecture06
20091101 algorithmsfornphardproblems kulikov_lecture0620091101 algorithmsfornphardproblems kulikov_lecture06
20091101 algorithmsfornphardproblems kulikov_lecture06
 
1. cover ppl
1. cover ppl1. cover ppl
1. cover ppl
 
Popplet miellekartta
Popplet miellekarttaPopplet miellekartta
Popplet miellekartta
 
Nabidka Survio a Vyzkumy.knihovna.cz
Nabidka Survio a Vyzkumy.knihovna.czNabidka Survio a Vyzkumy.knihovna.cz
Nabidka Survio a Vyzkumy.knihovna.cz
 
ECLAP tutorial, see http://www.eclap.eu, social networking, aggregation, myst...
ECLAP tutorial, see http://www.eclap.eu, social networking, aggregation, myst...ECLAP tutorial, see http://www.eclap.eu, social networking, aggregation, myst...
ECLAP tutorial, see http://www.eclap.eu, social networking, aggregation, myst...
 
Эффективное продвижение на мобильных сайтах
Эффективное продвижение на мобильных сайтахЭффективное продвижение на мобильных сайтах
Эффективное продвижение на мобильных сайтах
 
Telemarketing
TelemarketingTelemarketing
Telemarketing
 
Mobiilioppiminen on kokemuksellista
Mobiilioppiminen on kokemuksellistaMobiilioppiminen on kokemuksellista
Mobiilioppiminen on kokemuksellista
 
20071118 efficientalgorithms kulikov_lecture07
20071118 efficientalgorithms kulikov_lecture0720071118 efficientalgorithms kulikov_lecture07
20071118 efficientalgorithms kulikov_lecture07
 
prof. Milan Konvit: Nove medium
prof. Milan Konvit: Nove mediumprof. Milan Konvit: Nove medium
prof. Milan Konvit: Nove medium
 
200801 Generating OpenMP and Pthreads code
200801 Generating OpenMP and Pthreads code200801 Generating OpenMP and Pthreads code
200801 Generating OpenMP and Pthreads code
 
20090913 algorithmsfornphardproblems kulikov_lecture02
20090913 algorithmsfornphardproblems kulikov_lecture0220090913 algorithmsfornphardproblems kulikov_lecture02
20090913 algorithmsfornphardproblems kulikov_lecture02
 
Las tics en la Educacion por Cecilia Verdugo
Las tics en la Educacion por Cecilia VerdugoLas tics en la Educacion por Cecilia Verdugo
Las tics en la Educacion por Cecilia Verdugo
 
20080316 cryptography hirsch_lecture05
20080316 cryptography hirsch_lecture0520080316 cryptography hirsch_lecture05
20080316 cryptography hirsch_lecture05
 
20091101 mfcs itsykson_lecture05
20091101 mfcs itsykson_lecture0520091101 mfcs itsykson_lecture05
20091101 mfcs itsykson_lecture05
 
20080309 efficientalgorithms kulikov_lecture15
20080309 efficientalgorithms kulikov_lecture1520080309 efficientalgorithms kulikov_lecture15
20080309 efficientalgorithms kulikov_lecture15
 

Similar to 20100425 model based_testing_kuliamin_lectures01-03

TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...Iosif Itkin
 
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Dmitry Stropalov
 
Использование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовИспользование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовТранслируем.бел
 
Автоматизированная разработка генераторов тестовых программ для микропроцессо...
Автоматизированная разработка генераторов тестовых программ для микропроцессо...Автоматизированная разработка генераторов тестовых программ для микропроцессо...
Автоматизированная разработка генераторов тестовых программ для микропроцессо...CEE-SEC(R)
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and ClojureVasil Remeniuk
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)Smolensk Computer Science Club
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
Web осень 2012 лекция 9
Web осень 2012 лекция 9Web осень 2012 лекция 9
Web осень 2012 лекция 9Technopark
 
Интерпретирование языков с помощью Free-монад
Интерпретирование языков с помощью Free-монадИнтерпретирование языков с помощью Free-монад
Интерпретирование языков с помощью Free-монадZheka Kozlov
 
Делаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх WebdriverДелаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх WebdriverSQALab
 
Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыMikhail Kurnosov
 
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...Sigma Software
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиMikhail Kurnosov
 

Similar to 20100425 model based_testing_kuliamin_lectures01-03 (20)

TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
 
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)
 
Использование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетовИспользование GNU OCTAVE для инженерных и математических расчетов
Использование GNU OCTAVE для инженерных и математических расчетов
 
Автоматизированная разработка генераторов тестовых программ для микропроцессо...
Автоматизированная разработка генераторов тестовых программ для микропроцессо...Автоматизированная разработка генераторов тестовых программ для микропроцессо...
Автоматизированная разработка генераторов тестовых программ для микропроцессо...
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and Clojure
 
Scala for android
Scala for androidScala for android
Scala for android
 
Основы языка R
Основы языка RОсновы языка R
Основы языка R
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)
 
Charming python sc2-8
Charming python sc2-8Charming python sc2-8
Charming python sc2-8
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Web осень 2012 лекция 9
Web осень 2012 лекция 9Web осень 2012 лекция 9
Web осень 2012 лекция 9
 
Интерпретирование языков с помощью Free-монад
Интерпретирование языков с помощью Free-монадИнтерпретирование языков с помощью Free-монад
Интерпретирование языков с помощью Free-монад
 
Делаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх WebdriverДелаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх Webdriver
 
Java 8 puzzlers
Java 8 puzzlersJava 8 puzzlers
Java 8 puzzlers
 
Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмы
 
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
 
Scala
ScalaScala
Scala
 

More from Computer Science Club

20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugsComputer Science Club
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugsComputer Science Club
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugsComputer Science Club
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12Computer Science Club
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11Computer Science Club
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10Computer Science Club
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09Computer Science Club
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02Computer Science Club
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01Computer Science Club
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04Computer Science Club
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01Computer Science Club
 

More from Computer Science Club (20)

20141223 kuznetsov distributed
20141223 kuznetsov distributed20141223 kuznetsov distributed
20141223 kuznetsov distributed
 
Computer Vision
Computer VisionComputer Vision
Computer Vision
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04
 
20140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-0320140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-03
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01
 
20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 

20100425 model based_testing_kuliamin_lectures01-03

  • 1. В. В. Кулямин Институт системного программирования РАН Тестирование на основе моделей
  • 2. План Введение Сложность современных систем Тестирование и связанные понятия Тестирование на основе моделей Модели поведения Модели ситуаций Методы построения тестов Работы ИСП РАН 2
  • 3. Сложность современных систем Software сложнее hardware (1968) 3
  • 7. Статистика ошибок Основная причина – сложность Среднее количество ошибок на 1000 строк кода – постоянно (???) 7
  • 8. Риски, связанные с ошибками Космические аппараты Mariner I (1962) Фобос-1 (1988) Mars Climate Orbiter, Mars Polar Lander (1999) Инфраструктура AT&T long distance network crash (1990) Northeast Blackout (2003) OpenSSLrnd in Debian (2006-8) Heathrow Airport Terminal 5 baggage system (2008) Автомобили Toyota Prius (2005, 2010) Медицинское оборудование Therac-25 (1985-7) Авионика и военное оборудование Lockheed F-117 (1982) MIM-104 Patriot (1991) Ariane 5 (1996) USS Yorktown (1997) F-22 Raptor (2007) 8 Потерииндустрии США в 2001 году – 60 G$
  • 9.
  • 10. Computer Science и Software Engineering Computer Science Алгоритм Одна четкая задача ее м.б. невозможно решить или можно решить идеально Можно устранить ошибки Основа – математика Фундаментальная дисциплина Электродинамика Software Engineering Система Много неясных задач нужно решать неразрешимое и нельзя решить окончательно Ошибки есть всегда Основа – mix (???) Adhoc решения Микроэкономика Групповая и когнитивная психология Социология Инженерная дисциплина (???) Электротехника 10
  • 11. Тестирование [SWEBOK 2004] Проверка соответствия тестируемой системы требованиям Верификация Альтернативы – валидация Другие мнения (Cem Caner) – любой анализ В ходе реальной работы этой системы Альтернативы Экспертиза, статический анализ, проверка моделей (model checking) дедуктивный анализ (theorem proving) В конечном наборе специально созданных ситуаций Другие мнения (IEEE 610.12-1990) Альтернативы Мониторинг (runtime verification, passive testing) 11
  • 12. Цели тестирования Поиск ошибок Четкие результаты Гарантировать отсутствие ошибок нельзя Что делать, если ошибки не находятся? Когда можно прекратить тестирование? Оценка качества тестируемой системы (SUT) Объективные условия завершения Критерии полноты тестирования – как выбирать тесты Контроль развития системы Тесты – инструмент отслеживания изменений Организация тестов – как облегчить модификации 12
  • 13.
  • 14. Структура теста Тест – тестовая ситуация + проверка Тестовый вариант Инициализация Выполнение Проверка Финализация 14 public void testGetClients() { Session s =SessionFactory.getSession(); s.beginTransaction(); List<Client> clients =s.createQuery("from Client").list(); Client jones=newClient("Mike", "Jones"); Assert.assertContains(clients, jones "Jones should be in clients"); s.rollbackTransaction(); }
  • 15.
  • 16. Отправка сообщенияSend( new ProductValueChangeMsg(74291, 485) );
  • 18.
  • 19. Модели поведения Логико-алгебраические Различные логики Первого порядка, теории типов, временные, модальные, … Различные алгебраические структуры Исполнимые Различные автоматы FSM, LTS, расширенные, взаимодействующие, иерархические, временные, сети Петри, Statecharts, … Гибридные LTS ~ Алгебры процессов, модели стандартных термов Abstract State Machines Программные контракты с состоянием 17
  • 20. модели поведения – арифметика x – 32-битное целое число abs(x) – (x ≥ 0) ? (x) : (-x) abs(x) ≥ 0 abs(–2147483648) = Машинная целочисленная арифметика Z/232Z= {[-231], [-231+1], …, [-2], [-1], [0], [1], [2], …, [231-1]} +, –, * (34)! = 18 ? –2147483648 ? 0
  • 21. модели поведения – SQRT x – число с плавающей точкой (double) sqrt(x) – квадратный корень pre : (x ≥ 0) post: (sqrt*sqrt = x) r = [sqrt(2)]double = 6369051672525773/252 r*r = 2.0000000000000002734323463… post: abs(sqrt*sqrt – x) < ε = 3*10-16 r = [sqrt(2105)]double = 6369051672525773 abs(r*r – 2105) = 5545866846675497 post: (x = 0)  (sqrt = 0) &(x ≠ 0)  abs((sqrt*sqrt – x)/x) < ε 19
  • 22. модели поведения – арктангенс x – число с плавающей точкой (double) atan(x) – арктангенс post: (x = 0)  (atan = 0) & (x ≠ 0)  abs((tan(atan) – x)/x) < ε (tan(atan(1050)) = 1.633123935319537...⋅1016 [π/2]double = 884279719003555/249 (π/2 - [π/2]double) = 6.1232339957367658…⋅10–17 20 π/2 π/2 atan(x) [π/2]double
  • 23. Числа с плавающей точкой (IEEE 745) 21 1/2(n-k-1) –1 ulp k+1 n-1 0 1 k n, k 0 0 1 1 1 1 1 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 M E S знак экспонента мантисса B = 2(k–1) –1 Нормализованные:E> 0 & E < 2k –1X = (–1)S·2(E–B)·(1+M/2(n–k–1)) Денормализованные:E = 0X = (–1)S·2(–B+1)·(M/2(n–k–1)) Exceptional : E = 2k –1 M = 0 : +, – M ≠ 0 : NaN 2(–1)·1.1012 = 13/16 = 0,8125 0, -0 1/0 = +, (–1)/0 = – n = 32, k = 8 – float (single precision) n = 64, k = 11 – double n = 79, k = 15 – extended double n = 128, k = 15 – quadruple 0/0 = NaN
  • 24. Точная модель sqrt(IEEE 745) дает результат округления точного значения в соответствии с текущим режимом к ближайшему к +, к–, к 0 для +∞ дает +∞ и выставляет флаг DIVISION-BY-ZERO для -0 дает -0 (???!!!) для x < 0 дает NaNи выставляет флаг INVALID в случае неточного результата выставляет флаг INEXACT нигде не выставляет флаги OVERFLOW, UNDERFLOW 22
  • 25. модели поведения – семафор Расширенный конечный автомат 23 create() /sid; owner := null lock(tid)/oktid; owner:=tid waiting := new Queue timer:= new TimerList trylock(tid, wt)/ oktid; owner:=tid [tid=owner]lock(tid)/lockedtid [tid≠owner]lock(tid)/failtid Free Locked [tid=owner]trylock(tid, wt)/lockedtid [tid≠owner]trylock(tid, wt)/timer[tid]:=wt, waiting.push(tid) destroy() [tid=owner]unlock(tid)/oktid; owner:=null timeout[tid]/failtid; waiting.remove(tid) [tid=owner & !waiting.empty()]unlock(tid)/ok; owner:=waiting.pop(), timer[owner]:=0 [tid=owner & waiting.empty()]unlock(tid)/oktid; owner:=null
  • 26. Расширенная сеть Петри P модели поведения – буфер-стек 24 (in) (in) (in) (in) /x2:=in /x3:=in /x1:=in /x4:=in 0 1 2 3 4 /x1 /x2 /x3 /x4 C
  • 27. Модели поведения – список Абстрактный тип данных L – список объектов типа E Операции empty : Linsert : LNE  Lremove : LN  L size : L Nget : L  E Аксиомы empty.size() = 0 [0≤i≤X.size()] X.insert(i, e).size() = X.size() + 1 [0≤i<X.size()] X.remove(i).size() = X.size() – 1 [0≤i≤X.size()] X.insert(i, e).get(i) = e [0<i≤X.size() & 0≤j<i] X.insert(i, e).get(j) = X.get(j) [0≤i<X.size() & i<j≤X.size()] X.insert(i, e).get(j) = X.get(j-1) [0≤i≤X.size()] X.insert(i, e).remove(i) ≡ X [0<i≤X.size() & 0≤j<i] X.insert(i, e).remove(j) ≡ X.remove(j). insert(i-1, e) [0≤i≤X.size() & i<j≤X.size()] X.insert(i, e).remove(j) ≡ X.remove(j-1). insert(i, e) [0≤i≤X.size() & 0≤j≤i] X.insert(i, e1).insert(j, e2)≡ X.insert(j, e2).insert(i+1, e1) [0<i<X.size() & 0≤j<i] X.remove(i).remove(j) ≡ X.remove(j). remove(i-1) 25
  • 28. Модели ситуаций Составляющие Элементы тестовых ситуаций Действия и их наборы Данные и состояния Классификация ситуаций и их элементов, выделение однородных областей Важность и риски Видымоделей ситуаций Доменные (на основе входных и выходных данных) Структурные (на основе затрагиваемых элементов SUT) Функциональные (на основе элементов требований) Проблемные (на основе возможных проблем и рисков, гипотез об ошибках) 26
  • 30. Домены – структура данных 28 k+1 0 1 k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 M E S знак экспонента мантисса S = 0 или S = 1 Денормализованныечисла E = 0 M = 0 +0, –0 M ≠ 0 000001, 000101, 010100, 100000, 111111 Нормализованные числа 0 < E< 2k-1 E 000001, 000101, 011111, 100010, 111110 M 000000, 000001, 000110, 011001, 100110, 111111 Исключительные числа E = 2k-1 M = 0 +∞, –∞ M ≠ 0 NaN 000001, 000101, 010100, 101000, 111111
  • 31. Домены – интервалы однородности 29 max 0
  • 32. Домены – подобласти ax2 + bx + с = 0 int solve(double a, double, b, double c, double *x1, double *x2) 30
  • 33. структура потока управления Компоненты, классы, методы Инструкции Ветвления Цепочки блоков Цепочки вызовов Элементарные условия и их комбинации 31
  • 34. Примеры критериев покрытия public Node ReplaceChild(Node nc, Node oc) { if(nc == null) throw new NullReferenceException("The new child is null"); if(oc == null || !Children.Contains(oc)) throw new DomException("Ref node is not a child of this node", NOT_FOUND_ERROR); if( !(thisis Document) && nc.OwnerDocument != this.ownerDocument || this is Document && nc.OwnerDocument != this) throw new DomException("New child provided is from another document context", WRONG_DOCUMENT_ERROR); if(nc == this || Ancestors.Contains(nc)) throw new DomException("Cannot insert this node or its ancestor", HIERARCHY_REQUEST_ERROR); if(!(ncisISPImplDocumentFragment) && !this.IsAllowedChild(nc)) throw new DomException("Cannot insert ...", HIERARCHY_REQUEST_ERROR); if(this is Document && ncisDocumentType && !this.Children.Contains(nc) && this.HasDifferentChildOfType(typeof(DocumentType), oc)) throw newDomException("The second DocumentType cannot be inserted in a Document", HIERARCHY_REQUEST_ERROR); if( this is Document && ncisDocumentType && !this.Children.Contains(nc) && !this.HasDifferentChildOfType(typeof(DocumentType), oc) && HasDifferentNoncommentChildrenBefore(oldChild, newChild)) throw new DomException("DocumentType node cannot be inserted in a Document after non-comment nodes", UNKNOWN_ERROR); if( this is Document && !(ncis Comment) && !(ncisDocumentFragment) && !(oldChildisDocumentType) && HasDifferentDocumentTypeChildAfter(oldChild, newChild)) throw new DomException("Non-comment node cannot be inserted into a Document before DocumentType", UNKNOWN_ERROR); if(this is Document && ncis Element && !this.Children.Contains(nc) && this.HasDifferentChildOfType(typeof(Element), oc)) throw new DomException("The second Element cannot be inserted in a Document", HIERARCHY_REQUEST_ERROR); if(this.IsReadOnly) throw new DomException("This node is read-only", NO_MODIFICATION_ALLOWED_ERROR); if(nc.ParentNode != null && nc.ParentNode.IsReadOnly) throw new DomException("Parent of new child is ...", NO_MODIFICATION_ALLOWED_ERROR); if(ncisDocumentFragment) { foreach(Node niinnc.Children) { if(!this.IsAllowedChild(ni)) throw new DomException("Cannot insert ...", HIERARCHY_REQUEST_ERROR); if(this is Document && niisDocumentType && this.HasDifferentChildOfType(typeof(DocumentType), null)) throw new DomException("The second DocumentType cannot be inserted in a Document", HIERARCHY_REQUEST_ERROR); if(this is Document && niis Element && this.HasDifferentChildOfType(typeof(Element), null)) throw new DomException("The second Element cannot be inserted in a Document", HIERARCHY_REQUEST_ERROR); if(this is Document && !(niis Comment) && !(oldChildisDocumentType) && HasDifferentDocumentTypeChildAfter(oldChild, null)) throw new DomException("Non-comment node cannot be inseted into a Dcoument before DocumentType", UNKNOWN_ERROR); } } inti = this.Children.IndexOf(oc); if(!(ncisDocumentFragment) && nc != oc) { if(nc.ParentNode != null) nc.ParentNode.Children.Remove(nc); nc.parent = this; if(this.Children.Contains(nc)) this.Children.Remove(nc); this.Children.Insert(i, nc); } else if(ncisDocumentFragment) { foreach(Node niinnc.Children) {ni.parent = this; this.Children.Insert(i++, ni); } nc.Children.Clear(); } if(nc != oc) {this.Children.Remove(oc); oc.parent = null; } returnoc; } 32
  • 35. Структура потоков данных 33 DU-пары и DU-пути 1intgcd(inta, intb) 2 { 3 if(a == 0) 4returnb; 5 if(b == 0) 6returna; 7 if(a > 0 &&b < 0 ||a < 0 &&b > 0) 8b = -b; 9 10 while(b!= 0) 11 { 12 if(b > a&&a > 0 ||b < a&&a < 0) 13 { 14 a = b-a; 15 b = b-a; 16 a = a+b; 17 } 18 19 b = a-b; 20 a = a-b; 21 } 22 23 returna; 24 } 3 5 4 7 6 7’ 10 23 12 12’
  • 36. Структура автоматов Состояния Переходы Цепочки переходов Простые пути Простые циклы с продолжением 34 0 1 2 3 4 5 6 7
  • 37.
  • 40.  X := Y – Z
  • 41.
  • 42. Вероятностные методы Тестовые ситуации строятся на основе вероятностных распределений Модель ситуаций представляет собой распределения для различных элементов ситуаций По частоте использования По связанным рискам По отлаженности 37
  • 43.
  • 45. Хорошо находятся случайные ошибки (опечатки)
  • 46. Полнота полученного набора тестов непредсказуема
  • 49. Комбинаторные методы Тестовые воздействия разбиваются на некоторые элементы Тестовые ситуации строятся как всевозможные комбинации этих элементов по определенным правилам Дерево классификации Тестирование на основе грамматик Покрывающие наборы Пути в автоматах 39
  • 50.
  • 52. Более систематично, чем вероятностное
  • 53. Некоторые виды ошибок находятся плохо
  • 54. При учете многих факторов построение набора тестов требует гораздо больше ресурсов 40
  • 55. Пример: Печать web-страницы 41 3·2·5·4·3·5 = 1800 вариантов
  • 56. Решение 42 25 вариантов Покрытие пар – покрывающий набор силы 2 Можно построить комбинации всех троек – покрывающий набор силы 3 – 100 вариантов
  • 57. Покрывающие наборы Покрывающий набор силы t для k параметров, имеющих значения n1, …, nk – матрица {Сij} i[1..N], j[1..k], Cij[1..nj] j1, …, jtjl[1..k] vj1, …, vjtvjl[1..njl] i[1..N] l[1..t] Сijl = vjl множество таких наборов – CA(t; n1, …, nk) Однородные наборы – n1= … =nk=n, CA(t; k, n) Минимальное число строк в однородном наборе – ~tntlog1+(k) Построение минимальных однородных наборов из CA(t; k, 2) или CA(2; k, n > 2) – NP-полная задача 43
  • 58. Бинарные покрывающие наборы Алгоритм построения CA(2; k, 2) Выбрать N :k ≤ CN-1N/2 Можно построить набор из N строк 44
  • 59. Геометрические конструкции Алгоритм построения CA(2; pk+1, pk) n=pk, p – простое Первый столбец (∞)– блоки по n одинаковых значений i Второй столбец (0) – все n значений j в каждом блоке В столбце с номером m1..(n-1) (i*m+j) в поле GF(pk) 45
  • 60. Рекурсивные конструкции Алгоритм построения CA(2; mn+1, n=pk) из CA(2; m, n) Исходный набор {Aij} i[1..N], j[1..m] Вспомогательная матрица{Bij} i[1..z=(n2-n)], j[1..(n+1)] 46
  • 61. Общие покрывающие наборы Неоднородные Переменной силы С ограничениями на сочетания значений Переборно-оптимизационные алгоритмы 47
  • 62.
  • 67.
  • 71. Требует анализа осуществимости вариантов и подбора данных49
  • 72. Автоматизация создания тестов Разрешение ограничений Перебор данных с проверкой попадания в нужную ситуацию Использование решателей (SMT-solvers) Оптимизационные алгоритмы 50
  • 73. Автоматные методы 51 a/x a/x 0 0 b/y b/y b/y b/y 1 2 1 2 b/x b/x a/y a/x a/y a/x Спецификация Реализация Всегда ли реализация ведет себя как спецификация?
  • 74. Ограничения Требования к спецификации Детерминизм Полная определенность Минимальность Сильная связность или наличие reset (R) Гипотезы о реализации Реализация – конечный детерминированный автомат с теми же стимулами I и реакциями O Полная определенность Сильная связность или наличие reset (R) В начале находимся в начальном состоянии Число состояний ограничено 52
  • 75.
  • 80. Пример: W = {a, b} или {ab}
  • 81. W-метод (применим всегда, сложность O(pn3))
  • 83.
  • 84. Сложные отношения согласованностиТеория разработана плохо – нет финитных моделей ситуаций 54
  • 85. Работы ИСП РАН Разработка тестов и тестирование Операционные системы реального времени Базовые библиотеки Linux (Linux Standard Base) Протоколы IPv6, Mobile IPv6, IPsec Отдельные модули компиляторов Intel Микропроцессоры архитектуры MIPS Создание технологий и инструментов Тестирование на основе моделей (UniTESK) Проверка соответствия стандарту LSB 55
  • 86. Технологическая схема 56 Генератор воздействий 12% 36% 57% 87% Модель ситуаций Метрика покрытия Тестируемая система Модель поведения Модель состояния Модель состояния + оракул
  • 87. Расширения языков программирования 57 specification classSqrtSpecification { specificationstaticdoublesqrt(doublex) readsx { pre { returnx>= 0; } post { if(x== 0) { branch "Zeroargument"; returnsqrt== 0; } else { branch "Positiveargument"; returnsqrt>= 0 &&Math.abs((sqrt*sqrt-x)/x <epsilon; } } } } specification double SQRT(double x) reads (double)x { pre { return x >= 0.; } coverage ZP { if(x == 0.) return(ZERO, "Zero argument"); else return(POS, "Positive argument"); } post { if(coverage(ZP, ZERO)) return SQRT == 0.; else returnSQRT >= 0. && abs((SQRT*SQRT - x)/x) < epsilon; } } } сигнатура операции ветви функциональности постусловие ограничения доступа предусловие
  • 88. Построение конечного автомата 58 параметры область определения операции 2 3 цели покрытия 1 состояния
  • 89. Тестирование компонентов 59 Генерация тестовой последовательности на лету Генератор Описание автомата Обходчик автоматов Итераторы данных Действия Состояния Метрика покрытия Предусловия Модель ситуаций Варианты исполнения Виды состояний Виды параметров Тестируемая система Модель поведения Модель состояния Оракулы Постусловия Структуры данных Операции и события Инварианты Пред- и постусловия
  • 90.
  • 92. Семантика чередования – это множество должно вытягиваться в последовательность
  • 93. Модель ситуаций Шаблоны Комбинации Варианты исполнения Эквива-лентность Ограничения сложности Модель поведения Алгоритм обработки Типы данных Структура процессора Блоки и связи Целевой язык Инструкции Модель исполнения Генерация тестовых программ 61 Генератор Зависимости Итератор комбинаций Итераторы данных Итератор зависимостей Итератор ситуаций Тестовые программы Модель исполнения Привязка инструкций