Apprendimento e miglioramento delle proprie capacità di debug

I programmatori dedicano un'alta percentuale del tempo al debug piuttosto che alla scrittura del codice. Probabilmente hai ricevuto una formazione per imparare una lingua o un framework, ma come hai imparato a correggere i difetti del tuo software?

Quando ti sei innamorato della programmazione (o almeno hai deciso che era una carriera remunerativa), probabilmente l'hai pensato come uno sforzo creativo. Progetteresti un ottimo software, scriveresti il ​​codice e finiresti! —Funzionerebbe perfettamente la prima volta.

Si. Destra.

Nel mondo reale, passavi un sacco del tuo tempo a eseguire il debug del codice piuttosto che a scrivere nuove cose. Sono sicuro che potrei scavare una certa percentuale oscura del tempo dello sviluppatore che è dedicata alla correzione dei difetti piuttosto che alla creazione di nuove funzionalità, ma dubito che sia necessario ascoltare un numero. Puoi immaginare troppo facilmente i giorni che hai passato alla ricerca del Bug From Hell e il suo effetto sulla pianificazione del tuo progetto.

Ora, ci sono molti modi in cui i programmatori possono e imparano nuove abilità software, che si tratti di leggere un libro, partecipare a una conferenza tecnologica o visitare siti come JavaWorld.com. (Sono piuttosto contento che tu faccia quest'ultimo.) Tuttavia, questi di solito si concentrano su strumenti, come linguaggi o framework, e non su meta-tecniche, come "Come trovare quel bug in due ore invece di due giorni". Le lingue possono andare e venire, così come i debugger IDE, ma la capacità di discernere sotto quale roccia si nasconde il tuo bug è quella che rimarrà con te per sempre.

Gran parte dell'abilità di imparare a eseguire il debug è, ovviamente, l'esperienza. Questa potrebbe essere la tua esperienza, o l'opportunità di essere una cavalletta ai piedi di un programmatore esperto. Sospetto anche che alcune persone abbiano un talento innato per la risoluzione dei problemi (altrettanto importante per riparare un'auto rotta come un'applicazione che si comporta male), e quelli di noi senza di essa possono solo fare il broncio per invidia.

Tuttavia, alcune di queste possono essere apprese. Ad esempio, un maestro programmatore di mia conoscenza aveva un assioma: se stai cercando un bug da (relativamente) molto tempo e non riesci a trovarlo, ha detto: "Stai cercando nel posto sbagliato". Suona ovvio, ma certamente vero ... e quante volte hai perso tempo a cercare nel modulo XYZ quando il problema era da qualche altra parte?

Ho chiesto a diversi sviluppatori come hanno imparato o migliorato le loro capacità di debug. Un numero sorprendente di loro ha parlato della loro padronanza del debugger dell'IDE o di qualche altro strumento esperto, ma la maggior parte di ciò che volevo sapere è il loro consiglio su come migliorare la capacità di correggere gli errori. Ecco un breve riassunto delle loro risposte.

  1. Sii disciplinato. Il debug è un processo, ha detto uno sviluppatore, non una serie di eventi casuali. Non modificare a caso le manopole; seguire il processo di esecuzione del codice. Proprio come riparare un tosaerba, ha detto. La parte A riceve l'input di cui ha bisogno? E l'output? Se va bene, vai avanti.
  2. Per migliorare le tue capacità, esegui il debug del codice di altre persone anziché del tuo. Sarà più facile vedere i difetti nelle ipotesi dell'altra persona che vedere le tue. È possibile eseguire questa operazione come parte di una revisione del codice tra pari e del debug tra pari. Svilupperai la capacità di riconoscere le cause comuni dei difetti più rapidamente, prometterai uno sviluppatore e ti insegnerai a riconoscere (e abbandonare) le tue cattive pratiche di sviluppo.
  3. Fai finta di essere il compilatore. Trova e correggi il maggior numero di errori possibile prima di premere il pulsante Compila. Sebbene la maggior parte degli IDE moderni includa debugger integrati (come Intellisense di Visual Studio), imparerai meno dalla loro automazione di quanto imparerai esaminando consapevolmente il processo. (Allo stesso modo in cui non imparerai mai a scrivere correttamente affidandoti a un correttore ortografico per fare tutto il lavoro.)
  4. Impara a correggere i bug il più presto possibile nel processo di sviluppo. Ciò potrebbe significare qualcosa di formalizzato, come lo sviluppo basato sui test. Ciò significa anche dedicare tempo al debug del progetto invece di immergersi nella codifica.
  5. Il debug è più semplice quando puoi tenere l'intero sistema nella tua testa. Non commettere l'errore di concentrarti solo su una parte di un'applicazione. Presta attenzione alle interrelazioni tra i moduli. Leggi il codice a più livelli di astrazione, ha consigliato un programmatore. "Trovare il bug è la parte più difficile, e richiede una chiara comprensione di ciò che stanno facendo più parti del codice", ha detto.
  6. Parte dello stesso consiglio, credo, è il suggerimento di qualcun altro: acquisire una buona comprensione del sistema un livello sotto rispetto a quello su cui stai lavorando. "Se si esegue il debug di un programma C a livello di sistema, è utile conoscere alcuni assembly e qualcosa sul sistema operativo", ha spiegato un ingegnere capo del software di sistema. "Se stai eseguendo il debug di un'app J2EE, è utile sapere qualcosa sui thread Java, RMI e GC." In molti casi, ha sottolineato, i messaggi di errore provengono da quel livello inferiore. "Se riesci a capire cosa significa, ti aiuterà a capire cosa non va al tuo livello di astrazione", ha spiegato.

Alcuni sviluppatori hanno consigliato anche risorse extra. Tra questi c'è il libro di David Agan, Debugging, che promette nove regole indispensabili, e Why Programs Fail: A Guide to Systematic Debugging, che sta per essere rilasciato in una seconda edizione. Lo sviluppatore che ha consigliato quest'ultimo dice che insegna un approccio sistematico al debug con molti esempi pratici. Un altro ha suggerito un saggio online, Dieci abilità di tester di software altamente efficaci.

Mi piacciono tutte queste risposte, ma sospetto che ci sia più saggezza da condividere. Come hai acquisito le tue capacità di debug? In che modo hai aiutato gli altri a migliorare il loro?

Questa storia, "Imparare e migliorare le proprie capacità di debug" è stata originariamente pubblicata da JavaWorld.