Как можно использовать технику



Nbsp; Классы эквивалентности и граничные условия. Планирование и работа с требованиями Определение и поиск классов эквивалентности. Границы классов эквивалентности. Работа с требованиями к ПО. Участие в планировании релиза ПО. Что делать, если нет документации.       Классы эквивалентности и граничные условия Техника анализа классов эквивалентности Определение Цели техники анализа классов эквивалентности Эквивалентные тесты Как можно использовать технику Пример использования техники Плюсы и минусы техники анализа классов эквивалентности Техника анализа граничных значений Определение Цель техники анализа граничных значений Как можно использовать технику Пример использования Плюсы и минусы техники Работа с требованиями к ПО Участие в планировании релиза ПО Тестирование новой функциональности Проверка исправления ошибок Регрессионное тестирование Что делать, если нет документации Актуальная документация Не актуальная документация Неактуальные требования и тестовые артефакты Неактуальные требования и актуальные тестовые артефакты Актуальны требования и неактуальные тестовые артефакты Отсутствие документации Практика Домашнее задание Дополнительные материалы Используемая литература  

Классы эквивалентности и граничные условия

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

Техника анализа классов эквивалентности и техника граничных условий. Эти техники считаются одними из самых важных:

● Потому что они могут использоваться на разных уровнях ПО – от отдельных функций до целого продукта.

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

● Потому что неправильное использование этих техник может привести к пропуску серьезных ошибок.

Поэтому для тестировщика важно знать эти техники и уметь их правильно применять.

Техника анализа классов эквивалентности

Определение

Мы уже говорили о том, что полное тестирование даже простой программы невозможно. А если и возможно, но займет много лет.

Возьмем к примеру калькулятор. Сколько комбинаций входных параметров нужно протестировать?

Давайте ограничимся только операцией сложения. 2 числа по 8 знаков – это 10​8​*10​8​= 10​16 ​комбинаций. Если прикинуть, что на каждый тест мы потратим около 10 секунд, то время полного тестирования займет у нас 10​17 ​секунд, то есть больше 3 миллиардов лет непрерывных тестов.

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

Как раз для этих целей используется техника разбиения на классы эквивалентности. Давайте дадим ей неформальное определение:

Это техника, которая заключается в разбиении всего набора тестов на классы эквивалентности с последующим сокращением числа тестов.

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

Цели техники анализа классов эквивалентности

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

 

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

 При использовании этой техники тестировщик должен помнить о том, что:

● Слишком большое количество эквивалентных классов увеличивает вероятность, что множество тестов будет лишним (избыточным).

● Слишком малое число эквивалентных классов увеличивает вероятность, что ошибки продукта будут пропущены.

Эквивалентные тесты

Давайте договоримся о том, какие тесты мы будем считать эквивалентными.

Два теста считаются эквивалентными, если:

● Они тестируют одну и ту же вещь (функцию, модуль, часть системы).

● Если один из тестов ловит ошибку, то другой скорее всего тоже её поймает.

● Если один из них не ловит ошибку, то другой скорее всего тоже не поймает

Если же мы говорим об эквивалентности входных параметров программы, то входные параметры, которые приводят к одинаковому поведению программы, мы будем считать эквивалентными.

Как можно использовать технику

Примерный алгоритм использования техники:

1. Определить классы эквивалентности. Это самый главный шаг техники. От него во многом зависит эффективность её применения.

2. Затем нужно​ выбрать одного представителя от каждого класса. На этом шаге из каждого эквивалентного набора тестов мы выбираем один тест.

3. Нужно выполнить тесты. На этом шаге мы выполняем те тесты от каждого класса эквивалентности, которые мы выбрали.

Если есть время, можно протестировать еще несколько представителей от каждого класса. Но нужно иметь в виду, что если мы правильно выполнили первый шаг, т.е. правильно определили классы эквивалентности, то дополнительные тесты скорее всего будут избыточными, т.к. дадут тот же результат.

На первом шаге, когда мы определяем классы эквивалентности, нам могут здорово помочь программисты. Они могут подсказать, как программа ведет себя при тех или иных входных параметрах.

Можно разбивать тесты на классы эквивалентности по разным принципам. От этого эффективность нашего тестирования может выиграть. Например, если мы тестируем поле ввода, которое принимает максимум 5 символов, то мы можем выбрать разные принципы разбиения на классы эквивалентности:

● По количеству символов

● По типу символов (цифры, буквы, спец символы)

Пример использования техники

Давайте рассмотрим пример: функцию подсчета комиссии при отмене бронирования авиабилетов.

Предположим, что размер комиссии зависит от времени до вылета, когда совершена отмена:

● За 5 суток до вылета комиссия составляет 0%

● Меньше 5 суток, но больше 24 часов – 50% 

● Меньше 24 часов, но до вылета – 75%

● После вылета – 100%


Теперь давайте пойдем по шагам:

1. Определим классы эквивалентности (для каждого теста из этих классов мы ожидаем получить одинаковый результат):

● 1 класс: время до вылета > 5 суток

● 2 класс: 24 часа < время до вылета < 5 суток

● 3 класс: 0 часов < время до вылета < 24 часа

● 4 класс: время до вылета < 0 часов (вылет уже состоялся) 

 

2. Выберем представителя от каждого класса. Здесь мы можем поступить, как нам хочется, и выбрать любые значения из класса. Ведь, если предположить, что мы правильно разбили на классы эквивалентности, то нет разницы, какое значение из диапазона мы выберем.

● время до вылета = 10 суток (тест из 1-го класса)

● время до вылета = 3 суток (тест из 2-го класса)

● время до вылета = 12 часов (тест из 3-го класса)

● время до вылета = -30 мин (тест из 4-го класса)

 

3. Выполним тесты:

● Отменим бронь за 10 суток до вылета и проверим, что комиссия составила 0%.

● Отменим бронь за 3 суток до вылета и проверим, что комиссия составила 50%.

● Отменим бронь за 12 часов до вылета и проверим, что комиссия составила 75%. 

● Отменим бронь через 30 мин после вылета и проверим, что комиссия составила 100%.

Мы видим, что у нас осталось всего 4 теста. А сколько возможных тестов существует?

Даже если мы введем ограничение, что отмена бронирования может произойти в рамках 10 суток до вылета и 1 суток после вылета, то у нас будет около 950400 возможных тестов, что равно количеству секунд в 11 сутках. 

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


Дата добавления: 2018-08-06; просмотров: 532; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!