Слайд 1Технологии тестирования
ИСП РАН
В. Кулямин
kuliamin@ispras.ru
Слайд 2Определение тестирования
IEEE 610:
Оценка соответствия системы требованиям к ней
на основе результатов наблюдения
за ее работой
в специально подготовленных ситуациях
Система в ходе тестирования должна работать
Нужно готовить специальные ситуации – тесты
Оценивается соответствие – ищем ошибки
Нужна общая оценка – ищем все ошибки
Слайд 3Как происходит тестирование
Воздействуем на тестируемую систему
Наблюдаем ее реакцию
Проверяем, такая ли реакция
должна быть
Повторяем, пока не исчерпаются все существенно различные ситуации
Слайд 4«Обычное» тестирование
Придумываем ситуацию
Оформляем ее в виде сценария взаимодействия теста с системой
Понимаем,
как должна система вести себя в его рамках
Дополняем сценарий проверкой правильности
Получается тестовый вариант (test case)
Оцениваем достаточность имеющегося набора ситуаций: достаточно – конец, нет – goto 1
Слайд 5Пример
uint gcd (uint a, uint b)
{
int t;
if(b >
a)
{ t = a; a = b; b = t; }
while(b > 0)
{ t = b; b = a%b; a = t; }
return a;
}
gcd ( 2, 1 ) == 1 ?
gcd ( 3, 2 ) == 1 ?
gcd ( 4, 2 ) == 2 ?
gcd ( 175, 15 ) == 5 ?
Слайд 6Другой пример
Ограниченная очередь размера 3
В начале – пуста
put(X)
Y = take()
assert (Y
== X)
?
В начале – полна
put(X)
assert (exception)
Слайд 7Зачем нужны модели?
Распознавание ошибки
– ментальная модель правильной работы
Math.abs(-2147483648) =
Полнота набора
ситуаций
– ментальная модель всех важных ситуаций
Управление построением тестов
– ментальная модель устройства тестовых воздействий
При тестировании на основе моделей
модели выделяются явно и заранее
-2147483648
Слайд 8Тестирование на основе моделей
Систематичность
Строгость
(→ формальность)
Абстрактность
Автоматизация
Быстрая подготовка тестов (часто до тестируемой
системы)
Сложность
Повышенные требования к разработчикам тестов
Образование
Абстрактное мышление
Умение программировать
Трудность интеграции в обычную разработку
Слайд 9Тестируемая система
Тестовые оракулы
Тестовый оракул
Модель
Тестовые воздействия
?
Слайд 10Оценка полноты тестирования
Тестируемая система
Метрика полноты
Модель
Тестовые воздействия
?
73%
Слайд 11Управление построением тестов
Тестируемая система
Метрика полноты
Модель
Тестовые воздействия
Тестовые воздействия генерируются
целенаправленно – для увеличения полноты тестирования
Слайд 12Пример использования моделей
uint gcd (uint a, uint b)
gcd ( 2, 1
) ==
gcd ( 3, 2 ) ==
gcd ( 4, 2 ) ==
gcd ( 175, 15 ) ==
a%gcd(a, b) == 0 ?
b%gcd(a, b) == 0 ?
for(int i=gcd(a,b)+1; i{ a%i != 0 || b%i != 0 } ?
1 ?
1 ?
2 ?
5 ?
b>a
b>0
Слайд 13Другой пример
Ограниченная очередь размера 3
∅
[X]
[Y]
[X, X]
[X, Y]
[Y, X]
[Y, Y]
[X, X, X]
[X,
X, Y]
[X, Y, X]
[X, Y, Y]
[Y, X, X]
[Y, X, Y]
[Y, Y, X]
[Y, Y, Y]
Слайд 14Что надо сделать?
При выполнении тестов
Обеспечение полноты
Построение набора воздействий
Построение каждого воздействия
Применение набора
воздействий
Получение результатов
Проверка корректности результатов
Диагностика ошибок
Оценка полноты тестирования
При сопровождении тестов
Удобство разработки
Удобство использования
Удобство сопровождения
Переиспользование
x.a = -1
x.b = 3.1415
x.c = x
Тестируемая система
f(x)
g(x)
f(y)
h(x,y)
f(x)
?
Слайд 15UniTESK – модели
Описание требований
Структура данных – простые структуры, грамматики
Поведение – контрактные
спецификации
Параллелизм – аксиома простого параллелизма
Критерии полноты
Варианты в рамках грамматик
Варианты в рамках контракта
Построение тестов
Генераторы данных по грамматикам
Построение конечных автоматов, обеспечивающих полноту покрытия вариантов контракта, их автоматический обход
Слайд 16Грамматики
BNF
Генерация корректных данных
– покрытие всех альтернатив, итераций на заданную глубину
Генерация
некорректных данных
– покрытие всех неправильных в данном контексте терминалов
Контекстные условия
Нацеленная генерация
– ссылочная целостность, единственность в данном контексте
Фильтрация
Описание абстрактного синтаксиса
Слайд 17Абстрактный синтаксис и тесты
Описание абстрактного синтаксиса
Набор базовых блоков модели
Тестовые программы
Итератор
комбинаций
Привязка базовых блоков
if(…)…else …
for(…;…;…)
Слайд 18Проверка корректности
входные данные
программы
Тестовая
программа
==
?
Тестируемый
компилятор
Эталон
Слайд 19Пример: простые выражения
Test
Expression
stmts
1..*
left 1
right 1
Statement
var 1
expr
1
xi = Expr
xi
17
Expr1
Слайд 20Генерация данных по описанию абстрактного синтаксиса
Демонстрация
Слайд 21Контрактные спецификации
Тестируемая система разбивается на компоненты
Каждый компонент имеет внутренние данные и
набор операций
Поведение операции определяется ее контрактом
Предусловие описывает область определения операции
sqrt(x): pre x ≥ 0
Постусловие описывает ограничения на правильные результаты операции
sqrt(x): post result*result == x
Инварианты компонента описывают условия целостности его данных
Triangle: double x,y,z : x+y>z & x+z>y & y+z>x
Слайд 22Пример
specification class ClientManager
{
specification Client addClient ( String name )
{
post
{
if ( name == null || clients.containsKey(name) )
{
branch "Client cannot be created";
return addClient == null && clients.equals( pre clients.clone() );
}
else
{
branch "Client can be created";
HashMap oldClients = (HashMap)clients.clone();
oldClients.remove(name);
return addClient != null && addClient.name.equals(name)
&& addClient.parent == null && addClient.children.isEmpty()
&& clients.get(name) == addClient
&& oldClients.equals( pre clients.clone() );
}
}
}
}
Слайд 23Метрики полноты тестирования
post {
if ( f(a, b) ||
g(a) ) …
else if( h(a, c) && !g(b) ) …
else …
}
Слайд 24Построение конечного автомата
состояния
параметры
область определения операции
1
2
3
цели тестирования
Слайд 26Построение одного воздействия
1
2
3
текущее состояние
параметры
состояния
Слайд 27Картина в целом
Тестируемая система
Модель поведения
Описание автомата
Метрика полноты
Генерация тестовой последовательности на лету
Проверка
Слайд 28Тестирование компонентов на основе контрактов
Демонстрация
Слайд 29Описание асинхронных систем
Интерфейс компонента состоит из операций и событий
События тоже описываются
при помощи контракта
Постусловие события определяет корректность его наступления и изменения состояния компонента
eMailSent:
post pre mails.size() != 0
&& mails.size() == pre mails.size()-1
Слайд 31Тестирование асинхронности
s11
Тестируемая система
s21
s12
s31
Используется мультипоследовательность воздействий
Воздействия и реакции образуют частично упорядоченное множество
r12
r22
r11
r21
Время
11
12
21
11
22
21
12
31
Время
Слайд 32Проверка корректности
Аксиома простого параллелизма
✓
Слайд 33Применение UniTESK
Разработка тестового набора для ядра 1994-1997
ОС телефонной станции Nortel Networks
Реализации
IPv6
Microsoft Research 2000-2001
Мобильный IPv6 (в Windows CE 4.1) 2002-2003
Октет 2002
Оптимизаторы компиляторов Intel 2001-2003
Стандарт AVS-IPMP 2004
Тестовый набор для IPsec 2004-…
Тестовый набор для Linux Standard Base 3.1 2005-…
Компоненты биллинговой системы и EAI 2005-…
Тестовый набор для ОС ос2000 (НИИСИ) 2005-...
Пилотные проекты
ГосНИИАС 2003
Компоненты TinyOS 2003
Компоненты CRM-системы (Luxoft) 2004
Оптимизатор трансляции граф. моделей 2005
http://www.unitesk.com/ru
Слайд 34Область применимости
Тестируемые интерфейсы должны быть четко определены
Сложность интерфейса
Наблюдаемая сложность состояния
Компиляторы
Компонентные
системы
Протоколы
Информационные системы
Web-приложения
Слайд 35Литература
И. Б. Бурдонов, А. С. Косачев, В. В. Кулямин. Использование конечных
автоматов для тестирования программ. Программирование, 26(2):61-73, 2000
I. Bourdonov, A. Kossatchev, V. Kuliamin, A. Petrenko. UniTesK Test Suite Architecture. Proc. of FME 2002, LNCS 2391, pp. 77-88, Springer-Verlag, 2002
В.В.Кулямин, А.К.Петренко, А.С.Косачев, И.Б.Бурдонов. Подход UniTesK к разработке тестов. Программирование, 29(6):25-43, 2003
A. Kossatchev, A. Petrenko, S. Zelenov, S. Zelenova. Using Model-Based Approach for Automated Testing of Optimizing Compilers. Proc. Intl. Workshop on Program Undestanding, Gorno-Altaisk, 2003
А. В. Баранцев и др. Подход UniTesK к разработке тестов: достижения и перспективы. Труды ИСП РАН, т. 5, с. 121-156, 2004
С. Зеленов, С. Зеленова, А. Косачев, А. Петренко. Генерация тестов для компиляторов и других процессоров формальных текстов. Программирование, 29(2):104-111, 2003
V. Kuliamin, A. Petrenko. Applying Model Based Testing in Different Contexts. Proc. of seminar on Perspectives of Model Based Testing, Dagstuhl, Germany, September 2004.
V. Kuliamin, N. Pakoulin, A. Petrenko. Practical Approach to Specification and Conformance Testing of Distributed Network Applications. Proc. of 2-nd International Service Availability Symposium, LNCS 3694, pp. 68-83, Springer-Verlag, 2005
Слайд 36Контакты
Группа RedVerst
Сайт:
www.ispras.ru/groups/rv/rv.html
Сайт UniTESK: www.unitesk.com
e-mail: petrenko@ispras.ru
Телефон: (8-495)-9125317
Факс: (8-095)-9121524
Докладчик
Сайт: www.ispras.ru/~kuliamin
e-mail: kuliamin@ispras.ru