Как называется способ случайного комплектования эквивалентных пар

Эквивалентное разбиение

Введение в разделение эквивалентности

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

Как работает разделение эквивалентности?

Это тестирование включало тестирование только для одного условия для каждого создаваемого раздела. Причина этого заключается в том, что мы считаем, что все условия в одном разделе должны обрабатываться программным обеспечением одинаково. Это потому, что у нас есть предположение, что если одно условие работает для раздела, оно будет работать и для других условий. Это оставляет нам экономию наших усилий в тестировании. Если определенное условие не работает, то можно сделать вывод, что другие условия также не будут работать, и нет смысла проверять другие условия в этом разделе. Созданные разделы могут быть созданы для действительных данных, то есть для значений, которые могут быть приняты, а также для недействительных данных, что означает значения, которые должны быть отклонены. В разделе выбирается одно репрезентативное значение, которое охватывает все элементы в одном и том же разделе, которые можно рассмотреть. Должен быть выбран набор данных, который может действовать как условие ввода. Результат выполнения программы можно классифицировать как набор эквивалентных данных для всего этого раздела.

Примеры эквивалентного разбиения

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

Пример № 1

  • Тестовые случаи для поля ввода, принимающего алфавиты от A до Z с использованием Equivalence Partitioning.

В тестовом примере должны быть все допустимые входные данные для этого раздела. Под этим мы подразумеваем выбор алфавита nay между A и Z. Если между этими 26 алфавитами будет выбран любой другой алфавит, результат даст нам те же результаты. Следовательно, мы можем сделать вывод, что для проверки этого условия достаточно одного входа.

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

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

Пример № 2

Текстовое поле поддерживает только числовые символы, а их длина должна быть от 6 до 10 символов. Для этого условия может быть три раздела или класса, которые могут быть созданы. Первый раздел, в котором присутствуют числовые значения, имеет длину от 6 до 10. Это допустимое условие. Второй раздел, где присутствуют числовые значения, но они имеют длину от 0 до 5. Это недопустимое условие. Третий раздел, имеющий числовые значения, имеющие длину от 11 до 14. Это также недопустимое условие. При оценке этих разделов мы можем брать случаи из каждого из этих разделов и проверять все тестовые случаи, присутствующие в этих разделах. Если мы проверим одно условие для каждого из этих разделов, все случаи будут проверены для каждого раздела.

Пример № 3

Как и в предыдущих примерах, мы также можем проверять данные на наличие десятичных разрядов. Можно предположить, что мы рассматриваем либо ноль десятичных знаков, либо более двух десятичных знаков. Когда для этого приложения должны быть разработаны контрольные примеры, необходимо обеспечить охват всех трех разделов. Неверный раздел должен быть проверен хотя бы один раз. Мы можем выбрать для расчета процентов на сумму рупий. -10, 00, рупий 50, 00, рупий 280 и рупий 1354, 00. Если это не было упомянуто конкретно, есть вероятность, что один из них может быть пропущен из-за тестирования другого несколько раз. Разделение также может применяться к выходам.

Важность тестирования эквивалентности

Ниже приведены важные моменты для проверки эквивалентности:

  • Эквивалентное тестирование является одним из эффективных способов подготовки тестовых случаев. Это тип тестирования «черного ящика», который в основном фокусируется на тестировании функциональности программного обеспечения. Проверка на эквивалентность сокращает количество контрольных примеров. Кроме того, это не ставит под угрозу тестовое покрытие программного обеспечения.
  • Качество не подвергается риску, и усилие уменьшается из-за созданных разделов. Это важно, так как это экономит время, и можно без труда работать над общими тестовыми примерами, созданными для разделов или классов. Это важно для тестовых случаев, которые имеют огромное количество тестовых случаев, и это утомительно, чтобы проверить их.
  • Это также обеспечивает тестовое покрытие, которое необходимо поддерживать и заботиться. Как только контрольные примеры созданы для действительных и недействительных входных данных, они могут быть проверены, и разделы будут иметь аналогичные результаты.
Читайте также:  Способы как легко проснуться

Вывод

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

Рекомендуемые статьи

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

  1. Отрицательное Тестирование
  2. Генератор случайных чисел в Python
  3. Оператор разрыва в Java
  4. цикл выполнения в Java
  5. Генератор случайных чисел в Matlab
  6. Генератор случайных чисел в C #
  7. Оператор разрыва в JavaScript
  8. Генератор случайных чисел в JavaScript

Источник

MT1102: Линейная алгебра (введение в математику)

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

Пусть %%R%% — отношение эквивалентности на множестве %%M%% и %%a%% — некоторый элемент из %%M%%. Рассмотрим множество всех элементов из %%M%%, находящихся в отношении %%R%% к элементу %%a%%.

Классом эквивалентности %%M_a%%

называется множество всех элементов %%M%%, находящихся в отношении %%R%% к элементу %%a%%, то есть множество

Пример

Пусть %%M%% — множество всех жителей России и %%R%% — отношение эквивалентности «проживать в одном городе». Найти классы эквивалентных элементов %%M_a%% для %%a \in M%%.

Класс элементов, эквивалентных элементу %%a%%, имеет вид: $$ M_a = \ a\> $$

В зависимости от элемента %%a%% получаем несколько классов эквивалентности. Например, класс эквивалентности жителей Москвы или Санкт-Петербурга.

Свойства классов эквивалентности

Пусть %%R%% — отношение эквивалентности на множестве %%M%% и %%M_a, M_b, \dotsc, M_z, \dotsc%% — все классы эквивалентности для отношения %%R%%. Тогда эти классы имеют следующие свойства.

Свойство 1

Для любого элемента %%a \in M%% выполняется условие $$ a \in M_a $$

Действительно, по определению, класс %%M_a = \

a\>%%. Тогда для элемента %%a%% должно выполняться условие %%a \in M_a \leftrightarrow a

a%%, которое выполняется в связи с тем, что отношение %%R%% рефлексивно по определению отношения эквивалентности. Следовательно, %%a \in M_a%%.

Как следствие этого свойства можно сказать, что всякий класс %%M_a%% является непустым множеством.

Свойство 2

Пусть %%M_a%% и %%M_b%% классы эквивалентности для отношения %%R%%. Классы %%M_a%% и %%M_b%% равны тогда и только тогда, когда элемент %%a%% находится в отношении %%R%% к элементу %%b%%. $$ M_a = M_b \leftrightarrow a

Свойство 3

Пусть %%M_a%% и %%M_b%% классы эквивалентности для отношения %%R%%. Тогда классы %%M_a%% и %%M_b%% не имеют общих элементов. $$ M_a \neq M_b \rightarrow M_a \cap M_b = \varnothing $$

Свойство 4

Объединение всех классов эквивалентности множества %%M%% равно множеству %%M%%. $$ \bigcup_ = M. $$

Разбиение множества

Совокупностью подмножеств %%M_i%%, где %%i \in I%% (множеству индексов), множества %%M%% называется разбиением множества %%M%% если выполняются следующие условия:

  1. Каждое из подмножеств %%M_i%% непусто.
  2. Объединение всех подмножеств %%M_i%% равно множеству %%M%%.
  3. Два различных подмножества %%M_i%% и %%M_j%%, где %%i \neq j%%, не имеют общих элементов.

Теорема. Пусть %%R%% — отношение эквивалентности на множестве %%M%%. Тогда совокупность классов эквивалентности множества %%M%% образует его разбиение.

Действительно, если в качестве подмножеств %%M_i%% взять классы эквивалентности %%M_a%%, то все три условия выполняются:

  1. Каждый класс эквивалентности является непустым множеством, согласно свойству 1.
  2. Объединение всех классов эквивалентности есть множество %%M%%, согласно свойству 4.
  3. Два различных класса эквивалентности не имеют общих элементов, согласно свойству 3.

Все условия определения разбиения выполнены. Следовательно классы эквивалентности есть разбиение множества %%M%%.

Примеры

Пусть дано множество %%M = \<1, 2, 3, 4, 5, 6, 7, 8, 9, 0 \>%%, тогда разбиением этого множества могут быть следующие совокупности множеств:

Читайте также:  Коммерческий шпионаж 79 способов которыми конкуренты могут получить секреты любого бизнеса

Но следующие совокупности не являются разбиением:

Совокупность множеств %%C_i%% не является разбиением, т.к. оно не удовлетворяет условию 3 разбиения множеств: множества %%C_1%% и %%C_3%% имеют общий элемент %%3%%.

Совокупность множеств %%D_i%% не является разбиением, т.к. оно не удовлетворяет условию 1 разбиения множеств: множество %%D_4%% пусто.

Совокупность множеств %%E_i%% не является разбиением, т.к. оно не удовлетворяет условию 2 разбиения множеств: объединение множеств %%E_1, E_2%% и %%E_3%% не образует множество %%M%%.

Источник

Тестирование областей определения или нечто большее, чем анализ граничных значений


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

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

Тестирование областей определения предполагает три шага:

  1. выделение подобластей для каждого параметра, все элементы которых предположительно приводят к одинаковому поведению программы (для сокращения количества тестов);
  2. выбор конкретных значений для тестирования внутри каждого класса (в т.ч. для выявления ошибок, связанных с тем, что область определения задана неверно);
  3. сочетание этих значений (для увеличения тестового покрытия и выявления ошибок, зависящих от взаимодействия нескольких параметров).

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

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

Несколько простых правил.

  1. Если область определения параметра — диапазон, то имеет смысл выделение трех классов эквивалентности: слева от диапазона (невалидные значения), сам диапазон (валидные значения) и справа от диапазона (снова невалидные). При выделении классов нужно использовать включающие границы с целью однозначности и точности: одно и то же значение не может относиться к двум классам одновременно.
  2. Если область определения — набор неупорядоченных данных, то всегда можно выделить как минимум два класса — валидные и невалидные значения. Полученное разбиение можно «дробить» дальше. Например, множество латинских букв можно разбить на два подмножества: латиница в верхнем и нижнем регистре соответственно.

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

  • по частоте использования конечными пользователями (например, для параметров типа логина и пароля может иметь смысл выделение в отдельный класс символов «qwertyQWERTY1234567980»);
  • случайные равные по размеру подклассы (обеспечение условного тестового покрытия, если нет никаких других логических способов выполнить разбиение на подклассы).

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

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

Выбор значений

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

  1. Случайный выбор. Крайне желательно, чтобы при каждом следующем выполнении теста наугад выбиралось какое-то другое значение из класса. В этом случае можно применять случайный выбор с возвратом (значение, выбранное ранее, может быть выбрано повторно с той же вероятностью) или без возврата (значение, выбранное ранее, не может быть больше выбрано, тем самым вероятность выбора оставшихся в классе значений увеличивается).
  2. Пропорциональное разбиение. Есть разные алгоритмы, основная цель которых — уменьшить риск неправильного разбиения на классы эквивалентности. Для этого можно брать несколько значений из каждого класса (число увеличивается с увеличением полезности той или иной функции программы). Другой способ: взять из каждого класса не фиксированное количество значений, а фиксированную часть класса. Таким образом, для классов, содержащих больше элементов, получится больше тестов.
  3. Анализ граничных значений. Следует помнить, что основная идея этой техники — выделение значений, приводящих к ошибкам с большей вероятностью, чем другие. Эта техника не ограничивается непосредственно элементами управления на экране программы. Кроме числовых границ диапазонов стоит помнить о временных границах (например, срок бесплатного пользования программой), границах циклов (количество неправильных вводов пароля), границах типов (даже если согласно спецификации можно в некоторое поле можно ввести ничем не ограниченное сверху целое число, это число так или иначе будет ограничено — максимальным значением целочисленного типа данных, который выбрал программист в реализации этой функции). Есть и другие границы, связанные с нефункциональными видами тестирования — производительности, конфигураций.
  4. Эмпирическое знание. Некоторые значения могут выбираться чаще других или предполагать особое использование с точки зрения бизнес-логики приложения. Идеи таких тестов может подсказать человек, хорошо ориентирующийся в предметной области программы.
Читайте также:  Способы организации корпоративного обучения диплом

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

  • входные данные, при которых результат строго положительный (валидный класс);
  • входные данные, при которых результат равен нулю (невалидный класс);
  • входные данные, при которых результат отрицателен (невалидный класс).

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

Сочетания значений

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

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

  • «слабое» vs. «сильное» комбинирование — слабое позволит составить минимум тестов для обнаружения всех дефектов, возникающих на конкретном значении одного параметра, сильное предназначено для обнаружения дефектов, возникающих на «стыке» значений параметров;
  • «нормальное» vs. «надежное» комбинирование — нормальное использует только валидные значения, выбранные для тестирования, надежное — все.

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

Пример:

  • параметр А может принимать валидные значения а1, а2, а3 и невалидные а_4, а_5;
  • параметр B может принимать валидное значение b1 и невалидные b_2, b_3, b_4;
  • параметр С может принимать валидные значения с1, с2, с3 и с4 и невалидное с_1.

Слабое нормальное комбинирование выдаст такие тесты:

  • а1, b1, c1
  • а2, b1, c2
  • а3, b1, c3
  • а1, b1, c4

Сильное нормальное комбинирование — все возможные комбинации валидных значений каждого из параметров:

  • а1, b1, c1
  • а1, b1, c2
  • а1, b1, c3
  • а1, b1, c4
  • а2, b1, c1
  • а2, b1, c2
  • а2, b1, c3
  • а2, b1, c4
  • а3, b1, c1
  • а3, b1, c2
  • а3, b1, c3
  • а3, b1, c4

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

Очевидно, что при использовании сильного и/или надежного комбинирования количество тестов будет резко возрастать при увеличении количества значений какого-либо из параметров и, конечно, при увеличении количества самих параметров. Техника попарного перебора (pairwise) — один из способов уменьшить количество тестов, при этом попытавшись сохранить качество тестирования, т.е. свести к минимуму количество необнаруженных ошибок. Но применяя эту технику, важно понимать, что ошибки на стыке более чем двух значений параметров останутся ненайденными.

Другой способ уменьшить количество тестов — узнать, есть ли зависимости между входными параметрами, и учесть это в тестах. Это возможно далеко не всегда: часто тестирование черного ящика не позволяет «заглянуть внутрь». В этом случае можно попытаться выявить зависимости эмпирически и учесть их в комбинаторных тестах. Однако, есть риск ошибиться при выделении таких закономерностей.

Комбинаторные тесты можно и нужно составлять с помощью соответствующих инструментов, чтобы избежать человеческого фактора.

Искренне надеюсь, что вышеизложенное поможет вам проектировать эффективные тесты.

Источник

Оцените статью
Разные способы