Эквивалентный класс — это одно или больше значений ввода, к которым ПО применяет одинаковую логику.
Предположим, что наш книготорговый веб-сайт запускает новую кампанию "Больше тратишь — больше скидка". Вот табличка изспека.
Потраченная сумма, руб- | Скидка, % |
200 — 500 | 2 |
500—1000 | 3 |
1000 — 5000 | 4 |
5000 и более | 5 |
Мы, конечно, сразу увидели 3 бага спека:
196
Тестирование Дот Ком. Часть 3
Баг1:
Непонятно, по какой ставке рассчитывается скидка, если потрачены следующие суммы: ровно 500 руб., ровно 1000 руб., ровно 5000 руб., так как каждая из этих сумм находится не в одной, а в двух корзинах со скидками.
Баг 2:
Что означает "Потраченная сумма"? Это количество дензнаков, выплаченных только за книги, или полная сумма к оплате, включая оплату книг и расходы на доставку?
Баг 3:
Для полноты картины нужно дописать эквивалентный класс от 0 до 199,99, на значения которого никакая скидка не распространяется.
Что делаем?
Правильно: идем к продюсеру. Извещаем о баге программиста. "Размораживаем" спек. Вносим в него изменения.
Вот перед нами уже отредактированная табличка:
Стоимость купленных книг, руб. | Скидка, % |
0—199,99 | 0 |
200,00 — 499,99 | 2 |
500,00 — 999,99 | 3 |
1000,00 — 4999,99 | 4 |
5000,00 и более | 5 |
У нас получилось 5 эквивалентных классов:
Класс 1: | 0—199,99 |
Класс 2: | 200,00 — 499,99 |
Класс 3: | 500,00 — 999,99 |
Класс 4: | 1000,00 — 4999,99 |
Класс 5: | 5000,00 и более |
Нигилистический настрой и практическая методология
197
Каждое значение внутри каждого класса является эквивалентным всем другим значениям этого класса.
|
|
Почему? Потому что ко всем значениям класса должна применяться одинаковая логика кода.Например, при стоимости купленных книг и 1215,11 руб., и 1745,45 руб., и 2000 руб. (класс 4) полагается скидка 4%.
Составными частями класса являются:
1. Значение или корзина значений ввода (например, от 500,00 до 999,99) и
2. Логика для вывода,т.е. ожидаемого результата (скидка 3% в случае с классом 3).
Польза раскладывания значений ввода на эквивалентные классы состоит в том, что мы отсеиваем огромное количество значений ввода, использовать которые для тестирования просто бессмысленно.
Отсев происходит путем применения знаний о тестировании пограничных значений.
3. ПОГРАНИЧНЫЕ ЗНАЧЕНИЯ (boundary values)
Всеочень просто. Давайте представим себе наши эквивалентные классы из предыдущего примера:
Вертикальная пунктирная линия — это первое возможное значение класса (нижний предел).
Вертикальная сплошная линия — это последнее возможное значение класса (верхний предел).
198
Тестирование Дот Ком. Часть 3
Пограничные значения — это конкретные предельные значения, образующие водораздел между эквивалентными классами.
|
|
Для каждого эквивалентного класса может быть лишь один из трех вариантов:
а. Есть только нижний предел (класс 5).
б. Есть нижний и верхний пределы (класс 2, класс 3, класс 4).
в. Есть только верхний предел (не рассматриваемый в данном
примере класс, который ограничен только сверху гипотети
ческим отрицательным значением, непосредственно пред
шествующим классу 1).
Пограничным тестированием(boundary testing) называется применение метода тестирования пограничных значений.
Вот полная версия метода тестирования пограничных значений.
а. Сначала тестируется нижний предел данного класса (если
он имеется).
б. Затем тестируется верхний предел данного класса (если он
имеется).
в. Затем тестируется любое значениевнутри данного класса.
г. Затем тестируется верхнийпредел класса, непосредственно
предшествующегоданному классу (если предшествую
щий класс имеется).
д. Затем тестируется нижнийпредел класса, непосредствен
но следующегоза данным классом (если следующий класс
имеется).
а, б, в являются позитивными тестами, гид — негативными тестами.
Давайте же возьмем и протестируем эквивалентный класс 2. Суть тестирования заключается в том, чтобы удостовериться, что для покупок от 200,00 до 499,99 руб. (включительно) будет дана скидка 2%. Опустим шаги сценариев и поговорим только о данных для них. Следуем методике тестирования эквивалентного класса, нам нужно лишь пять вариантов данных:
|
|
а. 200,00;
б. 499,99;
в. 315,11;
г. 199,99;
д. 500,00.
Нигилистический настрой и практическая методология
199
Почему нам хватило только 5 сценариев, мы поговорим через минуту.
А сейчас давайте посмотрим, сколько возможных вариантов только для позитивных тестову нас потенциально есть для
класса 2:
30 000 (по количеству копеек в 299,99 руб. плюс один случай, когда потрачено 200,00 руб.).
Наша методика позволила обойтись лишь 3 тестами (позитивные тесты: а, б, в), которыми мы по сути протестировали 30 000 значений.По-моему, выглядит впечатляюще.
Теперь о 5 сценариях, которых было достаточно для позитивного и негативного тестирования класса 2.
Представим себе схематично логику кода для решения вопроса о скидке для класса 2:
ЕСЛИ сумма > 200,00 И сумма < 499,99,
ТО скидка = сумма/100 х 2.
Теперь рассмотрим, как каждый из наших тест-кейсов точечно бьет по возможным проблемам кода. Прошу особого внимания — ничего сложного нет, но много нюансов.
Тест-кейс | Код с выделенной жирным шрифтомчастью, которая проверяется данным тестом | |
|
|
а. Сначала тестируется нижний предел данного класса (если нижний предел имеется):
200
200
Тестирование Дот Ком. Часть 3
б. Затем тестируется верхний предел данного класса (если верхний предел имеется): 499,99 | ЕСЛИ сумма > 200,00 И сумма < 499,99,ТО скидка = сумма/100 х 2 |
Ошибка в знаке равенства и/или сумме верхнего предела. Пример (499,00 вместо 499,99): ЕСЛИ сумма > 200,00 И cvmmq < 499,00,ТО скидка = сумма/100 х 2 | |
2% от 499,99 | |
в. Затем тестируется любое значение внутри данного класса: 315,11 | ЕСЛИ сумма > 200,00И сумма < 499,99,ТО скидка = сумма/100 х 2 |
Ошибка в знаках больше (>) и меньше (<). Пример (больше вместо меньше и меньше вместо больше): ЕСЛИ сумма < 200,00 И сумма > 499,00: ТО скидка = сумма/100 х 2 | |
2% от 315,11 | |
г. Затем тестируется верхний предел класса, непосредственно предшествующего данному классу (если предшествующий класс имеется): 199,99 | ЕСЛИ сумма > 200,00 Исумма < 499,99, ТО скидка = сумма/100 х 2 |
Тонкий момент. Здесь мы проверяем две вещи: 1. Наличие скачка от верхнего предела предьщущего класса к нижнему пределу нашего класса. Это делается для следующей ситуации. Допустим, программист напечатал 100,00вместо 200,00:ЕСЛИ сумма > 100,00И сумма < 499,99, ТО скидка = сумма/100 х 2. Если сделана такая ошибка, то она не будет обнаружена ни тестом а, ни тестом б, ни тестом е. 2. Логическое "И", так как если бы у нас было "ИЛИ": ЕСЛИ сумма > 200,00 ИЛИсумма < 499,99, ТО скидка = сумма/100 х 2, то к данному классу принадлежало бы любое в принципе возможное значение | |
Скидка не равна2% от 199,99 | |
д. Затем тестируется нижний предел класса, непосредственно следующего за данным классом (если следующий класс имеется): 500,00 | ЕСЛИ сумма > 200,00 И сумма < 499,99,ТО скидка = сумма/100 х 2 |
1. Наличие скачка от верхнего предела нашего класса к нижнему пределу следующего за ним класса. Это делается для следующей ситуации. Допустим, программист напечатал 599,99вместо 499,99:ЕСЛИ сумма > 200 И сумма < 599,99,ТО скидка = сумма/100 х 2 |
Нигилистический настрой и практическая методология
201
Если сделана такая ошибка, то она не будет обнаружена ни тестом а, ни тестом б, ни тестом в, ни тестом г. 2. Проверяется логическое "И", так как если бы у нас было "ИЛИ": ЕСЛИ сумма > 200,00 ИЛИсумма < 499,99, ТО скидка = сумма/100 х 2, то к данному классу принадлежало бы любое в принципе возможное значение | |
Скидка не равна2% от 500,00 |
Замечу, что для удобства в понимании мы производили тестирование класса 2 изолированноот его собратьев.
И теперь, поняв и разобравшись, давайте рассмотрим, как нам протестировать всеэквивалентные классы данного спека:
Класс | Значение | Ожидаемая ставка скидки,% |
Класс 1 | 0 | 0 |
100,00 | ||
199,99 | ||
Класс 2 | 200,00 | 2 |
315,11 | ||
499,99 | ||
Класс 3 | 500,00 | 3 |
659,23 | ||
999,99 | ||
Класс 4 | 1000,00 | 4 |
3265,26 | ||
4999,99 | ||
Класс 5 | 5000,00 | 5 |
5075,00 |
Итого 14 тест-кейсов для тестирования всех возможных значений. Неплохо. Очень даже неплохо!
На сером фоне 5 значений ввода, которые мы использовачи для изолированного тестирования нашего любимого кяасса 2. Прошу отметить следующую вещь: теперь, когда мы тестируем класс 2
202
Тестирование Дот Ком. Часть 3
вместе с окружающимиего собратьями,для класса 2 достаточно 3 тест-кейсов, так как случаи г. (199,99) и д. (500,00) покрываются при тестировании класса 1 и класса 3 соответственно.
Мы рассмотрели самый сложный вариант пограничного тестирования, когда мы проверяли эквивалентные классы, включающие множества значений. Зато теперь, пройдя огонь, воду и медные трубы, нам ничего не стоит разобраться в более простом случае, когда эквивалентный класс содержит только одно значение.
Пример
Возьмем индекс, который должен быть равен 6 цифрам (Индекс_эл 005 из табл. 1, матричной раскладки поля "Индекс"). Применяем метод тестирования пограничных значений:
а. 6
б. 6
в. 6
г. 5
Д. 7
Таким образом, у нас есть:
• один позитивный тест 6 и
• два негативных теста 5 и 7.
Мы применяем метод
• как обособленно(тестирование скидок),
так и
• в сочетаниис другими методами генерирования и отбора
тестов (использование пограничных значений на матрич
ной раскладке поля "Индекс").
Идея о возможности обособленного или интегрированного применения, конечно, относится к каждому из методов генерирования и отбора тестов.
Это все о пограничном тестировании.
Важная мысль перед списком изученных нами вещей о подготовке к тестированию:
Не методы должны управлять вашей подготовкой, а вы должны управлять методами так, чтобы с их помощью создать именно те тест-кейсы, которые с высокой вероятностью могли бы
Нигилистический настрой и практическая методология
203
найти баги. Для этого нужно в совершенстве владеть каждым из методов. И только практика может отточить ваши навыки. Практикуйтесь и помните о примере с шахматами, которым мы поставили себе мозги в начале нашей сегодняшней беседы.
Сегодня мы узнали и изучили:
Краткое подведение итогов
1. Хороший тестировщик — это не просто некий работник компании, который может порвать код на части своими прикладными знаниями по тестированию. Хороший тестировщик — это неисправимый циник, нигилист и Фома неверующий — все в отношении кода.
2. Код — это убежище багов.
3. Суть тестирования заключается в поиске багов.
4. В отношении методов генерирования тестов:
• при использовании метода Черновик-чистовик: Черновик — это полет мысли и вдохновения, "мозговой штурм", не ограниченный суетными приличиями бренного света. Чистовик — это подчищенный, причесанный и классифицированный Черновик;
• матричная раскладка может быть лишь простой классификацией элементов на табл. 1, а может и бесконечно углубляться в дебри комбинаций и комбинаций. Главное помнить, что матричная раскладка создается для тестирования, а не тестирование было придумано для матричной раскладки;
• блок-схемы — это дочери добродетели под именем "Наглядность".
5. В отношении методов отбора тестов:
оценка риска основывается на том, что мы пытаемся влезть в шкуру наших пользователей и бросить наши ограниченные ресурсы не на бессмысленное кликанье правыми, левыми и даже средними кнопками наших ошалевших мышек, а на тестирование вещей, реально приоритетных для пользователей.
6. Методы генерирования тестов и методы отбора тестов —
это ящик с инструментом.Под каждую задачу используется
свой (свои) инструмент (-ты).
Вопросы для самопроверки
1. Какой настрой должен быть у тестировщика?
2. Что такое код?
3. Что такое тестирование?
4. Какие вы знаете методы генерирования тестов?
204
Тестирование Дот Ком. Часть 3
5. Какие вы знаете методы отбора тестов?
6. В чем суть метода Черновик-чистовик?
7. Есть ли ограничение на количество таблиц в матричной раскладке?
8. Каково основное преимущество блок-схем?
9. Кто может помочь тестировщику в оценке риска?
10. Какая практическая польза от приоритезации при оценке риска?
11. Приведите 5 правил тестирования пограничных значений. Какие из них позитивные, а какие — негативные?
12. Что нам дает комбинирование методов?
ИСПОЛНЕНИЕ ТЕСТИРОВАНИЯ
ЖИЗНЬ ЗАМЕЧАТЕЛЬНЫХ БАГОВ
•ЧТО ТАКОЕ СИСТЕМА ТРЭКИНГА БАГОВ
• АТРИБУТЫ БАГА
• ПРОЦЕССТРЭКИНГА БАГОВ
К |
ак мы знаем, цель исполнения тестирования — поиск багов. Но на самом деле найти баг — это только часть работы (хотя исамая сложная). После того как баг обнаружен,
• нужно занести его в систему трэкинга багов и
• после того как он зафиксирован:
а) проверить, на самом ли деле он был зафиксирован и
б) не повредила ли починка этого бага другие части на
шего ПО.
Кстати, как мы помним, а и б называются регрессивным тестированием.
Процесс, который начинается с занесения бага в систему трэкинга багов (Bug Tracking System), называется процессом трэкинга багов (Bug Tracking Procedure), и для удобства понимания всей стадии исполнения тестирования мы начнем именно с него.
Дата добавления: 2018-05-02; просмотров: 713; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!