H-ART                                           TDD | Test Driven Development                                             ...
TDD - Perchè NO                                                              Quali sono le principali difficoltà e le princ...
TDD - Punti deboli e criticità   - Il codice dei test è codice extra che va mantenuto   - Scrivere i test richiede tempo  ...
TDD - Punti deboli e criticità                                                  Usare TDD è molto difficile                ...
TDD - Punti deboli e criticità                                                  Usare TDD è molto difficile                ...
Ne vale la pena ?© H-art 2010 | All Rights Reserved | H-art is a WPP Company                       20100715 - TDD | Test D...
TDD - Perchè SI© H-art 2010 | All Rights Reserved | H-art is a WPP Company                     20100715 - TDD | Test Drive...
TDD - Vantaggi e obiettiviMeno faticaa parità di risultati© H-art 2010 | All Rights Reserved | H-art is a WPP Company   20...
TDD - Vantaggi e obiettivi   - Produttività aumentata   - Confidenza nel codice aumentata   - BugFix più semplice   - Docum...
Ne vale la pena© H-art 2010 | All Rights Reserved | H-art is a WPP Company                     20100715 - TDD | Test Drive...
Che cosa è TDD                                di cosa stiamo parlando esattamente ?© H-art 2010 | All Rights Reserved | H-...
TDD is about                                                                DESIGN© H-art 2010 | All Rights Reserved | H-a...
TDD is about                                              DELIVERING BUSINESS VALUE© H-art 2010 | All Rights Reserved | H-...
TDD is about                                                              CLEAN CODE THAT WORK© H-art 2010 | All Rights Re...
TDD come                                                              Sviluppare applicazioni web con TDD© H-art 2010 | Al...
TDD Come© H-art 2010 | All Rights Reserved | H-art is a WPP Company   20100715 - TDD | Test Driven Development
TDD - Come   - Basato sui cicli ripetuti di RED - GREEN - REFACTOR   - I test si implementano PRIMA del codice   - Inizia ...
TDD - Da fare SEMPRE   - Scrivere i test PRIMA del codice   - Mantenere una TODO list per i test   - Eseguire tutti i test...
TDD - Best Practice   - Iniziare scrivendo i test per le funzionalità più semplici   - Eseguire i test subito dopo una mod...
TDD - Da non fare MAI   - Scrivere test per metodi banali (getter e setter)   - Committare codice con test che FALLISCONO ...
Development style                                                              Come cambia il modo di scrivere codice con ...
Scrivere PRIMA i test© H-art 2010 | All Rights Reserved | H-art is a WPP Company                           20100715 - TDD ...
Codice testabile© H-art 2010 | All Rights Reserved | H-art is a WPP Company                      20100715 - TDD | Test Dri...
Rifattorizzazione© H-art 2010 | All Rights Reserved | H-art is a WPP Company                       20100715 - TDD | Test D...
Scrivere codice testabile   - Spostare la maggior parte della logica nel model   - Eliminare le dipendenze tra i component...
Rifattorizzazione   - Più sicura   - Più facile   - Più frequente   - Migliora la qualità del codice© H-art 2010 | All Rig...
Spezzare il ciclo dello stress© H-art 2010 | All Rights Reserved | H-art is a WPP Company                        20100715 ...
Tipologia di test   - Unit    - Molti test molto veloci    - Testano singole funzionalità    - Indipendenti dal codice che...
Strumenti   - Unit Test    - Lime (framework di test di symfony)    - PHPUnit + Stagehand_TestRunner   - Functional Test  ...
Un Esempio                                                       Uno tuffo dentro al TDD per lo sviluppo di componente rea...
Requisiti   - Implementare un Web Service REST con firma delle chiamate   - Le chiamate devono essere firmate utilizzando il...
Step 0                                                              Definizione di una lista di test© H-art 2010 | All Righ...
TODO Test   - Il server genera un codice nonce di tipo stringa, univoco, di 32 caratteri   - La firma viene correttamente v...
Iterazione 1                                                                Test:                               Il server ...
Il Test	       public function testGetNonce()	       {	       	 $server = new AuthServer();	       	 $this->assertType(str...
Iterazione 2                                                                              Test:                           ...
Il Test      /**        * Test metodo validateSignature()        *        * verifica tipo di dato restituito, test signatu...
Il Codice     /**       * Verifica la signature       */     public function validateSignature($signature, $secret, $nonce...
Iterazione 3                                                                   Test:                                     I...
Il Test      /**        * Verifica che il codice none venga        * memorizzato una volta richiesto.        *        * Il...
Il Codice class AuthServer                                                     /** {                                      ...
Iterazione 4                                                                                 Test:                        ...
Il Test /**            * Verifica che il codice none venga            * memorizzato una volta richiesto.            *     ...
Il Test /**            * Verifica la rimozione del codice nonce            * in caso di richiesta valida            */    ...
Il Test /**            * Verifica che il nonce non venga invalidato se la firma non è valida            */          publi...
Il Codice      /**        * Verifica la signature        */      public function validateSignature($signature, $secret, $n...
THANK YOUH-artVia Sile, 4131056 - Ca’ Tron (Treviso)All rights reserved. This publication is protected by copyright.No par...
Upcoming SlideShare
Loading in …5
×

TDD Test Driven Development

1,330 views

Published on

Panoramica su TDD e il suo utilizzo per lo sviluppo di applicazioni web.
La presentazione fa parte del programma di formazione interna H-art per l'area sviluppo.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,330
On SlideShare
0
From Embeds
0
Number of Embeds
35
Actions
Shares
0
Downloads
13
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • \n
  • Il talk parte con l’introduzione degli aspetti peggiori del TDD.\nSi cerca di illustrare a cosa si va incontro, a quali saranno le difficoltà principali\n
  • Difetti evidenti e banali del TDD.\nSoffermarsi su serve esperienza per capire cosa testare\n
  • Evidenziare che le applicazioni web ricadono perfettamente nella descrizione di situazione critica.\nEvidenziare come questo porti a modificare il modo di scrivere applicazioni web.\n
  • \n
  • Si illustrano i vantaggi del TDD\nPerchè si dovrebbe modificare il proprio modo di lavorare ?\n
  • \n
  • Puntare attenzione su \nCONFIDENZA\nBUGFIX\n
  • \n
  • TDD non è “scrivere test”\nparadossalmente i test sono un aspetto marginale di quello che è veramente il TDD\ni Test sono uno strumento\n
  • TDD cambia e migliora il design del codice\n
  • TDD aiuta a trasmettere valore. Una suite di test da solidità a quello che si vende. \nLimitando i bug è più facile far percepire il valore di quello che si vende\n
  • TDD vuol dire ottenere codice pulito che funzioni spezzando il problema in due più piccoli\n1- codice che funzioni\n2- codice pulito\n
  • Tecniche \n
  • Ciclo di vita classico\nEvidenziare come write production code possa essere preceduta da\n“write fake implementation”\n
  • Iterazioni base del TDD\n
  • \n
  • \n
  • \n
  • Il TDD cambia il modo di scrivere codice\nUno degli aspetti fondamentali del TDD è che si scrive codice in maniera diversa, migliore\n\n
  • Evidenziare come scrivere prima i test porti a pensare \nall’interfaccia degli oggetti, \nalle relazioni tra gli oggetti\na come interagiscono tra loro\n
  • Codice testabile == Ingegnerizzazione migliore\nCodice testabile == Meno dipendenze == Più riusabilità\nCodice testabile == Competenze specifiche == debug facilitato\n
  • Rifattorizzazione = codice migliore\nchi scrive codice ottimo alla prima stesura ? \n
  • \n
  • \n
  • Sotto stress si tende a testare meno il codice prodotto che porta ad un aumento dello stress e così via\nImplementare dei test da subito può spezzare il ciclo dello stress. Al comparire di un problema si eseguiranno i test che aiuteranno a risolverlo diminuendo lo stress. La maggiore confidenza porterà a scrivere più test il che ridurrà ulteriormente lo stress e così via \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • TDD Test Driven Development

    1. 1. H-ART TDD | Test Driven Development Development Area | Workshops 2010© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    2. 2. TDD - Perchè NO Quali sono le principali difficoltà e le principali insidie nell’approccio TDD© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    3. 3. TDD - Punti deboli e criticità - Il codice dei test è codice extra che va mantenuto - Scrivere i test richiede tempo - Serve esperienza per capire cosa testare e cosa no - Per essere realmente efficace tutto il team dovrebbe abbracciare il TDD© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    4. 4. TDD - Punti deboli e criticità Usare TDD è molto difficile in situazioni come: - Lo sviluppo delle interfacce utente - Lo sviluppo di software che dipendono strettamente da un database© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    5. 5. TDD - Punti deboli e criticità Usare TDD è molto difficile in situazioni come: - Lo sviluppo delle interfacce utente - Lo sviluppo di software che dipendono strettamente da un database© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    6. 6. Ne vale la pena ?© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    7. 7. TDD - Perchè SI© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    8. 8. TDD - Vantaggi e obiettiviMeno faticaa parità di risultati© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    9. 9. TDD - Vantaggi e obiettivi - Produttività aumentata - Confidenza nel codice aumentata - BugFix più semplice - Documentazione tecnica implicita - Migliore architettura del software - Rifattorizzazione più semplice© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    10. 10. Ne vale la pena© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    11. 11. Che cosa è TDD di cosa stiamo parlando esattamente ?© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    12. 12. TDD is about DESIGN© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    13. 13. TDD is about DELIVERING BUSINESS VALUE© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    14. 14. TDD is about CLEAN CODE THAT WORK© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    15. 15. TDD come Sviluppare applicazioni web con TDD© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    16. 16. TDD Come© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    17. 17. TDD - Come - Basato sui cicli ripetuti di RED - GREEN - REFACTOR - I test si implementano PRIMA del codice - Inizia sempre con un test RED - Finisce sempre con un test GREEN - Isola e spezzetta i problemi in unità minime© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    18. 18. TDD - Da fare SEMPRE - Scrivere i test PRIMA del codice - Mantenere una TODO list per i test - Eseguire tutti i test ogni volta e non solo quelli collegati alla modifica fatta - Il lavoro è completo quando tutti i test nella TODO list sono OK© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    19. 19. TDD - Best Practice - Iniziare scrivendo i test per le funzionalità più semplici - Eseguire i test subito dopo una modifica al codice - Se la scrittura di un test richiede troppo tempo spezzare il problema e suddividere in più test© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    20. 20. TDD - Da non fare MAI - Scrivere test per metodi banali (getter e setter) - Committare codice con test che FALLISCONO - Implementare nuove funzionalità con test che FALLISCONO - Iniziare una rifattorizzazione con test che FALLISCONO - Creare dipendenze tra i vari test© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    21. 21. Development style Come cambia il modo di scrivere codice con i test© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    22. 22. Scrivere PRIMA i test© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    23. 23. Codice testabile© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    24. 24. Rifattorizzazione© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    25. 25. Scrivere codice testabile - Spostare la maggior parte della logica nel model - Eliminare le dipendenze tra i componenti - Separare le responsabilità - Evitare quando possibile metodi statici - Limitare l’uso di oggetti singleton© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    26. 26. Rifattorizzazione - Più sicura - Più facile - Più frequente - Migliora la qualità del codice© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    27. 27. Spezzare il ciclo dello stress© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    28. 28. Tipologia di test - Unit - Molti test molto veloci - Testano singole funzionalità - Indipendenti dal codice che NON stanno testando - Functional - Tipicamente più lenti - Probabilmente più adatti per verificare regressioni che non per TDD© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    29. 29. Strumenti - Unit Test - Lime (framework di test di symfony) - PHPUnit + Stagehand_TestRunner - Functional Test - Framework di test di symfony - Selenium - Continuos Integration© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    30. 30. Un Esempio Uno tuffo dentro al TDD per lo sviluppo di componente reale© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    31. 31. Requisiti - Implementare un Web Service REST con firma delle chiamate - Le chiamate devono essere firmate utilizzando il codice nonce e una chiave segreta (condivisa da client e server) - La firma viene generata utilizzando un codice NONCE - Il codice nonce univoco, casuale e persistente tra creazione e utilizzo - Il nonce deve essere eliminato dopo il suo utilizzo© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    32. 32. Step 0 Definizione di una lista di test© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    33. 33. TODO Test - Il server genera un codice nonce di tipo stringa, univoco, di 32 caratteri - La firma viene correttamente verificata - Il codice nonce viene memorizzato quando viene richiesto/generato - Il codice nonce viene eliminato quando viene utilizzato© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    34. 34. Iterazione 1 Test: Il server genera un codice nonce di tipo stringa, univoco, di 32 caratteri© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    35. 35. Il Test public function testGetNonce() { $server = new AuthServer(); $this->assertType(string, $server->getNonce()); $this->assertEquals(32, strlen($server->getNonce())); $this->assertNotEquals($server->getNonce(), $server->getNonce()); } Il Codice class AuthServer { /** * Genera un codice nonce univoco */ public function generateNonce() { return md5(uniqid(mt_rand(), true)); } }© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    36. 36. Iterazione 2 Test: La firma viene correttamente verificata.© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    37. 37. Il Test /** * Test metodo validateSignature() * * verifica tipo di dato restituito, test signature corretta e signature non corretta */ public function testValidateInvalidSignature() { $server = $this->createServer(); $secret = mySecret; $nonce = nonce; $signature = fakesignature; $this->assertType(boolean, $server->validateSignature($signature, $secret, $nonce)); $this->assertFalse($server->validateSignature($signature, $secret, $nonce)); $signature = 6313fc22867e45185845408d9a4993f439440313; $this->assertTrue($server->validateSignature($signature, $secret, $nonce)); }© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    38. 38. Il Codice /** * Verifica la signature */ public function validateSignature($signature, $secret, $nonce) { $calculatedSignature = hash_hmac(sha1, $nonce, $secret); return $calculatedSignature == $signature; }© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    39. 39. Iterazione 3 Test: Il codice nonce viene memorizzato quando viene richiesto/generato© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    40. 40. Il Test /** * Verifica che il codice none venga * memorizzato una volta richiesto. * * Il test usa un oggetto mock per verificare che venga * chiamato il metodo saveNonce($nonce) in AuthServer::generateNonce() * */ public function testNoncePersistence() { $testNonceDataStore = $this->getMock(TestNonceDataStore); $testNonceDataStore->expects($this->once())->method(saveNonce)->with($this->isType(string)); $server = new AuthServer($testNonceDataStore); $server->generateNonce(); }© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    41. 41. Il Codice class AuthServer /** { * Interfaccia per la persistenza del codice Nonce /** * @author ftassi * * * @var NonceDataStore $dataStore */ */ protected $dataStore; interface NonceDataStore { /** public function saveNonce($nonce); * Costruttore } * * @param NonceDataStore $dataStore */ public function __construct(NonceDataStore $dataStore) { $this->dataStore = $dataStore; } /** * Verifica la signature */ public function validateSignature($signature, $secret, $nonce) { $calculatedSignature = hash_hmac(sha1, $nonce, $secret); return $calculatedSignature == $signature; } }© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    42. 42. Iterazione 4 Test: Il codice nonce viene eliminato quando viene utilizzato© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    43. 43. Il Test /** * Verifica che il codice none venga * memorizzato una volta richiesto. * * Il test usa un oggetto mock per verificare che venga * chiamato il metodo saveNonce($nonce) in AuthServer::generateNonce() * */ public function testNoncePersistence() { $testNonceDataStore = $this->getMock(TestNonceDataStore); $testNonceDataStore->expects($this->once())->method(saveNonce)->with($this->isType(string)); $dataStore->expects($this->never())->method(deleteNonce)->with($this->isType(string)); $server = $this->createServer($testNonceDataStore); $server->generateNonce(); }© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    44. 44. Il Test /** * Verifica la rimozione del codice nonce * in caso di richiesta valida */ public function testNonceRemovalForValidSignature() { $secret = mySecret; $nonce = nonce; $signature = 6313fc22867e45185845408d9a4993f439440313; $dataStore = $this->getMock(TestNonceDataStore); $dataStore->expects($this->once())->method(deleteNonce)->with($this->isType(string)); $server = $this->createServer($dataStore); $server->validateSignature($signature, $secret, $nonce); }© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    45. 45. Il Test /** * Verifica che il nonce non venga invalidato se la firma non è valida */ public function testNonceRemovalForInvalidSignature() { $secret = mySecret; $nonce = nonce; $signature = fakesignature; $dataStore = $this->getMock(TestNonceDataStore); $dataStore->expects($this->never())->method(deleteNonce); $server = $this->createServer($dataStore); $server->validateSignature($signature, $secret, $nonce); }© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    46. 46. Il Codice /** * Verifica la signature */ public function validateSignature($signature, $secret, $nonce) { $calculatedSignature = hash_hmac(sha1, $nonce, $secret); if($calculatedSignature == $signature) { $this->dataStore->deleteNonce($nonce); return true; } return false; }© H-art 2010 | All Rights Reserved | H-art is a WPP Company 20100715 - TDD | Test Driven Development
    47. 47. THANK YOUH-artVia Sile, 4131056 - Ca’ Tron (Treviso)All rights reserved. This publication is protected by copyright.No part of it may be reproduced, stored in a retrieval system,or transmitted in any form, or by any means, electronic,mechanical, photocopying or otherwise, without writtenpermission from the copyright owners.Every effort has been made to ensure the accuracy of thecontents, but the publishers and copyright owners cannotaccept liability in respect of errors or omissions. Readers willappreciate that the data are as up-to-date only to the extentthat their availability, compilation and printed schedules willallow and are subject to change. 20100715 - TDD | Test Driven Development

    ×