Перейти к содержимому

Фотография

Pict весит и не может построить таблицу

pict pairwise

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 24

#21 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 10 июня 2019 - 12:01

Если не ограничивать модель, то он пытается построить пары "все со всеми".

Условие:

IF [Solution] = "Solution" THEN [TypeRT] = "0" OR [TypePT] = "0" OR [TypeAT] = "0";

фактически означает, что не может быть Solution и RTPTAT. Соответственно, нельзя построить пары RTPTAT со всеми значениями AccessSolution.

 

Про RTPT так сразу не видно, но наверняка, тоже что-то не стыкуется.

 

А вообще, все ли комбинации имеют смысл? Может быть, надо ограничить подбор комбинаций только между определенными колонками?


  • 0

#22 WindUp_Bird

WindUp_Bird

    Новый участник

  • Members
  • Pip
  • 13 сообщений
  • ФИО:Савченко Максим Андреевич

Отправлено 10 июня 2019 - 12:40

Если не ограничивать модель, то он пытается построить пары "все со всеми".

Условие:

IF [Solution] = "Solution" THEN [TypeRT] = "0" OR [TypePT] = "0" OR [TypeAT] = "0";

фактически означает, что не может быть Solution и RTPTAT. Соответственно, нельзя построить пары RTPTAT со всеми значениями AccessSolution.

 

Про RTPT так сразу не видно, но наверняка, тоже что-то не стыкуется.

 

А вообще, все ли комбинации имеют смысл? Может быть, надо ограничить подбор комбинаций только между определенными колонками?

Оставил вот так, изменений нет

 

Solution: Solution, 0
Container: RT, PT, AT, RTPTAT, RTPT
TypeRT: listRT, formRT, operationRT, listRTformRToperationRT,  0
TypePT: listPT, operationPT, listPToperationPT, 0
TypeAT: listAT, formAT, operationAT, listATformAToperationAT, 0
AccessSolution: F, R, CRUD, CRU, CRD, 0
Access: F, R, CRUDE, CRUD, CRU, CR, RUDE, RUE, RUD, 0
AccessTypeRT: RUD, RU, R, 0
AccessTypePT: RUD, RU, R, 0
AccessTypeAT: RUD, RU, R, 0
 
IF [Solution] = "Solution" THEN [AccessSolution] = "F" OR [AccessSolution] = "R" OR [AccessSolution] = "CRUD" OR [AccessSolution] = "CRU" OR [AccessSolution] = "CRD";
IF [Solution] = "0" THEN [AccessSolution] = "0";
 
IF [Container] = "RT" THEN [TypeRT] = "listRT" OR [TypeRT] = "formRT" OR [TypeRT] = "operationRT" OR [TypeRT] = "listRTformRToperationRT";
IF [Container] = "RT" THEN [TypeAT] = "0";
IF [Container] = "RT" THEN [TypePT] = "0";
IF [Container] = "AT" THEN [TypeAT] = "listAT" OR [TypeAT] = "formAT" OR [TypeAT] = "operationAT" OR [TypeAT] = "listATformAToperationAT";
IF [Container] = "AT" THEN [TypeRT] = "0";
IF [Container] = "AT" THEN [TypePT] = "0";
IF [Container] = "PT" THEN [TypePT] = "listPT" OR [TypePT] = "operationPT" OR [TypePT] = "listPToperationPT";
IF [Container] = "PT" THEN [TypeAT] = "0";
IF [Container] = "PT" THEN [TypeRT] = "0";
IF [Container] = "RTPTAT" THEN [TypeRT] = "listRT" OR [TypeRT] = "formRT" OR [TypeRT] = "operationRT" OR [TypeRT] = "listRTformRToperationRT";
IF [Container] = "RTPTAT" THEN [TypeAT] = "listAT" OR [TypeAT] = "formAT" OR [TypeAT] = "operationAT" OR [TypeAT] = "listATformAToperationAT";
IF [Container] = "RTPTAT" THEN [TypePT] = "listPT" OR [TypePT] = "operationPT" OR [TypePT] = "listPToperationPT";
IF [Container] = "RTPT" THEN [TypeRT] = "listRT" OR [TypeRT] = "formRT" OR [TypeRT] = "operationRT" OR [TypeRT] = "listRTformRToperationRT";
IF [Container] = "RTPT" THEN [TypePT] = "listPT" OR [TypePT] = "operationPT" OR [TypePT] = "listPToperationPT";
IF [Container] = "RTPT" THEN [TypeAT] = "0";
 
IF [TypeRT] = "listRT" THEN [AccessTypeRT] = "RUD" OR [AccessTypeRT] = "RU" OR [AccessTypeRT] = "R";
IF [TypeRT] = "listRT" THEN [AccessTypePT] = "0";
IF [TypeRT] = "listRT" THEN [AccessTypeAT] = "0";
IF [TypeRT] = "formRT" THEN [AccessTypeRT] = "RUD" OR [AccessTypeRT] = "RU" OR [AccessTypeRT] = "R";
IF [TypeRT] = "formRT" THEN [AccessTypePT] = "0";
IF [TypeRT] = "formRT" THEN [AccessTypeAT] = "0";
IF [TypeRT] = "operationRT" THEN [AccessTypeRT] = "RUD" OR [AccessTypeRT] = "RU" OR [AccessTypeRT] = "R";
IF [TypeRT] = "operationRT" THEN [AccessTypePT] = "0";
IF [TypeRT] = "operationRT" THEN [AccessTypeAT] = "0";
IF [TypeRT] = "listRTformRToperationRT" THEN [AccessTypeRT] = "RUD" OR [AccessTypeRT] = "RU" OR [AccessTypeRT] = "R";
IF [TypeRT] = "listRTformRToperationRT" THEN [AccessTypePT] = "0";
IF [TypeRT] = "listRTformRToperationRT" THEN [AccessTypeAT] = "0";
 
IF [TypePT] = "listPT" THEN [AccessTypePT] = "RUD" OR [AccessTypePT] = "RU" OR [AccessTypePT] = "R";
IF [TypePT] = "listPT" THEN [AccessTypeRT] = "0";
IF [TypePT] = "listPT" THEN [AccessTypeAT] = "0";
IF [TypePT] = "operationPT" THEN [AccessTypePT] = "RUD" OR [AccessTypePT] = "RU" OR [AccessTypePT] = "R";
IF [TypePT] = "operationPT" THEN [AccessTypeRT] = "0";
IF [TypePT] = "operationPT" THEN [AccessTypeAT] = "0";
IF [TypePT] = "listPToperationPT" THEN [AccessTypePT] = "RUD" OR [AccessTypePT] = "RU" OR [AccessTypePT] = "R";
IF [TypePT] = "listPToperationPT" THEN [AccessTypeRT] = "0";
IF [TypePT] = "listPToperationPT" THEN [AccessTypeAT] = "0";
 
IF [TypeAT] = "listAT" THEN [AccessTypeAT] = "RUD" OR [AccessTypeAT] = "RU" OR [AccessTypeAT] = "R";
IF [TypeAT] = "listAT" THEN [AccessTypeRT] = "0";
IF [TypeAT] = "listAT" THEN [AccessTypePT] = "0";
IF [TypeAT] = "formAT" THEN [AccessTypeAT] = "RUD" OR [AccessTypeAT] = "RU" OR [AccessTypeAT] = "R";
IF [TypeAT] = "formAT" THEN [AccessTypeRT] = "0";
IF [TypeAT] = "formAT" THEN [AccessTypePT] = "0";
IF [TypeAT] = "operationAT" THEN [AccessTypeAT] = "RUD" OR [AccessTypeAT] = "RU" OR [AccessTypeAT] = "R";
IF [TypeAT] = "operationAT" THEN [AccessTypeRT] = "0";
IF [TypeAT] = "operationAT" THEN [AccessTypePT] = "0";
IF [TypeAT] = "listATformAToperationAT" THEN [AccessTypeAT] = "RUD" OR [AccessTypeAT] = "RU" OR [AccessTypeAT] = "R";
IF [TypeAT] = "listATformAToperationAT" THEN [AccessTypeRT] = "0";
IF [TypeAT] = "listATformAToperationAT" THEN [AccessTypePT] = "0";

  • 0

#23 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 10 июня 2019 - 17:13

Взялся за задачу, т.к. до сих пор не приходилось опробовать на практике этот инструмент на чем-то достаточно сложном.

 

Во-первых, насчет Restrictive constraints. Противоречия в последнем варианте снова есть. Я больше не буду ни на что указывать, лучше найдите сами.

 

Во-вторых, результаты экспериментов. Вот максимальная модель, которая у меня заработала (некоторые обозначения поменял для своего удобства). Контейнеры выкинул, т.к. в них и была проблема. Всё же, для системы первичны значения AccessRT/PT/AT, а контейнеры - это просто их комбинация.

Solution:       Solution, None
AccessSolution: F, R, CRUD, CRU, CRD, None
AccessRT:       F, R, CRUDE, CRUD, CRU, CR, RUDE, RUE, RUD, None
AccessPT:       F, R, CRUDE, CRUD, CRU, CR, RUDE, RUE, RUD, None
AccessAT:       F, R, CRUDE, CRUD, CRU, CR, RUDE, RUE, RUD, None
TypeRT:         L, F, O, LFO, None
TypePT:         L, O, LO, None
TypeAT:         L, F, O, LFO, None
AccessTypeRT:   RUD, RU, R, None
AccessTypePT:   RUD, RU, R, None
AccessTypeAT:   RUD, RU, R, None

IF [Solution] = "None"
 THEN [AccessSolution] = "None"
 ELSE [AccessSolution] <> "None";

IF [AccessRT] = "None"
 THEN [TypeRT]  = "None" AND [AccessTypeRT]  = "None"
 ELSE [TypeRT] <> "None" AND [AccessTypeRT] <> "None";

IF [AccessPT] = "None"
 THEN [TypePT]  = "None" AND [AccessTypePT]  = "None"
 ELSE [TypePT] <> "None" AND [AccessTypePT] <> "None";

IF [AccessAT] = "None"
 THEN [TypeAT]  = "None" AND [AccessTypeAT]  = "None"
 ELSE [TypeAT] <> "None" AND [AccessTypeAT] <> "None";

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

 

Итого, есть 2 идеи:

  1. На каждый тип контейнера вручную делать свою модель, и в ней лишние поля просто удалять. Пока получится 5 файликов, не страшно.
  2. Тестов всё равно очень много - сотни. Это явно неподходящая техника для создания ручных тестов. А если автоматизируем, то можно вообще выкинуть pairwise и тестировать всё подряд. Здесь 2 "но": это можно сделать, если тесты быстрые (всё же, сплошным перебором их будет на порядок больше), и если технически возможно написать оракул для проверки любой комбинации.

  • 0

#24 WindUp_Bird

WindUp_Bird

    Новый участник

  • Members
  • Pip
  • 13 сообщений
  • ФИО:Савченко Максим Андреевич

Отправлено 11 июня 2019 - 11:29

Я понял кажется, нужно действительно все переделать.


  • 0

#25 WindUp_Bird

WindUp_Bird

    Новый участник

  • Members
  • Pip
  • 13 сообщений
  • ФИО:Савченко Максим Андреевич

Отправлено 11 июня 2019 - 12:20

Пересмотрел полностью таблицу:

 

Solution: F, R, CRUD, CRU, CRD, None
RT: F, R, CRUDE, CRUD, CRU, CR, RUDE, RUE, RUD, None
PT: F, R, CRUDE, CRUD, CRU, CR, RUDE, RUE, RUD, None
AT: F, R, CRUDE, CRUD, CRU, CR, RUDE, RUE, RUD, None
listRT: RUD, RU, R, None
formRT: RUD, RU, R, None
operationRT: RUD, RU, R, None
listPT: RUD, RU, R, None
operationPT: RUD, RU, R, None
listAT: RUD, RU, R, None
formAT: RUD, RU, R, None
operationAT: RUD, RU, R, None
 
IF [RT] = "None" THEN [listRT] = "None";
IF [RT] = "None" THEN [formRT] = "None";
IF [RT] = "None" THEN [operationRT] = "None";
 
IF [PT] = "None" THEN [listPT] = "None";
IF [PT] = "None" THEN [operationPT] = "None";
 
IF [AT] = "None" THEN [listAT] = "None";
IF [AT] = "None" THEN [formAT] = "None";
IF [AT] = "None" THEN [operationAT] = "None";

  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных