Abbiamo un'applicazione che consiste in file binari (contenenti un mix di testo e informazioni numeriche) e programmi scritti in varie lingue che creano, modificano e leggono questi file binari. Poiché i campi di testo sono memorizzati in un file binario, un singolo campo di testo viene archiviato in un file binario come un numero fisso di byte con uno scostamento specificato in quel file binario. (Se un campo di testo ha meno caratteri, i restanti byte sono impostati su 0.)
Esistono numerosi sviluppatori (in diverse organizzazioni interne) che sono coinvolti nel mantenimento e nell'aggiunta di nuove funzionalità a tutti i programmi che costituiscono questa applicazione.
Uno dei problemi cronici che trattiamo è il codice che i confronti tra stringhe spesso falliscono perché il campo memorizzato può avere o meno spazi bianchi finali, a seconda di come quel campo specifico viene inserito e scritto nel file binario, e la stringa nel il codice che viene confrontato non lo fa. (In quasi tutti i casi, lo spazio vuoto finale non è considerato parte del valore del campo di testo).
Ci sono diversi approcci che possiamo adottare per affrontare questa situazione:
-
Adotta una convenzione per tutti i campi memorizzati in un file binario deve essere tagliato prima di essere scritto.
-
Adotta una convenzione che quando si confronta il testo dovrebbe essere il confronto essere eseguito con le stringhe tagliate.
-
Esegui sia (1) sia (2).
Ci sono dei vantaggi misurabili che suggeriscono che uno degli approcci precedenti è migliore di qualsiasi altro approccio. L'obiettivo generale è ridurre il numero di istanze di un errore dell'applicazione causato da spazi bianchi finali.
Nota - Attualmente stiamo facendo (2), ma di recente abbiamo trovato il codice legacy che non ignorava gli spazi bianchi finali.