I miei pensieri:
Non penso che molti errori siano correlati agli errori di battitura. Gli errori di battitura generalmente non producono roba che verrà compilata, quindi raramente produce qualcosa che arriva persino al test unitario, per non parlare di quello. Quei pochi che sono generalmente molto facili da individuare.
In 16 anni di sviluppo gli unici problemi che ho visto che sono stati causati da un guasto hardware sono stati così importanti (cioè sistema / sottosistema inattivo) che sono stati immediatamente evidenti e sono stati rilevati dagli amministratori di sistema. Una volta arrivato al programmatore, ti suggerisco di rimuovere dalla tua mente la possibilità di errori hardware finché non vedi alcune prove molto forti da suggerire che è così che generalmente è così improbabile che non dovresti perdere tempo a pensare a riguardo.
Gli errori si dividono in tre categorie:
1) Malintesi - il sistema funziona correttamente ma qualcuno ha frainteso ciò che è destinato a fare. Il modo migliore per scoprire se questo è il caso è ottenere più informazioni possibili, idealmente parlando con qualcuno che ha effettivamente visto l'errore e chiedendo cosa hanno visto e cosa si aspettavano di vedere.
2) Errori di configurazione - mentre ci sono pochissimi errori causati da errori hardware, ce ne sono molti causati dal fatto che le macchine vengono impostate in modo diverso per quanto riguarda la configurazione del software. Ciò è particolarmente probabile se non riesci a riprodurre l'errore nella configurazione di sviluppo che probabilmente non è standard a causa degli strumenti assortiti che hai installato e delle modifiche apportate per essere produttivi. La cosa migliore da fare qui è avere un ambiente di test di sviluppo che sia un clone di produzione e provare a riprodurre l'errore lì. Una volta che hai puoi iniziare a confrontare quell'ambiente con quelli in cui funziona e vedere quali sono le differenze.
3) Errori di codice: il codice è fuori e fuori sbagliato. Ci sono problemi comuni (non controllare i valori di ritorno o errori mal gestiti, loop e verifiche non corrette - per esempio non controllare il record finale in un array o collezione perché lo sviluppatore si è confuso sul fatto che sia finito a i o i-1) ma esattamente come sono comuni, variano da progetto a progetto e in ogni caso sono abbastanza facili da individuare camminando sul codice. Le cose principali che direi qui sono assicurarti di poter riprodurre l'errore (questo potrebbe comportare il recupero dei dettagli di un record specifico in cui l'errore si verifica dall'utente) e percorrere il codice riga per riga.
In generale, suggerirei i seguenti suggerimenti:
1) Possiedi il problema . È il tuo problema e devi risolverlo indipendentemente da cosa sia o chi lo abbia originariamente causato. Ciò potrebbe comportare l'esame di cose che non sono la tua area di specializzazione, ma è quello che serve, questo è quello che fai.
2) Parla all'utente . La cosa che rallenta maggiormente la risoluzione del problema nella mia esperienza è una cattiva informazione, quindi tagliala direttamente all'utente e scopri cosa sta succedendo. Invitali a guidarti, cosa hanno fatto, cosa hanno visto, cosa si aspettavano di vedere. Chiedi se succede sempre o solo una parte del tempo. Se è solo una parte del tempo, chiedi loro dei modelli, ottieni dettagli di record specifici dove si verifica. Metti in discussione tutto e non assumere nulla. E quando dico di parlare con loro, intendo parlare con loro - scoprirai qualcosa di più che attraverso alcune conversazioni via e-mail e lo farai molto più velocemente.
3) Riproduce il problema . Non indovinare la soluzione, riprodurla, è l'unico modo per sapere che hai davvero trovato ciò che sta accadendo. Cammina il codice passo dopo passo e guarda cosa sta realmente accadendo. Ciò può comportare la riproduzione dell'ambiente o il recupero di una copia del database - se necessario, è quello che fai.
4) Sii realistico . Non è un problema hardware e non hai riscontrato alcun problema con il compilatore. Una volta che hai risolto è un problema reale (cioè che l'utente non si sta sbagliando per quello che è destinato a fare) e lo hai riprodotto, il problema più probabile è che il codice sia sbagliato, quindi non farlo scherzi altrimenti.
5) Risolve il problema root, non il sintomo . Se dicono che tutto è in ordine di 1, non sottrarre solo 1 da tutto, scoprire PERCHÉ è uscito da 1 e risolverlo. Se risolvi il problema, vedrai nuovamente il problema.