Domanda

Ieri stavo lavorando con la qualità eseguendo alcuni test formali.Nella loro procedura stavano verificando che tutti i file sulla macchina di prova fossero stati estratti dalla versione.Il modo in cui verificavano che questi file fossero gli stessi era controllando la dimensione e le finestre di data/ora inserite in Esplora risorse.Questi erano spenti per un altro motivo che sono riuscito a scoprire perché.

È un modo valido per verificare che un file sia lo stesso?Non la pensavo così e ho iniziato a discutere, ma sono più giovane qui quindi ho pensato di non spingermi troppo oltre.Volevo sostenere che dovrebbero eseguire un confronto binario sul file per verificare che il suo contenuto sia esatto.Nella mia esperienza i timbri di data/ora e gli attributi di dimensione non sempre funzionano come previsto.Qualche idea???

È stato utile?

Soluzione

L'unico modo al 100% per capire se due file sono uguali è fare un confronto binario dei due.

Se riesci a convivere con il rischio di falsi positivi (es.due file che non sono identici al 100% ma il tuo codice dice che lo sono), allora gli algoritmi digest e checksum possono essere utilizzati per ridurre il lavoro, in particolare se i file risiedono su due macchine diverse con una larghezza di banda non ottimale in modo che un confronto binario è irrealizzabile.

Gli algoritmi digest e checksum hanno tutti la possibilità di falsi positivi, ma la probabilità esatta varia a seconda dell'algoritmo.La regola generale è che più è crittografato e più bit emette, minori sono le possibilità di un falso positivo.

Anche l'algoritmo CRC-32 è abbastanza buono da usare e dovrebbe essere facile trovare esempi di codice su Internet che lo implementano.

Se esegui solo un confronto tra dimensioni e timestamp, mi dispiace dire che questo è facile da aggirare e in realtà non ti darà molta certezza che i file siano uguali o diversi.

Dipende però, se sai che nel tuo mondo i timestamp vengono mantenuti e modificati solo quando il file viene modificato, allora puoi usarlo, altrimenti non ha alcuna garanzia.

Altri suggerimenti

L'hashing è molto buono.Ma l'altra alternativa tecnologica leggermente inferiore è eseguire uno strumento diff come WinMerge o TextWrangler e confrontare le due versioni di ciascun file.Noioso e c'è spazio per l'errore umano.

Meglio ancora, utilizza il controllo della versione per assicurarti che i file che stai testando siano quelli che hai modificato e quelli che avvierai.Abbiamo cartelle di checkout dal nostro repository come siti di staging e live, quindi una volta che hai eseguito il commit delle modifiche dalla tua copia di lavoro, puoi essere sicuro al 100% che i file che testi, invii allo staging e poi live siano gli stessi, perché basta eseguire "svn update" su ciascuna casella e controllare il numero di revisione.

Oh, e se hai bisogno di eseguire il rollback in fretta (succede a tutti noi prima o poi) esegui nuovamente svn update con l'opzione -r e torni praticamente istantaneamente alla revisione precedente.

Vorrei fare qualcosa come un hash md5sum sui file e confrontarlo con gli hash noti della versione.Saranno più accurati dei semplici confronti di data/ora e dovrebbero poter essere maggiormente automatizzati.

Il modo normale è calcolare a hash dei due file e confrontarlo.MD5 e SHA1 sono tipici algoritmi hash.md5sum dovrebbe essere installato per impostazione predefinita sulla maggior parte delle macchine di tipo Unix e su Wikipedia md5sum l'articolo contiene collegamenti ad alcune implementazioni di Windows.

Dovresti fare un controllo CRC su ogni file...dal wiki:

Controllo di ridondanza ciclico, un tipo di funzione hash utilizzata per produrre un checksum, al fine di rilevare errori nella trasmissione o nell'archiviazione.

Produce un valore quasi univoco in base al contenuto del file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top