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é
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
• …
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
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, …
• ….
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
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
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