Технология программирования
Введение
Введение
Введение
Связь процесса тестирования и процесса проектирования
Связь процесса тестирования и процесса проектирования
Уровни тестирования
Виды тестирования
Стратегии тестирования
Стратегии тестирования
Стратегии тестирования
Тестирование модуля
Тестирование модуля
Тестирование модуля
Тестирование интеграции (интегрированное тестирование)
Тестирование интеграции
Тестирование интеграции
Тестирование интеграции
Тестирование интеграции
Тестирование интеграции
Тестирование интеграции
Тестирование интеграции
Системное тестирование (разработка функциональных тестов)
Метод диаграмм причин-следствий
Метод диаграмм причин-следствий
Метод диаграмм причин-следствий
Метод диаграмм причин-следствий
955.50K

Тестирование надежности программного обеспечения

1. Технология программирования

Надежность программного
обеспечения

2. Введение

3. Введение

Ошибка – это неспособность системы действовать в
соответствии с перечнем требований,
предъявляемых к системе
Ошибка имеет место, если программное
обеспечение не выполняет того, что пользователю
разумно от него ожидать
Отказ – проявление ошибки
частота
отказов
Аппаратура
Программное обеспечение
время

4. Введение

Тестирование – это процесс выполнения программы с целью
обнаружения ошибок
Доказательство – попытка найти ошибку в программе
безотносительно к входным данным
Контроль (верификация) – поиск ошибок в ПО при
выполнении его в тестовой моделируемой среде
Испытание – поиск ошибок в ПО при выполнении его в
заданной реальной среде
Отладка – установление точной причины обнаруженной
ошибки. Результаты тестирования являются исходным
материалом для отладки
Надежность ПО – это вероятность его работы без отказов в
течение определенного периода времени, рассчитанная с
учетом стоимости для пользователя каждого отказа

5. Связь процесса тестирования и процесса проектирования

Уровни тестирования
Внешние
спецификации
Архитектура
системы
Реализация
модулей
Контроль
требований
Контроль
проектирования
Контроль
проектирования
Приемо-сдаточные испытания
(Acceptance Testing)
Системное тестирование
(System Testing)
Тестирование
интеграции
Комплексное тестирование
(Integration Testing)
Тестирование модулей
(Unit Testing)
Исполнение тестов
Потребности
Подтверждение
требований
Подготовка тестов
Связь процесса тестирования и
процесса проектирования

6. Связь процесса тестирования и процесса проектирования

Software testing : testing
across the entire software
development life
cycle / by Gerald D.
Everett, Raymond
McLeod, Jr.
Defect correction cost profile for the
software industry

7. Уровни тестирования

Тестирование модуля. Выявление ошибок в минимальных
элементах программной системы. Выполняется по мере разработки
модулей
Интегрированное тестирование. Тестируется взаимодействие
между компонентами, в том числе и сторонними
Системное тестирование. Тестирование разработанной системы в
целом. Цель проверить, что все системные элементы объединены и
выполняют заданные функции. Может выполняться в моделируемой
или реальной среде
Приемо-сдаточное тестирование. Проверка готовности для
использования конечными пользователями. Цель – подтвердить, что
функции, описанные в спецификациях соответствуют ожиданиям
пользователей. Альфа-тестирование – заказчиком в организации
разработчика. Бета-тестирование – выполняется конечными
пользователями.

8. Виды тестирования

Тестирование функциональности (functionality testing)
Функциональные тесты (function test). Выявляют ошибки в реализации требуемых функций. Эти
тесты выполняются для модулей, интеграции компонентов, приложений и систем в целом
Тесты безопасности (security test). Проверка того, что данные и функции системы доступны только
тем актантам, которым они предназначены. Выполняются на всех уровнях тестирования
Тесты предельных значений (volume test). Тестируется возможность обработки максимальных
объемов данных
Тестирование практичности/удобства (usability testing). Включает тестирование удобства
пользовательского интерфейса, всех видов эксплуатационной документации (включая оперативную
документацию)
Тестирование надежности (reliability testing)
Тесты интеграции (integrity). Дают оценку устойчивости к ошибкам отдельных модулей и их сборок
Тесты структуры (structure). Например, в веб-приложении проверяется корректность всех ссылок,
определяется правильность предоставления информации
Стрессовые (stress) тесты. Проверяется работоспособность приложения в «ненормальных»
условиях (превышение загрузки, недостаток памяти, недоступные устройства, недоступные внешние
компоненты)
Тестирование производительности (performance testing)
Сравнительные (benchmark) тесты. Сравнение производительности разрабатываемой системы со
сторонними системами
Тесты конфликтов (contention). Тестирование одновременного доступа актантов к одним и тем же
ресурсам (БД, память, и т.д.)
Нагрузочные (load) тесты. Тестирование границ приемлемого выполнения функций под
изменяющейся нагрузкой. Эмулируются средние и пиковые нагрузки. Анализируется время ответа и
время реакции системы на запросы (реакция системы – некоторые ответные действия системы, не
обязательно ответ на запрос).
Тестирование сопровождаемости (supportability testing)
Тесты конфигурирования (configuration). Проверяется правильность функционирования при
различных конфигурациях программного обеспечения и аппаратуры.
Тесты инсталляции (installation). Тесты возможности инсталляции системы при различных
конфигурациях программного обеспечения и аппаратуры.

9. Стратегии тестирования

Учет сведений о внутренней реализации
Тестирование по спецификациям
Тестирование «черного ящика»
Формальное тестирование
Тестирование по тексту программ
Тестирование «белого ящика»
Содержательное тестирование

10. Стратегии тестирования

10 раз
1
3
2
4
4 теста
10 раз
N = (23)10 2 (23)10 = 261 = 2 (210)6 > 2 (103)6 = 2 1018
4 1017сек

11. Стратегии тестирования

Цикломатическая сложность
процедуры – количество
независимых путей
Классы эквивалентности и
граничные значения
Количество студентов [0;70]
V(G)=1
Не правильные
значения
-1
Правильные
значения
0
Не правильные
значения
70 71
V(G)=2
Стек
empty

V(G)=P+1
P – количество ветвлений
full

12. Тестирование модуля

1. Тестирование модуля, как черного ящика
Матрица тестирования
классов эквивалентности и граничных значений
Входные данные и
ожидаемые результаты
Номера тестов
1
1)
X
2)
3)
4)
2
3
4
X
X
X
X
X
X

13. Тестирование модуля

2. Тестирование базового пути
(каждая ветвь хотя бы один раз)
Матрица учета ветвей
F
T
A
Ветвления
Ветви
Номера тестов
1
T
B
F
A
T
X
F
B
T
2
3
4
X
X
X
C
F
C
T
X
6
X
X
X
X
X
X
F
T
5
X
X
F
X
X
X
Ранее подготовленные
тесты
Дополнительные
тесты

14. Тестирование модуля

3. Тестирование циклов (в т.ч. вложенных)
Матрица учета циклов
Цикл
L
Количество
итераций
Номера тестов
1
2
3
4
5
0
1
6
7
8
X
X
X
максимальное
X
Ранее подготовленные
тесты
Дополнительные
тесты
4. Тестирование чувствительности к входным
данным
Это тестирование граничных значений локальных структур данных:
- ситуации деления на ноль, переполнение
- утечки памяти

15. Тестирование интеграции (интегрированное тестирование)

Цель – обнаружение ошибок
взаимодействия модулей
Последовательность тестирования
определяется порядком сборки
(интеграции) модулей
Средства: драйверы и заглушки

16. Тестирование интеграции

Восходящее тестирование (снизу -
вверх)
2
Д
Д
Д
1
- Автономно тестируются только
модули нижнего уровня
- Количество драйверов
определяется количеством
модулей
- Ошибки локализуются в
последнем подключаемом модуле

17. Тестирование интеграции

Нисходящее тестирование (сверху -
вниз)
Разработка и тестирование
начинаются с модуля
верхнего уровня
З
З
З
1
2
Проблемы:
- Обращение к модулю, который еще не
существует
- Передача тестовых данных модулю самого
верхнего уровня
- Сложные заглушки с тестовыми данными
Достоинства:
- Совмещение тестирования модулей, интеграции и
системное тестирование (функциональное) на
совмещены и выполняются на ранних этапах
- Тестовые данные готовятся в естественном виде
(при наличии модулей ввода-вывода)
- Меньшее количество данных (ограничение
передачи данных вниз)
Недостатки:
- Большое количество отложенных решений
-Низкая надежность модулей нижних уровней

18. Тестирование интеграции

Метод «большого скачка» (монолитное
тестирование)
Все модули тестируются автономно и
одновременно интегрируются в систему
З
Д
Д
З
З
Д
Достоинства:
- Распараллеливание работ по
проектированию и автономному тестированию
Недостатки:
- Необходимость и в драйверах, и в заглушках
- Модули долгое время не тестируются
совместно
- Трудность локализации ошибок

19. Тестирование интеграции

Модифицированный нисходящий
В нисходящем методе
Модификация
Тестовые данные
Протестированные
модули
Ограниченные
данные
Д
Новый модуль
З
З
Каждый модуль проходит автономное
тестирование перед интеграцией в систему

20. Тестирование интеграции

Метод сэндвича
Одновременно начинается нисходящая и
восходящая интеграция и тестирование.
Прикладной уровень
З
1
З
З
2
Достоинства:
- Раннее начало интеграции
системы и тестирования
- Надежное тестирование
модулей нижних уровней
Стыковка
2
Д
Д
Д
1
Уровень элементарных
операций

21. Тестирование интеграции

Модифицированный метод сэндвича
Прикладной уровень
З
1
З
З
Д
Д
Д
З
Стыковка
З
З
То же самое, что метод сэндвича,
но модули верхнего уровня
тестируются сначала автономно
(модифицированный нисходящий
метод). Это требует
дополнительных драйверов
2
2
Д
Д
Д
1
Уровень элементарных
операций

22. Тестирование интеграции

Сравнительный анализ
Восходящий
Нисходящий
«Большого скачка»
Модиф.
нисходящий
Сэндвича
Модиф.
сэндвича
Время сборки (обнаружение
ошибок в интерфейсах)
Рано (+)
Рано (+)
Поздно (-)
Рано (+)
Рано (+)
Рано (+)
Время создания работающего
варианта (обнаружение
принципиальных ошибок)
Поздно (-)
Рано (+)
Поздно (-)
Рано (+)
Рано (+)
Рано (+)
Необходимость в драйверах
Да (-)
Нет (+)
Да (-)
Да (-)
Частично
(±)
Да (-)
Необходимость в заглушках
Нет (+)
Да (-)
Да (-)
Да (-)
Частично
(±)
Частично
(±)
Параллельность в начале работы
(использование кадровых
ресурсов)
Средняя
(±)
Слабая
(-)
Высокая
(+)
Средняя
(±)
Средняя
(±)
Высокая
(+)
Возможность тестирования
отдельных путей (полнота
тестирования)
Легко (+)
Трудно (-)
Легко (+)
Легко (+)
Средняя
(±)
Легко (+)
Возможность планирования и
контроль процесса тестирования
Легко (+)
Трудно (-)
Легко (+)
Трудно (-)
Трудно (-)
Трудно (-)
Оценка в баллах
9
2
7
0
7
10
Показатель

23. Системное тестирование (разработка функциональных тестов)

Метод диаграмм причин-следствий (cause-effect):
1.
Выявляются причины (значения из классов
эквивалентности входных данных) и следствия
(ожидаемые отклики системы)
2.
Разрабатывается граф причинно-следственных
связей (автоматная модель приложения)
3.
Формируется таблица решений
4.
Столбцы решений образуют тестовые данные
(тестовые случаи)

24. Метод диаграмм причин-следствий

Метод диаграмм причинследствий
c = {0,1} e = {0,1}
c
e
Функция «тождество»
с1
c1
e
E
с2
c2
Функция «или»
Может
отсутствовать
Ограничение «исключает»
(только одна величина = 1)
с1
c1
c
e
Функция «не»
e
I
с2
c2
Функция «и»
с3
Ограничение «включает»
(хотя бы одна величина = 1)

25. Метод диаграмм причин-следствий

Метод диаграмм причинследствий
Пример. Тестировать исполнение команды
операционной системы
rename name1 [name2]
Описание тестируемой функции
Заменить имя name1 указанного файла на name2
Если не указано name2, то файл с name1
удаляется
Сообщать об ошибке, если нет файла с name1
Сообщать об ошибке, если нарушен синтаксис
команды
Если файл с name2 существует, то не удалять
его, и сообщать об ошибке

26. Метод диаграмм причин-следствий

Причины:
(с1) Длина name1 от 1 до 8 символов
(с2) Длина name2 от 1 до 8 символов
(с3) Длина name2 равна 0
(с4) Файл с именем name1 существует
(с5) Файл с именем name2 существует
Промежуточные причины:
(c6) Правильные name1 и name2
(c7) Правильное name1, а name2 отсутствует
(c8) Команда синтаксически правильная
Следствия:
(e1) Файл переименован
(e2) Сообщение «Файл переименован»
(e3) Сообщение «Нет файла»
(e4) Сообщение «Синтаксическая ошибка»
(e5) Файл удален
(e6) Сообщение «Файл удален»
(e7) Сообщение «Файл существует»
rename name1 [name2]
Полный перебор
требует 25 = 32 теста

27. Метод диаграмм причин-следствий

Таблица решений
Сообщение
«Файл существует»
e7
Файл
переименован
Файл с именем name1
существует
e1
c4
Сообщение
«Файл переименован»
Файл с именем name2
существует
e2
c5
Сообщение
«Нет файла»
Длина name1
от 1 до 8 символов
e3
c1
Длина name2
от 1 до 8 символов
E
c2
Длина name2
равна 0
c3
c6
e4
c8
c7
Сообщение
«Синтаксическая
ошибка»
Файл удален
e5
e6
Сообщение
«Файл удален»
Причины
Тесты
1
2
3
4
5
6
7
c1
1
1
1
0
0
1
1
c2
1
1
0
1
0
0
1
c3
0
0
1
0
1
1
0
c4
1
0
0
X
X
1
1
c5
0
X
X
X
X
X
1
e1
1
0
0
0
0
0
0
e2
1
0
0
0
0
0
0
e3
0
1
1
0
0
0
0
e4
0
0
0
1
1
0
0
e5
0
0
0
0
0
1
0
e6
0
0
0
0
0
1
0
e7
0
0
0
0
0
0
1
Рассматриваемое
следствие
e1
e2
e3
“или”
перед c8
e4
“или”
перед c8
e5
e6
e7
Следствия
Рассматриваются только те следствия, которые не были рассмотрены ранее
English     Русский Правила