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

Содержание

Слайд 2

Введение

Введение

Слайд 3

Введение Ошибка – это неспособность системы действовать в соответствии с перечнем

Введение

Ошибка – это неспособность системы действовать в соответствии с перечнем требований,

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

Введение Тестирование – это процесс выполнения программы с целью обнаружения ошибок

Введение

Тестирование – это процесс выполнения программы с целью обнаружения ошибок
Доказательство –

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

Связь процесса тестирования и процесса проектирования Потребности Архитектура системы Внешние спецификации

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

Потребности

Архитектура системы

Внешние спецификации

Реализация модулей

Приемо-сдаточные испытания (Acceptance Testing)

Системное

тестирование (System Testing)

Тестирование интеграции (Integration Testing)

Тестирование модулей (Unit Testing)

Контроль проектирования

Контроль проектирования

Контроль требований

Подтверждение требований

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

Подготовка тестов

Исполнение тестов

Комплексное тестирование

Слайд 6

Связь процесса тестирования и процесса проектирования Defect correction cost profile for

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

Defect correction cost profile for the

software industry

Software testing : testing across the entire software development life
cycle / by Gerald D. Everett, Raymond McLeod, Jr.

Слайд 7

Уровни тестирования Тестирование модуля. Выявление ошибок в минимальных элементах программной системы.

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

Тестирование модуля. Выявление ошибок в минимальных элементах программной системы. Выполняется

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

Виды тестирования Тестирование функциональности (functionality testing) Функциональные тесты (function test). Выявляют

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

Тестирование функциональности (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

Стратегии тестирования 2 1 3 4 4 теста 10 раз 10

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

2

1

3

4

4 теста

10 раз

10 раз

N = (23)10 ⋅ 2 ⋅ (23)10

= 261 = 2 ⋅ (210)6 > 2 ⋅ (103)6 = 2 ⋅1018

4 ⋅1017сек

Слайд 11

Цикломатическая сложность процедуры – количество независимых путей V(G)=1 V(G)=2 V(G)=P+1 P

Цикломатическая сложность процедуры – количество независимых путей

V(G)=1

V(G)=2

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


Классы эквивалентности

и граничные значения

Правильные значения

Не правильные значения

Не правильные значения

empty

full

-1

0

70

71

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

Стек

Количество студентов [0;70]

Слайд 12

Тестирование модуля 1. Тестирование модуля, как черного ящика Матрица тестирования классов эквивалентности и граничных значений

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

1. Тестирование модуля, как черного ящика

Матрица тестирования классов эквивалентности и

граничных значений
Слайд 13

Тестирование модуля 2. Тестирование базового пути (каждая ветвь хотя бы один

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

2. Тестирование базового пути (каждая ветвь хотя бы один раз)

Матрица

учета ветвей

A

B

C

T

F

T

F

T

F

Ранее подготовленные тесты

Дополнительные тесты

Слайд 14

Тестирование модуля 3. Тестирование циклов (в т.ч. вложенных) Ранее подготовленные тесты

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

3. Тестирование циклов (в т.ч. вложенных)

Ранее подготовленные тесты

Дополнительные тесты

Матрица учета циклов

4.

Тестирование чувствительности к входным данным Это тестирование граничных значений локальных структур данных:
- ситуации деления на ноль, переполнение
- утечки памяти
Слайд 15

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

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

Цель – обнаружение ошибок взаимодействия модулей
Последовательность тестирования определяется

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

Тестирование интеграции Восходящее тестирование (снизу - вверх) Д Д Д 1

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

Восходящее тестирование (снизу - вверх)

Д

Д

Д

1

2

- Автономно тестируются только модули нижнего

уровня
- Количество драйверов определяется количеством модулей
- Ошибки локализуются в последнем подключаемом модуле

Д

3

Слайд 17

Тестирование интеграции Нисходящее тестирование (сверху - вниз) Проблемы: - Обращение к

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

Нисходящее тестирование (сверху - вниз)

Проблемы:
- Обращение к модулю, который

еще не существует
- Передача тестовых данных модулю самого верхнего уровня
- Сложные заглушки с тестовыми данными

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

Разработка и тестирование начинаются с модуля верхнего уровня

Слайд 18

Тестирование интеграции Метод «большого скачка» (монолитное тестирование) Достоинства: - Распараллеливание работ

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

Метод «большого скачка» (монолитное тестирование)

Достоинства:
- Распараллеливание работ по проектированию

и автономному тестированию

Все модули тестируются автономно и одновременно интегрируются в систему

Недостатки:
- Необходимость и в драйверах, и в заглушках
- Модули долгое время не тестируются совместно
- Трудность локализации ошибок

Слайд 19

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

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

Модифицированный нисходящий

В нисходящем методе

Модификация

Каждый модуль проходит автономное тестирование перед

интеграцией в систему

З

Слайд 20

Тестирование интеграции Метод сэндвича Д Д Д 1 2 З З

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

Метод сэндвича

Д

Д

Д

1

2

З

З

З

2

1

Прикладной уровень

Уровень элементарных операций

Стыковка

Одновременно начинается нисходящая и восходящая интеграция и

тестирование.

Достоинства:
- Раннее начало интеграции системы и тестирования
- Надежное тестирование модулей нижних уровней

Слайд 21

Тестирование интеграции Модифицированный метод сэндвича Д Д Д 1 2 З

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

Модифицированный метод сэндвича

Д

Д

Д

1

2

З

З

З

2

1

Прикладной уровень

Уровень элементарных операций

Стыковка

З

Д

З

Д

З

Д

То же самое, что метод сэндвича,

но модули верхнего уровня тестируются сначала автономно (модифицированный нисходящий метод). Это требует дополнительных драйверов
Слайд 22

Тестирование интеграции Сравнительный анализ

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

Сравнительный анализ

Слайд 23

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

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

Метод диаграмм причин-следствий (cause-effect):
Выявляются причины (значения из

классов эквивалентности входных данных) и следствия (ожидаемые отклики системы)
Разрабатывается граф причинно-следственных связей (автоматная модель приложения)
Формируется таблица решений
Столбцы решений образуют тестовые данные (тестовые случаи)
Слайд 24

Метод диаграмм причин-следствий c e c e c1 c2 e ∨

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

c

e

c

e

c1

c2

e


c1

c2

e


с1

с2

E

с1

с3

I

с2

Функция «тождество»

Функция «не»

c = {0,1} e = {0,1}

Функция «или»

Функция

«и»

Ограничение «исключает» (только одна величина = 1)

Ограничение «включает» (хотя бы одна величина = 1)

Может отсутствовать

Слайд 25

Метод диаграмм причин-следствий Пример. Тестировать исполнение команды операционной системы rename name1

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

Пример. Тестировать исполнение команды операционной системы
rename name1 [name2]
Описание тестируемой

функции
Заменить имя name1 указанного файла на name2
Если не указано name2, то файл с name1 удаляется
Сообщать об ошибке, если нет файла с name1
Сообщать об ошибке, если нарушен синтаксис команды
Если файл с name2 существует, то не удалять его, и сообщать об ошибке
Слайд 26

Метод диаграмм причин-следствий Причины: (с1) Длина name1 от 1 до 8

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

Причины:
(с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 теста