Ho scritto un'applicazione che legge un elenco di nomi di file e fa cose su quei file. L'allocazione dinamica non è consentita e la nostra lingua preferita è C.
L'app ha una matrice per contenere i nomi dei file, e le sue dimensioni sono determinate da ARRAY_LIMIT
nel Makefile e usate tramite la macro C. I bit importanti del Makefile hanno l'aspetto seguente.
# Makefile
DEFINES=-DDARRAY_LIMIT=100
all:
gcc $(DEFINES) my_app.c
Il motivo per cui ho adottato questo approccio è perché ho scritto test automatici per questa applicazione e parte di questo test è verificare il comportamento dell'applicazione ai limiti di questo limite. Voglio anche eseguire i test automatici mentre apporto le modifiche.
Il mio script di test crea una versione di test del codice come segue.
# test_script.bash
# Overwrite the vars in the Makefile for testing.
export DEFINES="-DARRAY_LIMIT=10"
make -e
# Do test stuff...
Questo costruirà l'applicazione in modo tale che la sua dimensione dell'array interno sia solo 10, anziché 100. Ciò rende molto più veloci le esecuzioni di test.
TL; DR Ho scritto un'app per il mio team che è stata configurata in modo tale che la build cambi un aspetto quantitativo del suo comportamento in base a se è stato realizzato per il rilascio o per il test unitario. Abbiamo esaminato la revisione del codice e mi trovo ad affrontare questo approccio dal leader del team. Non voglio cambiare questo aspetto del codice perché mi ha risparmiato molte ore durante la modifica dell'applicazione e abbiamo una fase di test più robusta più avanti nel nostro ciclo di sviluppo, che testerà il binario di rilascio con i limiti finali più ampi.
È dannoso consentire agli strumenti di compilazione un certo margine di manovra nella logica del programma con l'intento di creare versioni di prova vs versione?