Sistema di apprendimento invece di usare sed / replace per rivedere i risultati dei test

4

Per ogni build del mio software lo eseguo attraverso una serie di test che eseguono un numero di comandi su una riga di comando e acquisiscono i risultati.

La maggior parte delle volte l'output è una combinazione di:   - Informazioni statiche che sono, e dovrebbero essere, uguali tra ogni corsa.   - Informazioni dinamiche non facili da prevedere.

Allo scopo di testare questo software, desidero solo verificare che le informazioni statiche siano le stesse tra ogni test.

Attualmente utilizzo sed sull'output catturato dei miei test automatici per filtrare le informazioni dinamiche. Qualsiasi differenza tra le esecuzioni di test viene quindi identificata utilizzando i dati filtrati derivanti dall'applicazione delle regole sed.

A causa della grande varietà di output di comando che viene elaborato, il mantenimento delle regole sed è diventato un lavoro oneroso.

Esiste un sistema che, con un ampio campione di risultati di test eseguiti, può mostrare cambiamenti non comuni tra due file contenuti in quel grande campione di risultati del test? Per chiarire, se dovessi diff due file, vorrei solo vedere le differenze per gli elementi che hanno cambiato il 5% delle volte tra tutti i file coinvolti. Eventuali altri dati che hanno cambiato il 95% del tempo sarebbero esclusi come differenze quando si confrontano due dei file all'interno della serie di risultati del test.

In questo esempio, tra il grande insieme di esecuzioni di test, la prima colonna è quasi sempre coerente:

Esegui 1:

1/*/1    6643   2433   12343   232424    112  
2/1/1    2311    455    1342    60233   5231
2/1/2    2355   1223      93    12389   1342

Esegui 2:

1/*/1    3121    112   98832      451   1233  
2/1/1    6342   2345   84421     3456   8362
2/1/2   72453      5     421    64321   7634

Esegui 3:

1/*/1      12     65     312      653    973  
2/1/1   12442  54231   46012        6    734  
2/1/3     734     28     623       76   1834  

In cima alle tre fasi precedenti, ci sono centinaia di esempi di questi stessi comandi generati per ogni build incrementale del software. Quando si esegue una differenza tra ciascuno dei tre esempi sopra vorrei avere i seguenti risultati:

Nessuna differenza tra Esegui # 1 ed Esegui # 2. Differenza che mostra che "2/1/2" è stato modificato in "2/1/3" quando è stato chiesto di mostrare la differenza tra Esegui # 3 e una delle altre due esecuzioni.

Attualmente ho uno script sed che sostituisce tutti i numeri "dall'aspetto casuale" sopra (conteggi, timestamp, ecc.) con hashmark o altri indicatori costanti in modo che tutto ciò che rimane da confrontare sia la colonna iniziale.

Quali opzioni, se esistono, esistono in quest'area? Esiste un nome per questo tipo di confronto testuale?

    
posta Jay 04.03.2012 - 04:55
fonte

2 risposte

1

Dovrebbe essere una questione di costruire un istogramma per ogni campo, quindi trovare il valore più frequente. Se la frequenza di quel valore è superiore al 95%, è un campo "statico". Una volta che sai quali campi sono dinamici, la tua idea di sostituirli con un marcatore è buona, oppure puoi diff contro il valore più frequente dall'istogramma.

Il modo più efficiente per costruire un istogramma è di creare una tabella hash con i valori del campo come chiavi. Ogni volta che quel valore appare in una corsa, si incrementa il contatore memorizzato nella tabella hash.

    
risposta data 05.03.2012 - 14:30
fonte
1

IMO, questo è un anti-pattern nei test. Invece di post-elaborare le parti "dinamiche" dell'output, dovresti controllare l'ambiente di esecuzione in modo che l'output sia invariato. Se stai leggendo l'ora del sistema o utilizzi un generatore di numeri casuali, prendili in giro o mettili a capo in modo da poter controllare l'output del test.

BTW, qualunque cosa tu faccia, non provare a cambiare l'ora del sistema per eseguire i test. Potrebbe essere OK su un sistema embedded, ma crea un pasticcio su sistemi Windows e Linux.

    
risposta data 04.03.2012 - 20:44
fonte

Leggi altre domande sui tag