Question

Je maintiens un programme Python qui fournit des conseils sur certains sujets. Elle le fait en appliquant un algorithme compliqué aux données d'entrée.

Le code du programme est régulièrement modifié, à la fois pour résoudre les nouveaux bogues trouvés, et de modifier l'algorithme sous-jacent.

Je veux utiliser des tests de régression. Le problème est, il n'y a aucun moyen de dire ce que la sortie « correcte » est pour une certaine entrée -. Autrement que par l'exécution du programme (et même alors, que si elle n'a pas de bugs)

Je décris ci-dessous mon processus de test en cours. Ma question est s'il existe des outils pour aider à automatiser ce processus (et bien sûr, s'il y a d'autres commentaires sur ce que je fais).

La première fois que le programme semblait fonctionner correctement pour tous mes cas d'entrée, j'ai sauvé leurs sorties dans un I dossier désigné pour les sorties « validées ». « Validé » signifie que la sortie est, au meilleur de ma connaissance, correcte pour une version donnée de mon programme.

Si je trouve un bug, je fais tous les changements que je pense fixerait. Je puis exécutez à nouveau le programme sur tous les ensembles d'entrée et comparer manuellement les sorties. Chaque fois que les changements de sortie, je fais de mon mieux pour examiner de manière informelle ces changements et déterminer si:

  1. les modifications sont dues exclusivement à la correction de bug, ou
  2. les modifications sont dues, au moins en partie, à un nouveau bug, j'introduit

Dans le cas 1, j'incrémenter le compteur de version interne. Je marque le fichier de sortie avec un suffixe égal au compteur de la version et le déplacer vers le dossier « validé ». J'engage alors les changements dans le dépôt Mercurial.

Si dans l'avenir, lorsque cette version ne sera plus à jour, je décide de bifurquer, je vais avoir besoin de ces sorties validées comme les « bonnes » pour cette version particulière.

Dans le cas 2, I essayer bien sûr de trouver le bug nouvellement introduit, et le fixer. Ce processus se poursuit jusqu'à ce que je crois que le seul changement par rapport à la précédente version validée sont dues aux corrections de bugs destinés.

Quand je modifier le code pour changer l'algorithme, je suivre un processus similaire.

Était-ce utile?

La solution

Voici l'approche que je vais probablement utiliser.

  1. Vous Mercurial gérer le code, les fichiers d'entrée et les sorties de test de régression.
  2. Début d'une certaine révision parent.
  3. et le document (de préférence aussi peu que possible) modifications.
  4. Exécuter les tests de régression.
  5. Revoir les différences avec la sortie de test de régression de révision mère.
  6. Si ces différences ne correspondent pas aux attentes, essayez de voir si un nouveau bug a été introduit ou si les attentes étaient incorrects. Soit fixer le nouveau bug et passer à 3 ou mettre à jour les attentes et aller à 4.
  7. Copie la sortie des tests de régression dans le dossier désigné pour les sorties validées.
  8. Valider les modifications à Mercurial (y compris le code, les fichiers d'entrée, et les fichiers de sortie).
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top