Modelli di progettazione per modellare il grafico decisionale complesso

5

Attualmente sto costruendo un pezzo di codice che crea effetti collaterali basati sui parametri di input. Ha circa dieci parametri di input e circa sei effetti collaterali disponibili. Sulla base dei parametri di input, gli effetti collaterali scelti - uno o più - differiscono.

Ho iniziato a sviluppare questo test del codice prima con un framework contesto / specifiche, perché ogni parametro di input è fondamentalmente un contesto.

Il codice risultante finora è una struttura if-else profondamente annidata.

Fino ad ora ho implementato circa il 30% e il codice - e anche i test ancora di più - stanno diventando molto complessi, ingombranti e difficili da capire. Tanto che dubito che questo sia l'approccio corretto.
Il problema principale sono in realtà i test, perché continuo a ripetere le condizioni per alcuni dei parametri di input nidificati più profondi, nonché per gli effetti collaterali che ne derivano.

Esistono modelli di progettazione per costruire e testare questo tipo di "grafico decisionale"?

Si noti che i parametri di input non sono valori fissi. Gran parte della logica è relativ, cioè se il parametro di input 1 è inferiore al parametro di input 2.

L'output corrente dei miei test può essere visto qui: link
Puoi vedere che c'è molta ripetizione, rendendo difficile ragionare su ciò che effettivamente fa.

    
posta Daniel Hilgarth 29.01.2018 - 17:38
fonte

1 risposta

3

Dalla visualizzazione del punto di implementazione, Martin & Il modello Specifica di Eric può aiutare. Se possibile, cerca di suddividere le tue regole e raggrupparle in quelle più piccole e utilizzare "Espressioni logiche per specifiche composite" per convergerle. In questo modo, puoi testare ciascuna singola unità logica una per una.

Inoltre, ci sono alcune soluzioni commerciali off-the-shelf per DSL decisionali come Drool da redhat.

Per quanto riguarda i test, a parte il crollo, il Test basato sui dati sembra abbastanza adatto al tuo problema . Lo scenario per utilizzare questo modello è

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

Ci sono anche molte soluzioni commerciali o open source per l'area di test, come Fit.

    
risposta data 30.01.2018 - 03:32
fonte