Per quanto ho capito correttamente, come risultato del teorema di Rice, l'equivalenza di due programmi non è generalmente decidibile.
Tuttavia, esiste una vasta gamma di tecniche di test e debug, che cambiano il programma per il loro scopo: in realtà, riesco a malapena a pensare a una tecnica che non lo fa. Quindi, in realtà, non lavori mai con il programma che vuoi investigare - il caso migliore è abbastanza simile, ma in linea di principio puoi ricevere un programma arbitrariamente diverso.
Il ragionamento generale che ho sentito su questo punto è simile a "Questo è solo stat xy, che non fa altro che aiutare nel test / debugging". Ma soprattutto nel contesto di bug di solito difficili da trovare come le condizioni di gara e altri problemi legati alla temporizzazione, qualsiasi alterazione del flusso del programma si è dimostrata sostanziale.
Anche se sono consapevole che tali considerazioni potrebbero essere eccessive per un'ampia varietà di applicazioni, diventano significative non appena si suppone che l'applicazione sia implementata in un ambiente in cui le vite dipendono da esso, come ad esempio le apparecchiature mediche. Gli standard di cui sono a conoscenza, come l'IEC 62304, eludono questo problema richiedendo test più approfonditi per le classi di certificazione più elevate, ma questa sembra essere solo la migliore pratica.
Non dovrebbe esserci una base teorica per discutere sull'estensione dei test necessari nonostante l'esistenza del teorema di Rice, per rendere il più sicuro possibile, che le tecniche di test e debug utilizzate non nascondano bug esistenti? La letteratura scientifica in questo settore sembra essere estremamente scarsa, ma quali sono i comitati di certificazione, che definiscono quegli standard, basando i loro requisiti su?