Formalizzare gli errori dei programmatori

5

Ognuno di noi commette errori che portano a bug. Una volta volevo iniziare a registrare i miei errori per l'analisi futura, probabilmente menzionando il titolo del progetto, il tempo approssimativo trascorso e il più importante, il tipo di errore. Ad esempio, quando ho copiato un frammento su "x" e sostituito ogni occorrenza di "x" con "y" e ho dimenticato di sostituire un pezzo minuscolo, si passa a "errore di copia-incolla". L'utilità di questo approccio dipende dalla possibilità di formalizzare i miei errori e probabilmente di ridurre al minimo il numero di tipi tra cui scegliere. Altrimenti inizierei a posticipare, ignorare e così via rendendo inutile questo sistema.

Esistono ricerche in questo settore, probabilmente un insieme minimo noto di errori? Forse alcuni di voi hanno già provato a implementare qualcosa di simile e hanno avuto esito positivo / fallito?

    
posta Maksee 15.04.2012 - 21:16
fonte

6 risposte

11

Quello che stai cercando è una tassonomia di bug del software. Ecco alcune di queste tassonomie:

Ecco anche un documento di tesi di qualcuno che ha esaminato 26 diverse tassonomie di bug.

Probabilmente scoprirai che ogni tassonomia è leggermente diversa, con diverse categorie, diversi livelli di dettaglio e persino concetti di base completamente diversi.

Non mi preoccuperei troppo di quali categorie scegliere esattamente, o quale categoria assegnare anche ai singoli bug. Sembra un inutile esercizio inutile mirare alla categorizzazione perfetta di qualcosa di vario come bug del software.

    
risposta data 15.04.2012 - 21:43
fonte
7

Dai un'occhiata a Brain Hayes " Debugging Myself . Non sono sicuro che abbia iniziato con le categorie di errore, o semplicemente le ha determinate con il passare del tempo.

Penso che questa sia un'area intrinsecamente difficile. Cosa classifichi come errore? Personalmente non classificherei un errore di battitura come errore, ma se stai facendo un processo software personale, sono abbastanza sicuro che classifichi le parole chiave errate come un errore.

    
risposta data 15.04.2012 - 21:37
fonte
4

Direi che, se vuoi capire i tuoi errori di programmazione, dovresti pensare a ciò che conta per te. Personalmente penso ai miei errori di programmazione nelle seguenti categorie:

  1. Errori di ufficio . Esempi sono errori di battitura, chiamate a funzioni / metodi sbagliati, l'ordine degli argomenti è sbagliato ecc. In genere compilatori e controllori di tipi intercettano tali errori, oppure esegue un semplice esercizio del codice.

  2. Malintesi del programma . Potrei non avere una piena comprensione del programma (o dei suoi componenti, classi, librerie o qualsiasi altra cosa), o fraintenderli, e ho scritto il codice sbagliato che non si adattava. Di solito questi errori vengono catturati dai primi cicli di test di routine.

  3. Malintesi dei requisiti . Dovevo fare X ma ho fatto Y. O non ho capito completamente i requisiti o li ho fraintesi. Questi vengono catturati dai primi cicli di test dell'utente.

  4. Difetti logici . Questi sono i biggies. Supponendo di aver capito tutto correttamente, ho comunque finito per scrivere il codice sbagliato. Questi sono non semplicemente errori "umani" . Ero pigro, non pensavo attentamente alle cose, usavo algoritmi o strutture dati sbagliati che non andavano bene, il problema era troppo difficile e complicato e non avevo messo abbastanza impegno per farlo bene, o forse non lo ero essere all'altezza del compito Questi di solito non vengono catturati dai test di routine e vanno in distribuzione. Grande problema. Ogni volta che ottengo uno di questi, penso a lungo e duramente su come evitare una cosa del genere in futuro.

  5. Problemi di progettazione . Usato la struttura dei dati sbagliata, le interfacce sbagliate, la struttura del programma sbagliata o qualsiasi altra cosa. Queste cose non influenzano il comportamento del programma, ma influenzano lo sviluppo futuro. Esse si traducono in un sistema fragile che non può essere esteso o modificato facilmente, causare un numero sempre maggiore di bug dei tipi precedenti per un periodo di tempo, o semplicemente risultare in una struttura di cui non sono orgoglioso. Per risolvere questi problemi è necessaria una certa quantità di refactoring doloroso e noioso. Ogni volta che ne ottengo uno, imparo qualcosa di nuovo e profondo sulla natura della programmazione.

risposta data 16.04.2012 - 10:36
fonte
3

Il processo di software personale sottolinea molte di queste cose. Migliorare la qualità e la stima tenendo registri del passato / presente. Ti consiglio di consultare moduli di esempio per le idee.

    
risposta data 15.04.2012 - 22:34
fonte
0

Nessuna delle risposte precedenti riguarda cause di bug del software in termini di errori umani da parte del codificatore. Ci sono molte ricerche sugli errori umani nelle aree di sicurezza degli operatori umani critici, come gli errori del pilota aeronautico da parte della FAA e dell'NTSB. C'è anche una ricerca sulla memoria umana e sulla fallibilità percettiva che potrebbe essere applicabile.

Il test delle unità è come l'avviso di stallo che si spegne dopo che il pilota si è già avvicinato a un regime di volo pericoloso. Uno studio personale su come non creare, o su come minimizzare, il codice che produce risultati per i test unitari da trovare e fallire sembra al minimo interessante.

    
risposta data 16.04.2012 - 05:41
fonte
0

L'ho fatto in misura molto limitata:

I had a production application with a lot of live users. The system had an in-built error logger. During critical errors, it would send detailed email reports.

Dal momento che tutto è stato registrato, è stato possibile vedere le tendenze e consentito agli sviluppatori di concentrarsi su aree diverse (a volte su cui normalmente non ci concentreremo).

SO

Un approccio più automatizzato sarebbe meglio.

Forse potresti creare un'applicazione in grado di registrare e analizzare gli errori del compilatore e incrociarli con i registri di controllo del sorgente insieme ai rapporti di errore automatici dalle applicazioni live?

    
risposta data 16.04.2012 - 17:15
fonte

Leggi altre domande sui tag