[{"data":1,"prerenderedAt":61},["ShallowReactive",2],{"wiki-test-design-state-transition-testing-ru":3},{"meta":4,"html":8,"headings":9,"words":60},{"title":5,"description":6,"published":7,"updated":7,"sourceUpdated":7},"Тестирование переходов состояний","Тестирование переходов состояний: состояния, события, сторожевые условия и действия, таблица состояний с недопустимыми переходами, покрытие до N-switch.","2026-11-03","\u003Cp>\u003Cstrong>Тестирование переходов состояний\u003C/strong> (state transition testing) - техника тестирования методом чёрного ящика, при которой \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"test-case\">тест-кейсы\u003C/span> строятся так, чтобы задействовать элементы модели переходов состояний. Модель описывает состояния объекта тестирования, события, на которые он реагирует, и переходы между состояниями, которые эти события вызывают. Техника нужна, когда реакция системы на ввод зависит не только от самого ввода, но и от того, что происходило раньше.\u003C/p>\n\u003Cp>Модели состояний пришли из теории автоматов. В 1978 году Т. С. Чоу (T. S. Chow) опубликовал в журнале IEEE Transactions on Software Engineering метод тестирования проектов программ, описанных конечными автоматами, и глоссарий ISTQB называет Чоу источником термина «покрытие N-переключений» (N-switch coverage). Сегодня техника - одна из четырёх техник чёрного ящика в силлабусе ISTQB Foundation Level (версия 4.0.1, раздел 4.2.4). Силлабус Advanced Level Test Analyst (версия 4.0, 2025 год, раздел 3.2.2) добавляет покрытие N-переключений и покрытие круговых путей. Стандарт ISO/IEC/IEEE 29119-4:2021 описывает технику в разделе 5.2.8, а измерение её покрытия - в разделе 6.2.8.\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\u003Cp>Техники, которые смотрят только на входные значения, этой зависимости не видят. \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"equivalence-partition\">Классы эквивалентности\u003C/span> и \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"decision-table\">таблицы решений\u003C/span> описывают одну реакцию на одно сочетание входных данных. Они не описывают последовательности: что будет, если заказ оплатить, затем отменить, а затем событие оплаты придёт ещё раз. \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"defect\">Дефекты\u003C/span> такого рода проявляются в порядке событий, а не в значениях.\u003C/p>\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>Paid\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Событие\u003C/td>\n\u003Ctd>Происшествие, которое может вызвать переход\u003C/td>\n\u003Ctd>ship\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Переход\u003C/td>\n\u003Ctd>Смена исходного состояния на целевое\u003C/td>\n\u003Ctd>Из Paid в Shipped\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Сторожевое условие\u003C/td>\n\u003Ctd>Условие, которое должно быть истинным, чтобы переход сработал\u003C/td>\n\u003Ctd>payment approved\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Действие\u003C/td>\n\u003Ctd>Поведение, которое выполняется при переходе\u003C/td>\n\u003Ctd>send tracking number\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Начальное состояние\u003C/td>\n\u003Ctd>Состояние, в котором объект начинает работу\u003C/td>\n\u003Ctd>Pending payment\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Конечное состояние\u003C/td>\n\u003Ctd>Состояние, после которого объект не принимает событий\u003C/td>\n\u003Ctd>Delivered, Cancelled\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Силлабус ISTQB записывает метку перехода как \u003Ccode>event [guard condition] / action\u003C/code>. Сторожевое условие (guard condition) и действие (action) опускаются, если их нет или если для тестировщика они не важны. Переходы считаются мгновенными. Переход может вести обратно в то же состояние: отклонённая оплата оставляет заказ в ожидании оплаты и показывает ошибку.\u003C/p>\n\u003Cp>Сторожевые условия делят одно событие на несколько переходов. Событие \u003Ccode>pay\u003C/code> из состояния Pending payment ведёт в Paid, если оплата одобрена, и оставляет заказ в Pending payment, если она отклонена. Для тестировщика это два разных перехода, и каждому нужен свой тест.\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> (state diagram) показывает состояния как узлы, а допустимые переходы - как стрелки с подписями событий. Жизненный цикл заказа в интернет-магазине содержит пять состояний и шесть допустимых переходов:\u003C/p>\n\u003Cdiv class=\"wiki-code wiki-code--plain\">\u003Cpre>\u003Ccode> start\n   |\n   v\n+-----------------+   pay [declined] / show error\n| Pending payment |--------------------------+\n|                 |&lt;-------------------------+\n+-----------------+\n   |          |\n   | cancel   | pay [approved] / send receipt\n   |          v\n   |     +------+\n   |     | Paid |----------------------+\n   |     +------+                      |\n   |          |                        | cancel / refund\n   |          | ship / send tracking   |\n   |          v                        |\n   |     +---------+                   |\n   |     | Shipped |                   |\n   |     +---------+                   |\n   |          |                        |\n   |          | deliver                |\n   |          v                        |\n   |     +-----------+                 |\n   |     | Delivered |                 |\n   |     +-----------+                 |\n   v                                   |\n+-----------+                          |\n| Cancelled |&lt;-------------------------+\n+-----------+\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>Переходы пронумерованы, чтобы ссылаться на них дальше в статье:\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-4\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>№\u003C/th>\n\u003Cth>Исходное состояние\u003C/th>\n\u003Cth>Событие [условие] / действие\u003C/th>\n\u003Cth>Целевое состояние\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>T1\u003C/td>\n\u003Ctd>Pending payment\u003C/td>\n\u003Ctd>pay [approved] / send receipt\u003C/td>\n\u003Ctd>Paid\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>T2\u003C/td>\n\u003Ctd>Pending payment\u003C/td>\n\u003Ctd>pay [declined] / show error\u003C/td>\n\u003Ctd>Pending payment\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>T3\u003C/td>\n\u003Ctd>Pending payment\u003C/td>\n\u003Ctd>cancel\u003C/td>\n\u003Ctd>Cancelled\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>T4\u003C/td>\n\u003Ctd>Paid\u003C/td>\n\u003Ctd>cancel / refund\u003C/td>\n\u003Ctd>Cancelled\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>T5\u003C/td>\n\u003Ctd>Paid\u003C/td>\n\u003Ctd>ship / send tracking\u003C/td>\n\u003Ctd>Shipped\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>T6\u003C/td>\n\u003Ctd>Shipped\u003C/td>\n\u003Ctd>deliver\u003C/td>\n\u003Ctd>Delivered\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Диаграмма показывает только то, что разрешено. Она не показывает, что происходит, когда событие приходит в состояние, где для него нет стрелки, например \u003Ccode>cancel\u003C/code> для отправленного заказа.\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> (state table) - модель, равносильная диаграмме состояний. Её строки - состояния, столбцы - события вместе со сторожевыми условиями, а в каждой ячейке записаны целевое состояние и действие. В отличие от диаграммы, таблица состояний явно показывает недопустимые переходы. Силлабус ISTQB оставляет такие ячейки пустыми; в таблице ниже они отмечены дефисом:\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-6\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Состояние\u003C/th>\n\u003Cth>pay [approved]\u003C/th>\n\u003Cth>pay [declined]\u003C/th>\n\u003Cth>cancel\u003C/th>\n\u003Cth>ship\u003C/th>\n\u003Cth>deliver\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Pending payment\u003C/td>\n\u003Ctd>Paid / send receipt\u003C/td>\n\u003Ctd>Pending payment / show error\u003C/td>\n\u003Ctd>Cancelled\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Paid\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003Ctd>Cancelled / refund\u003C/td>\n\u003Ctd>Shipped / send tracking\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Shipped\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003Ctd>Delivered\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Delivered\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Cancelled\u003C/td>\n\u003Ctd>-\u003C/td>\n\u003Ctd>-\u003C/td>\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>В таблице 25 ячеек: 6 допустимых переходов и 19 недопустимых. Построение таблицы заставляет принять решение по каждой ячейке. Ячейка, которую никто не может заполнить, - вопрос к авторам требований: нужно ли вернуть деньги за оплаченный заказ, который отменили во время сборки, или отклонить отмену?\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> (invalid transition) - событие, которое приходит в состояние, где оно не разрешено. \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"expected-result\">Ожидаемый результат\u003C/span> такого теста определяют требования. Обычно объект остаётся в том же состоянии, никакое действие не выполняется, а пользователь или вызывающая система получает ошибку. Некоторые события по замыслу игнорируются без ошибки, например повторное \u003Ccode>deliver\u003C/code> от системы курьерской службы. Тест проверяет состояние после события, а не только сообщение.\u003C/p>\n\u003Cp>Недопустимые переходы не всегда достижимы через пользовательский интерфейс. Интерфейс может скрывать кнопку отправки у неоплаченного заказа, а API за ним при этом всё равно принимает запрос. Поэтому тесты недопустимых переходов выполняют и ниже пользовательского интерфейса, где событие можно отправить напрямую.\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>Силлабус ISTQB определяет три критерия покрытия для тестирования переходов состояний. Каждый измеряется в процентах: задействованные элементы покрытия, делённые на все элементы покрытия.\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>5 состояний\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Покрытие допустимых переходов (0-switch)\u003C/td>\n\u003Ctd>Отдельные допустимые переходы\u003C/td>\n\u003Ctd>6 переходов\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Покрытие всех переходов\u003C/td>\n\u003Ctd>Допустимые и недопустимые переходы таблицы состояний\u003C/td>\n\u003Ctd>6 допустимых и 19 недопустимых\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\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>Покрытие всех состояний (all states coverage) требует, чтобы каждое состояние было достигнуто хотя бы один раз. В примере с заказом достаточно двух тест-кейсов: один проходит через Pending payment, Paid, Shipped и Delivered, другой отменяет заказ. Критерий слабый: его можно выполнить, не задействовав ни возврат денег (T4), ни отклонённую оплату (T2).\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 transitions coverage) требует, чтобы каждый допустимый переход был задействован хотя бы один раз. Его также называют покрытием 0-переключений (0-switch coverage). Тест-кейс - это последовательность событий, и один тест-кейс может задействовать несколько переходов. Три тест-кейса покрывают все шесть переходов примера; они перечислены ниже, в разделе о тест-кейсах.\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>Покрытие всех переходов (all transitions coverage) добавляет каждый недопустимый переход таблицы состояний. Силлабус рекомендует проверять один недопустимый переход в одном тест-кейсе. Два недопустимых события в одном тест-кейсе могут привести к маскированию дефектов (defect masking): первый дефект скрывает второй. В примере 19 недопустимых переходов требуют не меньше 19 тест-кейсов. Допустимые переходы укладываются в их первые шаги, которые приводят заказ в состояние, где отправляется недопустимое событие.\u003C/p>\n\u003Ch3 id=\"покрытие-n-переключений\" class=\"wiki-heading\">Покрытие N-переключений\u003Cbutton type=\"button\" class=\"wiki-heading__anchor\" data-wiki-anchor=\"покрытие-n-переключений\" 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>Покрытие N-переключений\u003C/strong> (N-switch coverage) - покрытие последовательностей из N+1 идущих подряд допустимых переходов. Покрытие допустимых переходов - случай N = 0. Покрытие 1-переключений требует каждой пары последовательных переходов, где второй начинается в состоянии, в котором закончился первый. В примере с заказом таких пар шесть:\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>Pending payment\u003C/td>\n\u003Ctd>T2, затем T1; T2, затем T2; T2, затем T3\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Paid\u003C/td>\n\u003Ctd>T1, затем T4; T1, затем T5\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Shipped\u003C/td>\n\u003Ctd>T5, затем T6\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Пара T2, затем T2 - это две отклонённые оплаты подряд. Она проверяет, что вторая попытка принимается и после неудачи первой, чего отдельные переходы не показывают. По данным силлабуса Test Analyst, на практике часто используют покрытие 0- и 1-переключений, а покрытие 2-переключений и выше оправдано только при высоком риске отказа. Тот же силлабус определяет \u003Cstrong>покрытие круговых путей\u003C/strong> (round-trip coverage): круговой путь (round trip) - цикл, который начинается и заканчивается в одном и том же состоянии, и никакое другое состояние в нём не встречается дважды.\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>Следующие тест-кейсы дают полное покрытие допустимых переходов. Каждая строка - последовательность событий из начального состояния Pending payment.\u003C/p>\n\u003Cdiv class=\"wiki-table wiki-table--cols-4\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Тест-кейс\u003C/th>\n\u003Cth>События\u003C/th>\n\u003Cth>Пройденные состояния\u003C/th>\n\u003Cth>Переходы\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>ST-1\u003C/td>\n\u003Ctd>pay [declined], pay [approved], ship, deliver\u003C/td>\n\u003Ctd>Pending payment, Pending payment, Paid, Shipped, Delivered\u003C/td>\n\u003Ctd>T2, T1, T5, T6\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>ST-2\u003C/td>\n\u003Ctd>cancel\u003C/td>\n\u003Ctd>Pending payment, Cancelled\u003C/td>\n\u003Ctd>T3\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>ST-3\u003C/td>\n\u003Ctd>pay [approved], cancel\u003C/td>\n\u003Ctd>Pending payment, Paid, Cancelled\u003C/td>\n\u003Ctd>T1, T4\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>ST-1 и ST-2 вместе достигают всех пяти состояний, то есть дают покрытие всех состояний. ST-3 добавляет возврат денег - единственный переход, который первые два пропускают. Каждый тест-кейс проверяет состояние и действие после каждого события: сообщение об ошибке после отклонённой оплаты, чек, номер для отслеживания, возврат денег.\u003C/p>\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>ST-4\u003C/td>\n\u003Ctd>pay [approved], ship, cancel\u003C/td>\n\u003Ctd>Ошибка; состояние остаётся Shipped; возврата нет\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>ST-5\u003C/td>\n\u003Ctd>ship\u003C/td>\n\u003Ctd>Ошибка; состояние остаётся Pending payment; номера для отслеживания нет\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>ST-6\u003C/td>\n\u003Ctd>cancel, pay [approved]\u003C/td>\n\u003Ctd>Ошибка; состояние остаётся Cancelled; оплата не списывается\u003C/td>\n\u003C/tr>\n\u003C/tbody>\n\u003C/table>\u003C/div>\n\u003Cp>Тест-кейсы записываются в обычной форме с \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"precondition\">предусловиями\u003C/span>, шагами и ожидаемыми результатами; структура описана в статье \u003Ca href=\"/ru/wiki/test-management/test-case\" class=\"wiki-link wiki-link--article\">Тест-кейс\u003C/a>. За сторожевыми условиями часто скрываются классы входных данных: «оплата одобрена» и «оплата отклонена» - результат данных карты, лимитов суммы и ответа платёжного провайдера. Выбор значений для них - предмет статьи \u003Ca href=\"/ru/wiki/test-design/equivalence-partitioning-and-boundary-values\" 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\u003Cp>Тест-кейсы можно нарисовать на диаграмме как пути. Если отметить путь каждого тест-кейса, пробелы становятся видны: стрелка, через которую не проходит ни один путь, - переход без теста. Ту же проверку можно сделать по списку переходов: столбец на каждый тест-кейс и отметка у каждого перехода, который он задействует.\u003C/p>\n\u003Cp>Для больших моделей используют более выразительные нотации. Силлабус Test Analyst называет расширенные конечные автоматы, диаграммы состояний Харела (statecharts) и машины состояний UML. Статья Дэвида Харела (David Harel) 1987 года описывает statecharts как диаграммы переходов состояний, дополненные иерархией, параллельностью и взаимодействием. Иерархия сохраняет диаграмму читаемой: состояние Active может содержать Paid и Shipped, и одна стрелка \u003Ccode>cancel\u003C/code> из Active заменяет несколько переходов. Для тест-дизайна такую модель снова разворачивают в таблицу, чтобы можно было пересчитать каждый переход и каждую недопустимую ячейку.\u003C/p>\n\u003Cblockquote>\n\u003Cp>Диаграмма состояний в спецификации часто - лишь сводка. RFC 9293, который определяет TCP, говорит о собственной диаграмме состояний, что это только сводка и её нельзя считать полной спецификацией. Тест-кейсы строятся по полному описанию поведения, а не только по картинке.\u003C/p>\n\u003C/blockquote>\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>: обработка соединений и последовательности сообщений. У TCP, как он описан в RFC 9293, одиннадцать состояний соединения, от LISTEN и SYN-SENT до TIME-WAIT и CLOSED.\u003C/li>\n\u003Cli>\u003Cstrong>Рабочие процессы\u003C/strong>: жизненные циклы документов, заказов, заявок и \u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"defect-report\">отчётов о дефектах\u003C/span>. Состояния отчёта о дефекте описаны в статье \u003Ca href=\"/ru/wiki/test-management/defect-report\" class=\"wiki-link wiki-link--article\">Отчёт о дефекте\u003C/a>.\u003C/li>\n\u003Cli>\u003Cstrong>Встроенное и управляющее программное обеспечение\u003C/strong>: устройства с режимами работы, где событие, допустимое в одном режиме, опасно в другом.\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-4\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Техника\u003C/th>\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>Состояния, переходы, N-переключения\u003C/td>\n\u003Ctd>Порядок событий, недопустимые события\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Тестирование с таблицами решений\u003C/td>\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\u003Ctd>Сквозные цели пользователя\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Разбиение на классы эквивалентности\u003C/td>\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>Таблица решений описывает одну реакцию на сочетание условий; модель состояний описывает, как реакции меняются со временем. Их часто используют вместе: сторожевые условия перехода с несколькими условиями разворачивают в таблицу решений, описанную в статье \u003Ca href=\"/ru/wiki/test-design/decision-table-testing\" class=\"wiki-link wiki-link--article\">Таблицы решений\u003C/a>.\u003C/p>\n\u003Cp>\u003Cspan class=\"wiki-term\" tabindex=\"0\" data-wiki-term=\"use-case\">Вариант использования\u003C/span> тоже описывает последовательность, но с точки зрения актора и цели, а не объекта и его состояний. Один вариант использования, например «купить товар», может пройти через несколько состояний заказа. \u003Ca href=\"/ru/wiki/test-design/use-case-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\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>Тестирование переходов состояний (state transition testing)\u003C/td>\n\u003Ctd>Техника тестирования методом чёрного ящика, при которой тест-кейсы задействуют элементы модели переходов состояний\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Диаграмма состояний (state diagram)\u003C/td>\n\u003Ctd>Диаграмма состояний объекта и допустимых переходов между ними\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Таблица состояний (state table)\u003C/td>\n\u003Ctd>Таблица состояний и событий, в ячейках которой записаны целевые состояния и действия; пустые ячейки - недопустимые переходы\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Сторожевое условие (guard condition)\u003C/td>\n\u003Ctd>Условие, которое должно быть истинным, чтобы событие вызвало переход\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Недопустимый переход (invalid transition)\u003C/td>\n\u003Ctd>Событие, которое приходит в состояние, где модель его не разрешает\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Покрытие допустимых переходов (valid transitions coverage)\u003C/td>\n\u003Ctd>Доля допустимых переходов, задействованных тестами; также называется покрытием 0-переключений\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Покрытие всех переходов (all transitions coverage)\u003C/td>\n\u003Ctd>Доля допустимых и недопустимых переходов таблицы состояний, задействованных или опробованных тестами\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Покрытие N-переключений (N-switch coverage)\u003C/td>\n\u003Ctd>Покрытие последовательностей из N+1 идущих подряд допустимых переходов\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Круговой путь (round trip)\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, 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://www.istqb.org/wp-content/uploads/sdm-uploads/ISTQB-CTAL-TA-Syllabus-v4.0-EN-4.pdf\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">ISTQB Certified Tester Advanced Level Test Analyst Syllabus v4.0, ISTQB, 2025\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.iso.org/standard/79430.html\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">ISO/IEC/IEEE 29119-4:2021, Software and systems engineering, Software testing, Part 4: Test techniques\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://doi.org/10.1109/TSE.1978.231496\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Testing Software Design Modeled by Finite-State Machines, T. S. Chow, IEEE Transactions on Software Engineering, vol. SE-4, no. 3, 1978\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://doi.org/10.1016/0167-6423%2887%2990035-9\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">Statecharts: a visual formalism for complex systems, D. Harel, Science of Computer Programming, vol. 8, no. 3, 1987\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.rfc-editor.org/rfc/rfc9293.html\" target=\"_blank\" rel=\"noopener\" class=\"wiki-link wiki-link--external\">RFC 9293, Transmission Control Protocol (TCP), IETF, August 2022\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,23,27,30,33,36,39,42,45,48,51,54,57],{"id":11,"level":12,"text":13},"какую-задачу-решает-тестирование-переходов-состояний",2,"Какую задачу решает тестирование переходов состояний",{"id":15,"level":12,"text":16},"элементы-модели-состояний","Элементы модели состояний",{"id":18,"level":12,"text":19},"диаграмма-состояний","Диаграмма состояний",{"id":21,"level":12,"text":22},"таблица-состояний","Таблица состояний",{"id":24,"level":25,"text":26},"недопустимые-переходы",3,"Недопустимые переходы",{"id":28,"level":12,"text":29},"критерии-покрытия","Критерии покрытия",{"id":31,"level":25,"text":32},"покрытие-всех-состояний","Покрытие всех состояний",{"id":34,"level":25,"text":35},"покрытие-допустимых-переходов","Покрытие допустимых переходов",{"id":37,"level":25,"text":38},"покрытие-всех-переходов","Покрытие всех переходов",{"id":40,"level":25,"text":41},"покрытие-n-переключений","Покрытие N-переключений",{"id":43,"level":12,"text":44},"тест-кейсы-для-примера-с-заказом","Тест-кейсы для примера с заказом",{"id":46,"level":12,"text":47},"визуализация-потока","Визуализация потока",{"id":49,"level":12,"text":50},"где-применяется-техника","Где применяется техника",{"id":52,"level":12,"text":53},"тестирование-переходов-состояний-и-смежные-техники","Тестирование переходов состояний и смежные техники",{"id":55,"level":12,"text":56},"термины","Термины",{"id":58,"level":12,"text":59},"источники","Источники",2207,1793718892849]