[Python] Test: uovodicolombosilverbulletdeusexmachinaratatouillecaramba!

Nicola Larosa nico a teknico.net
Mer 9 Mar 2016 17:19:24 CET


Do I have your multilingual attention now? Good. ;-)

Sappiamo tutti che, se da un lato il codice *testato* non garantisce il
corretto funzionamento, dall'altro il codice *non testato* garantisce il
malfunzionamento al 99.99%.

Purtroppo scrivere unit test con un coverage decente è costoso (con
"decente" > 95%): bisogna scrivere molti test, e vanno tenuti
aggiornati mentre il codice evolve.

Ma dato che i test automatizzano l'esecuzione del codice, non sarebbe
bello automatizzare anche la generazione dei test?

È quello che fanno gli strumenti di fuzzy testing: voi scrivete un test
che invoca un pezzo di codice, e loro lo invocano a ripetizione
esplorando casualmente lo spazio dei dati in ingresso.

Sono strumenti efficaci nel trovare bug inaspettati, ed hanno un costo
di utilizzo basso; hanno però il difetto di "sparare nel mucchio",
rischiando di spendere molto tempo su dati poco rilevanti, e al
contempo mancare valori critici.

Non sarebbe bello poterli indirizzare sulle porzioni più interessanti
dello spazio dei dati, e intanto assicurarsi di esplorare certi valori
dimostratisi critici? È quello che fa il property-based testing, tra i
cui esponenti ci sono QuickCheck (Haskell) del 1999 e ScalaCheck del
2007.

C'è un gran bello strumento anche per Python: Hypothesis. Il suo
funzionamento è schematizzato in questa slide:

<https://speakerdeck.com/michelslm/property-based-testing-in-python-with-hypothesis?slide=11>

e l'ottima documentazione contiene un bel pezzo di advocacy:

<http://hypothesis.readthedocs.org/en/latest/manifesto.html>

Adesso non avete più scuse: andate e testate!


(I'm looking at you, Genropy. ;-) )

-- 
Nicola 'tekNico' Larosa <https://www.tekNico.net/>


Maggiori informazioni sulla lista Python