- •Содержание
- •Лекция 1. Основы процесса тестирования по
- •1. Тестирование и тест-дизайн
- •1.Тестирование и тест-дизайн.
- •3. Узнать фактический результат
- •4. Сравнить эти результаты
- •2. Первичное и регрессионное тестирование.
- •3.Тестовая документация.
- •3.3. Идентификатор тесткейса, приоритет, время прохождения
- •3.2. Тестовые объекты и тестовые данные
- •3.4. История изменений и история прохождений
- •4. Жизненный цикл бага.
- •Лекция 2. Основы функционального тестирования (Black-Box)
- •1. Определение
- •2. Black-box, white-box, grey-box тестирование.
- •3. Методы отбора тестов для Black-box тестирования
- •3.1. Тестирование сценариев использования - юз-кейсов (use-cases)
- •2. Тестирование граничных значений
- •4. Использование информации о программе при Gray-Box тестировании
- •4.1. Информация о базе данных
- •4.2. Информация о других внешних системах
- •4.3. Информация о коде программы
- •5. Методы отбора тестов для White-Box тестирования
- •Лекция 3. Как протестировать неизвестную программу или наращиваемый подход к первичному функциональному тестированию по.
- •3. Тестирование базовых сценариев
- •4. Анализ тенденций
- •7. Тестирование граничных значений
- •1. Приемочное тестирование требований
- •2. Исследовательское тестирование по.
- •3. Тестирование базовых сценариев
- •4.Анализ тенденций
- •5. Поэлементное тестирование входных данных
- •6. Комбинирование входных данных.
- •7. Тестирование граничных значений.
- •8. Тестирование невалидных данных (не имеющих смысла)
- •5. Поэлементное тестирование входных данных
- •6. Комбинирование входных данных.
- •7. Тестирование граничных значений
Лекция 2. Основы функционального тестирования (Black-Box)
1. Определение
2. Black-box, white-box, grey-box тестирование
3. Методы отбора тестов для Black-Box тестирования
4. Использование информации о программе при Gray-Box тестировании
1. Определение
Функциональное тестирование - это проверка ПО на правильность функционирования в идеальных условиях, в отличие от нефункционального, где либо условия неидеальны (нагрузочное тестирование), либо тестируется не правильность функционирования, а что-то иное (тестирование удобства пользования или структура программы).
Есть много приложений, для которых производительность и удобство пользования некритичны. Во всяком случае, часто требования к ПО содержат только функциональную часть. И практически не бывает требований к ПО без функциональной части. Отсюда делаем вывод, что функциональное тестирование проводить нужно для любого ПО.
Как правило, функциональное и нефункциональное тестирование ПО можно проводить параллельно, поэтому обычно это делается разными людьми или командами. В большинстве источников указывается, что функциональное тестирование - это синоним black-box тестирования (при котором программа рассматривается как черный ящик).
2. Black-box, white-box, grey-box тестирование.
По степени доступа к коду различают два типа тестирования: тестирование "черного ящика" (black box), или функциональное тестирование - без доступа к коду, и "белого ящика" (white box), или структурное тестирование - тестирование кода.
В случае "черного ящика" программа рассматривается как конечный автомат, с входными и выходными данными, набором внутренних состояний и переходов между ними. Тестируется правильность поведения программы при различных входных данных и внутреннем состоянии. Правильность определяется исходя главным образом из спецификации, а также любыми другими способами, кроме изучения кода (см. лекцию 1).
В случае "белого ящика" тестировщик пишет тесткейсы, основываясь исключительно на коде программы (тесты на правильность кода).
Расширение black-box тестирования, в котором также применяется изучение кода, называется тестированием "серого ящика" (grey box). В этом случае правильность поведения определяется любым удобным способом, в том числе изучением кода, что позволяет писать более эффективные black-box тесты (то есть тесты на правильность поведения).
Терминология приведена по книге A Practitioner's guide to Sofware Test Design (Lee Copeland).
3. Методы отбора тестов для Black-box тестирования
Любая программа может рассматриваться как конечный автомат, с входными и выходными данными, набором внутренних состояний и переходов между ними.
Чтобы провести полное тестирование программы, нужно проверить правильность ее поведения при всех возможных комбинациях входных данных и во всех возможных внутренних состояниях. Это невозможно из-за огромного числа комбинаций даже в простейших случаях. Поэтому на практике отбираются только наиболее важные тесты, такой отбор можно производить несколькими методами.
3.1. Тестирование сценариев использования - юз-кейсов (use-cases)
Чтобы удостовериться в правильности перехода программы между различными внутренними состояниями, в идеале следует протестировать все возможные переходы между каждым из состояний (не только одношаговые, но и многошаговые, то есть все пути в графе состояний)
Чтобы уменьшить число тестов, можно проверить только те переходы, которые имеют смысл для пользователя. Use-case - это логически завершенная последовательность действий. Например, открытие файла в Notepad - это use-case, а выбор пункта меню "Открыть файл" в Notepad - это не use-case, а лишь первый шаг юз-кейса "открытие файла".
Тестирование сценариев является самым необходимым видом тестирования. Программа должна выполнять операции, для которых она предназначена. Если пользователь может выбрать пункт меню, но файл не открывается - это очень серьезный баг.
Здесь проверяется правильность перехода программы между внутренними состояниями при выполнении определенных операций (т.е. при определенных входных данных)
3.2. Тестирование классов эквивалентности.
Чтобы удостовериться в правильности поведения программы при различных входных данных, в идеале следует протестировать все возможные значения для каждого элемента этих данных. (а также все возможные сочетания входных параметров)
Например, пусть мы тестируем программу для отдела кадров, в ней есть поле "Возраст соискателя".
Пример взят из книги A Practitioner's guide to Sofware Test Design (Lee Copeland).
Требования по возрасту у нас будут такие:
0-13 лет - не нанимать
14-17 лет - можно нанимать на неполный день
18-54 года - можно нанимать на полный день
55-99 лет - не нанимать
Чтобы проверить все возможные разрешенные данные (только разрешенные!) нам нужно протестировать ввод чисел от 0 до 99. (Возможен ведь еще ввод отрицательных чисел и нечисловых данных.) Так ли необходимо тестировать все числа от 0 до 99? В случае, если программа анализирует каждое чиcло по отдельности, вот таким образом, то видимо, да:
...
if (age == 13) hireStatus="NO";
if (age == 14) hireStatus="PART";
if (age == 15) hireStatus="PART";
if (age == 16) hireStatus="PART";
if (age == 17) hireStatus="PART";
if (age == 18) hireStatus="FULL";
...
Но к счастью, программы обычно пишут по-другому:
if (age >= 0 && age <=13)
hireStatus="NO";
if (age >= 14 && age <=17)
hireStatus="PART";
if (age >= 18 && age <=54)
hireStatus="FULL";
if (age >= 55 && age <=99)
hireStatus="NO";
Становится очевидным, что можно протестировать одно из чисел каждого диапазона. Например: 5, 15, 20, 60. А также граничные значения (первое и последнее значения из каждого диапазона): 0, 13, 14, 17, 18, 54, 55, 99.
Чтобы уменьшить количество тестируемых значений, производится
а) разбиение множества всех значений входной переменной на подмножества (классы эквивалентности), а затем
б) тестирование одного любого значения из каждого класса.
Все значения из каждого подмножества должны быть эквивалентны для наших тестов. То есть, если тест проходит успешно для одного значения из класса эквивалентности, он должен проходить успешно для всех остальных. И наоборот, если тест не проходит для одного значения, он не должен проходить для всех остальных.
В данном случае имеем 12 классов эквивалентности (каждое из 8 граничных значений по сути является отдельным классом).
Чтобы проверить правильность работы программы на всех разрешенных данных, нужно провести 12 тестов.
Запрещенные данные тестируются аналогично - можно выделить классы эквивалентности "дробное число от 0 до 99", "отрицательное число", "число больше 99", "набор букв", "пустая строка" и т.д.
Таким образом, метод классов эквивалентности можно разделить на три этапа:
1. Тестирование разрешенных значений
