SlideShare una empresa de Scribd logo
1 de 60
Behavior Driven
Development avec
Cédric Vidal, Dir. Technique., ProxiAD IDF
14 Novembre 2011
Twitter: @cedricvidal
Ne lisez pas la spec…
…exécutez la !
Intervenant
• Cédric Vidal
– Architecte JavaEE et MDE
– Directeur Technique de ProxiAD IDF
Holdin
g 2003
ProxiAD
Nord Lille
1997
Syntonia
Paris 2004
ProxiAD
Ile de
France
Paris 2004
ProxiAD
Bulgarie
Sofia 2005
ProxiAD
Ouest
Nantes
2005
ProxiAD
Normandie
Rouen
2005
ProxiAD
Est
Strasbourg
2010
ProxiAD
Rhône-
Alpes Lyon
2010
8 filiales
390
collaborateurs
C’est …
Notre métier
• Conception
• Réalisation
• Conseil
• Expertise
• Objet
• Décisionnel
• Centre de service
• Industrialisation
Le menu du jour
1. La problématique
2. Objectifs
3. Le BDD
1. Gains & inconvénients
2. TDD
4. Jbehave
1. Basiques
2. Demo 1
3. Customisation
5. Cas 1: RDA
6. Cas 2: Flux boursiers
1. Demo 2
http://gojko.net/2008/08/29/how-many-points-are-there-in-a-five-point-star/
à question simple…
http://gojko.net/2008/08/29/how-many-points-are-there-in-a-five-point-star/
…réponse simple ?
Problématique
• Pour la MOA / les fonctionnels
– Ce qui est développé par la MOE est-il conforme
aux attentes ?
– Comment spécifier de la manière la plus efficace
• Pour la MOE / les développeurs
– Ce qui est développé est-il conforme aux attentes
de la MOA ?
– Comment savoir quand s’arrêter ?
Objectifs
• Pour la MOA / les fonctionnels
– Obtenir le produit souhaité
– Etre compris par les développeurs
– Mieux définir le produit souhaité
• Pour la MOE / les développeurs
– Développer le produit le plus simple répondant
aux besoins de la MOA
– Perdre le moins de temps possible
Le BDD propose:
• aux fonctionnels d’écrire en français des
stories …
• … qui seront ensuite rendues
exécutables par les développeurs
• … et qui serviront de fil d’ariane pour les
développements
Gains
• L’écriture de la story permet aux fonctionnels de
mettre à plat leur besoin
• Guide les développements par les spécifications
exécutables
• Critères d’acceptance fonctionnelle
• Non régression fonctionnelle
• Sécurise les développements
• Contractualisation de la relation MOA/MOE
Ce n’est pas
• Attention, les stories ne sont pas:
– Un critère d’acceptance technique
– Ce n’est pas parce que les stories passent que
techniquement, tous les cas de figures sont gérés
– Les stories ne testent pas tous les cas de figure
– => à compléter par des tests technique: unitaires,
d’intégration
Compléter par du TDD
• Vision technique
• Types de tests
– Tests unitaires
– Tests d’acceptance
– Test d’intégration
• Vocabulaire
– Etat initial / Action / Assertion
• Gains
– Non régression technique
– Critère d’acceptance technique
Test d’intégration
technique
Test
Unitaire
Difficultés 1/2
• Nécessite de l’attention régulière
• De l’implication
• Qui écrit les stories ?
• Les développeurs ou les fonctionnels
• « c’est trop de travail »
• => personnes non impliquées
• Difficile d’obtenir l’adhésion
• des fonctionnels
• des développeurs
Difficultés 2/2
• Parfois perçu par la MOA comme un engagement
contractuel
• Parfois perçu par les développeurs comme un effort
trop important
• Première tâche qui passe à la trappe en cas de
pression sur le projet
FRAMEWORK DE BDD
Une story
17
• Description des scénarios en français libre
• Approche basique de matching des phrases
– Pas d’analyse grammaticale
• Chaque phrase exécute simplement du code bindé
18
Instrumentation de la story: Given
19
Instrumentation de la story: When
20
Instrumentation de la story: Then
21
Phrases types réutilisables
• Given
– la fenêtre "" est active
– l'utilisateur a le droit de ""
– l'utilisateur courant est ""
• When
– l'utilisateur clique sur le bouton ""
– l'utilisateur choisit la valeur "" dans la liste ""
– l'utilisateur saisit la valeur "" dans le champ ""
• Then
– la fenêtre "" est active
– le titre de la fenêtre active est ""
– la fenêtre est modale
– la liste "" est remplie par ""
– le champ "" contient la valeur ""
22
Etats possibles des steps
• PASSED: instrumenté, exécuté, succès
• FAILED: instrumenté, exécuté, échec
• PENDING: non instrumenté
• NOT PERFORMED: instrumenté, pas exécuté
car bloqué par un step FAILED précédent
23
Exemple d’exécution
Running story fr/cosi/stories/CS_US_001_CreerOperation.story
(fr/cosi/stories/CS_US_001_CreerOperation.story)
Scenario: Création d'une opération d'infrastructure
Given la fenêtre "Organiser le projet" est active
Given le projet "2820120110001" est selectionné
When l'utilisateur clique sur le bouton "Créer une opération"
Then la fenêtre "Créer une opération" est active
Then le champ "Projet" contient la valeur "2820120110001 - Transfert du régiment 1"
When l'utilisateur choisit la valeur "Eid Versailles" dans la liste "Organisme"
When l'utilisateur saisit la valeur "Réfection" dans le champ "Libellé"
When l'utilisateur clique sur le bouton "Enregistrer"
Then le titre de la fenêtre active est "Modifier l'opération" (FAILED)
(org.junit.ComparisonFailure: expected:<[Modifier l'opér]ation>
but was:<[Demande de confirm]ation>)
Then le champ "Opération" contient la valeur "0003 - Réfection de l'infirmerie«
(NOT PERFORMED)
Then l'onglet "Qui où" est accessible (PENDING)
DEMO 1
Plusieurs lancements
possibles
• Depuis un lanceur JUnit, une story par lanceur
– Plus orienté développeur
• Depuis un lanceur JUnit, toutes les stories
d’une arborescence
– Plus orienté fonctionnels
• Depuis Maven
• …
Intégrations possibles
• Intégration Guice
• Intégration Spring
• Intégration Mockito
• Intégration Mycilla
Customisations possibles
• Langue
• Résolution des stories & examples
• Format des examples: possibilité d’ajouter ses
propres formats de fichiers mais pas évident
Résolution des stories &
examples
• Inclus
– Relativement à un chemin
– Relativement à une URL
• Locale, FTP, HTTP, WebDAV, …
– De manière absolue dans le classpath
• Nécessite une customisation:
– relativement au lanceur JUnit
Relativement au test
Examples CSV
• Pas inclus de base
• Nécessite une customisation
IoC & BDD ?
• Permet un accès à tous les
composants du système par
injection dans les steps
• Permet de piloter tous les
composants
• Permet de customiser
simplement n’importe quel
composant du système
• Assemblage des couches
spécifique à l’environnement
souhaité pour les tests
SUT
Tes
t
Exemple
• Base de donnée mémoire: H2
– Compatible Oracle, Postgres, …
• API FileSystem virtualisée
• Systèmes externes mockés:
– Serveur FTP, …
• ….
RDA SWING / GUICE
Premier exemple
Contexte
• RDA Swing
• IoC avec Guice
35
Comment faire
le lien entre les
noms métier et
le code ?
?
36
Pas par le titre
• Plusieurs instances différentes d’une même
vue peuvent avoir des titres différents
37
En marquant le code
• Avec des annotations Java5
38
API Graal: GraalUtil
39
GraalUtil dans les steps
OUTILLAGE
41
Emplacement des stories
story
Lanceur JUnit
CS_US_XXX_<NomUserStory>.story
CS_US_XXX_<NomUserStory>_Story.java
42
Emplacement des steps
43
Lancement d’une story
44
Lanceur de stories JUnit
Comportement commun à toutes les stories
Exécutable avec JUnit
Liste des modules Guice
chargés pour la story
45
Editeur de story
(Merci Patricia)
TRAITEMENT DE FLUX BOURSIERS
Deuxième example
Contexte
• Métier
– Serveur de traitement de flux boursier
• Middlewares:
– Mémoire distribuée HA: Hazelcast
– Stockage longue durée: Postgres
– Routage et connecteurs: Camel
– IoC: Guice
Vue d’ensemble
Serveur
Flux boursier Reports
Console de monitoring
& administration
Euronext
Paris
New york
Journaux
en ligne
Journaux
papier
Besoin
• Pas de caractères observables extérieurs
permettant de vérifier le bon fonctionnement
du serveur
• Simuler des stories dans un contexte distribué
• Pilotage des nœuds du cluster
• Traitements internes très complexes
• TDD & BDD particulièrement intéressant
dans ce contexte
DEMO 2
ANNEXES
COMMENT FAIRE DU BDD AVEC
UNE IHM ?
Mocking des vues
Difficultés
• Pouvoir simuler les saisies utilisateur
• Pouvoir identifier les composants graphiques
par leur nom fonctionnel
• Pouvoir tolérer des changements de layout
• Pouvoir vérifier des assertions sur l’état de
l’IHM
Approches BDD IHM
• Approche robot: FEST, …
– Simulation au niveau interface réelle
• Approche pattern MVP
– Simulation au niveau présenteur
MVP
View
« JavaBean
»
Mocked
View
Swing View
Presenter Model
get/set
notify
notify
action
•Problèmes
•Manque de librairies de mock Swing
•Manque de composants graphiques compatibles
MVP
56
Conf IoC Swing
Implémentation Swing
Interfaces des vues
SwingUiConfIoc
57
Mocking des vues pour les stories
• Mocking avec Mockito
• Comportement JavaBean
Implémentation JavaBean mockée
Interfaces des vues
MockUiConfIoc
58
mockBean
• Permet de donner un comportement JavaBean à une interface
Une interface défini
des getters/setters
59
mockBean
• remplace • par
Questions ?

Más contenido relacionado

Similar a AgileTour Strasbourg 2011 BDD with jBehave

Afterworks @Nouméa - DevOps, approche par container et Docker
Afterworks @Nouméa - DevOps, approche par container et DockerAfterworks @Nouméa - DevOps, approche par container et Docker
Afterworks @Nouméa - DevOps, approche par container et DockerJulien Chable
 
Meetup Devops Geneve 06/17- EBU Feedbacks
Meetup Devops Geneve 06/17- EBU Feedbacks Meetup Devops Geneve 06/17- EBU Feedbacks
Meetup Devops Geneve 06/17- EBU Feedbacks Hidora
 
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019Oeil de Coach
 
Iut lyon 1 introduction à l'agilité - 20 juin 2012
Iut lyon 1   introduction à l'agilité - 20 juin 2012Iut lyon 1   introduction à l'agilité - 20 juin 2012
Iut lyon 1 introduction à l'agilité - 20 juin 2012agnes_crepet
 
Développement d'un grand projet piloté par les tests (BDD)
Développement d'un grand projet piloté par les tests (BDD)Développement d'un grand projet piloté par les tests (BDD)
Développement d'un grand projet piloté par les tests (BDD)Laurent PY
 
20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven developmentLeClubQualiteLogicielle
 
Agile lille 2015 devops etapres
Agile lille 2015 devops etapresAgile lille 2015 devops etapres
Agile lille 2015 devops etapresLaurent Tardif
 
01_Introduction_a_JEE.pdf
01_Introduction_a_JEE.pdf01_Introduction_a_JEE.pdf
01_Introduction_a_JEE.pdfJunior724645
 
Présentation PFE Module Article GPAO
Présentation PFE Module Article GPAOPrésentation PFE Module Article GPAO
Présentation PFE Module Article GPAOahmedmiha
 
Configurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdfConfigurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdfHamida Rebai Trabelsi
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...Jasmine Conseil
 
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)Publicis Sapient Engineering
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx FranceMarc Bojoly
 
Présentation GLPI aux RMLL 2017
Présentation GLPI aux RMLL 2017Présentation GLPI aux RMLL 2017
Présentation GLPI aux RMLL 2017Nouh Walid
 
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...Adrien Blind
 
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...CERTyou Formation
 
Drupal un projet comme les autres ? Drupalcamp Paris 2013
Drupal un projet comme les autres ? Drupalcamp Paris 2013Drupal un projet comme les autres ? Drupalcamp Paris 2013
Drupal un projet comme les autres ? Drupalcamp Paris 2013Artusamak
 

Similar a AgileTour Strasbourg 2011 BDD with jBehave (20)

Tour d'horizon des tests
Tour d'horizon des testsTour d'horizon des tests
Tour d'horizon des tests
 
Afterworks @Nouméa - DevOps, approche par container et Docker
Afterworks @Nouméa - DevOps, approche par container et DockerAfterworks @Nouméa - DevOps, approche par container et Docker
Afterworks @Nouméa - DevOps, approche par container et Docker
 
Meetup Devops Geneve 06/17- EBU Feedbacks
Meetup Devops Geneve 06/17- EBU Feedbacks Meetup Devops Geneve 06/17- EBU Feedbacks
Meetup Devops Geneve 06/17- EBU Feedbacks
 
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019
Mieux rediger-les-user-stories-bonnes-pratiques-oeildecoach 2019
 
Iut lyon 1 introduction à l'agilité - 20 juin 2012
Iut lyon 1   introduction à l'agilité - 20 juin 2012Iut lyon 1   introduction à l'agilité - 20 juin 2012
Iut lyon 1 introduction à l'agilité - 20 juin 2012
 
Développement d'un grand projet piloté par les tests (BDD)
Développement d'un grand projet piloté par les tests (BDD)Développement d'un grand projet piloté par les tests (BDD)
Développement d'un grand projet piloté par les tests (BDD)
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development20151013 - Agirc arrco : Behavior driven development
20151013 - Agirc arrco : Behavior driven development
 
Agile lille 2015 devops etapres
Agile lille 2015 devops etapresAgile lille 2015 devops etapres
Agile lille 2015 devops etapres
 
01_Introduction_a_JEE.pdf
01_Introduction_a_JEE.pdf01_Introduction_a_JEE.pdf
01_Introduction_a_JEE.pdf
 
Présentation PFE Module Article GPAO
Présentation PFE Module Article GPAOPrésentation PFE Module Article GPAO
Présentation PFE Module Article GPAO
 
Configurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdfConfigurer GitHub Actions avec Docker et DotNET 8.pdf
Configurer GitHub Actions avec Docker et DotNET 8.pdf
 
Mobilité && SAP
Mobilité && SAPMobilité && SAP
Mobilité && SAP
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
 
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)Paris Container Day 2016 : Cloudunit v2 (Treeptik)
Paris Container Day 2016 : Cloudunit v2 (Treeptik)
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx France
 
Présentation GLPI aux RMLL 2017
Présentation GLPI aux RMLL 2017Présentation GLPI aux RMLL 2017
Présentation GLPI aux RMLL 2017
 
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
DevOps à l'échelle: ce que l'on a fait, ce que l'on a appris chez Societe Gen...
 
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
Taleb formation-talend-open-studio-data-integration-les-bases-et-perfectionne...
 
Drupal un projet comme les autres ? Drupalcamp Paris 2013
Drupal un projet comme les autres ? Drupalcamp Paris 2013Drupal un projet comme les autres ? Drupalcamp Paris 2013
Drupal un projet comme les autres ? Drupalcamp Paris 2013
 

Más de Cedric Vidal

Camunda Days 2018 Building a digital on-boarding microservices platform using...
Camunda Days 2018 Building a digital on-boarding microservices platform using...Camunda Days 2018 Building a digital on-boarding microservices platform using...
Camunda Days 2018 Building a digital on-boarding microservices platform using...Cedric Vidal
 
Kubernetes and Gitops at Quicksign - Koncrete Kube Oct 2018
Kubernetes and Gitops at Quicksign - Koncrete Kube Oct 2018Kubernetes and Gitops at Quicksign - Koncrete Kube Oct 2018
Kubernetes and Gitops at Quicksign - Koncrete Kube Oct 2018Cedric Vidal
 
BBL KAPPA Lesfurets.com
BBL KAPPA Lesfurets.comBBL KAPPA Lesfurets.com
BBL KAPPA Lesfurets.comCedric Vidal
 
Rethinking Quicksign's Digital Onboarding - Confluent Streaming Days Paris
Rethinking Quicksign's Digital Onboarding - Confluent Streaming Days ParisRethinking Quicksign's Digital Onboarding - Confluent Streaming Days Paris
Rethinking Quicksign's Digital Onboarding - Confluent Streaming Days ParisCedric Vidal
 
Do microservices dream about CQRS-ES, Kafka Stream and BPMN ? - Voxxed micros...
Do microservices dream about CQRS-ES, Kafka Stream and BPMN ? - Voxxed micros...Do microservices dream about CQRS-ES, Kafka Stream and BPMN ? - Voxxed micros...
Do microservices dream about CQRS-ES, Kafka Stream and BPMN ? - Voxxed micros...Cedric Vidal
 
Eclipse Day Paris 2010 - ProxiAD - Cedric Vidal - 1.0
Eclipse Day Paris 2010 - ProxiAD - Cedric Vidal - 1.0Eclipse Day Paris 2010 - ProxiAD - Cedric Vidal - 1.0
Eclipse Day Paris 2010 - ProxiAD - Cedric Vidal - 1.0Cedric Vidal
 
MD Day 2009 - Cédric Vidal - 1.0
MD Day 2009 - Cédric Vidal - 1.0MD Day 2009 - Cédric Vidal - 1.0
MD Day 2009 - Cédric Vidal - 1.0Cedric Vidal
 
RMLL - Eclipse Acceleo Day - MDSD Scaffolding and Acceleo - Cédric Vidal - 1.1
RMLL - Eclipse Acceleo Day - MDSD Scaffolding and Acceleo - Cédric Vidal - 1.1RMLL - Eclipse Acceleo Day - MDSD Scaffolding and Acceleo - Cédric Vidal - 1.1
RMLL - Eclipse Acceleo Day - MDSD Scaffolding and Acceleo - Cédric Vidal - 1.1Cedric Vidal
 
Scaffolding MDSD par l’exemple - 1.0
Scaffolding MDSD par l’exemple - 1.0Scaffolding MDSD par l’exemple - 1.0
Scaffolding MDSD par l’exemple - 1.0Cedric Vidal
 

Más de Cedric Vidal (11)

Camunda Days 2018 Building a digital on-boarding microservices platform using...
Camunda Days 2018 Building a digital on-boarding microservices platform using...Camunda Days 2018 Building a digital on-boarding microservices platform using...
Camunda Days 2018 Building a digital on-boarding microservices platform using...
 
Kubernetes and Gitops at Quicksign - Koncrete Kube Oct 2018
Kubernetes and Gitops at Quicksign - Koncrete Kube Oct 2018Kubernetes and Gitops at Quicksign - Koncrete Kube Oct 2018
Kubernetes and Gitops at Quicksign - Koncrete Kube Oct 2018
 
BBL KAPPA Lesfurets.com
BBL KAPPA Lesfurets.comBBL KAPPA Lesfurets.com
BBL KAPPA Lesfurets.com
 
EMF Customizer
EMF CustomizerEMF Customizer
EMF Customizer
 
Rethinking Quicksign's Digital Onboarding - Confluent Streaming Days Paris
Rethinking Quicksign's Digital Onboarding - Confluent Streaming Days ParisRethinking Quicksign's Digital Onboarding - Confluent Streaming Days Paris
Rethinking Quicksign's Digital Onboarding - Confluent Streaming Days Paris
 
Do microservices dream about CQRS-ES, Kafka Stream and BPMN ? - Voxxed micros...
Do microservices dream about CQRS-ES, Kafka Stream and BPMN ? - Voxxed micros...Do microservices dream about CQRS-ES, Kafka Stream and BPMN ? - Voxxed micros...
Do microservices dream about CQRS-ES, Kafka Stream and BPMN ? - Voxxed micros...
 
EMF Scaffolding
EMF ScaffoldingEMF Scaffolding
EMF Scaffolding
 
Eclipse Day Paris 2010 - ProxiAD - Cedric Vidal - 1.0
Eclipse Day Paris 2010 - ProxiAD - Cedric Vidal - 1.0Eclipse Day Paris 2010 - ProxiAD - Cedric Vidal - 1.0
Eclipse Day Paris 2010 - ProxiAD - Cedric Vidal - 1.0
 
MD Day 2009 - Cédric Vidal - 1.0
MD Day 2009 - Cédric Vidal - 1.0MD Day 2009 - Cédric Vidal - 1.0
MD Day 2009 - Cédric Vidal - 1.0
 
RMLL - Eclipse Acceleo Day - MDSD Scaffolding and Acceleo - Cédric Vidal - 1.1
RMLL - Eclipse Acceleo Day - MDSD Scaffolding and Acceleo - Cédric Vidal - 1.1RMLL - Eclipse Acceleo Day - MDSD Scaffolding and Acceleo - Cédric Vidal - 1.1
RMLL - Eclipse Acceleo Day - MDSD Scaffolding and Acceleo - Cédric Vidal - 1.1
 
Scaffolding MDSD par l’exemple - 1.0
Scaffolding MDSD par l’exemple - 1.0Scaffolding MDSD par l’exemple - 1.0
Scaffolding MDSD par l’exemple - 1.0
 

Último

Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Ville de Châteauguay
 
mémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoiremémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoireEzechiasSteel
 
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfpdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfMedAbdelhayeSidiAhme
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésSana REFAI
 
le probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptxle probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptximaneeaouattahee
 

Último (6)

JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 
mémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoiremémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoire
 
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfpdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigés
 
le probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptxle probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptx
 

AgileTour Strasbourg 2011 BDD with jBehave

  • 1. Behavior Driven Development avec Cédric Vidal, Dir. Technique., ProxiAD IDF 14 Novembre 2011 Twitter: @cedricvidal Ne lisez pas la spec… …exécutez la !
  • 2. Intervenant • Cédric Vidal – Architecte JavaEE et MDE – Directeur Technique de ProxiAD IDF
  • 3. Holdin g 2003 ProxiAD Nord Lille 1997 Syntonia Paris 2004 ProxiAD Ile de France Paris 2004 ProxiAD Bulgarie Sofia 2005 ProxiAD Ouest Nantes 2005 ProxiAD Normandie Rouen 2005 ProxiAD Est Strasbourg 2010 ProxiAD Rhône- Alpes Lyon 2010 8 filiales 390 collaborateurs C’est …
  • 4. Notre métier • Conception • Réalisation • Conseil • Expertise • Objet • Décisionnel • Centre de service • Industrialisation
  • 5. Le menu du jour 1. La problématique 2. Objectifs 3. Le BDD 1. Gains & inconvénients 2. TDD 4. Jbehave 1. Basiques 2. Demo 1 3. Customisation 5. Cas 1: RDA 6. Cas 2: Flux boursiers 1. Demo 2
  • 8. Problématique • Pour la MOA / les fonctionnels – Ce qui est développé par la MOE est-il conforme aux attentes ? – Comment spécifier de la manière la plus efficace • Pour la MOE / les développeurs – Ce qui est développé est-il conforme aux attentes de la MOA ? – Comment savoir quand s’arrêter ?
  • 9. Objectifs • Pour la MOA / les fonctionnels – Obtenir le produit souhaité – Etre compris par les développeurs – Mieux définir le produit souhaité • Pour la MOE / les développeurs – Développer le produit le plus simple répondant aux besoins de la MOA – Perdre le moins de temps possible
  • 10. Le BDD propose: • aux fonctionnels d’écrire en français des stories … • … qui seront ensuite rendues exécutables par les développeurs • … et qui serviront de fil d’ariane pour les développements
  • 11. Gains • L’écriture de la story permet aux fonctionnels de mettre à plat leur besoin • Guide les développements par les spécifications exécutables • Critères d’acceptance fonctionnelle • Non régression fonctionnelle • Sécurise les développements • Contractualisation de la relation MOA/MOE
  • 12. Ce n’est pas • Attention, les stories ne sont pas: – Un critère d’acceptance technique – Ce n’est pas parce que les stories passent que techniquement, tous les cas de figures sont gérés – Les stories ne testent pas tous les cas de figure – => à compléter par des tests technique: unitaires, d’intégration
  • 13. Compléter par du TDD • Vision technique • Types de tests – Tests unitaires – Tests d’acceptance – Test d’intégration • Vocabulaire – Etat initial / Action / Assertion • Gains – Non régression technique – Critère d’acceptance technique Test d’intégration technique Test Unitaire
  • 14. Difficultés 1/2 • Nécessite de l’attention régulière • De l’implication • Qui écrit les stories ? • Les développeurs ou les fonctionnels • « c’est trop de travail » • => personnes non impliquées • Difficile d’obtenir l’adhésion • des fonctionnels • des développeurs
  • 15. Difficultés 2/2 • Parfois perçu par la MOA comme un engagement contractuel • Parfois perçu par les développeurs comme un effort trop important • Première tâche qui passe à la trappe en cas de pression sur le projet
  • 17. Une story 17 • Description des scénarios en français libre • Approche basique de matching des phrases – Pas d’analyse grammaticale • Chaque phrase exécute simplement du code bindé
  • 18. 18 Instrumentation de la story: Given
  • 21. 21 Phrases types réutilisables • Given – la fenêtre "" est active – l'utilisateur a le droit de "" – l'utilisateur courant est "" • When – l'utilisateur clique sur le bouton "" – l'utilisateur choisit la valeur "" dans la liste "" – l'utilisateur saisit la valeur "" dans le champ "" • Then – la fenêtre "" est active – le titre de la fenêtre active est "" – la fenêtre est modale – la liste "" est remplie par "" – le champ "" contient la valeur ""
  • 22. 22 Etats possibles des steps • PASSED: instrumenté, exécuté, succès • FAILED: instrumenté, exécuté, échec • PENDING: non instrumenté • NOT PERFORMED: instrumenté, pas exécuté car bloqué par un step FAILED précédent
  • 23. 23 Exemple d’exécution Running story fr/cosi/stories/CS_US_001_CreerOperation.story (fr/cosi/stories/CS_US_001_CreerOperation.story) Scenario: Création d'une opération d'infrastructure Given la fenêtre "Organiser le projet" est active Given le projet "2820120110001" est selectionné When l'utilisateur clique sur le bouton "Créer une opération" Then la fenêtre "Créer une opération" est active Then le champ "Projet" contient la valeur "2820120110001 - Transfert du régiment 1" When l'utilisateur choisit la valeur "Eid Versailles" dans la liste "Organisme" When l'utilisateur saisit la valeur "Réfection" dans le champ "Libellé" When l'utilisateur clique sur le bouton "Enregistrer" Then le titre de la fenêtre active est "Modifier l'opération" (FAILED) (org.junit.ComparisonFailure: expected:<[Modifier l'opér]ation> but was:<[Demande de confirm]ation>) Then le champ "Opération" contient la valeur "0003 - Réfection de l'infirmerie« (NOT PERFORMED) Then l'onglet "Qui où" est accessible (PENDING)
  • 25. Plusieurs lancements possibles • Depuis un lanceur JUnit, une story par lanceur – Plus orienté développeur • Depuis un lanceur JUnit, toutes les stories d’une arborescence – Plus orienté fonctionnels • Depuis Maven • …
  • 26. Intégrations possibles • Intégration Guice • Intégration Spring • Intégration Mockito • Intégration Mycilla
  • 27. Customisations possibles • Langue • Résolution des stories & examples • Format des examples: possibilité d’ajouter ses propres formats de fichiers mais pas évident
  • 28. Résolution des stories & examples • Inclus – Relativement à un chemin – Relativement à une URL • Locale, FTP, HTTP, WebDAV, … – De manière absolue dans le classpath • Nécessite une customisation: – relativement au lanceur JUnit
  • 30. Examples CSV • Pas inclus de base • Nécessite une customisation
  • 31. IoC & BDD ? • Permet un accès à tous les composants du système par injection dans les steps • Permet de piloter tous les composants • Permet de customiser simplement n’importe quel composant du système • Assemblage des couches spécifique à l’environnement souhaité pour les tests SUT Tes t
  • 32. Exemple • Base de donnée mémoire: H2 – Compatible Oracle, Postgres, … • API FileSystem virtualisée • Systèmes externes mockés: – Serveur FTP, … • ….
  • 33. RDA SWING / GUICE Premier exemple
  • 34. Contexte • RDA Swing • IoC avec Guice
  • 35. 35 Comment faire le lien entre les noms métier et le code ? ?
  • 36. 36 Pas par le titre • Plusieurs instances différentes d’une même vue peuvent avoir des titres différents
  • 37. 37 En marquant le code • Avec des annotations Java5
  • 41. 41 Emplacement des stories story Lanceur JUnit CS_US_XXX_<NomUserStory>.story CS_US_XXX_<NomUserStory>_Story.java
  • 44. 44 Lanceur de stories JUnit Comportement commun à toutes les stories Exécutable avec JUnit Liste des modules Guice chargés pour la story
  • 46. TRAITEMENT DE FLUX BOURSIERS Deuxième example
  • 47. Contexte • Métier – Serveur de traitement de flux boursier • Middlewares: – Mémoire distribuée HA: Hazelcast – Stockage longue durée: Postgres – Routage et connecteurs: Camel – IoC: Guice
  • 48. Vue d’ensemble Serveur Flux boursier Reports Console de monitoring & administration Euronext Paris New york Journaux en ligne Journaux papier
  • 49. Besoin • Pas de caractères observables extérieurs permettant de vérifier le bon fonctionnement du serveur • Simuler des stories dans un contexte distribué • Pilotage des nœuds du cluster • Traitements internes très complexes • TDD & BDD particulièrement intéressant dans ce contexte
  • 52. COMMENT FAIRE DU BDD AVEC UNE IHM ? Mocking des vues
  • 53. Difficultés • Pouvoir simuler les saisies utilisateur • Pouvoir identifier les composants graphiques par leur nom fonctionnel • Pouvoir tolérer des changements de layout • Pouvoir vérifier des assertions sur l’état de l’IHM
  • 54. Approches BDD IHM • Approche robot: FEST, … – Simulation au niveau interface réelle • Approche pattern MVP – Simulation au niveau présenteur
  • 55. MVP View « JavaBean » Mocked View Swing View Presenter Model get/set notify notify action •Problèmes •Manque de librairies de mock Swing •Manque de composants graphiques compatibles MVP
  • 56. 56 Conf IoC Swing Implémentation Swing Interfaces des vues SwingUiConfIoc
  • 57. 57 Mocking des vues pour les stories • Mocking avec Mockito • Comportement JavaBean Implémentation JavaBean mockée Interfaces des vues MockUiConfIoc
  • 58. 58 mockBean • Permet de donner un comportement JavaBean à une interface Une interface défini des getters/setters