SlideShare a Scribd company logo
1 of 30
Download to read offline
Design Paradoxes & BDD
appunti dal Devoxx2012 di Nicola Pedot
Paradosso 1:
la flessibilità genera complessità
La rovina proviene dalla volontà di eccessiva
flessibilità, la chiave sta nel trovare la giusta
misura evitando quella non richiesta.
BDD e una corretta modularizzazione aiutano
in questo. Poi vedremo....
Paradossi derivati
[fonte link1]
Paradosso 2:
il riuso complica l'uso
Il Graal del riuso promesso da sviluppo
orientato all'oggetto ('80), al componente ('90)
ed al servizio ('00) è elusivo.
Vale il Principio di Equivalenza Riuso-Rilascio
di Robert Martin [1]
"La granularità del riuso è la granularità del
rilascio."
Paradosso 2:
termine granularità
Paradosso 2:
termine granularità
Si parla di granularità per indicare come un
entità si divida in parti. Un'entità a granularità
grossa, godrà di maggiori capacità in virtù
delle singole capacità che include, ma avrà
maggiori dipendenze con le sue parti.
"Entità a granularità più grossa sono più facili
da usare, mentre quelli a granularità più
piccola sono più facili da riusare"
Paradosso 2:
termine peso
Paradosso 2:
termine peso
Si parla di peso dell'entità per indicare la
quantità di dipendenza con il contesto in cui
vive. Un entità dal peso maggiore avrà
maggior dipendenza dal contesto e minor
necessità di configurazione.
"Entità a peso maggiore saranno più
facilmente usabili, entità a peso minore
saranno più facilmente riusabili."
Paradosso 2: quiz
granularità e peso
Entità
Contesto
Parte
Paradosso 3:
l'evoluzione blocca la sopravvivenza
Quando iniziate un nuovo progetto lo pensate
modulare e flessibile per allungargli la vita. Il
tempo metterà a dura prova questo pensiero.
Lo stratificarsi di hack porterà il sistema ad un
ambiente difficile in cui vivere e mantenere.
Il debito tecnico è destinato a crescere.
Paradosso 3
definizione di debito tecnico (1)
"Debito tecnico" introdotta da Ward
Cunningham più o meno così:
"l'insieme dei compromessi di progettazione
che accettiamo per rispettare le scadenze e
soddisafare i clienti."
Paradosso 3
definizione di debito tecnico (2)
"Debito tecnico" spiegato da Martin Fowler
con un parallelo economico più o meno così:
"Come un debito economico, col tempo un
debito tecnico chiede il pagamento di interessi
in forma di maggior sforzo legato a scelte
veloci e sporche. Possiamo scegliere di pagare
gli interessi o di pagare un prezzo di riscatto
applicando refactoring."
Il debito che portiamo
Il debito che cresce
Paradosso 3:
legge dell'incremento di complessità
Meir M. Lehman's [2]:
Con l'evoluzione di un sistema la sua
complessità cresce a meno di lavoro per
mantenerla costante o ridurla.
Strategie per contrastare il debito e
cercare la giusta flessibilità
Controllare le dipendenze di grana e peso in
modularizzazione a tutti i livelli.
[Link1]
Architettura a tutti livelli
[fonte link1]
Attrezziamoci
Strumenti
Sonar
http://www.sonarsource.org/
Permette di misurare le dipendenze, la
complessità e il debito tecnico.
Metodologia Behavior Driven
Development (BDD)
Definire un linguaggio comune tra: clienti,
analisti, sviluppatori e tester.
Partire dalle richieste del cliente e
investigando per scoprire le VERE richieste per
poi implementare solo quelle che portano
valore e con il minimo sforzo.
L'uso dei test di accettazione
Nello sviluppo si intende incluso anzi si
concorda con il cliente il test che assume
valore di contratto.
I test automatizzati devono essere espressi e
leggibili anche dal cliente.
5 Guadagni
1. Quanto è implementato è ciò che
porta vero valore al cliente.
2. Meno lavoro sprecato.
3. Miglior comunicazione.
4. Miglior qualità del codice.
5. Tracciabilità dei requisiti e del
valore associato al codice.
La piramide della tracciabilità
[fonte link2]
Organizzazione degli Artefatti
[fonte link2]
Strumenti di acceptance test
Una moltitudine da scegliere in base al
contesto di lavoro/preferenze... tra questi:
● jbehave (java)
● cucumber (ruby)
● easyb (groovy)
● jasmine (javascript)
● thucydides
● spec2
● spock
il complemento del BDD è il Test
Driven Development (TDD) [fonte link2]
Che dovremmo conoscere...
ma non è così facile [fonte link2]
Grazie
per l'attenzione
Link
[1] Paradoxes of Software Architecture
by Kirk Knoernschild
goo.gl/Mcpcl
[2] Bdd state-of-the-union
by John Smart
goo.gl/XZWxl
Riferimenti
[1] Robert C. Martin, "Design Principles and
Design Patterns." January 2000.
[2] Meir M. Lehman, "On Understanding Laws,
Evolution, and Conservation in the Large-
Program Life Cycle." Journal of Systems and
Software Vol. 1, 1980, pp. 213

More Related Content

Similar to 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 SavarinoPMexpo
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRSManuel Scapolan
 
ATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven DevelopmentATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven DevelopmentGiorgio Marchetti
 
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
 
Una fugace occhiata al Test Driven Development (2006)
Una fugace occhiata al Test Driven Development  (2006)Una fugace occhiata al Test Driven Development  (2006)
Una fugace occhiata al Test Driven Development (2006)Roberto Bettazzoni
 
Sviluppo e implementazione di un modello di ottimizzazione per un'efficiente ...
Sviluppo e implementazione di un modello di ottimizzazione per un'efficiente ...Sviluppo e implementazione di un modello di ottimizzazione per un'efficiente ...
Sviluppo e implementazione di un modello di ottimizzazione per un'efficiente ...MarziaPaschini
 
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
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSGiovanni Buffa
 
Smau Padova 2015 - Aipsi
Smau Padova 2015 - AipsiSmau Padova 2015 - Aipsi
Smau Padova 2015 - AipsiSMAU
 
Cloud computing (Andrea Cavicchini)
Cloud computing (Andrea Cavicchini)Cloud computing (Andrea Cavicchini)
Cloud computing (Andrea Cavicchini)Andrea Cavicchini
 
Abilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAbilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAmazon Web Services
 
Evento ConsulPartner - Polo PN - 15-11-2013
Evento ConsulPartner - Polo PN - 15-11-2013Evento ConsulPartner - Polo PN - 15-11-2013
Evento ConsulPartner - Polo PN - 15-11-2013ConsulPartner iSrl
 
Come affrontare la sfida del Cloud Computing
Come affrontare la sfida del Cloud ComputingCome affrontare la sfida del Cloud Computing
Come affrontare la sfida del Cloud ComputingInnocenti Andrea
 
Introduzione all'Agile Software Development
Introduzione all'Agile Software DevelopmentIntroduzione all'Agile Software Development
Introduzione all'Agile Software DevelopmentPaolo Sammicheli
 

Similar to BDD & design paradoxes appunti devoxx2012 (20)

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
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
ATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven DevelopmentATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven Development
 
Kotlin hexagonal-architecture
Kotlin hexagonal-architectureKotlin hexagonal-architecture
Kotlin hexagonal-architecture
 
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
 
OOP... Object Whaaat?
OOP... Object Whaaat?OOP... Object Whaaat?
OOP... Object Whaaat?
 
Una fugace occhiata al Test Driven Development (2006)
Una fugace occhiata al Test Driven Development  (2006)Una fugace occhiata al Test Driven Development  (2006)
Una fugace occhiata al Test Driven Development (2006)
 
Anti pattern
Anti patternAnti pattern
Anti pattern
 
Prince2 principi
Prince2 principiPrince2 principi
Prince2 principi
 
Sviluppo e implementazione di un modello di ottimizzazione per un'efficiente ...
Sviluppo e implementazione di un modello di ottimizzazione per un'efficiente ...Sviluppo e implementazione di un modello di ottimizzazione per un'efficiente ...
Sviluppo e implementazione di un modello di ottimizzazione per un'efficiente ...
 
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
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
 
Semplicemente Agile
Semplicemente AgileSemplicemente Agile
Semplicemente Agile
 
Smau Padova 2015 - Aipsi
Smau Padova 2015 - AipsiSmau Padova 2015 - Aipsi
Smau Padova 2015 - Aipsi
 
Cloud computing (Andrea Cavicchini)
Cloud computing (Andrea Cavicchini)Cloud computing (Andrea Cavicchini)
Cloud computing (Andrea Cavicchini)
 
Abilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il CloudAbilitare le organizzazioni e le persone ad adottare con successo il Cloud
Abilitare le organizzazioni e le persone ad adottare con successo il Cloud
 
Open source in azienda
Open source in aziendaOpen source in azienda
Open source in azienda
 
Evento ConsulPartner - Polo PN - 15-11-2013
Evento ConsulPartner - Polo PN - 15-11-2013Evento ConsulPartner - Polo PN - 15-11-2013
Evento ConsulPartner - Polo PN - 15-11-2013
 
Come affrontare la sfida del Cloud Computing
Come affrontare la sfida del Cloud ComputingCome affrontare la sfida del Cloud Computing
Come affrontare la sfida del Cloud Computing
 
Introduzione all'Agile Software Development
Introduzione all'Agile Software DevelopmentIntroduzione all'Agile Software Development
Introduzione all'Agile Software Development
 

More from Nicola Pedot

AI, ML e l'anello mancante
AI, ML e l'anello mancanteAI, ML e l'anello mancante
AI, ML e l'anello mancanteNicola Pedot
 
Say No To Dependency Hell
Say No To Dependency Hell Say No To Dependency Hell
Say No To Dependency Hell Nicola Pedot
 
Java al servizio della data science - Java developers' meeting
Java al servizio della data science - Java developers' meetingJava al servizio della data science - Java developers' meeting
Java al servizio della data science - Java developers' meetingNicola Pedot
 
Java 9-10 What's New
Java 9-10 What's NewJava 9-10 What's New
Java 9-10 What's NewNicola Pedot
 
Tom EE appunti devoxx2012
Tom EE   appunti devoxx2012 Tom EE   appunti devoxx2012
Tom EE appunti devoxx2012 Nicola Pedot
 
Presentazione+Android
Presentazione+AndroidPresentazione+Android
Presentazione+AndroidNicola Pedot
 

More from Nicola Pedot (13)

AI, ML e l'anello mancante
AI, ML e l'anello mancanteAI, ML e l'anello mancante
AI, ML e l'anello mancante
 
Ethic clean
Ethic cleanEthic clean
Ethic clean
 
Say No To Dependency Hell
Say No To Dependency Hell Say No To Dependency Hell
Say No To Dependency Hell
 
Java al servizio della data science - Java developers' meeting
Java al servizio della data science - Java developers' meetingJava al servizio della data science - Java developers' meeting
Java al servizio della data science - Java developers' meeting
 
Jakarta EE 2018
Jakarta EE 2018Jakarta EE 2018
Jakarta EE 2018
 
Lazy Java
Lazy JavaLazy Java
Lazy Java
 
Java 9-10 What's New
Java 9-10 What's NewJava 9-10 What's New
Java 9-10 What's New
 
JavaEE6 my way
JavaEE6 my wayJavaEE6 my way
JavaEE6 my way
 
Java 8 Overview
Java 8 OverviewJava 8 Overview
Java 8 Overview
 
Tom EE appunti devoxx2012
Tom EE   appunti devoxx2012 Tom EE   appunti devoxx2012
Tom EE appunti devoxx2012
 
Eclipse Svn
Eclipse SvnEclipse Svn
Eclipse Svn
 
Eclipse
EclipseEclipse
Eclipse
 
Presentazione+Android
Presentazione+AndroidPresentazione+Android
Presentazione+Android
 

BDD & design paradoxes appunti devoxx2012

  • 1. Design Paradoxes & BDD appunti dal Devoxx2012 di Nicola Pedot
  • 2. Paradosso 1: la flessibilità genera complessità La rovina proviene dalla volontà di eccessiva flessibilità, la chiave sta nel trovare la giusta misura evitando quella non richiesta. BDD e una corretta modularizzazione aiutano in questo. Poi vedremo....
  • 4. Paradosso 2: il riuso complica l'uso Il Graal del riuso promesso da sviluppo orientato all'oggetto ('80), al componente ('90) ed al servizio ('00) è elusivo. Vale il Principio di Equivalenza Riuso-Rilascio di Robert Martin [1] "La granularità del riuso è la granularità del rilascio."
  • 6. Paradosso 2: termine granularità Si parla di granularità per indicare come un entità si divida in parti. Un'entità a granularità grossa, godrà di maggiori capacità in virtù delle singole capacità che include, ma avrà maggiori dipendenze con le sue parti. "Entità a granularità più grossa sono più facili da usare, mentre quelli a granularità più piccola sono più facili da riusare"
  • 8. Paradosso 2: termine peso Si parla di peso dell'entità per indicare la quantità di dipendenza con il contesto in cui vive. Un entità dal peso maggiore avrà maggior dipendenza dal contesto e minor necessità di configurazione. "Entità a peso maggiore saranno più facilmente usabili, entità a peso minore saranno più facilmente riusabili."
  • 9. Paradosso 2: quiz granularità e peso Entità Contesto Parte
  • 10. Paradosso 3: l'evoluzione blocca la sopravvivenza Quando iniziate un nuovo progetto lo pensate modulare e flessibile per allungargli la vita. Il tempo metterà a dura prova questo pensiero. Lo stratificarsi di hack porterà il sistema ad un ambiente difficile in cui vivere e mantenere. Il debito tecnico è destinato a crescere.
  • 11. Paradosso 3 definizione di debito tecnico (1) "Debito tecnico" introdotta da Ward Cunningham più o meno così: "l'insieme dei compromessi di progettazione che accettiamo per rispettare le scadenze e soddisafare i clienti."
  • 12. Paradosso 3 definizione di debito tecnico (2) "Debito tecnico" spiegato da Martin Fowler con un parallelo economico più o meno così: "Come un debito economico, col tempo un debito tecnico chiede il pagamento di interessi in forma di maggior sforzo legato a scelte veloci e sporche. Possiamo scegliere di pagare gli interessi o di pagare un prezzo di riscatto applicando refactoring."
  • 13. Il debito che portiamo
  • 14. Il debito che cresce
  • 15. Paradosso 3: legge dell'incremento di complessità Meir M. Lehman's [2]: Con l'evoluzione di un sistema la sua complessità cresce a meno di lavoro per mantenerla costante o ridurla.
  • 16. Strategie per contrastare il debito e cercare la giusta flessibilità Controllare le dipendenze di grana e peso in modularizzazione a tutti i livelli. [Link1]
  • 17. Architettura a tutti livelli [fonte link1]
  • 19. Strumenti Sonar http://www.sonarsource.org/ Permette di misurare le dipendenze, la complessità e il debito tecnico.
  • 20. Metodologia Behavior Driven Development (BDD) Definire un linguaggio comune tra: clienti, analisti, sviluppatori e tester. Partire dalle richieste del cliente e investigando per scoprire le VERE richieste per poi implementare solo quelle che portano valore e con il minimo sforzo.
  • 21. L'uso dei test di accettazione Nello sviluppo si intende incluso anzi si concorda con il cliente il test che assume valore di contratto. I test automatizzati devono essere espressi e leggibili anche dal cliente.
  • 22. 5 Guadagni 1. Quanto è implementato è ciò che porta vero valore al cliente. 2. Meno lavoro sprecato. 3. Miglior comunicazione. 4. Miglior qualità del codice. 5. Tracciabilità dei requisiti e del valore associato al codice.
  • 23. La piramide della tracciabilità [fonte link2]
  • 25. Strumenti di acceptance test Una moltitudine da scegliere in base al contesto di lavoro/preferenze... tra questi: ● jbehave (java) ● cucumber (ruby) ● easyb (groovy) ● jasmine (javascript) ● thucydides ● spec2 ● spock
  • 26. il complemento del BDD è il Test Driven Development (TDD) [fonte link2]
  • 27. Che dovremmo conoscere... ma non è così facile [fonte link2]
  • 29. Link [1] Paradoxes of Software Architecture by Kirk Knoernschild goo.gl/Mcpcl [2] Bdd state-of-the-union by John Smart goo.gl/XZWxl
  • 30. Riferimenti [1] Robert C. Martin, "Design Principles and Design Patterns." January 2000. [2] Meir M. Lehman, "On Understanding Laws, Evolution, and Conservation in the Large- Program Life Cycle." Journal of Systems and Software Vol. 1, 1980, pp. 213