Perché sono così frequenti gli errori e cosa possiamo fare per prevenirli?

19

Sembra che gli errori off-by-one siano uno degli errori di programmazione più comuni (se non il più) (vedi link , e saggezza convenzionale).

Qual è la ragione per cui questi sono così comuni, è qualcosa a che fare con il funzionamento del cervello umano?
Cosa possiamo fare per evitare di cadere preda di un errore?

    
posta Malfist 02.02.2011 - 19:06
fonte

4 risposte

17

È qualcosa che ha a che fare con il funzionamento del cervello umano. Siamo cablati per essere "abbastanza bravi" per attività che di solito non richiedono precisione ingegneristica. C'è una ragione per cui i casi con cui abbiamo più problemi si chiamano casi "edge".

Probabilmente il modo migliore per evitare errori off-by-one è l'incapsulamento. Ad esempio, invece di usare un ciclo for che itera una collezione per indice (da 0 a count - 1), usa un ciclo di stile for-each con tutta la logica di dove fermarsi incorporato nell'enumeratore. In questo modo devi solo ottenere i limiti una volta sola, quando scrivi l'enumeratore, invece di ricorrere ogni volta alla raccolta.

    
risposta data 02.02.2011 - 19:10
fonte
6

C'è qualcosa di speciale nel modo in cui il cervello gestisce bordi e bordi.

Mentre è più facile per il cervello pensare in termini di intervalli e spazi , concentrarsi su un bordo sembra richiedere un po 'più di attenzione. Ecco come succede, momentanea perdita di attenzione o concentrazione insufficiente e hai perso il confine.

Un'altra aggiunta lieve al problema è che diversi ambienti di programmazione hanno diversi sistemi di indicizzazione a partire da 0 o 1 che potrebbero aggiungere confusione alle persone attivamente esposte a entrambi tipi di ambienti.

    
risposta data 02.02.2011 - 19:12
fonte
4

Credo che sia dovuto al cambio di contesto. Nelle nostre vite quotidiane tendiamo a utilizzare indici basati su 1. Per questo motivo il nostro cervello non è in grado di bruciare il comportamento corretto nella memoria a lungo termine.

    
risposta data 02.02.2011 - 19:10
fonte
-4

Credo che ci sia qualcosa con la sottrazione tra interi se rappresentano indici o intervalli. La soluzione a questo è di separare i concetti di intervallo e indice.

    
risposta data 15.06.2016 - 17:19
fonte

Leggi altre domande sui tag