SlideShare a Scribd company logo
1 of 37
Download to read offline
Gianni Valdambrini




Anti-pattern: mito o realtà?




Firenze, 27 Settembre 2012
Vade retro, Satana!

A chi NON è rivolto questo talk:

 •   A chi crede che la tecnologia migliore nell'informatica sia
     il copia-incolla


 •   A quelli per cui “così funge”


 •   A quelli che “il cane mi ha mangiato i compiti”




                       Gianni Valdambrini – aleister@develer.com
Io non ne ho mai visti...




Gianni Valdambrini – aleister@develer.com
Anti pattern

Come ogni mostro che si rispetti, gli anti-pattern si nascondono
alla vista dei più, che non credono alla loro esistenza..


Il termine anti-pattern si riferisce a problemi ricorrenti nella
progettazione del software.

Possono riguardare ogni aspetto dello sviluppo: manageriale,
architetturale e sviluppo del codice vero e proprio.


In questo talk verrà presentata una selezione dei più comuni o
insidiosi anti-pattern, capaci di colpire anche (o soprattutto?) i
più esperti...



                                                                   4 / 37



                       Gianni Valdambrini – aleister@develer.com
Analysis Paralysis




Gianni Valdambrini – aleister@develer.com
Analysis Paralysis

E' una (quasi) diretta implicazione del modello Waterfall.
Avviene ogni volta che viene speso troppo tempo per fare un'analisi
perfetta.

    → Questo blocca l'intero processo di sviluppo, e non produce
      nessun valore per il cliente.



Soluzione: effettuare l'analisi dei componenti principali per delineare
la struttura del progetto e iniziare l'implementazione partendo dai
componenti “più importanti”. Usare test automatici per aiutare il
refactoring nei casi di analisi con lacune.




                                                              6 / 37



                     Gianni Valdambrini – aleister@develer.com
Death By Planning




Gianni Valdambrini – aleister@develer.com
Death by Planning

“Abbiamo un piano: se lo seguiamo e non ci allontaniamo da esso
non avremo problemi”

Avviene quando la pianificazione coinvolge anche i dettagli del
progetto e, nei casi peggiori, “il piano” viene aggiornato durante lo
sviluppo per riflettere i cambiamenti.

    → I costi della pianificazione diventano eccessivi e possono
      produrre ritardi nello sviluppo senza produrre alcun valore.



Soluzione: limitare la pianificazione alle parti che hanno un valore
per il cliente o che rappresentano i componenti chiave per costruirle.



                                                              8 / 37



                      Gianni Valdambrini – aleister@develer.com
Dead End




Gianni Valdambrini – aleister@develer.com
Dead End

Si ha quando un componente esterno al progetto viene modificato,
e le modifiche non vengono integrate nel componente ma risultano
in carico agli sviluppatori del progetto.

    → la manutenzione delle modifiche richiede del lavoro extra
      necessario ad ogni nuova versione del progetto e del
      componente.



Soluzione: adottare componenti per quanto possibile standard e
diffusi o isolare le modifiche in un layer apposito (dp adapter).




                                                           10 / 37



                     Gianni Valdambrini – aleister@develer.com
Reinventing the wheel




Gianni Valdambrini – aleister@develer.com
Reinventing the wheel

Avviene quando un programmatore piuttosto che adottare una
soluzione già esistente decide di crearne una propria.

Due casi:
 • quando si riprende il lavoro fatto da altri.

  •   quando il lavoro a noi richiesto è già realizzato da una libreria
      esterna.

      → Nel primo caso la soluzione nuova potrà facilmente diventare
        sempre più simile alla vecchia. Nel secondo, la soluzione fatta
        in casa ci porterà via molto tempo e sarà peggiore della
        soluzione esterna.


Soluzione: valutare con attenzione se qualcuno ha già risolto
il problema in un modo “compatibile” con le nostre esigenze.
                                                           12 / 37



                        Gianni Valdambrini – aleister@develer.com
Spaghetti Code




Gianni Valdambrini – aleister@develer.com
Spaghetti Code

E' un termine dispregiativo che identifica un codice mal strutturato,
che ha subito una serie di modifiche per coprire i casi non coperti
dal codice o per gestire “eccezioni”.

    → il degradamento del codice porta a una maggiore lentezza
      negli sviluppi, ad una minore leggibilità del codice e a
      difficoltà di debugging.



Soluzione: effettuare refactoring per rendere la struttura del codice
chiara e facilmente espandibile.




                                                            14 / 37



                     Gianni Valdambrini – aleister@develer.com
Overengineering




Gianni Valdambrini – aleister@develer.com
Overengineering

Si ha quando un programma viene realizzato più robusto e complesso
del necessario, o con più funzionalità di quanto previsto.


    → il sovra-dimensionamento comporta una maggiore lentezza
      nello sviluppo, difficoltà nel debugging e in generale costi
      maggiori del progetto.



Soluzione: “KISS principle”, mantenere le cose più semplici possibili.




                                                             16 / 37



                     Gianni Valdambrini – aleister@develer.com
Circular Dependency




Gianni Valdambrini – aleister@develer.com
Circular Dependency

Si riferisce alla creazione di dipendenze circolari fra oggetti o
moduli/librerie.


    → causa un alto accoppiamento fra le entità che non potranno
      più essere utilizzate in modo indipendente.
      Si può inoltre verificare un effetto domino in cui modifiche
      minori in una entità scatenano altri cambiamenti.



Soluzione: spezzare la dipendenza circolare quando possibile,
usando meccanismi di notifica (dp observer).




                                                              18 / 37



                      Gianni Valdambrini – aleister@develer.com
Cargo Cult Programming




Gianni Valdambrini – aleister@develer.com
Cargo Cult Programming

Succede quando vengono utilizzati metodologie, design pattern
o codice senza averne compreso appieno le motivazioni e il
funzionamento.

    → il fraintendimento può causare difficoltà nel modificare il
      codice (che a sua volta può portare a bug) o nel caso delle
      metodologie al fallimento dovuto ad un'interpretazione
      letterale delle regole.



Soluzione: è necessario comprendere appieno le soluzioni
proposte da altri, adattandole se necessario al caso in questione.




                                                           20 / 37



                     Gianni Valdambrini – aleister@develer.com
Error Hiding




Gianni Valdambrini – aleister@develer.com
Error Hiding

Si riferisce al nascondere un errore o un'eccezione semplificando
l'errore o nascondendolo del tutto per celare la complessità del
sistema all'utente.


    → l'utente del sistema non può comunicare quale sia con
      esattezza l'errore che diventa quindi molto difficile da
      individuare e correggere.


Soluzione: mostrare un errore semplificato all'utente riportando
l'errore completo in un file di log o inviandolo via mail.




                                                            22 / 37



                     Gianni Valdambrini – aleister@develer.com
Yo-yo problem




Gianni Valdambrini – aleister@develer.com
Yo-yo problem

E' legato in particolare alla programmazione ad oggetti.

Succede quando si deve comprendere del codice con una gerarchia
di classi così complicata che è necessario spostarsi continuamente
fra le classi per seguire il flusso del programma.


    → la frammentazione del codice rende difficile comprendere
      il flusso del codice, specialmente nel caso di metodi virtuali,
      e questo può a sua volta essere fonte di errori.


Soluzione: limitare la gerarchia fra classi e preferire la composizione
all'ereditarietà “selvaggia”.



                                                             24 / 37



                      Gianni Valdambrini – aleister@develer.com
Abstraction Inversion




Gianni Valdambrini – aleister@develer.com
Abstraction Inversion

Avviene quando dobbiamo sviluppare delle funzionalità di alto livello
ed avendo già un'implementazione più generica e complessa
decidiamo di costruire l'astrazione sopra di essa.

    → la complessità derivante dal sistema sottostante rende
      difficile il debugging e lo sviluppo di nuove funzionalità.



Soluzione: scegliere con attenzione il modo di riutilizzare codice,
evitando complessità accidentale.




                                                              26 / 37



                      Gianni Valdambrini – aleister@develer.com
Gold Plating




Gianni Valdambrini – aleister@develer.com
Gold Plating

Si riferisce alla pratica di continuare a lavorare su un progetto o
task dopo che esso ha tutte le funzionalità richieste dal cliente.

    → nella quasi totalità dei casi il cliente (e di sicuro il project
      manager) avrebbe preferito che venisse sviluppata un'altra
      funzionalità.



Soluzione: eseguire i task fino al loro compimento seguendo la
priorità data dal project manager / cliente.




                                                               28 / 37



                      Gianni Valdambrini – aleister@develer.com
God Object




Gianni Valdambrini – aleister@develer.com
God Object

Dovuto spesso ad un abuso dell'ereditarietà, è abbastanza
frequente nelle classi base di framework di grandi dimensioni.

Consiste nel caricare di troppe funzionalità o responsabilità (anche
etereogenee tra loro) un oggetto, che diventa quindi il “cuore” del
software.

    → comporta difficoltà di debugging, manutenzione e di utilizzo
      dell'oggetto.



Soluzione: limitare l'utilizzo dell'ereditarietà e suddividere le
responsabilità secondo criteri logici.



                                                                30 / 37



                      Gianni Valdambrini – aleister@develer.com
Blind Faith




Gianni Valdambrini – aleister@develer.com
Blind Faith

Si riferisce alla tendenza dei programmatori di non testare la
corretta implementazione di bugfix o di una modifica in generale,
per pigrizia o per una infrastruttura in cui il testing è troppo
oneroso.

    → oltre a non realizzare la funzionalità richiesta, si possono
      verificare altri bug più o meno gravi generati dalla modifica.



Soluzione: utilizzare pratiche come il TDD o lo unit testing in
generale.




                                                             32 / 37



                     Gianni Valdambrini – aleister@develer.com
Copy & Paste Programming




Gianni Valdambrini – aleister@develer.com
Copy & Paste Programming

Si riferisce alla tendenza dei programmatori di copiare del codice
esistente per implementare una nuova funzionalità più velocemente
rispetto al creare nuovo codice da zero.

    → Oltre alle classiche sviste, il codice duplicato sarà più difficile
      da sviluppare ulteriormente e eventuali bug si ritroveranno
      quindi in più parti.



Soluzione: generalizzare il codice mediante refactoring ed evitare
le duplicazioni (DRY principle).




                                                               34 / 37



                      Gianni Valdambrini – aleister@develer.com
Photo & Artworks Credits

Kassandra Igolka

Davide Bellocchio

Jason Chan

Justin Holzworth

Ellie Phillips

Ben Bohane

Henrik Moses
Let's Talk


office
+39 055 3984627
e-mail
aleister@develer.com

web
www.develer.com
License

Creative Commons Attribution 3.0 Unported

More Related Content

Similar to Anti pattern

Il tuo team "agile" scrive codice "flaccido"? Forse scrum non basta
Il tuo team "agile" scrive codice "flaccido"? Forse scrum non bastaIl tuo team "agile" scrive codice "flaccido"? Forse scrum non basta
Il tuo team "agile" scrive codice "flaccido"? Forse scrum non bastaStefano Muro
 
Stop Meeting, Start Coding!
Stop Meeting, Start Coding!Stop Meeting, Start Coding!
Stop Meeting, Start Coding!Giulio Roggero
 
Reshaping enterrprise software
Reshaping enterrprise softwareReshaping enterrprise software
Reshaping enterrprise softwareAlberto Brandolini
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008Mauro Servienti
 
Prototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step FunctionsPrototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step FunctionsCommit University
 
BDD & design paradoxes appunti devoxx2012
BDD & design paradoxes   appunti devoxx2012BDD & design paradoxes   appunti devoxx2012
BDD & design paradoxes appunti devoxx2012Nicola Pedot
 
Essere project manager senza rinunciare all'agilità integrata - Fabio Savarino
Essere project manager senza rinunciare all'agilità integrata - Fabio SavarinoEssere project manager senza rinunciare all'agilità integrata - Fabio Savarino
Essere project manager senza rinunciare all'agilità integrata - Fabio SavarinoPMexpo
 
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiDelphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiMarco Breveglieri
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Gian Maria Ricci
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelFrancesca1980
 
Debito Tecnico Questo Sconosciuto
Debito Tecnico Questo SconosciutoDebito Tecnico Questo Sconosciuto
Debito Tecnico Questo Sconosciutoinspearit Italy
 
2014 11-15 presentazione breton agile day ancona
2014 11-15 presentazione breton agile day ancona2014 11-15 presentazione breton agile day ancona
2014 11-15 presentazione breton agile day anconaClaudio Saurin
 
Introduzione all'Agile Software Development
Introduzione all'Agile Software DevelopmentIntroduzione all'Agile Software Development
Introduzione all'Agile Software DevelopmentPaolo Sammicheli
 
Xe One Day - Adaptive Code
Xe One Day - Adaptive CodeXe One Day - Adaptive Code
Xe One Day - Adaptive CodeMirco Vanini
 
Anti pattern se lo conosci lo eviti
Anti pattern se lo conosci lo evitiAnti pattern se lo conosci lo eviti
Anti pattern se lo conosci lo evitiSimone Federici
 

Similar to Anti pattern (20)

Il tuo team "agile" scrive codice "flaccido"? Forse scrum non basta
Il tuo team "agile" scrive codice "flaccido"? Forse scrum non bastaIl tuo team "agile" scrive codice "flaccido"? Forse scrum non basta
Il tuo team "agile" scrive codice "flaccido"? Forse scrum non basta
 
Stop Meeting, Start Coding!
Stop Meeting, Start Coding!Stop Meeting, Start Coding!
Stop Meeting, Start Coding!
 
Reshaping enterrprise software
Reshaping enterrprise softwareReshaping enterrprise software
Reshaping enterrprise software
 
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008
 
Open source in azienda
Open source in aziendaOpen source in azienda
Open source in azienda
 
Prototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step FunctionsPrototipazione Low-Code con AWS Step Functions
Prototipazione Low-Code con AWS Step Functions
 
Introduzione all'ALM
Introduzione all'ALMIntroduzione all'ALM
Introduzione all'ALM
 
BDD & design paradoxes appunti devoxx2012
BDD & design paradoxes   appunti devoxx2012BDD & design paradoxes   appunti devoxx2012
BDD & design paradoxes appunti devoxx2012
 
Essere project manager senza rinunciare all'agilità integrata - Fabio Savarino
Essere project manager senza rinunciare all'agilità integrata - Fabio SavarinoEssere project manager senza rinunciare all'agilità integrata - Fabio Savarino
Essere project manager senza rinunciare all'agilità integrata - Fabio Savarino
 
OOP... Object Whaaat?
OOP... Object Whaaat?OOP... Object Whaaat?
OOP... Object Whaaat?
 
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiDelphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
 
Debito Tecnico Questo Sconosciuto
Debito Tecnico Questo SconosciutoDebito Tecnico Questo Sconosciuto
Debito Tecnico Questo Sconosciuto
 
2014 11-15 presentazione breton agile day ancona
2014 11-15 presentazione breton agile day ancona2014 11-15 presentazione breton agile day ancona
2014 11-15 presentazione breton agile day ancona
 
Fashion guide: CAD e CAD.Assyst
Fashion guide: CAD e CAD.AssystFashion guide: CAD e CAD.Assyst
Fashion guide: CAD e CAD.Assyst
 
Introduzione all'Agile Software Development
Introduzione all'Agile Software DevelopmentIntroduzione all'Agile Software Development
Introduzione all'Agile Software Development
 
Xe One Day - Adaptive Code
Xe One Day - Adaptive CodeXe One Day - Adaptive Code
Xe One Day - Adaptive Code
 
Approcci al design
Approcci al designApprocci al design
Approcci al design
 
Anti pattern se lo conosci lo eviti
Anti pattern se lo conosci lo evitiAnti pattern se lo conosci lo eviti
Anti pattern se lo conosci lo eviti
 

Anti pattern

  • 1. Gianni Valdambrini Anti-pattern: mito o realtà? Firenze, 27 Settembre 2012
  • 2. Vade retro, Satana! A chi NON è rivolto questo talk: • A chi crede che la tecnologia migliore nell'informatica sia il copia-incolla • A quelli per cui “così funge” • A quelli che “il cane mi ha mangiato i compiti” Gianni Valdambrini – aleister@develer.com
  • 3. Io non ne ho mai visti... Gianni Valdambrini – aleister@develer.com
  • 4. Anti pattern Come ogni mostro che si rispetti, gli anti-pattern si nascondono alla vista dei più, che non credono alla loro esistenza.. Il termine anti-pattern si riferisce a problemi ricorrenti nella progettazione del software. Possono riguardare ogni aspetto dello sviluppo: manageriale, architetturale e sviluppo del codice vero e proprio. In questo talk verrà presentata una selezione dei più comuni o insidiosi anti-pattern, capaci di colpire anche (o soprattutto?) i più esperti... 4 / 37 Gianni Valdambrini – aleister@develer.com
  • 5. Analysis Paralysis Gianni Valdambrini – aleister@develer.com
  • 6. Analysis Paralysis E' una (quasi) diretta implicazione del modello Waterfall. Avviene ogni volta che viene speso troppo tempo per fare un'analisi perfetta. → Questo blocca l'intero processo di sviluppo, e non produce nessun valore per il cliente. Soluzione: effettuare l'analisi dei componenti principali per delineare la struttura del progetto e iniziare l'implementazione partendo dai componenti “più importanti”. Usare test automatici per aiutare il refactoring nei casi di analisi con lacune. 6 / 37 Gianni Valdambrini – aleister@develer.com
  • 7. Death By Planning Gianni Valdambrini – aleister@develer.com
  • 8. Death by Planning “Abbiamo un piano: se lo seguiamo e non ci allontaniamo da esso non avremo problemi” Avviene quando la pianificazione coinvolge anche i dettagli del progetto e, nei casi peggiori, “il piano” viene aggiornato durante lo sviluppo per riflettere i cambiamenti. → I costi della pianificazione diventano eccessivi e possono produrre ritardi nello sviluppo senza produrre alcun valore. Soluzione: limitare la pianificazione alle parti che hanno un valore per il cliente o che rappresentano i componenti chiave per costruirle. 8 / 37 Gianni Valdambrini – aleister@develer.com
  • 9. Dead End Gianni Valdambrini – aleister@develer.com
  • 10. Dead End Si ha quando un componente esterno al progetto viene modificato, e le modifiche non vengono integrate nel componente ma risultano in carico agli sviluppatori del progetto. → la manutenzione delle modifiche richiede del lavoro extra necessario ad ogni nuova versione del progetto e del componente. Soluzione: adottare componenti per quanto possibile standard e diffusi o isolare le modifiche in un layer apposito (dp adapter). 10 / 37 Gianni Valdambrini – aleister@develer.com
  • 11. Reinventing the wheel Gianni Valdambrini – aleister@develer.com
  • 12. Reinventing the wheel Avviene quando un programmatore piuttosto che adottare una soluzione già esistente decide di crearne una propria. Due casi: • quando si riprende il lavoro fatto da altri. • quando il lavoro a noi richiesto è già realizzato da una libreria esterna. → Nel primo caso la soluzione nuova potrà facilmente diventare sempre più simile alla vecchia. Nel secondo, la soluzione fatta in casa ci porterà via molto tempo e sarà peggiore della soluzione esterna. Soluzione: valutare con attenzione se qualcuno ha già risolto il problema in un modo “compatibile” con le nostre esigenze. 12 / 37 Gianni Valdambrini – aleister@develer.com
  • 13. Spaghetti Code Gianni Valdambrini – aleister@develer.com
  • 14. Spaghetti Code E' un termine dispregiativo che identifica un codice mal strutturato, che ha subito una serie di modifiche per coprire i casi non coperti dal codice o per gestire “eccezioni”. → il degradamento del codice porta a una maggiore lentezza negli sviluppi, ad una minore leggibilità del codice e a difficoltà di debugging. Soluzione: effettuare refactoring per rendere la struttura del codice chiara e facilmente espandibile. 14 / 37 Gianni Valdambrini – aleister@develer.com
  • 16. Overengineering Si ha quando un programma viene realizzato più robusto e complesso del necessario, o con più funzionalità di quanto previsto. → il sovra-dimensionamento comporta una maggiore lentezza nello sviluppo, difficoltà nel debugging e in generale costi maggiori del progetto. Soluzione: “KISS principle”, mantenere le cose più semplici possibili. 16 / 37 Gianni Valdambrini – aleister@develer.com
  • 17. Circular Dependency Gianni Valdambrini – aleister@develer.com
  • 18. Circular Dependency Si riferisce alla creazione di dipendenze circolari fra oggetti o moduli/librerie. → causa un alto accoppiamento fra le entità che non potranno più essere utilizzate in modo indipendente. Si può inoltre verificare un effetto domino in cui modifiche minori in una entità scatenano altri cambiamenti. Soluzione: spezzare la dipendenza circolare quando possibile, usando meccanismi di notifica (dp observer). 18 / 37 Gianni Valdambrini – aleister@develer.com
  • 19. Cargo Cult Programming Gianni Valdambrini – aleister@develer.com
  • 20. Cargo Cult Programming Succede quando vengono utilizzati metodologie, design pattern o codice senza averne compreso appieno le motivazioni e il funzionamento. → il fraintendimento può causare difficoltà nel modificare il codice (che a sua volta può portare a bug) o nel caso delle metodologie al fallimento dovuto ad un'interpretazione letterale delle regole. Soluzione: è necessario comprendere appieno le soluzioni proposte da altri, adattandole se necessario al caso in questione. 20 / 37 Gianni Valdambrini – aleister@develer.com
  • 21. Error Hiding Gianni Valdambrini – aleister@develer.com
  • 22. Error Hiding Si riferisce al nascondere un errore o un'eccezione semplificando l'errore o nascondendolo del tutto per celare la complessità del sistema all'utente. → l'utente del sistema non può comunicare quale sia con esattezza l'errore che diventa quindi molto difficile da individuare e correggere. Soluzione: mostrare un errore semplificato all'utente riportando l'errore completo in un file di log o inviandolo via mail. 22 / 37 Gianni Valdambrini – aleister@develer.com
  • 23. Yo-yo problem Gianni Valdambrini – aleister@develer.com
  • 24. Yo-yo problem E' legato in particolare alla programmazione ad oggetti. Succede quando si deve comprendere del codice con una gerarchia di classi così complicata che è necessario spostarsi continuamente fra le classi per seguire il flusso del programma. → la frammentazione del codice rende difficile comprendere il flusso del codice, specialmente nel caso di metodi virtuali, e questo può a sua volta essere fonte di errori. Soluzione: limitare la gerarchia fra classi e preferire la composizione all'ereditarietà “selvaggia”. 24 / 37 Gianni Valdambrini – aleister@develer.com
  • 25. Abstraction Inversion Gianni Valdambrini – aleister@develer.com
  • 26. Abstraction Inversion Avviene quando dobbiamo sviluppare delle funzionalità di alto livello ed avendo già un'implementazione più generica e complessa decidiamo di costruire l'astrazione sopra di essa. → la complessità derivante dal sistema sottostante rende difficile il debugging e lo sviluppo di nuove funzionalità. Soluzione: scegliere con attenzione il modo di riutilizzare codice, evitando complessità accidentale. 26 / 37 Gianni Valdambrini – aleister@develer.com
  • 27. Gold Plating Gianni Valdambrini – aleister@develer.com
  • 28. Gold Plating Si riferisce alla pratica di continuare a lavorare su un progetto o task dopo che esso ha tutte le funzionalità richieste dal cliente. → nella quasi totalità dei casi il cliente (e di sicuro il project manager) avrebbe preferito che venisse sviluppata un'altra funzionalità. Soluzione: eseguire i task fino al loro compimento seguendo la priorità data dal project manager / cliente. 28 / 37 Gianni Valdambrini – aleister@develer.com
  • 29. God Object Gianni Valdambrini – aleister@develer.com
  • 30. God Object Dovuto spesso ad un abuso dell'ereditarietà, è abbastanza frequente nelle classi base di framework di grandi dimensioni. Consiste nel caricare di troppe funzionalità o responsabilità (anche etereogenee tra loro) un oggetto, che diventa quindi il “cuore” del software. → comporta difficoltà di debugging, manutenzione e di utilizzo dell'oggetto. Soluzione: limitare l'utilizzo dell'ereditarietà e suddividere le responsabilità secondo criteri logici. 30 / 37 Gianni Valdambrini – aleister@develer.com
  • 31. Blind Faith Gianni Valdambrini – aleister@develer.com
  • 32. Blind Faith Si riferisce alla tendenza dei programmatori di non testare la corretta implementazione di bugfix o di una modifica in generale, per pigrizia o per una infrastruttura in cui il testing è troppo oneroso. → oltre a non realizzare la funzionalità richiesta, si possono verificare altri bug più o meno gravi generati dalla modifica. Soluzione: utilizzare pratiche come il TDD o lo unit testing in generale. 32 / 37 Gianni Valdambrini – aleister@develer.com
  • 33. Copy & Paste Programming Gianni Valdambrini – aleister@develer.com
  • 34. Copy & Paste Programming Si riferisce alla tendenza dei programmatori di copiare del codice esistente per implementare una nuova funzionalità più velocemente rispetto al creare nuovo codice da zero. → Oltre alle classiche sviste, il codice duplicato sarà più difficile da sviluppare ulteriormente e eventuali bug si ritroveranno quindi in più parti. Soluzione: generalizzare il codice mediante refactoring ed evitare le duplicazioni (DRY principle). 34 / 37 Gianni Valdambrini – aleister@develer.com
  • 35. Photo & Artworks Credits Kassandra Igolka Davide Bellocchio Jason Chan Justin Holzworth Ellie Phillips Ben Bohane Henrik Moses
  • 36. Let's Talk office +39 055 3984627 e-mail aleister@develer.com web www.develer.com