TL; DR : Il mio obiettivo è creare un framework con il quale potrei scoprire / testare tutti i possibili stati interni della mia applicazione in modo che possa avvicinarmi con sicurezza, ad esempio software di ingegneria per dispositivi medici, aerei ecc ...
Vorrei prima spiegare alcuni contesti ...
Stavo guardando il video sulla tecnica di mappatura di esempio interessante utilizzato in pratiche agili. Il video tratta di come esplorare lo spazio del dominio con esempi che stanno creando una mappa per lo spazio del dominio problematico. In parole più concrete hanno cercato di arrivare a modellare una soluzione per la user story: "prenotazione di un biglietto del treno". Dopo che la storia dell'utente è stata presentata, hanno regole o vincoli di layout per lo spazio della soluzione. Dopo di ciò, impaginano alcuni esempi di base in cui creano casi interessanti (esempi) in cui le entità dello spazio del dominio possono entrare ... Dalla sessione di brainstorming scoprono lo spazio dei problemi che prima non era noto e creavano domande come "cosa dovrebbe essere il sistema? fare se questo particolare stato può verificarsi ".
Ogni soluzione di programmazione che noi programmatori creiamo è essenzialmente quella di creare un comportamento per un elenco di casi d'uso. Molte volte non copriamo tutti gli stati in cui la nostra soluzione può entrare o perdiamo casi d'uso sconosciuti che stanno creando stati illegali e questo è il motivo per cui ulteriori interazioni stanno creando errori (comportamento indesiderato) del nostro sistema.
Quindi voglio incorporare test di simulazione di eventi discreti nella mia casella degli strumenti standard che analizzino il mio sistema nell'ambito della missione con la missione di esplorare lo spazio del problema e scoprire quel comportamento indesiderato. Molte volte è successo prima quando non avevo una conoscenza completa dello spazio del dominio che stavo imparando su quello spazio del dominio con la produzione di quegli errori, quindi l'utilizzo di alcuni test di simulazione di eventi discreti sarebbe un grande vantaggio per la mia pratica di ingegneria del software insieme a DDD e TDD .
Sono un grande fan di TDD ma spesso capita che non si copra tutti i casi a causa della conoscenza limitata del dominio ...
Quindi sto pensando di incorporare una qualche forma di framework di test white box in cui direi quali sono i vincoli input / output interni ed esterni per vari argomenti di input, chiamate database, chiamate di servizi esterni ecc ...) e il test il framework dovrebbe scoprire comportamenti inaspettati (bug, ecc ...) invece di creare tutti quei test di e2e che potrebbero essere coperti dal framework di test. E questa potrebbe essere una grande aggiunta al TDD ...
La mia domanda è come la NASA, ad esempio, testa il suo software di sistema a razzo? Devono incorporare qualche forma di simulazione di eventi discreti sul loro software in modo che siano sicuri di aver esplorato tutti gli stati in cui il sistema può entrare?