Mi è stata data l '"opportunità" di salvare diversi progetti e i dirigenti hanno sostituito l'intero team di sviluppo perché l'app aveva troppi errori e gli utenti erano stanchi dei problemi e del run-around. Tutte queste basi di codice avevano una gestione centralizzata degli errori a livello di app, come descrive la risposta più votata. Se questa risposta è la migliore pratica, perché non ha funzionato e ha permesso al precedente team di sviluppo di risolvere i problemi? Forse a volte non funziona? Le risposte sopra non menzionano il tempo impiegato dagli sviluppatori per risolvere singoli problemi. Se il tempo per risolvere i problemi è la metrica chiave, la strumentazione del codice con i blocchi try..catch è una pratica migliore.
In che modo il mio team ha risolto i problemi senza modificare in modo significativo l'interfaccia utente? Semplice, ogni metodo è stato strumentato con try..catch bloccato e tutto è stato registrato nel punto di errore con il nome del metodo, i valori dei parametri del metodo concatenati in una stringa passata insieme al messaggio di errore, il messaggio di errore, il nome dell'app, la data, e versione. Con queste informazioni gli sviluppatori possono eseguire analisi sugli errori per identificare l'eccezione che si verifica di più! O lo spazio dei nomi con il maggior numero di errori. Può anche confermare che un errore che si verifica in un modulo è gestito correttamente e non causato da molteplici motivi.
Un altro vantaggio di questo è che gli sviluppatori possono impostare un punto di interruzione nel metodo di registrazione degli errori e con un punto di interruzione e un singolo clic del pulsante di debug "Esci", sono nel metodo che ha avuto esito negativo con l'accesso completo all'effettivo oggetti nel punto di guasto, comodamente disponibili nella finestra immediata. Rende molto semplice il debug e consente di trascinare indietro l'esecuzione del metodo per duplicare il problema e trovare la riga esatta. La gestione centralizzata delle eccezioni consente a uno sviluppatore di replicare un'eccezione in 30 secondi? No.
L'affermazione "Un metodo dovrebbe rilevare un'eccezione solo quando è in grado di gestirlo in modo sensato". Ciò implica che gli sviluppatori possono prevedere o riscontreranno tutti gli errori che possono verificarsi prima del rilascio. Se questo fosse vero ai massimi livelli, il gestore delle eccezioni delle app non sarebbe necessario e non ci sarebbe mercato per la ricerca elastica e il logstash.
Questo approccio consente inoltre agli sviluppatori di trovare e risolvere problemi intermittenti nella produzione! Vorresti eseguire il debug senza un debugger in produzione? O preferiresti ricevere chiamate e ricevere e-mail da utenti sconvolti? Ciò consente di risolvere i problemi prima che chiunque altro lo sappia e senza dover inviare e-mail, messaggistica istantanea o Slack con il supporto poiché tutto ciò che è necessario per risolvere il problema è proprio lì. Il 95% dei problemi non deve mai essere riprodotto.
Per funzionare correttamente, deve essere combinato con una registrazione centralizzata in grado di acquisire lo spazio dei nomi / modulo, il nome della classe, il metodo, gli input e il messaggio di errore e archiviare in un database in modo che possa essere aggregato per evidenziare quale metodo fallisce di più in modo che possa essere risolto per primo.
A volte gli sviluppatori scelgono di lanciare eccezioni nello stack da un blocco catch ma questo approccio è 100 volte più lento del normale codice che non genera. È preferibile catturare e rilasciare con la registrazione.
Questa tecnica è stata utilizzata per stabilizzare rapidamente un'app che falliva ogni ora per la maggior parte degli utenti in un'azienda Fortune 500 sviluppata da 12 sviluppatori in 2 anni. Utilizzando queste 3000 diverse eccezioni sono state identificate, risolte, testate e implementate in 4 mesi. Questo fa una media di una correzione ogni 15 minuti in media per 4 mesi.
Sono d'accordo che non è divertente digitare tutto il necessario per strumentare il codice e preferisco non guardare il codice ripetitivo, ma l'aggiunta di 4 righe di codice a ciascun metodo vale la pena nel lungo periodo.