2. Напутствие
«Модели
-‐
это
мысленные
инструменты,
в
них
нет
чего-‐либо
принципиально
правильного
или
неправильного.
Они
могут
быть
полезными
и
бесполезными.»
Б.
Бейзер,
«Тестирование
черного
ящика»
ИИТУ
Тестирование
ПО,
2014
2
3. Что
такое
«черный
ящик»?
• Не
знаю,
что
это,
но
нужно
проверить
что
оно
работает
правильно
• «Горшочек,
не
вари!»
• Квадрат
Малевича
• Кубик-‐рубик?
ИИТУ
Тестирование
ПО,
2014
3
4. Что
такое
«черный
ящик»?
• Не
знаю,
что
это,
но
нужно
проверить
что
оно
работает
правильно
• «Горшочек,
не
вари!»
• Квадрат
Малевича
• Кубик-‐рубик?
Нет.
ИИТУ
Тестирование
ПО,
2014
4
5. Тестирование
«черного
ящика»
А.к.а.
• Поведенческое
тестирование
• Функциональное
тестирование
Мы
знаем,
с
чем
имеем
дело.
ИИТУ
Тестирование
ПО,
2014
5
7. С
чего
начать?
• Какой
подход
к
тестированию
выбрать?
• Какие
тесты
из
огромного
множества
выбрать?
• Как
оценить
время
тестирования?
– На
этот
вопрос
мы
здесь
не
будем
отвечать
:)
ИИТУ
Тестирование
ПО,
2014
7
8. Тестирование
по
модели
1. Составление
спецификации
2. Анализ
требований
– Однозначность
– Тестируемость
– Непротиворечивость
3. Составление
модели
4. Составление
тестовых
сценариев
по
модели
5. Проведение
тестирования
6. Анализ
покрытия
7. Повторить
или
завершить
тестирование
ИИТУ
Тестирование
ПО,
2014
8
9. Построение
модели
• Графы
• Узлы
• Связи
• Их
свойства
– Симметричность,
транзитивность,
направление…
ИИТУ
Тестирование
ПО,
2014
9
10. Создание
тестового
набора
• Начиная
с
самых
простых
сценариев
• Дополняем
набор,
чтобы
обеспечить
желаемую
полноту
тестирования
(покрыть
граф)
• Проводим
тесты,
анализируем
результаты…
ИИТУ
Тестирование
ПО,
2014
10
11. Что
делать
со
всеми
этими
тестами?
• Как
понять,
что
результат
теста
говорит
об
ошибке?
• Где
взять
эталон
ожидаемого
значения?
• Одного
ответа
нет,
зато
есть
много:
– Уже
существующие
тесты
(работающие)
– Предыдущая
версия
программы
(stable)
– Прототипная
или
модельная
программа
– Простые
сценарии
(«синтетические»)
– Сама
программа
(но
что
мы
в
таком
случае
проверяем?)
ИИТУ
Тестирование
ПО,
2014
11
18. Пример.
Тестирование
веб-‐форм
Модель
• Заполнить
имя
счетчика
или
адрес
сайта
и
нажать
«принимаю
соглашение»
– Доступна
кнопка
«Продолжить»
• Нажать
кнопку
«продолжить»
– Создание
счетчика
– Переход
на
страницу
со
счетчиком
ИИТУ
Тестирование
ПО,
2014
18
19. Пример.
Тестирование
веб-‐форм
Анализ
модели
• Узлы
–
действия
пользователя
• Связи
–
последовательность
действий
• Условия?
– Тоже
узлы
– Содержат
предикаты
– Исходящих
связей
>
1
• Граф
потока
управления
ИИТУ
Тестирование
ПО,
2014
19
20. Граф
потока
управления
• Блок-‐схема
• Модель
–
это
программа
на
псевдокоде
– Может
существовать
только
у
вас
в
голове
:)
• Как
создавать
тестовые
сценарии
по
такой
модели?
ИИТУ
Тестирование
ПО,
2014
20
21. Граф
потока
управления:
пишем
тесты
1. Проверить
узлы
графа
– Пользователь
может
сделать
каждое
действие?
– Нет
ли
лишних
доступных
действий?
2. Проверить
связи
– Правильно
ли
обрабатываются
последовательности
действий?
3. Проверить
входы
и
выходы
– Как
можно
попасть
на
форму?
– Как
можно
выйти
с
формы?
ИИТУ
Тестирование
ПО,
2014
21
22. Граф
потока
управления:
rule
of
thumb
• Сначала
создать
простые
тесты
• Если
простые
тесты
не
дают
нужное
покрытие,
сделайте
более
сложные
• Если
тест
слишком
сложен
–
мы
что-‐то
делаем
не
так
ИИТУ
Тестирование
ПО,
2014
22
23. Пример.
Тестирование
веб-‐форм
Тест-‐кейсы
1. Кейс
1.
1. Заполнить
имя
счетчика
2. Нажать
«принимаю
условия»
3. Нажать
«продолжить»
4. Ожидание
–
счетчик
появился
в
списке
2. Кейс
2.
1. Заполнить
сайт
2. Дальше
1.2
–
1.4
3. Кейс
3.
1. Заполнить
имя
2. Заполнить
сайт
3. Дальше
1.3,
1.4
Этого
достаточно?
ИИТУ
Тестирование
ПО,
2014
23
26. Пример.
Обработчик
логов
событий
• Входные
данные
–
текстовые
файлы
вида
user_<‚mestamp>.txt
– UserID,
EventTime
• Выходные
данные
– Date,
UniqUsersCount
• Входные
логи
появляются
в
real-‐‚me
• Обработчик
запускается
по
cron,
обработанные
логи
удаляются
• Обработчик
считает,
сколько
было
уникальных
пользователей
за
каждый
день
• Обработчик
берет
все
файлы
которые
есть
ИИТУ
Тестирование
ПО,
2014
26
27. Пример.
Обработчик
логов
событий
Явный
цикл
• Входных
файлов
нет
• Есть
один
файл
• Есть
много
файлов
Другой
явный
цикл
• Файл
пуст
• В
файле
1,
2,
много
записей…
Неявный
цикл?
• SomeId
за
день
SomeDate
не
встречался
• SomeId
встретился
однажды
• SomeId
встретился
несколько
раз
ИИТУ
Тестирование
ПО,
2014
27
28. Модель:
цикл
• 0
итерация
(мимо
цикла)
• 1
итерация
(или
n
первых
итераций)
• Все
последующие
итерации
• …
• Максимальная
итерация
?
– В
нашем
примере
маловероятно
достичь
ограничения
сверху
ИИТУ
Тестирование
ПО,
2014
28
31. Модель
• CFG
не
подходит.
Что
еще?
• Попробуем
вывести
• Имеем
такой
же
цикл,
но
усложненные
условия
ИИТУ
Тестирование
ПО,
2014
31
32. Создадим
модель
• Если
EventType
=
Click
– Если
нет
UserID,
Date
• Если
TraficSource
=
Search
– Insert
UserID,
1,
0
• Если
TraficSource
=
Adv
– Insert
UserID,
0,
1
• Иначе
ничего
– Если
есть
UserID,
Date
• Если
TraficSource
=
Search
– Replace
UserID,
searchCntOld
+
1,
advCntOld
• Если
TraficSource
=
Adv
– replace
UserID,
searchCntOld,
advCntOld
+
1
• Иначе
ничего
ИИТУ
Тестирование
ПО,
2014
32
33. Тестирование
потока
данных
• data
flow
graph
• Узлы
– Входные
–
параметры
извне
– Вычисляющие
–
которые
генерируют
промежуточное
значение
– Выходные
–
которые
выводят
конечное
значение
– Условия
выбора
данных
• Связи
– «используется
для
вычисления»,
«входит
в
формулу»
ИИТУ
Тестирование
ПО,
2014
33
34. Метод
тестирования
графа
потока
данных
1. Проверить,
дополнить
спецификацию
2. Найти
входные
переменные,
константы
3. Найти
функции,
зависящие
только
от
констант
или
входных
переменных
4. Найти
функции,
зависящие
только
от
ф.
из
3
5. …
6. профит
ИИТУ
Тестирование
ПО,
2014
34
35. Пример.
Сложный
обработчик
логов
• Константы
– EventType
=
Show,
Click;
TraficSource
=
Adv,
Search,
Other;
0,
1;
• Входные
переменные
– UserID,
EventTime,
EventType,
TraficSource
– UsersClicked:
Date,
SearchUniqUsersCount,
AdvUniqUsersCount
–
с
предыдущего
шага
• Функции
– Определение
типа
события
– Определение
типа
источника
– Вычисление
{Search|Adv}ClickCnt
для
новой
строки
– Вычисление
{Search|Adv}ClickCnt
для
обвовляемой
строки
– …
ИИТУ
Тестирование
ПО,
2014
35
38. Пример.
Сложные
условия
• Будем
считать
TopAc‚veUniqUsers
– Date,
TopAc‚veUniqUsersCnt
• Критерий:
SearchClickCount
>
5,
AdvClickCount
<=
10,
за
день
ИИТУ
Тестирование
ПО,
2014
38
39. Пример.
Сложные
условия
• Составной
предикат
– SearchClickCount
>
5
and
AdvClickCount
<=
10
• Сколько
есть
вариантов
входных
параметров?
– Maxint
*
maxint
• Сколько
есть
вариантов
выходного
значения?
– 2
• Разобьем
на
части:
– F1
<=
SearchClickCount
>
5
(int
-‐>
boolean)
– F2
<=
AdvClickCount
<=
10
(int
-‐>
boolean)
– F3
<=
F1
and
F2
• Сколько
нужно
тесткейсов?
ИИТУ
Тестирование
ПО,
2014
39
43. Пример.
Конвейер
обработки
логов
Этапы
конвейера
1. Делит
входные
логи
на
шарды
– UserID
%
10
=
номер
шарда
– Из
1
получается
10
2. Считает
статистику
UserID,
Date,
Count
– Заводит
заявку
на
обновление
сводной
статистики
3. Считает
сводную
статистику
Date,
UniqUsersCount
– Удаляет
заявку
ИИТУ
Тестирование
ПО,
2014
43
44. Что
изменилось?
• Для
этапов
конвейера
есть
CFG,
DFG
• Создаются
и
удаляются
заявки
на
обработку
• Нет
заявки
–
нет
результата
ИИТУ
Тестирование
ПО,
2014
44
45. Граф
потока
транзакций
• !=
транзакциям
в
БД
• То
же,
что
и
раньше
+
маркеры
(транзакции,
заявки)
• Узлы
–
обработчики
заявок
• Связи
–
переходы
заявок
между
узлами
ИИТУ
Тестирование
ПО,
2014
45
46. Метод
тестирования
1. Проверить/дополнить
спецификацию
2. Обозначить
все
виды
транзакций
3. По
каждому
виду
1. Как
возникает
2. Как
уничтожается
3. Как
хранится
4. Каков
порядок
обработки
транзакций?
5. Разбить
граф
на
части,
проверить
от
малого
к
целому
ИИТУ
Тестирование
ПО,
2014
46
47. Оценка
покрытия
• Все
узлы
–
все
этапы
конвейера
– слабое
• Создание
и
поглощение
всех
заявок
– лучше
• Все
связи
–
переходы
заявок
между
узлами
– Хорошее
• Если
конвейер
straigh¤orward,
можно
обойтись
1
большим
тест-‐кейсом
ИИТУ
Тестирование
ПО,
2014
47
48. Когда
использовать
граф
потока
транзакций
1. Есть
параллельные
вычисления
2. Работа
идет
кусочками.
Прогресс
сохраняется.
3. Есть
очереди
обработки
4. Есть
механизм
отправки
сообщений
5. Обработка
распределена
ИИТУ
Тестирование
ПО,
2014
48
54. Пример.
Веб-‐интерфейс
графика.
Модель
• Временной
период
• Тип
данных
• Способ
группировки
• Состояние
графика
–
объединение
состояний
его
контролов
• Графики
есть
почти
в
каждом
отчете
ИИТУ
Тестирование
ПО,
2014
54
55. Тестирование
конечного
автомата
• Узлы
–
состояния
• Связи
–
переходы
между
ними
• Веса
связей
–
условия
переходов
• Начальная
маркировка
– Значения
по-‐умолчанию
для
контролов
– Запоминаются
ли
значения
с
прошлого
визита,
и
как?
ИИТУ
Тестирование
ПО,
2014
55
56. Методика
тестирования
• Все
состояния
• Все
переходы
между
состояниями
• От
частного
к
целому
ИИТУ
Тестирование
ПО,
2014
56