Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Lavorare con codice legacy “non testabile” - Incontro DevOps - 8 marzo 2019 - Bologna

217 views

Published on

In questa presentazione farò vedere come affronto il codice legacy non testabile. Eseguiro "live" l'esercizio "TripServiceKata" di Sandro Mancuso. Prenderò un pezzo di codice non testabile, userò una delle tecniche chiamate "seams" per renderlo testabile, e farò vedere come trasformare il codice legacy in codice pulito mantenendone intatto il comportamento ma migliorandone il design. Alla fine della presentazione dovreste esservi fatta un idea di come affrontare il codice legacy e avrete raccolto una serie di consigli su come gestire le suite di test. Svolgerò l'esercizio in un linguaggio specifico (PHP o Ruby devo ancora decidere) ma i pattern che vi farò vedere possono essere applicati pari-pari a qualsiasi linguaggio mainstream (C#, Java, Python, ...), mentre i principi valgono per qualsiasi tecnnologia.

Published in: Technology
  • Be the first to comment

Lavorare con codice legacy “non testabile” - Incontro DevOps - 8 marzo 2019 - Bologna

  1. 1. Lavorare con codice legacy “non testabile” Andrea Francia (7Pixel) 8 marzo 2019 @ Incontro DevOps (Bologna)
  2. 2. Perché testare il legacy?
  3. 3. @andreafrancia The conservative approach No automatic tests leads to Manual testing that leads to High risk of introduce bugs that leads to Fear of change so You prefer add more mess instead cleaning up the existing code and the code get worse, the cost/time of adding features increases If it ain't broke don't fix it
  4. 4. “non testabile” ?
  5. 5. “non testabile” —> difficile da testare
  6. 6. unit test (Feathers’ definition) A test that runs in less than 1/10th of a second and is small enough to help you localize problems when it fails.
  7. 7. Some of the worst enemies of Unit Tests • The Database • The Network • The random numbers • Thread • The MVC framework
  8. 8. Fast Feedback -> Faster learning
  9. 9. @andreafrancia Il problema sono le dipendenze TripService) +findTripsByUser(User)0:0List<Trip>0 <<Singleton>>) UserSession) +getInstance()0:0UserSession0 +getLoggedUser()0:0User0 TripDAO) +findTripsByUser(User)0:0List<Trip>0 http://www.slideshare.net/MozaicWorks/sandro-mancuso-testing-and-refactoring-legacy-code/7
  10. 10. @andreafrancia Trip Service Kata • Sandro Mancuso (@sandromancuso) • https://github.com/sandromancuso/trip-service- kata • http://www.slideshare.net/MozaicWorks/sandro- mancuso-testing-and-refactoring-legacy-code
  11. 11. @andreafrancia Social Network per Viaggiatori • Requisiti: • Solo gli utenti loggati possono per vedere i contenuti del sito. • Puoi vedere i viaggi degli altri utenti che sono tuoi “amici”
  12. 12. @andreafrancia Dipendenze TripService) +findTripsByUser(User)0:0List<Trip>0 <<Singleton>>) UserSession) +getInstance()0:0UserSession0 +getLoggedUser()0:0User0 TripDAO) +findTripsByUser(User)0:0List<Trip>0 http://www.slideshare.net/MozaicWorks/sandro-mancuso-testing-and-refactoring-legacy-code/7
  13. 13. @andreafrancia Dipendenze TripService) +findTripsByUser(User)0:0List<Trip>0 <<Singleton>>) UserSession) +getInstance()0:0UserSession0 +getLoggedUser()0:0User0 TripDAO) +findTripsByUser(User)0:0List<Trip>0 http://www.slideshare.net/MozaicWorks/sandro-mancuso-testing-and-refactoring-legacy-code/7
  14. 14. @andreafrancia The Legacy Code Dilemma When we refactor, we should have tests. To put tests in place, we often have to refactor
  15. 15. @andreafrancia Start refactoring from deepest to shortest branch Start tes3ng from shortest to deepest branch Working with Legacy Code Tips This slide is taken from a Sandro Mancuso Slideshare: 
 https://www.slideshare.net/sandromancuso/legacy-code-handson-session/7
  16. 16. Working with Legacy Code Tips Use a coverage tool
  17. 17. Coverage in PHPUnit
  18. 18. @andreafrancia Seam “A seam is a place where you can alter behavior in your program without editing in that place”
  19. 19. @andreafrancia Enabling Point “Every seam has an enabling point, a place where you can make the decision to use one behavior or another.”
  20. 20. @andreafrancia Grazie

×