Il y a longtemps, j'ai dû tester un programme générant une image de fichier postscript. Un moyen rapide de déterminer si le programme produisait la sortie correcte et attendue était de faire un md5 du résultat à comparer avec le md5 d'une sortie «bien connue» que j'ai vérifiée auparavant.Test fonctionnel des fichiers de sortie, lorsque la sortie est non déterministe (ou avec un contrôle faible)
Malheureusement, Postscript contient l'heure actuelle dans le fichier. Ce temps est, bien sûr, différent en fonction du moment où le test s'exécute, modifiant ainsi le md5 du résultat même si la sortie attendue est obtenue. Comme une solution, j'ai juste enlevé la date avec sed.
Ceci est un scénario agréable et simple. Nous ne sommes pas toujours aussi chanceux. Par exemple, maintenant je suis en train de programmer un programme d'écriture, qui crée un gros fichier RDF contenant un tas de nœuds anonymes et d'uuids. Il est fondamentalement impossible de vérifier la fonctionnalité de l'ensemble du programme avec un simple md5, et le seul moyen serait de lire le fichier avec un lecteur, puis de valider la sortie à travers ce lecteur. Comme vous le savez probablement, cela ouvre une nouvelle boîte de Pandore: d'abord, vous devez écrire un lecteur (ce qui peut prendre beaucoup de temps), deuxièmement, vous supposez que le lecteur est fonctionnellement correct et en même temps en phase avec l'auteur. Si le lecteur et l'auteur sont synchronisés, mais sur des suppositions incorrectes, le lecteur dira "pas de problème", mais le format du fichier est réellement faux.
Il s'agit d'un problème général lorsque vous devez effectuer des tests fonctionnels d'un format de fichier et que le format de fichier n'est pas complètement reproductible par l'entrée que vous fournissez. Comment gérez-vous cette affaire?
Cela dépend. Dans mon cas particulier du fichier RDF, je ne peux pas vraiment savoir comment l'objet sera sérialisé en XML. Je peux masquer les parties variables et comparer le reste, mais l'ordre pourrait être différent. Cependant, votre réponse est intéressante. Le test MPEG-2 est clairement un cas. –