[{"data":1,"prerenderedAt":82},["ShallowReactive",2],{"wiki-test-design-equivalence-partitioning-and-boundary-values-ru":3},{"meta":4,"html":8,"headings":9,"words":81},{"title":5,"description":6,"published":7,"updated":7,"sourceUpdated":7},"Классы эквивалентности и граничные значения","Разбиение входных данных на классы эквивалентности и выбор граничных значений: две и три граничные точки, примеры для чисел, строк и дат.","2026-11-03","\u003Cp>\u003Cstrong>Разбиение на классы эквивалентности\u003C/strong> (equivalence partitioning) - техника тестирования методом чёрного ящика, которая делит данные объекта тестирования на классы, значения внутри которых должны обрабатываться одинаково, и строит \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"test-case\">тест-кейсы\u003C/span> так, чтобы каждый класс был проверен хотя бы один раз. \u003Cstrong>Анализ граничных значений\u003C/strong> (boundary value analysis) - техника тестирования методом чёрного ящика, которая строит тест-кейсы по минимальным и максимальным значениям упорядоченных классов: именно там обычно находятся \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"defect\">дефекты\u003C/span> сравнений и ограничений. Техники применяются вместе: разбиение задаёт классы, анализ граничных значений выбирает значения на их краях.\u003C/p>\n\u003Cp>Обе техники описаны в книге Glenford Myers The Art of Software Testing, впервые изданной в 1979 году; по данным рецензии на эту книгу на сайте AgileConnection, они были изложены там вместе с \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"cause-effect-graphing\">построением графа причин и следствий\u003C/span> (cause-effect graphing) и предугадыванием ошибок (error guessing). Сегодня их определяют международный стандарт ISO/IEC/IEEE 29119-4:2021, Software testing, Part 4: Test techniques (разделы 5.2.1 и 5.2.3), и силлабус ISTQB Certified Tester Foundation Level версии 4.0.1 (разделы 4.2.1 и 4.2.2).\u003C/p>\n\u003Ch2 id=\"история\" class=\"wiki-heading\">История\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"история\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>В таблице - основные вехи в описании техник.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Дата\u003C/th>\n\u003Cth>Событие\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>1979\u003C/td>\n\u003Ctd>Книга Glenford Myers The Art of Software Testing описывает разбиение на классы эквивалентности и анализ граничных значений\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>2015\u003C/td>\n\u003Ctd>Первая редакция ISO/IEC/IEEE 29119-4, техники тестирования\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Октябрь 2021\u003C/td>\n\u003Ctd>Вторая редакция ISO/IEC/IEEE 29119-4: техники определены через тестовые модели вместо условий тестирования\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>21 апреля 2023\u003C/td>\n\u003Ctd>Официальный выпуск силлабуса ISTQB CTFL v4.0\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>15 сентября 2024\u003C/td>\n\u003Ctd>Силлабус ISTQB CTFL v4.0.1, исправление ошибок; описывает анализ по двум и по трём точкам и покрытие Each Choice\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch2 id=\"какую-задачу-решают-техники\" class=\"wiki-heading\">Какую задачу решают техники\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"какую-задачу-решают-техники\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>Исчерпывающее тестирование невозможно почти для любых реальных входных данных. У поля количества, которое принимает целые числа, миллиарды возможных значений, а форма объединяет несколько полей. Значения, выбранные наугад, не доказывают, что важные случаи проверены.\u003C/p>\n\u003Cp>Разбиение на классы эквивалентности заменяет множество всех значений небольшим набором классов. Если все значения класса обрабатываются одинаково, тест с одним из них говорит о классе столько же, сколько тест с любым другим.\u003C/p>\n\u003Cp>Само разбиение не говорит, какое значение класса взять. Требование «от 1 до 99» можно реализовать как \u003Ccode>quantity &lt; 99\u003C/code> вместо \u003Ccode>quantity &lt;= 99\u003C/code>. Все значения из середины класса проходят, не проходит только 99. Силлабус ISTQB называет это типичным дефектом, который находит анализ граничных значений: реализованная граница сдвинута выше или ниже нужного места либо отсутствует.\u003C/p>\n\u003Ch2 id=\"классы-эквивалентности\" class=\"wiki-heading\">Классы эквивалентности\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"классы-эквивалентности\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>\u003Cstrong>Класс эквивалентности\u003C/strong> (equivalence partition, equivalence class) - подмножество возможных значений элемента данных, для которых объект тестирования должен вести себя одинаково. ISO/IEC/IEEE 29119-4 применяет этот термин и к входным, и к выходным данным.\u003C/p>\n\u003Ch3 id=\"допустимые-и-недопустимые-классы\" class=\"wiki-heading\">Допустимые и недопустимые классы\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"допустимые-и-недопустимые-классы\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Класс значений, которые объект тестирования должен принять, - допустимый класс (valid partition). Класс значений, которые он должен отклонить, - недопустимый класс (invalid partition). Силлабус ISTQB отмечает, что команды и организации могут по-разному определять допустимые и недопустимые значения. Поэтому определение, принятое в проекте, фиксируется до подсчёта классов.\u003C/p>\n\u003Ch3 id=\"правила-для-классов\" class=\"wiki-heading\">Правила для классов\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"правила-для-классов\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Классы можно выделить для любого элемента данных, связанного с объектом тестирования: входных и выходных данных, элементов конфигурации, внутренних значений, значений, связанных со временем, и параметров интерфейсов. К любому набору классов применяются два правила:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Классы не пересекаются.\u003C/strong> Значение принадлежит ровно одному классу.\u003C/li>\n\u003Cli>\u003Cstrong>Пустых классов нет.\u003C/strong> В каждом классе есть хотя бы одно значение. Класс может состоять из одного значения, например из пустой строки.\u003C/li>\n\u003C/ul>\n\u003Cp>Классы выходных данных выделяются так же: у расчёта налога с тремя ставками три класса выходных данных.\u003C/p>\n\u003Ch3 id=\"покрытие-и-тест-кейсы\" class=\"wiki-heading\">Покрытие и тест-кейсы\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"покрытие-и-тест-кейсы\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>При разбиении на классы эквивалентности элементы покрытия - это классы, включая недопустимые. Покрытие - число классов, проверенных хотя бы одним тест-кейсом, делённое на общее число выделенных классов, в процентах. Для покрытия 100 процентов достаточно одного тест-кейса на класс.\u003C/p>\n\u003Cp>В The Art of Software Testing есть правило для недопустимых классов: каждый тест-кейс покрывает только один недопустимый класс. Причина - маскирование: если тест-кейс недопустим в двух отношениях, первая проверка, которая его отклоняет, скрывает вторую. Допустимые классы можно объединять в одном тест-кейсе.\u003C/p>\n\u003Ch3 id=\"несколько-параметров-и-покрытие-each-choice\" class=\"wiki-heading\">Несколько параметров и покрытие Each Choice\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"несколько-параметров-и-покрытие-each-choice\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>У объекта тестирования с несколькими параметрами для каждого параметра свой набор классов. Для этого случая силлабус ISTQB определяет \u003Cstrong>покрытие Each Choice\u003C/strong> (Each Choice coverage): каждый класс каждого набора проверен хотя бы одним тест-кейсом. Сочетания классов не учитываются.\u003C/p>\n\u003Cp>В примере ниже два параметра: количество товара в заказе с тремя классами и способ оплаты с тремя классами.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Параметр\u003C/th>\n\u003Cth>Классы\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Количество\u003C/td>\n\u003Ctd>Меньше 1 (недопустимый), от 1 до 99 (допустимый), больше 99 (недопустимый)\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Способ оплаты\u003C/td>\n\u003Ctd>Карта (допустимый), счёт (допустимый), неподдерживаемый способ (недопустимый)\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Для покрытия Each Choice нужно не меньше трёх тест-кейсов - столько, сколько классов в самом большом наборе. Но при трёх тест-кейсах два недопустимых значения попадают в один тест-кейс. По правилу «один недопустимый класс на тест-кейс» набор вырастает до пяти: два тест-кейса объединяют допустимые классы, три содержат по одному недопустимому значению.\u003C/p>\n\u003Cp>Сочетаниями классов занимаются другие техники: \u003Ca href=\"/ru/wiki/test-design/decision-table-testing\" class=\"wiki-link wiki-link--article\">таблицы решений\u003C/a>, когда результат зависит от сочетания, и \u003Ca href=\"/ru/wiki/test-design/pairwise-testing\" class=\"wiki-link wiki-link--article\">попарное тестирование\u003C/a>, когда параметров много.\u003C/p>\n\u003Ch2 id=\"анализ-граничных-значений\" class=\"wiki-heading\">Анализ граничных значений\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"анализ-граничных-значений\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>\u003Cstrong>Граничное значение\u003C/strong> (boundary value) - минимальное или максимальное значение упорядоченного класса. Анализ граничных значений применим только к упорядоченным классам: числам, длинам, датам и времени. У способа оплаты или страны нет порядка, а значит, нет и границ.\u003C/p>\n\u003Ch3 id=\"анализ-граничных-значений-по-двум-точкам\" class=\"wiki-heading\">Анализ граничных значений по двум точкам\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"анализ-граничных-значений-по-двум-точкам\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>При \u003Cstrong>анализе граничных значений по двум точкам\u003C/strong> (2-value boundary value analysis) у каждого граничного значения два элемента покрытия: само граничное значение и ближайшее к нему значение соседнего класса. У допустимого класса целых количеств от 1 до 99 граничные значения 1 и 99, а границы соседних недопустимых классов - 0 и 100. Анализ по двум точкам даёт четыре тестовых значения: 0, 1, 99 и 100.\u003C/p>\n\u003Ch3 id=\"анализ-граничных-значений-по-трём-точкам\" class=\"wiki-heading\">Анализ граничных значений по трём точкам\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"анализ-граничных-значений-по-трём-точкам\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>При \u003Cstrong>анализе граничных значений по трём точкам\u003C/strong> (3-value boundary value analysis) у каждого граничного значения три элемента покрытия: граничное значение и оба его соседа. Для границы 1 это 0, 1 и 2; для границы 99 - 98, 99 и 100.\u003C/p>\n\u003Cp>Силлабус ISTQB называет анализ по трём точкам более строгим и показывает это на дефекте. Требование \u003Ccode>x &lt;= 10\u003C/code> реализовано как \u003Ccode>x = 10\u003C/code>. Значения 10 и 11 из анализа по двум точкам дают одинаковые результаты в обеих версиях: 10 принимается, 11 отклоняется. Значение 9, которое добавляет только анализ по трём точкам, по требованию принимается, а реализацией отклоняется.\u003C/p>\n\u003Ch3 id=\"формулы-покрытия\" class=\"wiki-heading\">Формулы покрытия\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"формулы-покрытия\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>В таблице - элементы покрытия и мера покрытия каждой техники в определении силлабуса ISTQB v4.0.1.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Техника\u003C/th>\n\u003Cth>Элементы покрытия\u003C/th>\n\u003Cth>Покрытие\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Разбиение на классы эквивалентности\u003C/td>\n\u003Ctd>Классы, допустимые и недопустимые\u003C/td>\n\u003Ctd>Проверенные классы / выделенные классы\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Анализ по двум точкам\u003C/td>\n\u003Ctd>Каждое граничное значение и ближайший сосед в соседнем классе\u003C/td>\n\u003Ctd>Проверенные граничные значения / выделенные граничные значения\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Анализ по трём точкам\u003C/td>\n\u003Ctd>Каждое граничное значение и оба его соседа\u003C/td>\n\u003Ctd>Проверенные граничные значения и соседи / все выделенные граничные значения и соседи\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Покрытие выражается в процентах от выделенных элементов: класс, который никто не выделил, его не снижает.\u003C/p>\n\u003Ch2 id=\"числа\" class=\"wiki-heading\">Числа\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"числа\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Ch3 id=\"диапазон-целых-чисел\" class=\"wiki-heading\">Диапазон целых чисел\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"диапазон-целых-чисел\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Требование: количество товара в заказе - целое число от 1 до 99. В поле ввода попадают и значения, которые не являются целыми числами.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Класс\u003C/th>\n\u003Cth>Значения\u003C/th>\n\u003Cth>Тип\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>P1\u003C/td>\n\u003Ctd>Целые числа меньше 1\u003C/td>\n\u003Ctd>Недопустимый\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>P2\u003C/td>\n\u003Ctd>Целые числа от 1 до 99\u003C/td>\n\u003Ctd>Допустимый\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>P3\u003C/td>\n\u003Ctd>Целые числа больше 99\u003C/td>\n\u003Ctd>Недопустимый\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>P4\u003C/td>\n\u003Ctd>Дробные числа, например 2.5\u003C/td>\n\u003Ctd>Недопустимый\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>P5\u003C/td>\n\u003Ctd>Нечисловой текст, например \u003Ccode>abc\u003C/code>\u003C/td>\n\u003Ctd>Недопустимый\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>P1-P3 упорядочены и имеют границы; у P4 и P5 границ нет. В таблице - тестовые значения каждой техники.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Техника\u003C/th>\n\u003Cth>Тестовые значения\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Разбиение на классы эквивалентности\u003C/td>\n\u003Ctd>-5, 50, 150, 2.5, \u003Ccode>abc\u003C/code>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Анализ по двум точкам\u003C/td>\n\u003Ctd>0, 1, 99, 100\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Анализ по трём точкам\u003C/td>\n\u003Ctd>-1, 0, 1, 2, 98, 99, 100, 101\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Значения 0 и 100 - границы недопустимых классов P1 и P3. Их соседи -1 и 101 появляются в анализе по трём точкам. В pytest значения становятся списком параметров, и тестовая функция выполняется для каждого из них:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"python\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">python\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Скопировано\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Копировать\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Скопировано\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>import pytest\n\nfrom shop.cart import validate_quantity\n\n\n@pytest.mark.parametrize(\n    (&quot;quantity&quot;, &quot;valid&quot;),\n    [(-1, False), (0, False), (1, True), (2, True),\n     (98, True), (99, True), (100, False), (101, False)],\n)\ndef test_quantity_boundaries(quantity, valid):\n    assert validate_quantity(quantity) is valid\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Параметризованные тест-кейсы описаны в статье \u003Ca href=\"/ru/wiki/test-management/test-case\" class=\"wiki-link wiki-link--article\">Тест-кейс\u003C/a>.\u003C/p>\n\u003Ch3 id=\"денежная-сумма\" class=\"wiki-heading\">Денежная сумма\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"денежная-сумма\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Требование: сумма перевода от 0.01 до 10000.00, не больше двух знаков после запятой. Шаг между соседними значениями - наименьшая единица суммы, 0.01. Без шага у дробного класса нет ближайшего соседа, поэтому шаг берётся из спецификации.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Класс\u003C/th>\n\u003Cth>Значения\u003C/th>\n\u003Cth>Тип\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>P1\u003C/td>\n\u003Ctd>Суммы до 0.00 включительно\u003C/td>\n\u003Ctd>Недопустимый\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>P2\u003C/td>\n\u003Ctd>От 0.01 до 10000.00\u003C/td>\n\u003Ctd>Допустимый\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>P3\u003C/td>\n\u003Ctd>Больше 10000.00\u003C/td>\n\u003Ctd>Недопустимый\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Анализ по двум точкам даёт 0.00, 0.01, 10000.00 и 10000.01. Анализ по трём точкам добавляет -0.01, 0.02, 9999.99 и 10000.02. Число знаков после запятой - второй параметр со своими классами: до двух знаков (допустимый) и больше двух знаков, например 10.005 (недопустимый). Это отдельный параметр: по величине 10.005 лежит внутри P2, а классы одного набора не должны пересекаться.\u003C/p>\n\u003Cp>Важен и тип значения. Документация Python отмечает, что числа вроде 1.1 и 2.2 не имеют точного представления в двоичной арифметике с плавающей точкой, в отличие от десятичного типа. Сравнение двоичной суммы с плавающей точкой на границе может дать неожиданный результат.\u003C/p>\n\u003Ch2 id=\"строки\" class=\"wiki-heading\">Строки\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"строки\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>Требование: имя пользователя длиной от 3 до 20 символов, состоит из латинских букв, цифр и знаков подчёркивания. У строки два независимых набора классов: по длине и по символам.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Параметр\u003C/th>\n\u003Cth>Класс\u003C/th>\n\u003Cth>Тип\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Длина\u003C/td>\n\u003Ctd>0, пустая строка\u003C/td>\n\u003Ctd>Недопустимый\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Длина\u003C/td>\n\u003Ctd>От 1 до 2\u003C/td>\n\u003Ctd>Недопустимый\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Длина\u003C/td>\n\u003Ctd>От 3 до 20\u003C/td>\n\u003Ctd>Допустимый\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Длина\u003C/td>\n\u003Ctd>21 и больше\u003C/td>\n\u003Ctd>Недопустимый\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Символы\u003C/td>\n\u003Ctd>Только буквы, цифры, подчёркивания\u003C/td>\n\u003Ctd>Допустимый\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Символы\u003C/td>\n\u003Ctd>Хотя бы один другой символ, например пробел или \u003Ccode>-\u003C/code>\u003C/td>\n\u003Ctd>Недопустимый\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Пустая строка - отдельный класс, если система обрабатывает её иначе, например сообщением об обязательном поле. Длина упорядочена, поэтому у классов по длине есть границы. Анализ по двум точкам даёт строки длиной 0, 1, 2, 3, 20 и 21. Анализ по трём точкам добавляет длины 4, 19 и 22; длины -1 не существует, поэтому у границы 0 только один сосед. У символов порядка нет, и их классы покрываются только разбиением на классы эквивалентности.\u003C/p>\n\u003Cp>Единица длины - часть границы. Ключевые слова JSON Schema \u003Ccode>minLength\u003C/code> и \u003Ccode>maxLength\u003C/code> считают символы в определении RFC 8259. Свойство JavaScript \u003Ccode>length\u003C/code> и атрибут HTML \u003Ccode>maxlength\u003C/code> считают кодовые единицы UTF-16, поэтому длина эмодзи равна 2. Строка Python \u003Ccode>str\u003C/code> - последовательность кодовых точек Unicode, и \u003Ccode>len()\u003C/code> для того же эмодзи возвращает 1. Имя пользователя из 20 символов с одним эмодзи имеет длину 20 для одного компонента и 21 для другого. Входные схемы инструментов MCP используют те же ключевые слова JSON Schema; они описаны в статье \u003Ca href=\"/ru/wiki/mcp/mcp-tools\" class=\"wiki-link wiki-link--article\">Инструменты в MCP\u003C/a>.\u003C/p>\n\u003Ch2 id=\"даты\" class=\"wiki-heading\">Даты\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"даты\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>Даты упорядочены. Шаг - один день или меньше, если значение включает время.\u003C/p>\n\u003Ch3 id=\"диапазон-дат\" class=\"wiki-heading\">Диапазон дат\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"диапазон-дат\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Требование: доставку можно заказать на дату от завтрашней до 90 дней вперёд. При текущей дате 3 ноября 2026 классы такие:\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Класс\u003C/th>\n\u003Cth>Даты\u003C/th>\n\u003Cth>Тип\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>P1\u003C/td>\n\u003Ctd>До 2026-11-03 включительно\u003C/td>\n\u003Ctd>Недопустимый\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>P2\u003C/td>\n\u003Ctd>С 2026-11-04 по 2027-02-01\u003C/td>\n\u003Ctd>Допустимый\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>P3\u003C/td>\n\u003Ctd>С 2027-02-02\u003C/td>\n\u003Ctd>Недопустимый\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Анализ по двум точкам даёт 2026-11-03, 2026-11-04, 2027-02-01 и 2027-02-02. Анализ по трём точкам добавляет 2026-11-02, 2026-11-05, 2027-01-31 и 2027-02-03. Границы зависят от текущей даты, а текущая дата - от часового пояса. Тесты такого требования фиксируют часы и часовой пояс объекта тестирования; иначе одни и те же данные в разные дни попадают в разные классы.\u003C/p>\n\u003Ch3 id=\"високосные-годы-и-конец-месяца\" class=\"wiki-heading\">Високосные годы и конец месяца\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"високосные-годы-и-конец-месяца\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h3>\n\u003Cp>Допустимые дни месяца зависят от месяца, а для февраля - и от года. В григорианском календаре год високосный, если он делится на 4, кроме лет, которые делятся на 100, но не делятся на 400. Поэтому у года четыре класса, по одному на каждую ветвь правила:\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Класс\u003C/th>\n\u003Cth>Пример\u003C/th>\n\u003Cth>Февраль\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Делится на 400\u003C/td>\n\u003Ctd>2000\u003C/td>\n\u003Ctd>29 дней\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Делится на 100, не делится на 400\u003C/td>\n\u003Ctd>2100\u003C/td>\n\u003Ctd>28 дней\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Делится на 4, не делится на 100\u003C/td>\n\u003Ctd>2028\u003C/td>\n\u003Ctd>29 дней\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Не делится на 4\u003C/td>\n\u003Ctd>2027\u003C/td>\n\u003Ctd>28 дней\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Для каждого месяца последний допустимый день - граница, а следующий день - её сосед в недопустимом классе. Модуль Python \u003Ccode>calendar\u003C/code> использует пролептический григорианский календарь, а \u003Ccode>calendar.monthrange()\u003C/code> возвращает число дней в месяце. Скрипт печатает пары для анализа по двум точкам:\u003C/p>\n\u003Cdiv class=\"wiki-code\" data-language=\"python\">\u003Cdiv class=\"wiki-code__header\">\u003Cspan class=\"wiki-code__language\">python\u003C/span>\u003Cbutton type=\"button\" class=\"wiki-code__copy\" data-wiki-copy data-copied-label=\"Скопировано\">\u003Csvg class=\"wiki-code__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M216,28H88A12,12,0,0,0,76,40V76H40A12,12,0,0,0,28,88V216a12,12,0,0,0,12,12H168a12,12,0,0,0,12-12V180h36a12,12,0,0,0,12-12V40A12,12,0,0,0,216,28ZM156,204H52V100H156Zm48-48H180V88a12,12,0,0,0-12-12H100V52H204Z\"/>\u003C/svg>\u003Csvg class=\"wiki-code__icon wiki-code__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003Cspan class=\"wiki-code__label\">Копировать\u003C/span>\u003Cspan class=\"wiki-code__label wiki-code__label--done\">Скопировано\u003C/span>\u003C/button>\u003C/div>\u003Cpre>\u003Ccode>import calendar\n\nfor year, month in [(2027, 2), (2028, 2), (2100, 2), (2026, 4), (2026, 12)]:\n    last_day = calendar.monthrange(year, month)[1]\n    print(year, month, &quot;valid:&quot;, last_day, &quot;invalid:&quot;, last_day + 1)\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Вывод даёт 28 и 29 для февраля 2027 и 2100 годов, 29 и 30 для февраля 2028 года, 30 и 31 для апреля, 31 и 32 для декабря. Нижняя граница одинакова для всех месяцев: день 1 допустим, день 0 - нет.\u003C/p>\n\u003Ch2 id=\"сочетание-с-таблицами-решений\" class=\"wiki-heading\">Сочетание с таблицами решений\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"сочетание-с-таблицами-решений\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>Разбиение на классы эквивалентности и анализ граничных значений рассматривают параметры по одному. Когда результат зависит от сочетания условий, сочетания описывает \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"decision-table\">таблица решений\u003C/span>. Её условиями часто служат классы, например «сумма заказа: меньше 100.00, 100.00 и больше». Каждое правило таблицы тогда - сочетание классов, значения его тест-кейса берутся из них, а граничные значения добавляют тест-кейсы на краях каждого условия. Таблицы описаны в статье \u003Ca href=\"/ru/wiki/test-design/decision-table-testing\" class=\"wiki-link wiki-link--article\">Таблицы решений\u003C/a>.\u003C/p>\n\u003Ch2 id=\"где-техники-не-помогают\" class=\"wiki-heading\">Где техники не помогают\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"где-техники-не-помогают\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>Техники исходят из того, что все значения класса обрабатываются одинаково. Если это не так, выбранные значения ничего не говорят об остальной части класса. Вне их области несколько случаев:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>Неупорядоченные данные.\u003C/strong> У способов оплаты, стран и типов файлов есть классы, но нет границ.\u003C/li>\n\u003Cli>\u003Cstrong>Сочетания.\u003C/strong> Дефект, который проявляется только при определённой паре значений, не находится изменением одного параметра за раз.\u003C/li>\n\u003Cli>\u003Cstrong>Поведение, зависящее от истории.\u003C/strong> Один и тот же ввод допустим в одном состоянии и недопустим в другом: этим занимается \u003Ca href=\"/ru/wiki/test-design/state-transition-testing\" class=\"wiki-link wiki-link--article\">тестирование переходов состояний\u003C/a>.\u003C/li>\n\u003Cli>\u003Cstrong>Последовательности действий.\u003C/strong> Сценариями с альтернативными потоками занимается \u003Ca href=\"/ru/wiki/test-design/use-case-testing\" class=\"wiki-link wiki-link--article\">тестирование по вариантам использования\u003C/a>.\u003C/li>\n\u003Cli>\u003Cstrong>Границы, которых нет в спецификации.\u003C/strong> Максимум 32-битного знакового целого - 2147483647. Такие ограничения приходят из реализации, и спецификация их не показывает.\u003C/li>\n\u003C/ul>\n\u003Cp>Классы верны настолько, насколько верна спецификация, из которой они получены. У пропущенного требования нет класса, и его не проверяет ни один тест.\u003C/p>\n\u003Ch2 id=\"разбиение-на-классы-и-смежные-техники\" class=\"wiki-heading\">Разбиение на классы и смежные техники\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"разбиение-на-классы-и-смежные-техники\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cp>В таблице техники этой статьи сравниваются с другими техниками чёрного ящика, с которыми их сочетают.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-3\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Техника\u003C/th>\n\u003Cth>Тестовая модель\u003C/th>\n\u003Cth>Что покрывает\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Разбиение на классы эквивалентности\u003C/td>\n\u003Ctd>Классы каждого элемента данных\u003C/td>\n\u003Ctd>Каждый класс хотя бы один раз\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Анализ граничных значений\u003C/td>\n\u003Ctd>Упорядоченные классы и их края\u003C/td>\n\u003Ctd>Границы и их соседей\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Таблицы решений\u003C/td>\n\u003Ctd>Условия, действия и правила\u003C/td>\n\u003Ctd>Выполнимые сочетания условий\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Попарное тестирование\u003C/td>\n\u003Ctd>Параметры и их значения\u003C/td>\n\u003Ctd>Каждую пару значений любых двух параметров\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Разбиение на классы эквивалентности - основа остальных: анализ граничных значений уточняет его внутри упорядоченных классов, таблицы решений и \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"pairwise-testing\">попарное тестирование\u003C/span> используют классы как значения и добавляют сочетания.\u003C/p>\n\u003Cp>ISO/IEC/IEEE 29119-4 также называет метод дерева классификации (classification tree method) среди техник на основе спецификации. Выбор зависит от того, от чего зависит результат: от отдельных значений, от краёв или от сочетаний.\u003C/p>\n\u003Ch2 id=\"термины\" class=\"wiki-heading\">Термины\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"термины\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cdiv class=\"wiki-table wiki-table--cols-2\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Термин\u003C/th>\n\u003Cth>Значение\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Разбиение на классы эквивалентности (equivalence partitioning)\u003C/td>\n\u003Ctd>Техника тестирования методом чёрного ящика, при которой тест-кейсы проверяют каждый класс значений, обрабатываемых одинаково\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Класс эквивалентности (equivalence partition)\u003C/td>\n\u003Ctd>Подмножество значений элемента данных, для которых объект тестирования должен вести себя одинаково\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Допустимый класс (valid partition)\u003C/td>\n\u003Ctd>Класс значений, которые объект тестирования должен принять\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Недопустимый класс (invalid partition)\u003C/td>\n\u003Ctd>Класс значений, которые объект тестирования должен отклонить\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Покрытие Each Choice (Each Choice coverage)\u003C/td>\n\u003Ctd>Покрытие, при котором каждый класс каждого параметра проверен хотя бы один раз, без учёта сочетаний\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Граничное значение (boundary value)\u003C/td>\n\u003Ctd>Минимальное или максимальное значение упорядоченного класса\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Анализ граничных значений (boundary value analysis)\u003C/td>\n\u003Ctd>Техника тестирования методом чёрного ящика, при которой тест-кейсы строятся по граничным значениям упорядоченных классов\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Анализ граничных значений по двум точкам (2-value boundary value analysis)\u003C/td>\n\u003Ctd>Вариант анализа граничных значений с двумя элементами покрытия на границу: граница и ближайший сосед в соседнем классе\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Анализ граничных значений по трём точкам (3-value boundary value analysis)\u003C/td>\n\u003Ctd>Вариант анализа граничных значений с тремя элементами покрытия на границу: граница и оба её соседа\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Ch2 id=\"источники\" class=\"wiki-heading\">Источники\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"источники\" aria-label=\"Скопировать ссылку на раздел\" data-copied-label=\"Ссылка на раздел скопирована\">\u003Csvg class=\"wiki-heading__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M117.18,188.74a12,12,0,0,1,0,17l-5.12,5.12A58.26,58.26,0,0,1,70.6,228h0A58.62,58.62,0,0,1,29.14,127.92L63.89,93.17a58.64,58.64,0,0,1,98.56,28.11,12,12,0,1,1-23.37,5.44,34.65,34.65,0,0,0-58.22-16.58L46.11,144.89A34.62,34.62,0,0,0,70.57,204h0a34.41,34.41,0,0,0,24.49-10.14l5.11-5.12A12,12,0,0,1,117.18,188.74ZM226.83,45.17a58.65,58.65,0,0,0-82.93,0l-5.11,5.11a12,12,0,0,0,17,17l5.12-5.12a34.63,34.63,0,1,1,49,49L175.1,145.86A34.39,34.39,0,0,1,150.61,156h0a34.63,34.63,0,0,1-33.69-26.72,12,12,0,0,0-23.38,5.44A58.64,58.64,0,0,0,150.56,180h.05a58.28,58.28,0,0,0,41.47-17.17l34.75-34.75a58.62,58.62,0,0,0,0-82.91Z\"/>\u003C/svg>\u003Csvg class=\"wiki-heading__icon wiki-heading__icon--done\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M232.49,80.49l-128,128a12,12,0,0,1-17,0l-56-56a12,12,0,1,1,17-17L96,183,215.51,63.51a12,12,0,0,1,17,17Z\"/>\u003C/svg>\u003C/button>\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://www.istqb.org/wp-content/uploads/2024/11/ISTQB_CTFL_Syllabus_v4.0.1.pdf\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">ISTQB Certified Tester Foundation Level Syllabus v4.0.1, разделы 4.2.1 и 4.2.2, ISTQB, 2024\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://glossary.istqb.org/\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Глоссарий ISTQB\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.imbus.de/en/glossar/term/equivalence-partitioning\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Зеркало глоссария ISTQB: equivalence partitioning, imbus\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.imbus.de/en/glossar/term/boundary-value\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Зеркало глоссария ISTQB: boundary value, imbus\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.iso.org/standard/79430.html\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">ISO/IEC/IEEE 29119-4:2021, Software testing, Part 4: Test techniques, ISO\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.oreilly.com/library/view/the-art-of/9781118133156/\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">The Art of Software Testing, 3rd Edition, Glenford J. Myers, Tom Badgett, Corey Sandler, Wiley, 2011\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://agileconnection.com/print/book/art-software-testing\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Рецензия на The Art of Software Testing, AgileConnection\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://json-schema.org/draft/2020-12/json-schema-validation\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">JSON Schema Validation, draft 2020-12, разделы 6.2 и 6.3\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">String: length, MDN Web Docs\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/maxlength\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">HTML attribute: maxlength, MDN Web Docs\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://docs.python.org/3/library/calendar.html\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">calendar, документация Python\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://docs.python.org/3/library/decimal.html\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">decimal, документация Python\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003Cli>\u003Ca href=\"https://docs.pytest.org/en/stable/how-to/parametrize.html\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">How to parametrize fixtures and test functions, документация pytest\u003Csvg class=\"wiki-link__icon\" viewBox=\"0 0 256 256\" width=\"16\" height=\"16\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\">\u003Cpath d=\"M228,104a12,12,0,0,1-24,0V69l-59.51,59.51a12,12,0,0,1-17-17L187,52H152a12,12,0,0,1,0-24h64a12,12,0,0,1,12,12Zm-44,24a12,12,0,0,0-12,12v64H52V84h64a12,12,0,0,0,0-24H48A20,20,0,0,0,28,80V208a20,20,0,0,0,20,20H176a20,20,0,0,0,20-20V140A12,12,0,0,0,184,128Z\"/>\u003C/svg>\u003Cspan class=\"wiki-visually-hidden\">(откроется в новой вкладке)\u003C/span>\u003C/a> (на английском)\u003C/li>\n\u003C/ul>\n",[10,14,17,20,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78],{"id":11,"level":12,"text":13},"история",2,"История",{"id":15,"level":12,"text":16},"какую-задачу-решают-техники","Какую задачу решают техники",{"id":18,"level":12,"text":19},"классы-эквивалентности","Классы эквивалентности",{"id":21,"level":22,"text":23},"допустимые-и-недопустимые-классы",3,"Допустимые и недопустимые классы",{"id":25,"level":22,"text":26},"правила-для-классов","Правила для классов",{"id":28,"level":22,"text":29},"покрытие-и-тест-кейсы","Покрытие и тест-кейсы",{"id":31,"level":22,"text":32},"несколько-параметров-и-покрытие-each-choice","Несколько параметров и покрытие Each Choice",{"id":34,"level":12,"text":35},"анализ-граничных-значений","Анализ граничных значений",{"id":37,"level":22,"text":38},"анализ-граничных-значений-по-двум-точкам","Анализ граничных значений по двум точкам",{"id":40,"level":22,"text":41},"анализ-граничных-значений-по-трём-точкам","Анализ граничных значений по трём точкам",{"id":43,"level":22,"text":44},"формулы-покрытия","Формулы покрытия",{"id":46,"level":12,"text":47},"числа","Числа",{"id":49,"level":22,"text":50},"диапазон-целых-чисел","Диапазон целых чисел",{"id":52,"level":22,"text":53},"денежная-сумма","Денежная сумма",{"id":55,"level":12,"text":56},"строки","Строки",{"id":58,"level":12,"text":59},"даты","Даты",{"id":61,"level":22,"text":62},"диапазон-дат","Диапазон дат",{"id":64,"level":22,"text":65},"високосные-годы-и-конец-месяца","Високосные годы и конец месяца",{"id":67,"level":12,"text":68},"сочетание-с-таблицами-решений","Сочетание с таблицами решений",{"id":70,"level":12,"text":71},"где-техники-не-помогают","Где техники не помогают",{"id":73,"level":12,"text":74},"разбиение-на-классы-и-смежные-техники","Разбиение на классы и смежные техники",{"id":76,"level":12,"text":77},"термины","Термины",{"id":79,"level":12,"text":80},"источники","Источники",2455,1793718892618]