C’è molto di più rispetto ai soliti unit test. Per essere fatto bene lo unit test deve essere più grande del codice dell’applicazione stessa. Dovrei verificare che ogni modulo si comporta come io l’ho pensato e che poi inoltre che tutto quanto nell’insieme funzioni correttamente. Questo porta il programmatore a fare un botto di moduli per lo unit test. Che tipo di test possiamo avere:
Se facciamo bene i test possiamo portare l’applicazione in una gerarchia di package. Il testing mi forza a trasformare il codice in un insieme di funzioni che collaborano tra di loro.
Refactoring = output identico su stessi input, ma struttura migliorata sicuramente.
Leggi assolutamente questo documento.
Up and Down the Ladder of Abstraction
In questo modo stiamo andando a stimolare anche lo sviluppo incrementale. Alla fine dovrei scriverre solamente un nuovo test + test di integrazione del nuovo modulo. Ricorda sempre che i test mirano a fare emergere degli errori, quindi è quella la situazione di successo.
Test case → raggruppamento di test relativi ad un determinato sotto sistema. Praticamente li raggruppo tutti quanti in una classe sola e questi fanno poi parte di un unico test case. Come si decidono i test da inserire: posso associare un test case ad ogni classe della mia navigazione e poi definisco.
[09-05-2023]
… entrato verso la fine della prima ora, il prof era arrivato a slides 55
Parla di selenium che è capace di andare a interpretare il javascript delle pagine e poi ha parlato di tesi con scraping.
L’incubo è che in questo modo per ogni classe abbiamo un sacco di test da scrivere. Siamo diversi ordini di grandezza superiori. Prendiamo SQLite, abbiamo 608 volte lo sforzo per fare il testing rispetto al codice sorgente. Questo vale anche per il kernel, soprattutto si fa questo controllo approfondito quando si devono fare dei commit al kernel. Si effettuano regression test.
java ha junit, perl ha test::simple, python unittest, nose2, ruby → test::unit. Noi ci concentriamo con unittest di python. Proveremo a risolvere un piccolo problema teorico: il calcolo approssimato della radice quadrata di un numero reale. Dobbiamo fare unit test driven development, quindi partiremo dai test.
Come faccio a testare un algoritmo, come quello mostrato dal prof, come fate?