Diciamo che stiamo scrivendo un semplice parser JSON e abbiamo coperto completamente il codice con i test unitari:
- può analizzare primitive
"0", "123", "-456", '""', '"asd"', true, false
- può analizzare le matrici
"[]", "[1, 2, 3]"
- può analizzare le matrici annidate
"[[]]"
- può analizzare gli oggetti
"{}", '{ "a": 1, "b": 2 }'
- può analizzare oggetti nidificati
'{ "a": {} }'
Ogni possibile JSON può essere o una primitiva o un array / oggetto che contiene altre primitive / matrici / oggetti - questo è ciò che intendo per struttura dati induttiva (è 'ricorsivo' un termine migliore?). Mi sembra che qualsiasi analisi JSON possa essere ridotta a questi pochi casi e se il parser supera questi test, allora è completamente corretto (a meno che non sia stato esplicitamente cablato per interrompere quando si tenta di analizzare numeri speciali).
C'è ancora qualche punto nella creazione di un tester casuale che generi JSON con stringhe casuali nella speranza che uno di loro possa interrompere questo parser? Questo tester casuale troverà qualcosa di interessante?
P.S. Ho scelto JSON solo come esempio di una struttura dati induttiva; Non mi interessa scrivere un parser JSON.