terça-feira, 28 de janeiro de 2014

Exemplo de Tabela de Decisão



Continuando a ideia de tabela de decisão exposta no post anterior,  nesse será exibido um exemplo de uso da tabela de decisão. Vamos a ele:
Suponha que estamos projetando aconselhar uma pessoa, com relação a qual roupa vestir, quando sair. Uma primeira tentativa pode ser a seguinte:

TABELA-CASACO
R1
R2
R3
C1

C2
chovendo

frio
Y

Y
Y

N
N

Y





A1
usar capa forrada
X


A2
usar capa sem forro

X

A3
usar pulover de lã


X

Note que as condições são entendidas como perguntas. No quadrante de ação, três ações possíveis e mutuamente exclusivas estão indicadas: usar capa forrada, usar capa sem forro e usar pulover de lã, simbolizadas pelas linhas A1, A2 e A3, respectivamente. No lado da entrada, três regras são formadas: pode estar chovendo e frio, apenas chovendo ou apenas frio, simbolizadas pelas colunas R1, R2 e R3 respectivamente. Note que para cada regra existe um conjunto de respostas para as perguntas que estão no quadrante de condição (explicitadas na entrada de condição); e a seleção de uma ou mais ações no quadrante de entrada de ação. Este tipo de tabela de decisão é geralmente denominado tabela de decisão de entrada limitada (TDEL) porque as respostas às perguntas são limitadas a apenas dois valores (Y e N) e também porque no quadrante de entrada de ações, as ações estão limitadas a duas possibilidades: faça a ação (X), ou não faça a ação (nada aparece).
Note na tabela anterior que não existe uma regra que tenha todos os valores iguais a N. Para essa regra, somos tentados a adicionar uma quarta ação, A4, que diz "não vista uma capa". Entretanto essa ação A4 seria uma ação redundante. Fisicamente ela realmente não é uma ação, mas sim a ausência de uma ação. Assim, nós simplesmente omitimos a colocação de um X em qualquer das linhas A1, A2 ou A3, ao invés de adicionar uma ação sem sentido. Existem duas 'patologias' comuns associadas com TD - regras que estejam faltando e ações redundantes.

Mesmo com R4 adicionada à TD anterior, essa tabela estaria ainda incompleta. Primeiro se não tivermos qualquer outra ação que não as três originais, o usuário irá ficar o resto do seu dia perto do guarda-roupas, uma vez que a TD não especifica onde o usuário deve ir, após o cumprimento de uma ação. Para completarmos as ações, podemos adicionar A4, "vá à garagem", para todas as 4 regras. Assim, direcionamos o usuário a outra atividade - escolha do carro.
A TD que está sendo construída está ainda inadequada. Ao final de cada regra nós devemos ou incluir uma conecção intermódulo ou o final do programa. Esses comandos de conclusão da TD são chamados exits e alguns projetistas de TD incluem na tabela um quadrante-de-exits e uma entrada de exits, com um outro conjunto de linhas horizontais duplas, para separar as linhas de ação das linhas de exit. Vamos continuar usando quatro quadrantes, mas vamos usar a notação de X para programas ou módulos de exits, deixando uma linha em branco entre a última ação e a primeira exit.


TABELA-CASACO
R1
R2
R3
R4
C1

C2
chovendo

frio
Y

Y
Y

N
N

Y
N

N






A1
usar capa forrada
X



A2
usar capa sem forro

X


A3
usar pulover de lã


X

A4
prossiga para a garagem
X
X
X
X

X1
retorne à tabela mestra
X
X
X
X

É importante mencionar que na TD final, não existe um único procedimento para a busca no quadrante de condições, de maneira a determinar o conjunto correto de respostas em um dado módulo de execução. Existe uma implicação que as ações em qualquer regra são executadas sequencialmente na entrada e quadrante de ação. Por exemplo, em R1, A1 é executado primeiro, A2 em segundo e X1 em terceiro. A ação A4 poderia ter sido expressa como "va' para a garagem"- entretanto, o "vá para" é uma palavra chave em TD, que é usada para indicar a saída do módulo. É importante também que se faça uma distinção entre A4 e X1. A4 é claramente uma ação realizada pelo usuário, dentro do módulo. X1, entretanto, diz ao usuário qual tabela consultar para futuras orientações.
Para uma TD ser completa, cada combinação de respostas aos testes deve ser incluída exatamente uma vez, como uma regra. Suponha, por exemplo, que a tabela anterior tivesse os seguintes padrões na entrada de condição:

R1
R2
R3
R4
R5
Y
Y
N
N
Y
Y
N
Y
N
N

Se assim fosse, R5 seria uma regra redundante se contivesse o mesmo conjunto de ações que R2, ambas caracterizando um dia chuvoso que não está frio. Para corrigir isto, ou R2 ou R5 deve ser eliminada. Entretanto, se R5 conduzir a um conjunto de ações diferente daquele de R2, as duas regras estarão em conflito e temos uma contradição. Para uma TD definida assim, o usuário não saberia como se comportar em um dia chuvoso em que não estivesse frio. Este problema é consequência, geralmente, de uma especificação mal feita do problema ou, então, de um erro do projetista da TD.
Para uma Tabela de Decisão de Entrada Limitada (TDEL), o número distinto de regras elementares é: 2N, onde N é o número de condições. Por exemplo, a árvore de decisão binária associada a uma DTEL com 4 condições é a mostrada a seguir, com 16 (24) possíveis regras. Cada nó da árvore representa um teste de condição: a ramificação à esquerda significa que o resultado do teste é Y(es), o à direita, N(o).
 











Referência:
Hurley, R.B. Decision tables in software engineering, Van Nostrand Reinhold Company, 1983