Сайт о телевидении

Сайт о телевидении

» » Методы тестирования программного обеспечения и их сравнение. Тестирование методом "черного ящика" и тестирование методом "белого ящика". Технологический процесс тестирования

Методы тестирования программного обеспечения и их сравнение. Тестирование методом "черного ящика" и тестирование методом "белого ящика". Технологический процесс тестирования

Почему тестирование необходимо?

В этом разделе мы рассмотрим самые базовые понятия и принципы, которые используются в процессе тестирования. Мы узнаем, что же, собственно, собой представляет тестирование, зачем оно нужно и кто им занимается. Рассмотрим цели, принципы и основные этапы тестирования. Почувствуем, каким должен быть психологический настрой настоящего тестировщика и развенчаем напоследок несколько мифов о тестировании. Уверены, Вам будет интересно.
Начнем с того, что же такое «тестирование». Для начала, давайте абстрагируемся от сухих академических определений и посмотрим на это понятие с точки зрения повседневного использования.
Когда мы что-то тестируем, то задаем себе простой вопрос: «работает ли это так, как мы ожидаем?» или, другими словами: соответствует ли реальное поведение объекта тестирования нашим ожиданиям? Если ответ положительный – замечательно, если нет, – мы обмануты в своих ожиданиях, а значит что-то нужно исправлять.
Тестирование необходимо потому, что все мы совершаем ошибки. Некоторые из них могут быть незначительными, в то время как другие – иметь самые разрушительные последствия. Все, что производится человеком, может содержать ошибки (так уж мы, люди, устроены). Именно поэтому любой продукт нуждается в проверке – тестировании, прежде чем его можно будет эффективно и безопасно использовать.
То же самое справедливо и для программного обеспечения (англ. Software).
Программное обеспечение (Software) – компьютерные программы, функции, а также сопровождающая их документация и данные, имеющие отношение к эксплуатации компьютерной системы.
Компьютерные технологии все глубже проникают в нашу повседневную жизнь. Программное обеспечение управляет работой множества окружающих нас вещей – от мобильных телефонов и компьютеров до стиральных машин и кредитных карт. В любом случае, все мы сталкивались с теми или иными ошибками в программах: текстовый редактор, намертво зависший при работе над дипломным проектом, банкомат, «съевший» карточку или просто сайт, который никак не загрузится – все это отнюдь не облегчает нам жизнь.
Однако не все ошибки одинаково опасны – для разных программных систем уровни риска могут отличаться.
Риск (risk):
– фактор, который может привести к негативным последствиям в будущем; как правило, выражается через вероятность наступления таких последствий и их влияние на систему.
– то, что еще не произошло, и может вообще не произойти; потенциальная проблема.
Кроме того, уровень риска будет зависеть от вероятности наступления негативных последствий.
К примеру, одна и та же незначительная ошибка, скажем опечатка, может иметь совершенно разные уровни риска для разных программ:
– опечатка в описании интересов на персональной страничке в социальной сети вряд ли будет иметь существенные последствия, разве что вызовет улыбку у Ваших друзей;
– такая же простая опечатка, допущенная в описании деятельности крупной компании, размещенном на ее сайте, уже опасна, так как косвенно свидетельствует о непрофессионализме ее сотрудников;
– опечатка в коде программы, которая подсчитывает уровни облучения при работе рентгеновского аппарата (например, 100 вместо 10) может иметь самые печальные последствия – вред, нанесенный здоровью и безопасности людей, выльется в потерю доверия к компании и судебные иски со многими нулями.

План курса:

1.
Тестовая модель и Как работать со структурой
2.
Как придумывать проверки
1.
2.
Техники тест-дизайна (Black-box)
Обзор техник White Box
3.
Работа с непротиворечивостью
4.
Формулирование проверок
5.
Приоритезация
6.
Соблюдение процесса работы с тестовой документацией

Аудит - Что проверяли

1.
Полнота покрытия (по требованиям)
2.
Непротиворечивость (дубликаты, противоречия требованиями)
3.
Структура (как делили на части и на тестовые наборы, как били на проверки)
4.
Содержимое проверок (формулировка, понятность всем участникам проекта)
5.
Оформление (описки, аккуратный внешний вид)
6.
Покрытие (Smoke/MAT/AT)
7.
Соблюдение процесса (процесс работы с тестовой документаций)

Ошибки для всех видов документации
Грамотность
60
10,4
Покрытие всех функций
проверками
42
9,4
Разбиение на функции
6,4
Внешний вид
6,2
Единый стиль
2,1
Методанные документа
2,1
Методанные результата
2
55
38
14
20
17
% от всех проектов
% от всех ошибок

Ошибки для Test Survey, Test Cases
Пропуск проверок
12,6
Ожидаемый
результат
Дубликаты
Единый стиль
Противоречия
Приоритет
70
47
6
38
3,5
25
2,4
25
1,6
1,4
19
% от всех проектов
% от всех ошибок

Тестовая модель

- это логическая структура, описывающая функциональность
системы и/или поведения пользователя, по которой
генерируются тест-кейсы. Построение тестовой модели
начинается с построения структуры, а затем утвержденная
структура наполняется тест-кейсами/проверками.
(с) Дмитрий Тищенко. Блог A1QA, 2014

Покрытие проверками

1) Актуальные хотелки клиента в спецификации\требованиях\макетах
2) Договоренности на проекте
3) Наличие необходимых проверок для каждой функции:
Техники тест-дизайна:




Equivalent Partitioning Testing
Boundary Values Testing
Pairwise testing
State transition Testing

Equivalence Partitioning

ТЕХНИКА ЭКВИВАЛЕНТНЫХ КЛАССОВ

*для простоты примера возьмем неизменную цену

1) Разбить на классы входные параметры

Параметр
Класс 1
Класс 2
Версия продукта
Standard
Premium
<0
0 <= количество < 100
Количество
Класс 3
>= 100
*Голос разума – для «Версии продукта» необходимо протестировать ВСЕ значения из класса валидных значений.
Н-р, для поля Оплаты (значения: картой, наличными, переводом) логично протестировать ВСЕ варианты отдельно

2) 1 класс == 1 проверка

Версия продукта
Case 1
Standard
Case 2
Premium
Кол-во

2) 1 класс == 1 проверка

Версия продукта
Case 1
Standard
Case 2
Premium
Кол-во
Case 3
-1
Case 4
16
Case 5
125

3) Негативная проверка только для 1го класса в кейсе

Версия продукта
Кол-во
Результат
Case 1
Standard
50
Positive
Case 2
Premium
50
Positive
Case 3
Standard
-1
Negative
Case 4
Standard
16
Positive
Case 5
Standard
125
Negative

4) Пересмотреть позитивные проверки

Версия продукта
Кол-во
Результат
Case 1
Standard
50
Positive
Case 2
Premium
50
Positive
Case 3
Standard
-1
Negative
Case 4
Standard
16
Positive
Case 5
Standard
125
Negative

5) Итого

Версия продукта
Кол-во
Результат
Case 1
Premium
50
Positive
Case 2
Standard
-1
Negative
Case 3
Standard
16
Positive
Case 4
Premium
125
Negative

Еще классы …

Параметр
Класс 1
Класс 2
Версия продукта
Standard
Premium
<0
0 <= Кол-во < 100
Дробные
Целые
Числа
Не числа
Кол-во
Класс 3
> 100
Пустое

Версия продукта
Кол-во
Результат
Case 1
Standard
50
Positive
Case 2
Premium
10
Positive
Case 3
Premium
-1
Negative
Case 4
Standard
16
Positive
Case 5
Premium
150
Negative
Case 6
Premium
19,45
Negative
Case 7
Premium
%Number!
Negative
Case 8
Standard
-
Negative

Версия продукта
Кол-во
Результат
Case 1
Standard
50
Positive
Case 2
Premium
10
Positive
Case 3
Premium
-1
Negative
Case 4
Standard
16
Positive
Case 5
Premium
150
Negative
Case 6
Premium
19.45
Negative
Case 7
Premium
%Number!
Negative
Case 8
Standard
-
Negative

~30% позитивных кейсов

Версия продукта
Кол-во
Результат
Case 1
Standard
50
Positive
Case 2
Premium
10
Positive
Case 3
Premium
-1
Negative
Case 4
Premium
150
Negative
Case 5
Premium
19.45
Negative
Case 6
Premium
%Number!
Negative
Case 7
Standard
-
Negative

Функция
Входной параметр
Получатель
Send
Тема
Тело
Файлы
Attach
Файлы
Форматирование Текст
Delete
Void
Класс 1
Класс 2
Существующий адрес Несуществующий адрес
Размер 0
0 < Размер <= Limit
Содержит символы @
._-+
Символы кроме @ . _ - +
Формат
Не формат
Размер 0
0 < Размер <= Limit
Содержит символы
кроме “∞₽₾₾©¥£µ®” Символы ∞₽₾₾©¥£µ®
Размер 0
0 < Размер <= Limit
Форматирование
Без форматирования
Нет
Один
Размер 0
0 < Размер <= Limit
Supported
Unsupported
Текст не выбран\не
выбирать
Текст
форматирование
Нажать
Класс 3
Размер > Limit
Размер > Limit
Размер > Limit
Много
Размер > Limit
Форматированн
ый текст


1
2
Получатель
Существует
0 < Размер <= Limit
Тема
0 < Размер <= Limit
Содержит символы
кроме “∞₽₾₾©¥£µ®”
3 Содержит символы @ . _ 0 < Размер <= Limit
-+
4 Формат
0 < Размер <= Limit
5 Несуществующий адрес 0 < Размер <= Limit
6 Размер 0
Содержит символы
кроме “∞₽₾₾©¥£µ®”
7 Размер > Limit
Содержит символы
кроме “∞₽₾₾©¥£µ®”
8 Не формат
0 < Размер <= Limit
9 0 < Размер <= Limit
Размер 0
10 0 < Размер <= Limit
Размер > Limit
11 0 < Размер <= Limit
Содержит символы
“∞₽₾₾©¥£µ®”
12 Существует
0 < Размер <= Limit
0 < Размер <= Limit
Formatting
Нет
Один
Ожидаемый
результат
Отправлено
Отправлено
0 < Размер <= Limit
Три
Отправлено
0 < Размер <= Limit
0 < Размер <= Limit
Formatting
Три
Нет
Один
Отправлено
Не доставлено
Не отправлено
Formatting
Один
Не отправлено
0 < Размер <= Limit
Formatting
0 < Размер <= Limit
0 < Размер <= Limit
Нет
Один
Три
Три
Не отправлено
Не отправлено
Не отправлено
Не отправлено
Размер > Limit
Нет
Не отправлено
Тело
Файлы

#
Входные
Результат
Void
Отмена удаления
Текст не выбран\не выбирать
форматирование
Письмо удалено
Письмо не удалено
Текст
Применено форматирование
4
Форматированный текст
Применено новое форматирование
5
Размер и формат из допустимых
значений
Файл прикреплен
Не указывать файл
Файл не прикреплен
Указать файл недопустимого размера
(min < или > max)
Файл не прикреплен
Указать неподдерживаемый файл
Файл не прикреплен
1
Функция
Удаление
2
3
6
7
8
Форматирование
Прикрепление
файла
Система не применяет форматирование

Boundary values

ТЕХНИКА ГРАНИЧНЫХ ЗНАЧЕНИЙ

Задача: Создать тест-кейсы для Evacuation Plan

Задача: Создать тест-кейсы для Evacuation Plan

0
Базовый Тест
Для успокоения нервов
Негативный Тест
99

99
0
0
99



Находим все пары (см. график)
В математике это Декартово произведение:
Evacuation_Plan х Risk_Assesment = {(a,b) | a ∈ Evacuation_Plan, b ∈ Risk_Assesment}
Evacuation_Plan х Risk_Assesment =
{ (-1,-1),
(-1,0), (-1,1),
(-1,50),
(-1,98), (-1,99), (-1,100),
(0,-1),
(0,0),
(0,1),
(0,50),
(0,98),
(0,99),
(0,100),
(1,-1),
(1,0),
(1,1),
(1,50),
(1,98),
(1,99),
(1,100),
(50,-1), (50,0), (50,1), (50,50),
(50,98), (50,99), (50,100),
(98,-1), (98,0), (98,1), (98,50),
(98,98), (98,99), (98,100),
(99,-1), (99,0), (99,1),
(99,50), (99,98), (99,99),
(99,100),
(100,-1), (100,0), (100,1), (100,50), (100,98), (100,99), (100,100),
}
7x7 = 49 проверок

Evacuation_Plan = {-1, 0, 1, 50, 98, 99, 100}
Risk_Assesment = {-1, 0, 1, 50, 98, 99, 100}
EP_Type = {Standard, Premium}
RA_Type = {Standard, Premium}
Количество кейсов = 7 * 7 * 2 * 2 = 196

Pairwise Testing

ТЕХНИКА ТЕСТИРОВАНИЯ ВСЕХ ПАР

Задача

Хранение данных (5): PostgreSQL, Oracle, MySQL, JSON, XML
Операционная система (4): Windows 7, 8, 10, OS X 10
RAM (3): 1 024 MB, 4 096 MB, 8 192 MB
HDD (2): SCSI, IDE
Полный перебор = 5 * 4 * 3 * 2 = 120 вариантов

Идеи

1. Протестировать пары значений, а не полные переборы
2. Эмпирическое доказательство эффективности
3. All Pairs/Orthogonal massive варианты техники

Работа с ортогональными
массивами

1
2
3
4
5
Data
PostgreSQL
Oracle
MySQL
JSON
XML
OS
Windows 7
Windows 8
Windows 10
OS X 10
RAM
1 024 MB
4 096 MB
8 192 MB
HDD
SCSI
IDE

Работа с ортогональными
массивами
1. Понять какие и сколько входных параметров:
1
2
3
4
5
Data
PostgreSQL
Oracle
MySQL
JSON
XML
OS
Windows 7
Windows 8
Windows 10
OS X 10
RAM
1 024 MB
4 096 MB
8 192 MB
HDD
SCSI
IDE

Работа с ортогональными
массивами
1. Понять какие и сколько входных параметров:
Хранение данных
OS
RAM
HDD
Column 5
Column 6
1
1
1
1
1
1
1
2
2
2
2
2
1
3
3
3
3
3
1
4
4
4
4
4
1
5
5
5
5
5
2
1
2
3
4
5
2
2
3
4
5
1
1
2
3
4
5
2
3
4
5
1
2
Data
PostgreSQL
Oracle
MySQL
JSON
XML
2
4
5
1
2
3
OS
Windows 7
Windows 8
Windows 10
OS X 10
2
5
1
2
3
4
3
1
3
5
2
4
RAM
1 024 MB
4 096 MB
8 192 MB
3
2
4
1
3
5
HDD
SCSI
IDE
3
3
5
2
4
1
3
4
1
3
5
2
3
5
2
4
1
3
4
1
4
2
5
3
4
2
5
3
1
4
4
3
1
4
2
5
4
4
2
5
3
1
4
5
3
1
4
2
5
1
5
4
3
2
5
2
1
5
4
3
5
3
2
1
5
4
5
4
3
2
1
5
5
5
4
3
2
1
2. Выбираем подходящий ортогональный массив – L25(56 ^6)

Работа с ортогональными
массивами
1. Понять какие и сколько входных параметров:
1
2
3
4
5
Data
PostgreSQL
Oracle
MySQL
JSON
XML
OS
Windows 7
Windows 8
Windows 10
OS X 10
RAM
1 024 MB
4 096 MB
8 192 MB
HDD
SCSI
IDE
2. Выбираем подходящий ортогональный массив –
3. Строим ортогональный массив
4. Удаляем ненужные КОЛОНКИ
L25(56 ^6)
Хранение данных
OS
RAM
HDD
1
1
1
1
1
2
2
2
1
3
3
3
1
4
4
4
1
5
5
5
2
1
2
3
2
2
3
4
2
3
4
5
2
4
5
1
2
5
1
2
3
1
3
5
3
2
4
1
3
3
5
2
3
4
1
3
3
5
2
4
4
1
4
2
4
2
5
3
4
3
1
4
4
4
2
5
4
5
3
1
5
1
5
4
5
2
1
5
5
3
2
1
5
4
3
2
5
5
4
3

Работа с ортогональными
массивами
1. Понять какие и сколько входных параметров:
Хранение данных
OS
RAM
HDD
1
PostgreSQL
Windows 7
1 024 MB
SCSI
2
PostgreSQL
Windows 8
4 096 MB
IDE
3
PostgreSQL
Windows 10
8 192 MB
SCSI
4
PostgreSQL
OS X 10
1 024 MB
SCSI
5
PostgreSQL
Windows 10
1 024 MB
SCSI
6
Oracle
Windows 7
4 096 MB
SCSI
7
Oracle
Windows 8
8 192 MB
SCSI
1
2
3
4
5
8
Oracle
Windows 10
1 024 MB
SCSI
Data
PostgreSQL
Oracle
MySQL
JSON
XML
9
Oracle
OS X 10
1 024 MB
SCSI
OS
Windows 7
Windows 8
Windows 10
OS X 10
10
Oracle
Windows 10
1 024 MB
IDE
11
MySQL
Windows 7
8 192 MB
SCSI
RAM
1 024 MB
4 096 MB
8 192 MB
12
MySQL
Windows 8
1 024 MB
SCSI
HDD
SCSI
IDE
13
MySQL
Windows 10
4 096 MB
IDE
14
MySQL
OS X 10
1 024 MB
SCSI
15
MySQL
OS X 10
4 096 MB
SCSI
16
JSON
Windows 7
4 096 MB
IDE
17
JSON
Windows 8
4 096 MB
SCSI
18
JSON
Windows 10
1 024 MB
SCSI
19
JSON
OS X 10
4 096 MB
SCSI
20
JSON
OS X 10
8 192 MB
SCSI
21
XML
Windows 7
4 096 MB
SCSI
22
XML
Windows 8
1 024 MB
SCSI
23
XML
Windows 10
4 096 MB
SCSI
24
XML
OS X 10
8 192 MB
IDE
25
XML
Windows 10
4 096 MB
SCSI
2. Выбираем подходящий ортогональный массив – L25(56 ^6)
3. Строим ортогональный массив
4. Удаляем ненужные КОЛОНКИ
5. Проставляем значения входных параметров
6. Заполняем пустые места + проверяем пары на релевантность

PICT
Хранение данных
OS
RAM
HDD
1
JSON
OSX_10
4096MB
SCSI
2
Oracle
Windows7
1024MB
IDE
3
MySQL
Windows10
8192MB
IDE
4
Oracle
Windows8
8192MB
SCSI
5
JSON
Windows8
1024MB
IDE
6
JSON
Windows7
8192MB
SCSI
7
Oracle
Windows10
1024MB
SCSI
8
XML
Windows7
4096MB
IDE
9
MySQL
OSX_10
1024MB
SCSI
10
JSON
Windows10
4096MB
SCSI
11
XML
Windows10
8192MB
SCSI
12
PostgreSQL
Windows8
4096MB
SCSI
13
MySQL
Windows7
4096MB
SCSI
14
XML
Windows8
1024MB
IDE
15
PostgreSQL
Windows7
1024MB
IDE
16
XML
OSX_10
8192MB
IDE
17
PostgreSQL
Windows10
8192MB
SCSI
18
MySQL
Windows8
4096MB
IDE
19
PostgreSQL
OSX_10
8192MB
IDE
20
Oracle
OSX_10
4096MB
SCSI

105*16*2*4*5*2 = 134 400

1
2
3
4
5

105
Subject
Arabic
Art History
Biology
Business
Studies
Chemistry

EAL
School level (16)
Elementary
Middle
High
School Wide
High/Middle

Likelihood
Definite
Tentative
Employment
Type
Full
Part
Substitute
Temporary
Contract length
1
2
3
4
Cover letter
  • Тестирование веб-сервисов
  • Самый лучший способ оценить, хорошо ли мы протестировали продукт – проанализировать пропущенные дефекты. Те, с которыми столкнулись наши пользователи, внедренцы, бизнес. По ним можно многое оценить: что мы проверили недостаточно тщательно, каким областям продукта стоит уделить больше внимания, какой вообще процент пропусков и какова динамика его изменений. С этой метрикой (пожалуй, самой распространённой в тестировании) всё хорошо, но… Когда мы выпустили продукт, и узнали о пропущенных ошибках, может быть уже слишком поздно: на “хабре” появилась про нас гневная статья, конкуренты стремительно распространяют критику, клиенты потеряли к нам доверие, руководство недовольно.

    Чтобы такого не происходило, мы обычно заранее, до релиза, стараемся оценивать качество тестирования: насколько хорошо и тщательно мы проверяем продукт? Каким областям не хватает внимания, где основные риски, какой прогресс? И чтобы ответить на все эти вопросы, мы оцениваем тестовое покрытие.

    Зачем оценивать?

    Любые метрики оценки – трата времени. В это время можно тестировать, заводить баги, готовить автотесты. Какую такую магическую пользу мы получаем благодаря метрикам тестового покрытия, чтобы пожертвовать временем на тестирование?
    1. Поиск своих слабых зон. Естественно, это нам нужно? не чтобы просто погоревать, а чтобы знать, где требуются улучшения. Какие функциональные области не покрыты тестами? Что мы не проверили? Где наибольшие риски пропуска ошибок?
    2. Редко по результатам оценки покрытия мы получаем 100%. Что улучшать? Куда идти? Какой сейчас процент? Как мы его повысим какой-либо задачей? Как быстро мы дойдём до 100? Все эти вопросы приносят прозрачности и понятности нашему процессу , а ответы на них даёт оценка покрытия.
    3. Фокус внимания. Допустим, в нашем продукте около 50 различных функциональных зон. Выходит новая версия, и мы начинаем тестировать 1-ю из них, и находим там опечатки, и съехавшие на пару пикселей кнопки, и прочую мелочь… И вот время на тестирование завершено, и эта функциональность проверена детально… А остальные 50? Оценка покрытия позволяет нам приоритезировать задачи исходя из текущих реалий и сроков.

    Как оценивать?

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

    Оцениваем покрытие требований тестами

    Допустим, у вас в команде есть аналитики, и они не зря тратят своё рабочее время. По результатам их работы созданы требования в RMS (Requirements Management System) – HP QC, MS TFS, IBM Doors, Jira (с доп. плагинами) и т.д. В эту систему они вносят требования, соответствующие требованиям к требованиям (простите за тавтологию). Эти требования атомарны, трассируемы, конкретны… В общем, идеальные условия для тестирования. Что мы можем сделать в таком случае? При использовании скриптового подхода – связывать требования и тесты. Ведём в той же системе тесты, делаем связку требование-тест, и в любой момент можем посмотреть отчёт, по каким требованиям тесты есть, по каким – нет, когда эти тесты были пройдены, и с каким результатом.
    Получаем карту покрытия, все непокрытые требования покрываем, все счастливы и довольны, ошибок не пропускаем…

    Ладно, давайте вернёмся с небес на землю. Скорее всего, детальных требований у вас нет, они не атомарны, часть требований вообще утеряны, а времени документировать каждый тест, ну или хотя бы каждый второй, тоже нет. Можно отчаяться и поплакать, а можно признать, что тестирование – процесс компенсаторный, и чем хуже у нас с аналитикой и разработкой на проекте, тем больше стараться должны мы сами, и компенсировать проблемы других участников процесса. Разберём проблемы по отдельности.

    Проблема: требования не атомарны.

    Аналитики тоже иногда грешат винегретом в голове, и обычно это чревато проблемами со всем проектом. Например, вы разрабатываете текстовый редактор, и у вас могут быть в системе (в числе прочих) заведены два требования: «должно поддерживаться html-форматирование» и «при открытии файла неподдерживаемого формата, должно появляться всплывающее окно с вопросом». Сколько тестов требуется для базовой проверки 1-го требования? А для 2-го? Разница в ответах, скорее всего, примерно в сто раз!!! Мы не можем сказать, что при наличии хотя бы 1-го теста по 1-му требованию, этого достаточно – а вот про 2-е, скорее всего, вполне.

    Таким образом, наличие теста на требование нам вообще ничего не гарантирует! Что значит в таком случае наша статистика покрытия? Примерно ничего! Придётся решать!

    1. Автоматический расчёт покрытия требований тестами в таком случае можно убрать – он смысловой нагрузки всё равно не несёт.
    2. По каждому требованию, начиная с наиболее приоритетных, готовим тесты. При подготовке анализируем, какие тесты потребуются этому требованию, сколько будет достаточно? Проводим полноценный тест-анализ, а не отмахиваемся «один тест есть, ну и ладно».
    3. В зависимости от используемой системы, делаем экспорт/выгрузку тестов по требованию и… проводим тестирование этих тестов! Достаточно ли их? В идеале, конечно, такое тестирование нужно проводить с аналитиком и разработчиком этой функциональности. Распечатайте тесты, заприте коллег в переговорке, и не отпускайте, пока они не скажут «да, этих тестов достаточно» (такое бывает только при письменном согласовании, когда эти слова говорятся для отписки, даже без анализа тестов. При устном обсуждении ваши коллеги выльют ушат критики, пропущенных тестов, неправильно понятых требований и т.д. – это не всегда приятно, но для тестирования очень полезно!)
    4. После доработки тестов по требованию и согласования их полноты, в системе этому требованию можно проставить статус «покрыто тестами». Эта информация будет значить значительно больше, чем «тут есть хотя бы 1 тест».

    Конечно, такой процесс согласования требует немало ресурсов и времени, особенно поначалу, до наработки практики. Поэтому проводите по нему только высокоприоритетные требования, и новые доработки. Со временем и остальные требования подтянете, и все будут счастливы! Но… а если требований нет вообще?

    Проблема: требований нет вообще.

    Они на проекте отсутствуют, обсуждаются устно, каждый делает, что хочет/может и как он понимает. Тестируем так же. Как результат, получаем огромное количество проблем не только в тестировании и разработке, но и изначально некорректной реализации фич – хотели совсем другого! Здесь я могу посоветовать вариант «определите и задокументируйте требования сами», и даже пару раз в своей практике использовала эту стратегию, но в 99% случаев таких ресурсов в команде тестирования нет – так что пойдём значительно менее ресурсоёмким путём:
    1. Создаём фичелист (feature list). Сами! В виде google-таблички, в формате PBI в TFS – выбирайте любой, лишь бы не текстовый формат. Нам ещё статусы собирать надо будет! В этот список вносим все функциональные области продукта, и постарайтесь выбрать один общий уровень декомпозиции (вы можете выписать объекты ПО, или пользовательские сценарии, или модули, или веб-страницы, или методы API, или экранные формы…) – только не всё это сразу! ОДИН формат декомпозиции, который вам проще и нагляднее всего позволит не пропустить важное.
    2. Согласовываем ПОЛНОТУ этого списка с аналитиками, разработчиками, бизнесом, внутри своей команды… Постарайтесь сделать всё, чтобы не потерять важные части продукта! Насколько глубоко проводить анализ – решать вам. В моей практике всего несколько раз были продукты, на которые мы создали более 100 страниц в таблице, и это были продукты-гиганты. Чаще всего, 30-50 строк – достижимый результат для последующей тщательной обработки. В небольшой команде без выделенных тест-аналитиков большее число элементов фичелиста будет слишком сложным в поддержке.
    3. После этого, идём по приоритетам, и обрабатываем каждую строку фичелиста как в описанном выше разделе с требованиями. Пишем тесты, обсуждаем, согласовываем достаточность. Помечаем статусы, по какой фиче тестов хватает. Получаем и статус, и прогресс, и расширение тестов за счёт общения с командой. Все счастливы!

    Но… Что делать, если требования ведутся, но не в трассируемом формате?

    Проблема: требования не трассируемы.

    На проекте есть огромное количество документации, аналитики печатают со скоростью 400 знаков в минуту, у вас есть спецификации, ТЗ, инструкции, справки (чаще всего это происходит по просьбе заказчика), и всё это выступает в роли требований, и на проекте уже все давно запутались, где какую информацию искать?
    Повторяем предыдущий раздел, помогая всей команде навести порядок!
    1. Создаём фичелист (см. выше), но без детального описания требований.
    2. По каждой фиче собираем воедино ссылки на ТЗ, спецификации, инструкции, и прочие документы.
    3. Идём по приоритетам, готовим тесты, согласовываем их полноту. Всё то же самое, только благодаря объединению всех документов в одну табличку повышаем простоту доступа к ним, прозрачные статусы и согласованность тестов. В итоге, у нас всё супер, и все счастливы!

    Но… Ненадолго… Кажется, за прошлую неделю аналитики по обращениям заказчиков обновили 4 разные спецификации!!!

    Проблема: требования всё время меняются.

    Конечно, хорошо бы тестировать некую фиксированную систему, но наши продукты обычно живые. Что-то попросил заказчик, что-то изменилось во внешнем к нашему продукту законодательстве, а где-то аналитики нашли ошибку анализа позапрошлого года… Требования живут своей жизнью! Что же делать?
    1. Допустим, у вас уже собраны ссылки на ТЗ и спецификации в виде фичелиста-таблицы, PBI, требований, заметок в Wiki и т.д. Допустим, у вас уже есть тесты на эти требования. И вот, требование меняется! Это может означать изменение в RMS, или задачу в TMS (Task Management System), или письмо в почте. В любом случае, это ведёт к одному и тому же следствию: ваши тесты неактуальны! Или могут быть неактуальны. А значит, требуют обновления (покрытие тестами старой версии продукта как-то не очень считается, да?)
    2. В фичелисте, в RMS, в TMS (Test Management System – testrails, sitechco, etc) тесты должны быть обязательно и незамедлительно помечены как неактуальные! В HP QC или MS TFS это можно делать автоматически при обновлении требований, а в google-табличке или wiki придётся проставлять ручками. Но вы должны видеть сразу: тесты неактуальны! А значит, нас ждёт полный повторный путь: обновить, провести заново тест-анализ, переписать тесты, согласовать изменения, и только после этого пометить фичу/требование снова как «покрыто тестами».

    В этом случае мы получаем все бенефиты оценки тестового покрытия, да ещё и в динамике! Все счастливы!!! Но…
    Но вы так много внимания уделяли работе с требованиями, что теперь вам не хватает времени либо на тестирование, либо на документирование тестов. На мой взгляд (и тут есть место религиозному спору!) требования важнее тестов, и уж лучше так! Хотя бы они в порядке, и вся команда в курсе, и разработчики делают именно то, что нужно. НО НА ДОКУМЕНТИРОВАНИЕ ТЕСТОВ ВРЕМЕНИ НЕ ОСТАЁТСЯ!

    Проблема: не хватает времени документировать тесты.

    На самом деле, источником этой проблемы может быть не только нехватка времени, но и ваш вполне осознанный выбор их не документировать (не любим, избегаем эффекта пестицида, слишком часто меняется продукт и т.д.). Но как оценивать покрытие тестами в таком случае?
    1. Вам всё равно нужны требования, как полноценные требования или как фиче-лист, поэтому какой-то из вышеописанных разделов, в зависимости от работы аналитиков на проекте, будет всё равно необходим. Получили требования / фичелист?
    2. Описываем и устно согласовываем вкратце стратегию тестирования, без документирования конкретных тестов! Эта стратегия может быть указана в столбце таблицы, на странице вики или в требовании в RMS, и она должна быть опять же согласована. В рамках этой стратегии проверки будут проводиться по-разному, но вы будете знать: когда это последний раз тестировалось и по какой стратегии? А это уже, согласитесь, тоже неплохо! И все будут счастливы.

    Но… Какое ещё «но»? Какое???

    Говорите, все обойдём, и да пребудут с нами качественные продукты!

    • Tutorial

    Доброго времени суток!

    Хочу собрать всю самую необходимую теорию по тестирвоанию, которую спрашивают на собеседованиях у trainee, junior и немножко middle. Собственно, я собрал уже не мало. Цель сего поста в том, чтобы сообща добавить упущенное и исправить/перефразировать/добавить/сделатьЧтоТоЕщё с тем, что уже есть, чтобы стало хорошо и можно было взять всё это и повторить перед очередным собеседованием про всяк случай. Вообщем, коллеги, прошу под кат, кому почерпнуть что-то новое, кому систематизировать старое, а кому внести свою лепту.

    В итоге должна получиться исчерпывающая шпаргалка, которую нужно перечитать по дороге на собеседование.

    Всё ниже перечисленное не выдумано мной лично, а взято с разных источников, где мне лично формулировка и определение понравилось больше. В конце список источников.

    В теме: определение тестирования, качество, верификация / валидация, цели, этапы, тест план, пункты тест плана, тест дизайн, техники тест дизайна, traceability matrix, tets case, чек-лист, дефект, error/deffect/failure, баг репорт, severity vs priority, уровни тестирования, виды / типы, подходы к интеграционному тестированию, принципы тестирования, статическое и динамическое тестирование, исследовательское / ad-hoc тестирование, требования, жизненный цикл бага, стадии разработки ПО, decision table, qa/qc/test engineer, диаграмма связей.

    Поехали!

    Тестирование программного обеспечения - проверка соответствия между реальным и ожидаемым поведением программы, осуществляемая на конечном наборе тестов, выбранном определенным образом. В более широком смысле, тестирование - это одна из техник контроля качества, включающая в себя активности по планированию работ (Test Management), проектированию тестов (Test Design), выполнению тестирования (Test Execution) и анализу полученных результатов (Test Analysis).

    Качество программного обеспечения (Software Quality) - это совокупность характеристик программного обеспечения, относящихся к его способности удовлетворять установленные и предполагаемые потребности.

    Верификация (verification) - это процесс оценки системы или её компонентов с целью определения удовлетворяют ли результаты текущего этапа разработки условиям, сформированным в начале этого этапа. Т.е. выполняются ли наши цели, сроки, задачи по разработке проекта, определенные в начале текущей фазы.
    Валидация (validation) - это определение соответствия разрабатываемого ПО ожиданиям и потребностям пользователя, требованиям к системе .
    Также можно встретить иную интерпритацию:
    Процесс оценки соответствия продукта явным требованиям (спецификациям) и есть верификация (verification), в то же время оценка соответствия продукта ожиданиям и требованиям пользователей - есть валидация (validation). Также часто можно встретить следующее определение этих понятий:
    Validation - ’is this the right specification?’.
    Verification - ’is the system correct to specification?’.

    Цели тестирвоания
    Повысить вероятность того, что приложение, предназначенное для тестирования, будет работать правильно при любых обстоятельствах.
    Повысить вероятность того, что приложение, предназначенное для тестирования, будет соответствовать всем описанным требованиям.
    Предоставление актуальной информации о состоянии продукта на данный момент.

    Этапы тестирования:
    1. Анализ
    2. Разработка стратегии тестирования
    и планирование процедур контроля качества
    3. Работа с требованиями
    4. Создание тестовой документации
    5. Тестирование прототипа
    6. Основное тестирование
    7. Стабилизация
    8. Эксплуатация

    Тест план (Test Plan) - это документ, описывающий весь объем работ по тестированию, начиная с описания объекта, стратегии, расписания, критериев начала и окончания тестирования, до необходимого в процессе работы оборудования, специальных знаний, а также оценки рисков с вариантами их разрешения.
    Отвечает на вопросы:
    Что надо тестировать?
    Что будете тестировать?
    Как будете тестировать?
    Когда будете тестировать?
    Критерии начала тестирования.
    Критерии окончания тестирования.

    Основные пункты тест плана
    В стандарте IEEE 829 перечислены пункты, из которых должен (пусть - может) состоять тест-план:
    a) Test plan identifier;
    b) Introduction;
    c) Test items;
    d) Features to be tested;
    e) Features not to be tested;
    f) Approach;
    g) Item pass/fail criteria;
    h) Suspension criteria and resumption requirements;
    i) Test deliverables;
    j) Testing tasks;
    k) Environmental needs;
    l) Responsibilities;
    m) StafÞng and training needs;
    n) Schedule;
    o) Risks and contingencies;
    p) Approvals.

    Тест дизайн - это этап процесса тестирования ПО, на котором проектируются и создаются тестовые случаи (тест кейсы), в соответствии с определёнными ранее критериями качества и целями тестирования.
    Роли, ответственные за тест дизайн:
    Тест аналитик - определяет «ЧТО тестировать?»
    Тест дизайнер - определяет «КАК тестировать?»

    Техники тест дизайна

    Эквивалентное Разделение (Equivalence Partitioning - EP) . Как пример, у вас есть диапазон допустимых значений от 1 до 10, вы должны выбрать одно верное значение внутри интервала, скажем, 5, и одно неверное значение вне интервала - 0.

    Анализ Граничных Значений (Boundary Value Analysis - BVA) . Если взять пример выше, в качестве значений для позитивного тестирования выберем минимальную и максимальную границы (1 и 10), и значения больше и меньше границ (0 и 11). Анализ Граничный значений может быть применен к полям, записям, файлам, или к любого рода сущностям имеющим ограничения.

    Причина / Следствие (Cause/Effect - CE) . Это, как правило, ввод комбинаций условий (причин), для получения ответа от системы (Следствие). Например, вы проверяете возможность добавлять клиента, используя определенную экранную форму. Для этого вам необходимо будет ввести несколько полей, таких как «Имя», «Адрес», «Номер Телефона» а затем, нажать кнопку «Добавить» - эта «Причина». После нажатия кнопки «Добавить», система добавляет клиента в базу данных и показывает его номер на экране - это «Следствие».

    Исчерпывающее тестирование (Exhaustive Testing - ET) - это крайний случай. В пределах этой техники вы должны проверить все возможные комбинации входных значений, и в принципе, это должно найти все проблемы. На практике применение этого метода не представляется возможным, из-за огромного количества входных значений.

    Traceability matrix - Матрица соответствия требований - это двумерная таблица, содержащая соответсвие функциональных требований (functional requirements) продукта и подготовленных тестовых сценариев (test cases). В заголовках колонок таблицы расположены требования, а в заголовках строк - тестовые сценарии. На пересечении - отметка, означающая, что требование текущей колонки покрыто тестовым сценарием текущей строки.
    Матрица соответсвия требований используется QA-инженерами для валидации покрытия продукта тестами. МСТ является неотъемлемой частью тест-плана.

    Тестовый случай (Test Case) - это артефакт, описывающий совокупность шагов, конкретных условий и параметров, необходимых для проверки реализации тестируемой функции или её части.
    Пример:
    Action Expected Result Test Result
    (passed/failed/blocked)
    Open page «login» Login page is opened Passed

    Каждый тест кейс должен иметь 3 части:
    PreConditions Список действий, которые приводят систему к состоянию пригодному для проведения основной проверки. Либо список условий, выполнение которых говорит о том, что система находится в пригодном для проведения основного теста состояния.
    Test Case Description Список действий, переводящих систему из одного состояния в другое, для получения результата, на основании которого можно сделать вывод о удовлетворении реализации, поставленным требованиям
    PostConditions Список действий, переводящих систему в первоначальное состояние (состояние до проведения теста - initial state)
    Виды Тестовых Случаев:
    Тест кейсы разделяются по ожидаемому результату на позитивные и негативные:
    Позитивный тест кейс использует только корректные данные и проверяет, что приложение правильно выполнило вызываемую функцию.
    Негативный тест кейс оперирует как корректными так и некорректными данными (минимум 1 некорректный параметр) и ставит целью проверку исключительных ситуаций (срабатывание валидаторов), а также проверяет, что вызываемая приложением функция не выполняется при срабатывании валидатора.

    Чек-лист (check list) - это документ, описывающий что должно быть протестировано. При этом чек-лист может быть абсолютно разного уровня детализации. На сколько детальным будет чек-лист зависит от требований к отчетности, уровня знания продукта сотрудниками и сложности продукта.
    Как правило, чек-лист содержит только действия (шаги), без ожидаемого результата. Чек-лист менее формализован чем тестовый сценарий. Его уместно использовать тогда, когда тестовые сценарии будут избыточны. Также чек-лист ассоциируются с гибкими подходами в тестировании.

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

    Error - ошибка пользователя, то есть он пытается использовать программу иным способом.
    Пример - вводит буквы в поля, где требуется вводить цифры (возраст, количество товара и т.п.).
    В качественной программе предусмотрены такие ситуации и выдаются сообщение об ошибке (error message), с красным крестиком которые.
    Bug (defect) - ошибка программиста (или дизайнера или ещё кого, кто принимает участие в разработке), то есть когда в программе, что-то идёт не так как планировалось и программа выходит из-под контроля. Например, когда никак не контроллируется ввод пользователя, в результате неверные данные вызывают краши или иные «радости» в работе программы. Либо внутри программа построена так, что изначально не соответствует тому, что от неё ожидается.
    Failure - сбой (причём не обязательно аппаратный) в работе компонента, всей программы или системы. То есть, существуют такие дефекты, которые приводят к сбоям (A defect caused the failure) и существуют такие, которые не приводят. UI-дефекты например. Но аппаратный сбой, никак не связанный с software, тоже является failure.

    Баг Репорт (Bug Report) - это документ, описывающий ситуацию или последовательность действий приведшую к некорректной работе объекта тестирования, с указанием причин и ожидаемого результата.
    Шапка
    Короткое описание (Summary) Короткое описание проблемы, явно указывающее на причину и тип ошибочной ситуации.
    Проект (Project) Название тестируемого проекта
    Компонент приложения (Component) Название части или функции тестируемого продукта
    Номер версии (Version) Версия на которой была найдена ошибка
    Серьезность (Severity) Наиболее распространена пятиуровневая система градации серьезности дефекта:
    S1 Блокирующий (Blocker)
    S2 Критический (Critical)
    S3 Значительный (Major)
    S4 Незначительный (Minor)
    S5 Тривиальный (Trivial)
    Приоритет (Priority) Приоритет дефекта:
    P1 Высокий (High)
    P2 Средний (Medium)
    P3 Низкий (Low)
    Статус (Status) Статус бага. Зависит от используемой процедуры и жизненного цикла бага (bug workflow and life cycle)

    Автор (Author) Создатель баг репорта
    Назначен на (Assigned To) Имя сотрудника, назначенного на решение проблемы
    Окружение
    ОС / Сервис Пак и т.д. / Браузера + версия /… Информация об окружении, на котором был найден баг: операционная система, сервис пак, для WEB тестирования - имя и версия браузера и т.д.

    Описание
    Шаги воспроизведения (Steps to Reproduce) Шаги, по которым можно легко воспроизвести ситуацию, приведшую к ошибке.
    Фактический Результат (Result) Результат, полученный после прохождения шагов к воспроизведению
    Ожидаемый результат (Expected Result) Ожидаемый правильный результат
    Дополнения
    Прикрепленный файл (Attachment) Файл с логами, скриншот или любой другой документ, который может помочь прояснить причину ошибки или указать на способ решения проблемы.

    Severity vs Priority
    Серьезность (Severity) - это атрибут, характеризующий влияние дефекта на работоспособность приложения.
    Приоритет (Priority) - это атрибут, указывающий на очередность выполнения задачи или устранения дефекта. Можно сказать, что это инструмент менеджера по планированию работ. Чем выше приоритет, тем быстрее нужно исправить дефект.
    Severity выставляется тестировщиком
    Priority - менеджером, тимлидом или заказчиком

    Градация Серьезности дефекта (Severity)

    S1 Блокирующая (Blocker)
    Блокирующая ошибка, приводящая приложение в нерабочее состояние, в результате которого дальнейшая работа с тестируемой системой или ее ключевыми функциями становится невозможна. Решение проблемы необходимо для дальнейшего функционирования системы.

    S2 Критическая (Critical)
    Критическая ошибка, неправильно работающая ключевая бизнес логика, дыра в системе безопасности, проблема, приведшая к временному падению сервера или приводящая в нерабочее состояние некоторую часть системы, без возможности решения проблемы, используя другие входные точки. Решение проблемы необходимо для дальнейшей работы с ключевыми функциями тестируемой системой.

    S3 Значительная (Major)
    Значительная ошибка, часть основной бизнес логики работает некорректно. Ошибка не критична или есть возможность для работы с тестируемой функцией, используя другие входные точки.

    S4 Незначительная (Minor)
    Незначительная ошибка, не нарушающая бизнес логику тестируемой части приложения, очевидная проблема пользовательского интерфейса.

    S5 Тривиальная (Trivial)
    Тривиальная ошибка, не касающаяся бизнес логики приложения, плохо воспроизводимая проблема, малозаметная посредствам пользовательского интерфейса, проблема сторонних библиотек или сервисов, проблема, не оказывающая никакого влияния на общее качество продукта.

    Градация Приоритета дефекта (Priority)
    P1 Высокий (High)
    Ошибка должна быть исправлена как можно быстрее, т.к. ее наличие является критической для проекта.
    P2 Средний (Medium)
    Ошибка должна быть исправлена, ее наличие не является критичной, но требует обязательного решения.
    P3 Низкий (Low)
    Ошибка должна быть исправлена, ее наличие не является критичной, и не требует срочного решения.

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

    1. Модульное тестирование (Unit Testing)
    Компонентное (модульное) тестирование проверяет функциональность и ищет дефекты в частях приложения, которые доступны и могут быть протестированы по-отдельности (модули программ, объекты, классы, функции и т.д.).

    2. Интеграционное тестирование (Integration Testing)
    Проверяется взаимодействие между компонентами системы после проведения компонентного тестирования.

    3. Системное тестирование (System Testing)
    Основной задачей системного тестирования является проверка как функциональных, так и не функциональных требований в системе в целом. При этом выявляются дефекты, такие как неверное использование ресурсов системы, непредусмотренные комбинации данных пользовательского уровня, несовместимость с окружением, непредусмотренные сценарии использования, отсутствующая или неверная функциональность, неудобство использования и т.д.

    4. Операционное тестирование (Release Testing).
    Даже если система удовлетворяет всем требованиям, важно убедиться в том, что она удовлетворяет нуждам пользователя и выполняет свою роль в среде своей эксплуатации, как это было определено в бизнес моделе системы. Следует учесть, что и бизнес модель может содержать ошибки. Поэтому так важно провести операционное тестирование как финальный шаг валидации. Кроме этого, тестирование в среде эксплуатации позволяет выявить и нефункциональные проблемы, такие как: конфликт с другими системами, смежными в области бизнеса или в программных и электронных окружениях; недостаточная производительность системы в среде эксплуатации и др. Очевидно, что нахождение подобных вещей на стадии внедрения - критичная и дорогостоящая проблема. Поэтому так важно проведение не только верификации, но и валидации, с самых ранних этапов разработки ПО.

    5. Приемочное тестирование (Acceptance Testing)
    Формальный процесс тестирования, который проверяет соответствие системы требованиям и проводится с целью:
    определения удовлетворяет ли система приемочным критериям;
    вынесения решения заказчиком или другим уполномоченным лицом принимается приложение или нет.

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

    Функциональные виды тестирования
    Функциональное тестирование (Functional testing)
    Тестирование безопасности (Security and Access Control Testing)
    Тестирование взаимодействия (Interoperability Testing)

    Нефункциональные виды тестирования
    Все виды тестирования производительности:
    o нагрузочное тестирование (Performance and Load Testing)
    o стрессовое тестирование (Stress Testing)
    o тестирование стабильности или надежности (Stability / Reliability Testing)
    o объемное тестирование (Volume Testing)
    Тестирование установки (Installation testing)
    Тестирование удобства пользования (Usability Testing)
    Тестирование на отказ и восстановление (Failover and Recovery Testing)
    Конфигурационное тестирование (Configuration Testing)

    Связанные с изменениями виды тестирования
    Дымовое тестирование (Smoke Testing)
    Регрессионное тестирование (Regression Testing)
    Повторное тестирование (Re-testing)
    Тестирование сборки (Build Verification Test)
    Санитарное тестирование или проверка согласованности/исправности (Sanity Testing)

    Функциональное тестирование рассматривает заранее указанное поведение и основывается на анализе спецификаций функциональности компонента или системы в целом.

    Тестирование безопасности - это стратегия тестирования, используемая для проверки безопасности системы, а также для анализа рисков, связанных с обеспечением целостного подхода к защите приложения, атак хакеров, вирусов, несанкционированного доступа к конфиденциальным данным.

    Тестирование взаимодействия (Interoperability Testing) - это функциональное тестирование, проверяющее способность приложения взаимодействовать с одним и более компонентами или системами и включающее в себя тестирование совместимости (compatibility testing) и интеграционное тестирование

    Нагрузочное тестирование - это автоматизированное тестирование, имитирующее работу определенного количества бизнес пользователей на каком-либо общем (разделяемом ими) ресурсе.

    Стрессовое тестирование (Stress Testing) позволяет проверить насколько приложение и система в целом работоспособны в условиях стресса и также оценить способность системы к регенерации, т.е. к возвращению к нормальному состоянию после прекращения воздействия стресса. Стрессом в данном контексте может быть повышение интенсивности выполнения операций до очень высоких значений или аварийное изменение конфигурации сервера. Также одной из задач при стрессовом тестировании может быть оценка деградации производительности, таким образом цели стрессового тестирования могут пересекаться с целями тестирования производительности.

    Объемное тестирование (Volume Testing) . Задачей объемного тестирования является получение оценки производительности при увеличении объемов данных в базе данных приложения

    Тестирование стабильности или надежности (Stability / Reliability Testing) . Задачей тестирования стабильности (надежности) является проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки.

    Тестирование установки направленно на проверку успешной инсталляции и настройки, а также обновления или удаления программного обеспечения.

    Тестирование удобства пользования - это метод тестирования, направленный на установление степени удобства использования, обучаемости, понятности и привлекательности для пользователей разрабатываемого продукта в контексте заданных условий. Сюда также входит:
    Тестирование пользовательского интерфейса (англ. UI Testing) - это вид тестирования исследования, выполняемого с целью определения, удобен ли некоторый искусственный объект (такой как веб-страница, пользовательский интерфейс или устройство) для его предполагаемого применения.
    User eXperience (UX) - ощущение, испытываемое пользователем во время использования цифрового продукта, в то время как User interface - это инструмент, позволяющий осуществлять интеракцию «пользователь - веб-ресурс».

    Тестирование на отказ и восстановление (Failover and Recovery Testing) проверяет тестируемый продукт с точки зрения способности противостоять и успешно восстанавливаться после возможных сбоев, возникших в связи с ошибками программного обеспечения, отказами оборудования или проблемами связи (например, отказ сети). Целью данного вида тестирования является проверка систем восстановления (или дублирующих основной функционал систем), которые, в случае возникновения сбоев, обеспечат сохранность и целостность данных тестируемого продукта.

    Конфигурационное тестирование (Configuration Testing) - специальный вид тестирования, направленный на проверку работы программного обеспечения при различных конфигурациях системы (заявленных платформах, поддерживаемых драйверах, при различных конфигурациях компьютеров и т.д.)

    Дымовое (Smoke) тестирование рассматривается как короткий цикл тестов, выполняемый для подтверждения того, что после сборки кода (нового или исправленного) устанавливаемое приложение, стартует и выполняет основные функции.

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

    Повторное тестирование - тестирование, во время которого исполняются тестовые сценарии, выявившие ошибки во время последнего запуска, для подтверждения успешности исправления этих ошибок.
    В чем разница между regression testing и re-testing?
    Re-testing - проверяется исправление багов
    Regression testing - проверяется то, что исправление багов не повлияло на другие модули ПО и не вызвало новых багов.

    Тестирование сборки или Build Verification Test - тестирование направленное на определение соответствия, выпущенной версии, критериям качества для начала тестирования. По своим целям является аналогом Дымового Тестирования, направленного на приемку новой версии в дальнейшее тестирование или эксплуатацию. Вглубь оно может проникать дальше, в зависимости от требований к качеству выпущенной версии.

    Санитарное тестирование - это узконаправленное тестирование достаточное для доказательства того, что конкретная функция работает согласно заявленным в спецификации требованиям. Является подмножеством регрессионного тестирования. Используется для определения работоспособности определенной части приложения после изменений произведенных в ней или окружающей среде. Обычно выполняется вручную.

    Предугадывание ошибки (Error Guessing - EG) . Это когда тест аналитик использует свои знания системы и способность к интерпретации спецификации на предмет того, чтобы «предугадать» при каких входных условиях система может выдать ошибку. Например, спецификация говорит: «пользователь должен ввести код». Тест аналитик, будет думать: «Что, если я не введу код?», «Что, если я введу неправильный код? », и так далее. Это и есть предугадывание ошибки.

    Подходы к интеграционному тестированию:

    Снизу вверх (Bottom Up Integration)
    Все низкоуровневые модули, процедуры или функции собираются воедино и затем тестируются. После чего собирается следующий уровень модулей для проведения интеграционного тестирования. Данный подход считается полезным, если все или практически все модули, разрабатываемого уровня, готовы. Также данный подход помогает определить по результатам тестирования уровень готовности приложения.

    Сверху вниз (Top Down Integration)
    Вначале тестируются все высокоуровневые модули, и постепенно один за другим добавляются низкоуровневые. Все модули более низкого уровня симулируются заглушками с аналогичной функциональностью, затем по мере готовности они заменяются реальными активными компонентами. Таким образом мы проводим тестирование сверху вниз.

    Большой взрыв («Big Bang» Integration)
    Все или практически все разработанные модули собираются вместе в виде законченной системы или ее основной части, и затем проводится интеграционное тестирование. Такой подход очень хорош для сохранения времени. Однако если тест кейсы и их результаты записаны не верно, то сам процесс интеграции сильно осложнится, что станет преградой для команды тестирования при достижении основной цели интеграционного тестирования.

    Принципы тестирования

    Принцип 1 - Тестирование демонстрирует наличие дефектов (Testing shows presence of defects)
    Тестирование может показать, что дефекты присутствуют, но не может доказать, что их нет. Тестирование снижает вероятность наличия дефектов, находящихся в программном обеспечении, но, даже если дефекты не были обнаружены, это не доказывает его корректности.

    Принцип 2 - Исчерпывающее тестирование недостижимо (Exhaustive testing is impossible)
    Полное тестирование с использованием всех комбинаций вводов и предусловий физически невыполнимо, за исключением тривиальных случаев. Вместо исчерпывающего тестирования должны использоваться анализ рисков и расстановка приоритетов, чтобы более точно сфокусировать усилия по тестированию.

    Принцип 3 - Раннее тестирование (Early testing)
    Чтобы найти дефекты как можно раньше, активности по тестированию должны быть начаты как можно раньше в жизненном цикле разработки программного обеспечения или системы, и должны быть сфокусированы на определенных целях.

    Принцип 4 - Скопление дефектов (Defects clustering)
    Усилия тестирования должны быть сосредоточены пропорционально ожидаемой, а позже реальной плотности дефектов по модулям. Как правило, большая часть дефектов, обнаруженных при тестировании или повлекших за собой основное количество сбоев системы, содержится в небольшом количестве модулей.

    Принцип 5 - Парадокс пестицида (Pesticide paradox)
    Если одни и те же тесты будут прогоняться много раз, в конечном счете этот набор тестовых сценариев больше не будет находить новых дефектов. Чтобы преодолеть этот «парадокс пестицида», тестовые сценарии должны регулярно рецензироваться и корректироваться, новые тесты должны быть разносторонними, чтобы охватить все компоненты программного обеспечения, или системы, и найти как можно больше дефектов.

    Принцип 6 - Тестирование зависит от контекста (Testing is concept depending)
    Тестирование выполняется по-разному в зависимости от контекста. Например, программное обеспечение, в котором критически важна безопасность, тестируется иначе, чем сайт электронной коммерции.

    Принцип 7 - Заблуждение об отсутствии ошибок (Absence-of-errors fallacy)
    Обнаружение и исправление дефектов не помогут, если созданная система не подходит пользователю и не удовлетворяет его ожиданиям и потребностям.

    Cтатическое и динамическое тестирование
    Статическое тестирование отличается от динамического тем, что производится без запуска программного кода продукта. Тестирование осуществляется путем анализа программного кода (code review) или скомпилированного кода. Анализ может производиться как вручную, так и с помощью специальных инструментальных средств. Целью анализа является раннее выявление ошибок и потенциальных проблем в продукте. Также к статическому тестирвоанию относится тестирования спецификации и прочей документации.

    Исследовательское / ad-hoc тестирование
    Простейшее определение исследовательского тестирования - это разработка и выполнения тестов в одно и то же время. Что является противоположностью сценарного подхода (с его предопределенными процедурами тестирования, неважно ручными или автоматизированными). Исследовательские тесты, в отличие от сценарных тестов, не определены заранее и не выполняются в точном соответствии с планом.

    Разница между ad hoc и exploratory testing в том, что теоретически, ad hoc может провести кто угодно, а для проведения exploratory необходимо мастерство и владение определенными техниками. Обратите внимание, что определенные техники это не только техники тестирования.

    Требования - это спецификация (описание) того, что должно быть реализовано.
    Требования описывают то, что необходимо реализовать, без детализации технической стороны решения. Что, а не как.

    Требования к требованиям:
    Корректность
    Недвусмысленность
    Полнота набора требований
    Непротиворечивость набора требований
    Проверяемость (тестопригодность)
    Трассируемость
    Понимаемость

    Жизненный цикл бага

    Стадии разработки ПО - это этапы, которые проходят команды разработчиков ПО, прежде чем программа станет доступной для широко круга пользователей. Разработка ПО начинается с первоначального этапа разработки (стадия «пре-альфа») и продолжается стадиями, на которых продукт дорабатывается и модернизируется. Финальным этапом этого процесса становится выпуск на рынок окончательной версии программного обеспечения («общедоступного релиза»).

    Программный продукт проходит следующие стадии:
    анализ требований к проекту;
    проектирование;
    реализация;
    тестирование продукта;
    внедрение и поддержка.

    Каждой стадии разработки ПО присваивается определенный порядковый номер. Также каждый этап имеет свое собственное название, которое характеризует готовность продукта на этой стадии.

    Жизненный цикл разработки ПО:
    Пре-альфа
    Альфа
    Бета
    Релиз-кандидат
    Релиз
    Пост-релиз

    Таблица принятия решений (decision table) - великолепный инструмент для упорядочения сложных бизнес требований, которые должны быть реализованы в продукте. В таблицах решений представлен набор условий, одновременное выполнение которых должно привести к определенному действию.

    QA/QC/Test Engineer


    Таким образом, мы можем построить модель иерархии процессов обеспечения качества: Тестирование - часть QC. QC - часть QA.

    Диаграмма связей - это инструмент управления качеством, основанный на определении логических взаимосвязей между различными данными. Применяется этот инструмент для сопоставления причин и следствий по исследуемой проблеме.

    Тестовая модель - это логическая структура, описывающая функциональность системы и/или поведения пользователя, по которой генерируются тест-кейсы. Построение тестовой модели начинается с построения структуры, а затем утвержденная структура наполняется тест-кейсами.

    Модели обычно строятся на основе требований и/или ожидаемого поведения системы. Построение тестовой модели и управление ею подходят для больших систем со сложной бизнес-логикой и сложно применимы к проектам, работающим по гибким методологиям, т.к. затраты на поддержание процесса управления тестовой моделью и обеспечения качества будут слишком высокими.

    Под управлением тестовой моделью понимается процесс, контролирующий покрытие тестовой модели, качество сценариев, описывающих тестовую модель и ее актуализацию.

    Управление тестовой моделью - непрерывный процесс на протяжении всего жизненного цикла продукта.

    Покрытие тестовой модели

    Для контроля покрытия всех требований можно использовать матрицы трассировки, которые определяют покрытие требований тестовыми сценариями (см. пример).
    Перед тем как тест-кейсы будут описаны, структура тестовой модели должна быть утверждена с заказчиком.

    Качество сценариев

    Для управления качеством сценариев необходимо контролировать не только уровень описания тест-кейсов, но и их качество.

    До начала описания тест-кейсов необходимо определить требования для каждого уровня описания и критерии качества описания тест-кейсов.

    Возможные уровни описания тест-кейсов:

    На 4-м уровне согласование с заказчиком может быть заменено на согласование .

    Критерии качества описания тест-кейсов могут быть следующими:

    • Тест-кейсы необходимо писать по требованиям

    Тестирование - это процесс проверки соответствия продукта предъявляемым к нему требованиям. Поэтому в части общего описания тест-кейса (в тест-трекинговых системах обычно употребляется термин «Summary») необходимо ссылаться на конкретное требование в связке с фрагментами текста требований. Таким образом, для всех участников проекта будет понятно, на основании чего написан данный тест-кейс.

    • Используйте детальные предусловия

    Как сэкономить время на выполнении тест-кейсов?

    Установите правила форматирования для всех тест-кейсов. Так тест-кейс будет удобен для понимания и чтения для любого участника проекта. Например, на проекте можно ввести следующие правила:

    • Все входные параметры должны быть отмечены красным цветом.
    • Все скрипты необходимо выделять синим цветом,
    • Все названия кнопок, полей, блоков выделяются курсивом и полужирным шрифтом.
    • Важные места выделяются подчеркиванием.
    • Каждому выполняемому шагу должен соответствовать ожидаемый результат.
    • Каждый шаг в тест-кейсах должен описывать только одно действие и ожидаемый результат к нему. Т.е. при получении проваленного тест-кейса в конкретном шаге должно быть однозначно понятно, на каком именно действии возникает ошибка.
    • Ожидаемый результат должен быть однозначным.

    Тест-кейсы должны быть однозначными, т.е. должны быть составлены и сформулированы таким образом, чтобы они не допускали двусмысленного толкования, а четко понимались всеми участниками.

    Если написание тест-кейсов занимает продолжительное время, то может возникнуть ситуация, когда специалист перестает видеть свои ошибки. Для этого необходим взгляд со стороны – здесь поможет проведение кроссс-ревью . Этот этап рекомендуется проводить в тех случаях, когда разработка тестовой модели растянута в сроках и длительна по времени. Например, когда разработка тестовых сценариев занимает более 1 месяца.

    Процесс контроля качества сценариев можно вести с помощью Test Model Control – специально заготовленного шаблона.

    Актуализация тестовой модели

    Необходимо регулярно проводить актуализацию тестовой модели и самих тест-кейсов на соответствие требованиям, а также пересматривать приоритеты тест-кейсов.

    Для актуализации можно вести «Матрицу требований» (Requirement Traceability Matrix): после каждого изменения в определенном требовании из тест-трекинговой системы делается выборка всех связанных с этим требованием тестовых сценариев, и проводится их обновление.

    Средства управления тестовой моделью:

    • TestRail
    • TestLink
    • Jira+Zephyr
    • Microsoft Test Manager (MTM)
    • Excel