Pratiche per costruire test e rilasciare versioni di codice?

1

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?

    
posta DeepDeadpool 26.06.2017 - 20:49
fonte

1 risposta

2

In generale, avere un parametro di tempo di compilazione per i limiti di risorse (e utilizzarlo, ad esempio, in uno scenario di test in modo diverso rispetto allo scenario di rilascio) non è particolarmente migliore o peggiore di avere un parametro di runtime per lo stesso scopo (come a patto che il tuo programma contenga assegni di limiti ragionevoli per non superare il limite, e fintanto che il codice del programma internamente non fa alcuna ipotesi sul valore di ARRAY_LIMIT ). L'unico inconveniente è, ogni volta che si desidera modificare il parametro, è necessario ricompilare il programma, che significa

  • c'è un ambiente richiesto dove è disponibile il compilatore (che è probabile non sia una restrizione nell'ambiente di prova)
  • ci vuole più tempo per la fase di compilazione aggiuntiva (che è probabilmente mitigata dal fatto che il test verrà eseguito più velocemente)

Naturalmente, c'è una situazione in cui il tuo approccio non funziona: se lo scopo del test è verificare il comportamento del binario esatto e non modificato che verrà consegnato direttamente alla produzione dopo aver superato il test. Devi chiarire che questo non è l'obiettivo qui.

    
risposta data 26.06.2017 - 23:40
fonte

Leggi altre domande sui tag