Tutte le configurazioni e le piattaforme devono eseguire i test unitari quando l'applicazione è in fase di sviluppo?

5

Ho un progetto C # .NET open source su GitHub con copertura del codice di Appveyor CI +.

Esistono configurazioni come Release e Debug . Esistono anche piattaforme come x86 , x64 e Qualsiasi CPU .

Questo risulta come segue:

Configuration | Platform | Tests
--------------+----------+--------
Release       | x86      | 100/100
Release       | x64      | 100/100
Release       | Any CPU  | 100/100
Debug         | x86      | 100/100
Debug         | x64      | 100/100
Debug         | Any CPU  | 100/100

I test unitari dovrebbero funzionare sempre su tutte le combinazioni (sei) di queste due dimensioni quando l'applicazione è in fase di sviluppo? vale a dire. principalmente sono in corso solo gli sviluppatori e si stanno verificando molti cambiamenti.

Il mio intuito dice che solo la configurazione Debug e una piattaforma dovrebbero essere testate.

La mia vista è che la configurazione Debug fornisce più informazioni e poiché C # è un linguaggio di alto livello e funziona in VM (CLR) non è necessario testare x64 e x86 separatamente.

C'è anche una terza dimensione con la versione di .NET Framework. E in quarto luogo con il sistema operativo.

Esiste una vista sulle best practice nel campo di ciò che è o non è necessario quando si sviluppa l'applicazione?

Quando vengono spediti tutti i test vengono ovviamente eseguiti. Lo stesso vale per eventuali build notturne / settimanali / etc.

    
posta raspi 21.01.2018 - 16:48
fonte

3 risposte

5

Questo non ha nulla a che fare con "una visione comune sul campo" - questo è tutto ciò che ha più senso.

Esecuzione di test unitari (o qualsiasi tipo di test automatici) usando solo una configurazione e solo una piattaforma va bene fintanto che il codice sotto test e il test stesso non mostrano alcuna indicazione per comportarsi in modo diverso in diverse configurazioni e piattaforme (eccetto per le prestazioni, ovviamente).

In un mondo ideale, è necessaria una sola configurazione per l'esecuzione dei test. Tuttavia, alcuni tipi di costrutti o istruzioni di codice sono più inclini a comportarsi diversamente in "Debug" e "Release", o diversamente in "x86" o "x64". Ci sono cose ovvie

  • come test di esplosione #if DEBUG , e cose non così ovvie come

  • differenze minime nella precisione in virgola mobile.

Per scoprire cosa si applica al tuo caso, l'unico modo ragionevole è IMHO per acquisire esperienza con il codice base in gioco. Ciò potrebbe essere eseguito mediante ispezione o eseguendo occasionalmente i test utilizzando una configurazione diversa. E ci vorrà del tempo, a seconda delle dimensioni del codice di base. In un grande codebase, probabilmente scoprirai che ci sono alcune parti o componenti in cui il testing con una configurazione non è sufficiente, e altri (si spera la parte più grande) non necessitano di più della configurazione per i test.

Se chiedi quale configurazione preferisci per il test dell'unità, allora è IMHO ovvio che

  • la configurazione / piattaforma utilizzata dal team nel ciclo code-compile-test-debug deve essere quella per cui si esegue sempre l'unit test

  • le configurazioni / piattaforme utilizzate dal tuo team per la distribuzione devono essere testate prima della distribuzione, specialmente se si sospetta che possano comportarsi in modo diverso.

Assicurati inoltre che tutti i membri del team siano consapevoli delle potenziali differenze e tutti coloro che hanno utilizzato una dichiarazione di #if DEBUG sono molto attenti a non modificare alcun comportamento che potrebbe diventare rilevante per il test.

    
risposta data 21.01.2018 - 18:01
fonte
4

I test unitari servono a verificare che tu abbia l'algoritmo corretto e che non hai avuto una regressione su un bug fisso. Il primo dovrebbe generalmente essere testabile in modalità debug, il secondo no - se si ha un errore che si verifica solo in una particolare build (versione ottimizzata per esempio, o diverso livello di ottimizzazione), allora ovviamente è necessario testarlo nuovamente costruire.

    
risposta data 21.01.2018 - 17:03
fonte
3

Ci sono almeno due cose che possono essere diverse su Release, che suggerisce di testarlo.

  • I simboli di compilazione condizionale potrebbero cambiare, se qualsiasi codice lo sta usando.

  • L'ottimizzazione può alterare il comportamento, specialmente se c'è un bug nel sistema di compilazione da qualche parte.

In minima parte, dovresti testare qualsiasi configurazione di build che hai scelto. Se questo è QUALSIASI CPU | Rilascia, quindi prova questo minimo.

(C'è anche una complessità aggiuntiva in quella dell'ambiente di destinazione: una QUALSIASI CPU può essere eseguita in modo diverso su una macchina a 32 bit rispetto a una macchina a 64 bit.)

    
risposta data 21.01.2018 - 17:54
fonte

Leggi altre domande sui tag