Sono un docente per un modulo post-laurea in cui mi aspetto che i miei studenti scrivano codice Python che replica esempi dal libro di testo. Il progetto è attivo da un paio d'anni e quest'anno voglio introdurre più test automatizzati. Il problema è scrivere test per le funzioni che producono principalmente una figura matplotlib. Nota che stiamo solo cercando di replicare le cifre approssimativamente, quindi il confronto binario con un'immagine di destinazione non sarà molto utile.
La domanda breve è quindi: quali strategie posso usare per testare programmi il cui output grafico primario non può essere confrontato con una rigorosa immagine di riferimento?
Alcuni dei problemi che ho con il code base esistente che impedisce il test automatizzato in questo caso:
- La produzione del grafico interrompe l'esecuzione in molti casi
- Non è pratico generare una copia della figura nel libro di testo che includa annotazioni e così via, quindi è improbabile che il confronto di immagini algoritmiche sia la risposta.
Per chiarire i miei obiettivi:
- Mi piacerebbe poter eseguire tutto il codice nella codebase per verificare che sia effettivamente in esecuzione, anche se questo significa buttare via l'output. Questo potrebbe catturare regressioni in cui una funzione viene modificata
- Invece di investire profondamente nell'abbinamento sfocato dell'output grafico con il target, credo che il controllo visivo tra un'immagine di riferimento e l'immagine generata sia probabilmente il più semplice, ma questo dovrebbe essere differito per accadere una volta alla fine della corsa piuttosto che durante la corsa
- Poiché si tratta di un progetto collaborativo, non devo supporre che gli studenti saranno contraddittori. Gli errori saranno la buona fede piuttosto che i perversi.