Ci sono alcuni domini applicativi (ad esempio GameDev) in cui molte funzioni dovrebbero essere create usando valori casuali per produrre il loro output. Uno degli esempi è presentato di seguito:Come convalidare la correttezza delle funzioni che usano random?
def generate_key(monster_key_drop_coef):
key_letters = string.ascii_uppercase
rand = random.random()
if monster_key_drop_coef < rand:
return None
button = {}
button["type"] = random.choice([1,2,3])
button["letter"] = random.choice(key_letters)
return button
Questa funzione genera il calo dell'elemento in base a diverse operazioni casuali. Il problema appare se si desidera convalidare automaticamente la correttezza di questa funzione. I valori generati non sono deterministici e la scrittura di test di regressione sembra impossibile.
Le mie domande sono:
- È questo possibile scrivere test di regressione utili per questo tipo di funzioni?
- Esiste un approccio generale per la creazione di altri tipi di test in questo caso?
Ci sono interi libri scritti su questo argomento. Esempio: http://www.johndcook.com/Beautiful_Testing_ch10.pdf –
Mettere a punto l'RNG per fornire risultati noti (e quindi testare con output specifici per i quali è noto il risultato desiderato) è un approccio. –