Domanda

Mantengo un programma Python che fornisce consigli su alcuni argomenti. Lo fa applicando un algoritmo complicato ai dati di input.

Il codice del programma viene regolarmente modificato, sia per risolvere i bug di recente trovato, sia per modificare l'algoritmo sottostante.

Voglio utilizzare i test di regressione. Il problema è che non c'è modo di dire quale sia l'output "corretto" per un determinato input, se non eseguendo il programma (e anche allora, solo se non ha bug).

Descrivo sotto il mio attuale processo di test. La mia domanda è Se ci sono strumenti per aiutare a automatizzare questo processo (e ovviamente, se c'è altro feedback su ciò che sto facendo).

La prima volta che il programma sembrava funzionare correttamente per tutti i miei casi di input, ho salvato le loro uscite in una cartella che ho designato per output "convalidati". "Convalidato" significa che l'output è, al meglio delle mie conoscenze, corretto per una determinata versione del mio programma.

Se trovo un bug, apporto qualsiasi modifica che penso lo risolverebbe. Quindi eseguivo ripetere il programma su tutti i set di input e confronto manualmente gli output. Ogni volta che l'output cambia, faccio del mio meglio per rivedere in modo informale quelle modifiche e capire se:

  1. Le modifiche sono esclusivamente dovute alla correzione del bug, o
  2. Le modifiche sono dovute, almeno in parte, a un nuovo bug che ho introdotto

Nel caso 1, incredo il contatore della versione interna. Contrassegna il file di output con un suffisso pari al contatore della versione e lo sposta nella cartella "convalidata". Quindi commetto le modifiche al repository mercuriale.

Se in futuro, quando questa versione non è più aggiornata, decido di ramificarla, avrò bisogno di questi output validati come quelli "corretti" per questa particolare versione.

Nel caso 2, ovviamente cerco di trovare il bug appena introdotto e risolverlo. Questo processo continua fino a quando non credo che le uniche modifiche rispetto alla versione convalidata precedente siano dovute alle correzioni di bug previste.

Quando modifico il codice per modificare l'algoritmo, seguo un processo simile.

È stato utile?

Soluzione

Ecco l'approccio che probabilmente userò.

  1. Chiedi a Mercurial gestire il codice, i file di input e i test di test di regressione.
  2. Inizia da una certa revisione dei genitori.
  3. Fare e documentare (preferibilmente il minor possibile) modifiche.
  4. Eseguire test di regressione.
  5. Rivedere le differenze con l'output del test di regressione della revisione dei genitori.
  6. Se queste differenze non corrispondono alle aspettative, prova a vedere se è stato introdotto un nuovo bug o se le aspettative erano errate. Offri il nuovo bug e vai a 3 o aggiorna le aspettative e vai a 4.
  7. Copia l'output dei test di regressione nella cartella designata per uscite validate.
  8. Impegna le modifiche a MerCurial (incluso il codice, i file di input e i file di output).
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top