TDD Introduzione

download TDD Introduzione

If you can't read please download the document

Transcript of TDD Introduzione

1. AgendaLa strada verso Unit TestChe problemi abbiamo ?Una possibile soluzione 2. Il ContestoIntegrazioneDevA: ...la classe UserDAO funziona correttamente...DevB: ...anche Registration...Cliente: ...nella home page continua ad apparire questaNull qualcosa!... 3. Il ContestoEvoluzione dei requisiti => Evoluzione del SWErrori di regressioneDevA: ...ho solo modificato un metodo di UserDAO 4. LarchetipoUserDAO+findUsers():List Registration List findUsers( ) {+registerUser(User u) List users = new List();while(rs.next()){users.add( new User() );}return users;}registerUser( User u ) {if(dao.findUsers().isEmpty()){grantAdminPrivileges(u);}dao.registerUser(u);} Il primo utente registrato anche amministratore 5. Una Piccola Idea Ridurre loocupazioneUserDAOdi memoria+findUsers():List Registration List findUsers( ) {+registerUser(User u) List users = null;while(rs.next()){if(users == null){ users = new List();}users.add( new User() );RegisterUser( User u ) {}if(dao.findUsers().isEmpty()){return users;grantAdminPrivileges(u);}}Dao.registerUser(u);}Cool!Lazy Initialization! Argh! Il cliente si lamenta! Il contratto saltato! 6. Una Piccola IdeaIDEA: Test dei singoli componenti!Esplicitazione del contrattoContratto non modificato Per gli usi testatiIntegrazione+ Semplice+ Sicura 7. Gli Unit Test Automatico Ripetibile Computabile Isolatohttp://www.natpryce.com/articles/000772.html 8. Esempio di Unit TestHelloWorld test... 9. Un Altra IdeaSe i test sono cos importanti...Prima il testPoi il codiceTDDTestDrivenDevelopment 10. Test Driven Development 11. Test Driven Development 12. Ed infineSe i test hanno successo...limplementazione pu cambiareil contratto non cambiaRefactoring 13. Test Driven Development 14. Esempio di TDD1 Turno: 3 freccette Punteggio:Da 301 (o 501) a 0Settori Double = settore x 2 Triple = settore x 3 Bull = 25 Bulls Eye = 50Arrivo a 0 con un Double o un Bulls EyeAltrimenti lintero turno annullato