[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