La mia risposta sarà dal punto di vista degli affari del mondo reale e dalle sfide che ogni team di sviluppo dovrà affrontare. Quello che vedo in questa domanda e molte delle risposte è in realtà sul controllo dei difetti.
Il codice può essere privo di errori. Prendi uno qualsiasi dei campioni di codice "Hello World" per qualsiasi linguaggio di programmazione ed esegui quello sulla piattaforma a cui è destinato e funzionerà in modo coerente e produrrà i risultati desiderati. Finisce qualsiasi teoria sull'impossibilità che il codice sia privo di errori.
I potenziali bug arrivano mentre la logica diventa più complessa. Il semplice esempio Hello World non ha logica e fa sempre la stessa cosa statica. Non appena si aggiunge un comportamento dinamico guidato dalla logica, è ciò che introduce la complessità che porta ai bug. La logica stessa può essere imperfetta o i dati immessi nella logica possono variare in un modo che la logica non gestisce.
Una moderna applicazione dipende anche da librerie di run-time, CLR, middleware, database, ecc. che, pur risparmiando nel complesso il tempo di sviluppo, sono anche dei livelli in cui possono esistere bug all'interno di questi livelli e passare inosservati attraverso lo sviluppo e l'amp; Test UAT e in produzione.
Infine, la catena di app / sistemi che l'applicazione consuma dati che alimentano la sua logica sono tutte le fonti di potenziali bug o all'interno della loro logica, o all'interno del software impila la logica in cima oi sistemi a monte che consuma dati.
Gli sviluppatori non controllano al 100% ogni pezzo mobile che supporta la logica della loro applicazione. In realtà, non abbiamo il controllo di molto. Questo è il motivo per cui i test unitari sono importanti e la configurazione e la gestione delle modifiche sono processi importanti che non dobbiamo ignorare o essere pigri / sciatti.
Inoltre, accordi documentati tra la tua applicazione che consumano dati da un'origine al di fuori del tuo controllo, che definisce il formato e le specifiche specifici per i dati trasferiti, nonché qualsiasi limite o vincolo che il tuo sistema presume che il sistema di origine sia responsabile di garantire l'output è all'interno di questi limiti.
Nell'applicazione del mondo reale dell'ingegneria del software non sarete in grado di farlo volare spiegando al business perché teoricamente le applicazioni non possono essere prive di bug. Le discussioni di questa natura tra la tecnologia e il business non accadrà mai se non a seguito di un malfunzionamento tecnologico che ha influito sulla capacità dell'azienda di fare soldi, prevenire la perdita di denaro e / o tenere in vita le persone. La risposta a "come può accadere" non può essere "lascia che ti spieghi questa teoria così capisci".
In termini di massicci calcoli che teoricamente potrebbero richiedere sempre un tempo per eseguire il calcolo e ottenere un risultato, un'applicazione che non può terminare e restituire con un risultato - questo è un bug. Se la natura del calcolo è tale da richiedere molto tempo e molta intensità di calcolo, si accetta la richiesta e si fornisce un feedback all'utente come / quando è possibile recuperare il risultato e si avvia il thread parallelo per aggredirlo. Se questo deve accadere più rapidamente di quanto possa essere fatto su un server, e il business è abbastanza importante, allora lo ridimensiona su tutti i sistemi necessari. Questo è il motivo per cui il cloud è molto attraente e la capacità di far ruotare i nodi per lavorare e farli roteare quando è finito.
Se esiste la possibilità di ottenere una richiesta che nessuna quantità di potenza di calcolo possa essere completata, non dovrebbe rimanere bloccata all'infinito con un processo aziendale che attende la risposta a ciò che l'azienda ritiene sia un problema finito.