Design Patterns para modelar gráfico de decisão complexo

5

Atualmente, estou criando um código que cria efeitos colaterais com base nos parâmetros de entrada. Tem cerca de dez parâmetros de entrada e cerca de seis efeitos secundários disponíveis. Com base nos parâmetros de entrada, os efeitos secundários escolhidos - um ou vários - diferem.

Eu comecei a desenvolver este teste de código primeiro com uma estrutura de contexto / especificação, porque cada parâmetro de entrada é basicamente um contexto.

O código resultante até agora é uma estrutura if-else profundamente aninhada.

Implementei cerca de 30% até agora e o código - e os testes ainda mais - estão ficando muito complexos, complicados e difíceis de entender. Tanto que estou duvidando que esta seja a abordagem correta.
O principal problema são os testes, porque eu continuo repetindo as condições para alguns dos parâmetros de entrada aninhados mais profundos, assim como para os efeitos colaterais resultantes.

Existem padrões de projeto para construir e testar esse tipo de "gráfico de decisão"?

Por favor, note que os parâmetros de entrada não são valores fixos. Muito da lógica é relativ, ou seja, se o parâmetro de entrada 1 for menor que o parâmetro de entrada 2.

A saída atual dos meus testes pode ser vista aqui: link
Você pode ver que há muita repetição, tornando difícil raciocinar sobre o que realmente faz.

    
por Daniel Hilgarth 29.01.2018 / 17:38
fonte

1 resposta

3

Do ponto de vista da implementação, Martin & O padrão Especificação de Eric pode ajudar. Se possível, tente dividir suas regras e agrupá-las em regras menores e use "Expressões lógicas para especificações compostas" para convertê-las. Dessa forma, você pode testar cada pequena unidade lógica individual, uma a uma.

Além disso, há algumas soluções comerciais prontas para uso para DSLs de decisão, como o Drool do redhat.

Quanto ao teste, além do detalhamento, o Teste orientado por dados parece adequado ao seu problema . O cenário para usar esse padrão é

"essentially the same test with slight different system inputs and verify that the actual output varies accordingly"

Também há muitas soluções comerciais ou de código aberto para a área de testes, como o Fit.

    
por 30.01.2018 / 03:32
fonte