14.11.2017
Après s’être
organisé en tribus
d’indiens, AXA diffuse
BDD avec les 3 Amigos
Emilie-Anne Guerch – Emmanuel Lehmann
2
Emilie-Anne
GUERCH
coach agile
Emmanuel
LEHMANN
coach craft
Ma mission :
Accompagner les guildes d’AXA France dans le
cadre de la transformation en Feature Teams
d’AXA.
(Product Owner repentie qui a longtemps « écrit »
des BDD)
Ma mission :
Accompagner les tribus dans le cadre de la
transformation vers des pratiques DevOps.
3
13 octobre 2016
14 novembre 2017
4
Le contexte AXA en 2017
5
2011
Adoption de
l’Agile
à la DSI AXA
France
2014
2015-2016
2017
50% des équipes sont
agiles : des constats
qui nous permettent
d’aller plus loin
 Poursuivre la récurrence
des Feedback Métier
 Ancrer l’amélioration du
TTM
 L’agilité ne concerne que
l’équipe Dev/Test. Le
travail reste entier sur les
parties amont et aval.
Expérimentation
des Feature Teams:
l’agilité à l’échelle de
l’organisation
 Équipes agiles de bout en bout
pour limiter les délais
« handover »
 Cycles de développement plus
courts pour mieux répondre aux
ajustements des besoins
 Équipes produit autonomes et
polyvalentes (Business, DSI,
Ops) pour délivrer plus vite la
valeur
 Objectifs business clairs et
partagés pour délivrer les bons
produits
Déploiement des Feature
Team : ONE TEAM.
Expérimentation de
nouvelles pratiques
d’ingénierie
 Le rapprochement avec le
métier pour co-construire nos
produits
 L’amélioration continue de
l’efficacité des équipes
élargies
 Mise en place de nouvelles
pratiques d’ingénierie et
intégration des OPS aux
tribus.
6
Tribu Tribu
Squad Squad Squad Squad Squad Squad Squad Squad
PO / BA
Scrum
Master
Soft.
Eng
Testeurs
PO / BA
Scrum
Master
Soft.
Eng
Testeurs
PO / BA
Scrum
Master
Soft.
Eng
Testeurs
PO / BA
Scrum
Master
Soft.
Eng
Testeurs
PO / BA
Scrum
Master
Soft.
Eng
Testeurs
PO / BA
Scrum
Master
Soft.
Eng
Testeurs
PO / BA
Scrum
Master
Soft.
Eng
Testeurs
PO / BA
Scrum
Master
Soft.
Eng
Testeurs
Une nouvelle
organisation
orientée
« Produit »
Guilde
Dev
7
Nouvelles pratiques d’ingénierie
8
Focus sur
l’axe de
« Pratiques
d’ingénierie
»
Agile
Toolset Software
Craftsmanship
Automation
deployment
&
Monitoring
Software
Factory
Tests Factory
&
Automation
Nouvelles
Pratiques
d’Ingénierie
9
Sofware
Crafsmanship
Software
Factory
Janvier à Juin : 5 tribus
expérimentales
> Septembre : généralisation par vague
Agile
Toolset
1. Pratiques agiles généralisées
2. Plus de notion de contributeurs
3. Pratique 3 amigos
4. Pilotage par les indicateurs
Tests Factory
& Automation
Automation Deployment
& Monitoring
10
Sofware
Crafsmanship
Software
Factory
Janvier à Juin : 5 tribus
expérimentales
> Septembre : généralisation par vague
Agile
Toolset
1. Partage de règles de développement / Clean code
2. Revue de code / Maîtrise de la dette technique
3. Développement piloté par les tests (BDD / TDD)
4. Maitrise performance applicative et sécurité
Tests Factory
& Automation
Automation Deployment
& Monitoring
11
Sofware
Crafsmanship
Software
Factory
Janvier à Juin : 5 tribus
expérimentales
> Septembre : généralisation par vague
Agile
Toolset
1. Utilisation d’un gestionnaire de source (GIT ou SVN)
2. Outillage contrôle qualité
3. Outillage contrôle sécurité applicative
4. Outillage Tests automatisé intégré
Tests Factory
& Automation
Automation Deployment
& Monitoring
12
Sofware
Crafsmanship
Software
Factory
Janvier à Juin : 5 tribus
expérimentales
> Septembre : généralisation par vague
Agile
Toolset
1. Stratégie de tests définie
2. Pair testing
3. Automatisation des parcours clés
4. Intégration des tests à la PIC (bouchonnage et JDD)
Tests Factory
& Automation
Automation Deployment
& Monitoring
13
Sofware
Crafsmanship
Software
Factory
Janvier à Juin : 5 tribus
expérimentales
> Septembre : généralisation par vague
Agile
Toolset
1. OPS dédiés à la tribu
2. Déploiement automatisé via la PIC
3. Monitoring des services
4. Déploiement continu sans arrêt de service
Tests Factory
& Automation
Automation Deployment
& Monitoring
14
Les 3 amigos au cœur des nouvelles
pratiques
15
Slide qui part du V pour arriver sur une
boule
Software
Craftsmanship
Software
Factory
Agile
Toolse
t
Tests Factory
& Automation
Automation Deployment
& Monitoring
16
La
révélation
2017 - AXA France
C’est fou ! Quand on se parle, on comprend
mieux !
17
Comment
faisait-on
avant ?
PO
Recueille le
besoin
1
BA
Écrit le descriptif
de l'US
2
Equipe de développement
réalise la fonctionnalité
4
Equipe de test
écrit les cas de tests et la
campagne de test
5
Le testeur compare sa compréhension de la
fonctionnalité qui a été rédigé par ce que le
business analyst a compris de ce que le
Product owner a recueilli comme
besoin avec ce que le développeur
a compris de la fonctionnalité
qui a été rédigé par ce que le
business analyst a compris
de ce que le Product
owner a recueilli
comme besoin.
Testeur
écrit les BDD
3
6
Equipe de test
teste
18
PO / BA
recueillent le
besoin auprès
des experts
métier
Software
Craftsmanship
Software
Factory
Agile
Toolse
t
Tests Factory
& Automation
Automation Deployment
& Monitoring
PO / Dev / Testeur
découvrent et
spécifient le
besoin
Vision, objectifs
et capacité
Fonctionnalités
+ règles
+ liste scenarios
Equipe de développement
réalise la fonctionnalité
Equipe
teste la fonctionnalité
(basé sur les scenarios)
1 2
3
4
5
Les scenarios servent de
documentation et de
mesure du progrès
Rapports de
tests
(avancement)
19
PO / BA
recueillent le
besoin auprès
des experts
métier
Software
Craftsmanship
Software
Factory
Agile
Toolse
t
Tests Factory
& Automation
Automation Deployment
& Monitoring
Vision, objectifs
et capacité
Fonctionnalités
+ règles
+ liste scenarios
Equipe de développement
réalise la fonctionnalité
Equipe
teste la fonctionnalité
(basé sur les scenarios)
1
3
4
5
Les scenarios servent de
documentation et de
mesure du progrès
Rapports de
tests
(avancement)
20
Comment se
passe un
atelier 3
amigos ?
Celui qui connait le besoin
Celui qui va présenter le besoin
Celui qui va lister les règles (nommées)
Celui qui va expliquer les termes métier
PO ou
BA
Celui qui va implémenter​
Celui qui va identifier les briques / couches impactées
Celui qui va orienter les scénarios vers les couches à modifier
​Celui qui va demander des exemples valorisés​
Celui qui va demander des bouchons précis​
Dev
Celui qui va concevoir les cas de tests et faire le pair test
Celui qui va concevoir les JDD
Celui qui va concevoir les bouchons
Celui qui a une vision de la stratégie de testsTesteur
Attention :
Interdiction de sortir de l’atelier
tant que tout le monde n’a pas
compris ou n’est pas d’accord
sur l’exhaustivité des cas.
21
Nos conseils 1. Ne pas multiplier le nombre de règle par scénario
2. Ne pas utiliser d’élément IHM ou trop technique
3. Utiliser des outils
 Diagramme
 Tableau Excel
 WireFrame
4. Utiliser des exemples précis de la vraie vie
 Utiliser les persona
5. Example mapping
A la sortie de l’atelier :
• Les règles sont priorisées
Trouver les règles qui apportent le maximum de valeur
• Chaque règle fait l’objet d’au moins un exemple/scénario
22
Exemple
d’output d’un
atelier 3
amigos
Gestion des Virements
Virement simple Virement hors provision Virement plafonné
Solde Cpt Chèque = 500€
Solde Cpt Epargne = 0€
Vire 100€ Cpt Ch vers Cpt Ep
Solde Cpt Chèque = 400€
Solde Cpt Epargne = 100€
Virement Confirmé
Solde Cpt Chèque = 50€
Solde Cpt Epargne = 1000€
Vire 100€ Cpt Ch vers Cpt Ep
Solde Cpt Chèque = 50€
Solde Cpt Epargne = 1000€
Virement KO HORS PROVISION
Solde Cpt Chèque = 1000€
Solde Cpt Epargne = 0€
Limite virement = 500€
Vire 501€ Cpt Ch vers Cpt Ep
Solde Cpt Chèque = 1000€
Solde Cpt Epargne = 0€
Virement KO PLAFOND DEPASSE
23
Exemple
d’output d’un
atelier 3
amigos
Dans le but de pouvoir gérer mes comptes
En tant que client banque
Je souhaite pouvoir effectuer des virements entre mes comptes
RG1 : virement simple, je vire X€ d'un compte A vers le compte B,
le solde est impacté dans les deux comptes.
RG2 : virement hors provision, solde A insuffisant
RG3 : virement plafonné
Virement simple
• Solde Cpt Chèque =500€
• Solde Cpt Epargne =0€
 Vire 100€ Cpt Ch vers Cpt Ep
 Solde Cpt Chèque =400€
 Solde Cpt Epargne =100€
 Virement OK
Virement hors provision
• Solde Cpt Chèque =50€
• Solde Cpt Epargne =1000€
 Vire 100€ Cpt Ch vers Cpt Ep
 Solde Cpt Chèque =50€
 Solde Cpt Epargne =1000€
 Virement KO HORS PROVISION
Virement plafonné
• Solde Cpt Chèque =1000€
• Solde Cpt Epargne =0€
• Limite virement =500€
 Vire 501€ Cpt Ch vers Cpt Ep
 Solde Cpt Chèque =1000€
 Solde Cpt Epargne =0€
 Virement KO PLAFOND DEPASSE
@RG1
Scenario: Virement simple
Given j'ai un compte cheque avec un solde de 500€
Given j'ai un compte épargne avec un solde de 0€
When j'effectue un virement de 100€ du compte cheque vers le compte épargne
Then le solde du compte cheque est 400€
Then le solde du compte épargne est 100€
Then le virement est confirmé
@RG2
Scenario: Virement hors provision
Given j'ai un compte cheque avec un solde de 50€
Given j'ai un compte épargne avec un solde de 1000€
When j'effectue un virement de 100€ du compte cheque vers le compte épargne
Then le solde du compte cheque est 50€
Then le solde du compte épargne est 1000€
Then le virement est refusé pour motif hors provision
@RG3
Scenario: Virement plafonné
Given j'ai un compte cheque avec un solde de 1000€
Given j'ai un compte épargne avec un solde de 0€
Given la limite de virement est 500€
When j'effectue un virement de 501€ du compte cheque vers le compte épargne
Then le solde du compte cheque est 1000€
Then le solde du compte épargne est 0€
Then le virement est refusé pour motif plafond dépassé
24
BDD / TDD
25
Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
BDD / TDD
26
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Commen
t
[Given(@"j'ai un compte cheque avec un solde de (.*)€")]
public void GivenJAiUnCompteChequeAvecUnSoldeDe(int solde)
[Given(@"j'ai un compte épargne avec un solde de (.*)€")]
public void GivenJAiUnCompteEpargneAvecUnSoldeDe(int solde)
[Given(@"la limite de virement est (.*)€")]
public void GivenLaLimiteDeVirementEst(int limite)
27
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Commen
t
[When(@"j'effectue un virement de (.*)€ du compte cheque vers le compte épargne")]
public void WhenJEffectueUnVirementDeDuCompteChequeVersLeCompteEpargne(int montant)
[Then(@"le solde du compte cheque est (.*)€")]
public void ThenLeSoldeDuCompteChequeEst(int solde)
[Then(@"le solde du compte épargne est (.*)€")]
public void ThenLeSoldeDuCompteEpargneEst(int solde)
28
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Commen
t
[Then(@"le virement est confirmé")]
public void ThenLeVirementEstConfirme()
[Then(@"le virement est refusé pour motif hors provision")]
public void ThenLeVirementEstRefusePourMotifHorsProvision()
[Then(@"le virement est refusé pour motif plafond dépassé")]
public void ThenLeVirementEstRefusePourMotifPlafondDepasse()
29
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Ecrire du Code de Test
Commen
t
Compte CompteCheque = new Compte();
[Given(@"j'ai un compte cheque avec un solde de (.*)€")]
public void GivenJAiUnCompteChequeAvecUnSoldeDe(int solde)
{
CompteCheque.Solde = solde;
}
[Given(@"j'ai un compte épargne avec un solde de (.*)€")]
public void GivenJAiUnCompteEpargneAvecUnSoldeDe(int solde)
{
CompteEpargne.Solde = solde;
}
30
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Ecrire du Code de Test
Commen
t
[When(@"j'effectue un virement de (.*)€ du compte cheque vers le compte épargne")]
public void WhenJEffectueUnVirementDeDuCompteChequeVersLeCompteEpargne(int montant)
{
StatutVirement = srvVirement.EffectuerVirement(montant, CompteCheque, CompteEpargne);
}
ServiceVirement srvVirement = new ServiceVirement();
RetourVirement StatutVirement;
31
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Ecrire du Code de Test
Commen
t
[Then(@"le solde du compte cheque est (.*)€")]
public void ThenLeSoldeDuCompteChequeEst(int solde)
{
Assert.AreEqual(solde, CompteCheque.Solde);
}
[Then(@"le solde du compte épargne est (.*)€")]
public void ThenLeSoldeDuCompteEpargneEst(int solde)
{
Assert.AreEqual(solde, CompteEpargne.Solde);
}
[Then(@"le virement est confirmé")]
public void ThenLeVirementEstConfirme()
{
Assert.AreEqual(RetourVirement.Ok, StatutVirement);
}
32
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Ecrire du Code de Test
Commen
t
Roug
e
33
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Ecrire du Code de Test
Commen
t
Roug
e
Ecrire du Code
de Production
Ecrire du Code
De Tests Unitaires
TDD
34
BDD / TDD
[TestClass]
public class ServiceVirementDevrait
{
[TestMethod]
public void DebiterUnMontantDuCompteALorsDuVirement()
{
//Arrange
Compte A = new Compte();
A.Solde = 20;
Compte B = new Compte();
ServiceVirement srv = new ServiceVirement();
//Act
var retour = srv.EffectuerVirement(5, A, B);
//Assert
Assert.AreEqual(15, A.Solde);
Assert.AreEqual(RetourVirement.Ok, retour);
}
35
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Ecrire du Code de Test
Commen
t
Roug
e
Ecrire du Code
de Production
Ecrire du Code
De Tests Unitaires
TDD
36
BDD / TDD
public RetourVirement EffectuerVirement(int montant, Compte
compteDebiteur, Compte compteCrediteur)
{
compteDebiteur.Solde -= montant;
return RetourVirement.Ok;
}
37
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Ecrire du Code de Test
Commen
t
Roug
e
Ecrire du Code
de Production
Ecrire du Code
De Tests Unitaires
TDD
38
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Ecrire du Code de Test
Commen
t
Roug
e
Ecrire du Code
de Production
Ecrire du Code
De Tests Unitaires
TDD
39
BDD / TDD
[TestMethod]
public void CrediterUnMontantDuCompteBLorsDuVirement()
{
//Arrange
Compte A = new Compte();
A.Solde = 20;
Compte B = new Compte();
B.Solde = 5;
ServiceVirement srv = new ServiceVirement();
//Act
var retour = srv.EffectuerVirement(5, A, B);
//Assert
Assert.AreEqual(10, B.Solde);
Assert.AreEqual(RetourVirement.Ok, retour);
}
40
BDD / TDD
public RetourVirement EffectuerVirement(int montant, Compte compteDebiteur, Compte compteCrediteur)
{
compteDebiteur.Solde -= montant;
compteCrediteur.Solde += montant;
return RetourVirement.Ok;
}
41
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Ecrire du Code de Test
Commen
t
Roug
e
Ecrire du Code
de Production
Vert
Ecrire du Code
De Tests Unitaires
TDD
42
BDD / TDD @RG1
Scenario: Virement simple
Given j'ai un compte cheque avec un solde de 500€
Given j'ai un compte épargne avec un solde de 0€
When j'effectue un virement de 100€ du compte cheque vers le compte épargne
Then le solde du compte cheque est 400€
Then le solde du compte épargne est 100€
Then le virement est confirmé
@RG2
Scenario: Virement hors provision
Given j'ai un compte cheque avec un solde de 50€
Given j'ai un compte épargne avec un solde de 1000€
When j'effectue un virement de 100€ du compte cheque vers le compte épargne
Then le solde du compte cheque est 50€
Then le solde du compte épargne est 1000€
Then le virement est refusé pour motif hors provision
@RG3
Scenario: Virement plafonné
Given j'ai un compte cheque avec un solde de 1000€
Given j'ai un compte épargne avec un solde de 0€
Given la limite de virement est 500€
When j'effectue un virement de 501€ du compte cheque vers le compte épargne
Then le solde du compte cheque est 1000€
Then le solde du compte épargne est 0€
Then le virement est refusé pour motif plafond dépassé
43
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Ecrire du Code de Test
Commen
t
Roug
e
44
BDD / TDD [TestMethod]
public void
NePasDebiterUnMontantSuperieurAuSoldeDuCompteALorsDuVirement()
{
//Arrange
Compte A = new Compte();
A.Solde = 20;
Compte B = new Compte();
B.Solde = 5;
ServiceVirement srv = new ServiceVirement();
//Act
var retour = srv.EffectuerVirement(21, A, B);
//Assert
Assert.AreEqual(20, A.Solde);
Assert.AreEqual(5, B.Solde);
Assert.AreEqual(RetourVirement.SoldeDepasse, retour);
}
45
BDD / TDD
public RetourVirement EffectuerVirement(int montant, Compte compteDebiteur, Compte compteCrediteur)
{
if (montant > compteDebiteur.Solde)
{
return RetourVirement.SoldeDepasse;
}
compteDebiteur.Solde -= montant;
compteCrediteur.Solde += montant;
return RetourVirement.Ok;
}
46
BDD / TDD
[TestMethod]
public void
NePasDebiterUnMontantSuperieurAuPlafondLorsDuVirement()
{
//Arrange
Compte A = new Compte();
A.Solde = 20;
Compte B = new Compte();
B.Solde = 5;
ServiceVirement srv = new ServiceVirement();
srv.Plafond = 2;
//Act
var retour = srv.EffectuerVirement(5, A, B);
//Assert
Assert.AreEqual(20, A.Solde);
Assert.AreEqual(5, B.Solde);
Assert.AreEqual(RetourVirement.PlafondDepasse, retour);
}
47
BDD / TDD public class ServiceVirement
{
public int Plafond { get; internal set; }
public ServiceVirement()
{
//Todo : demander la limite de plafond par défaut
Plafond = 1000;
}
public RetourVirement EffectuerVirement(int montant, Compte compteDebiteur, Compte compteCrediteur)
{
if (montant > compteDebiteur.Solde)
{
return RetourVirement.SoldeDepasse;
}
if (montant > Plafond)
{
return RetourVirement.PlafondDepasse;
}
compteDebiteur.Solde -= montant;
compteCrediteur.Solde += montant;
return RetourVirement.Ok;
}
48
BDD / TDD Besoin
Fonctionnalité
User StoryScenarios
Etapes
(steps)
DEV + QSI +
PO
Pourquo
i
Qui
Quoi
Définition d’étapes
Ecrire du Code de Test
Commen
t
Roug
e
Ecrire du Code
de Production
Vert
Ecrire du Code
De Tests Unitaires
Refactoring
TDD
49
BDD / TDD
En résumé
En découvrant ensemble les scénarios et les
règles, nous bâtissons une compréhension
commune et forte
Les scénarios servent d’exemples pour piloter
le développement
Les scénarios sont attachés à des tests
automatisés qui démontrent l’avancement et
préviennent la régression
Les scénarios et règles documentent la
fonctionnalité de manière permanente et
vivante…
50
Pourquoi il faut vous y mettre ?
51
Efficace
et pas
cher
52
Sensibilisation des interlocuteurs métier et
direction
(2015)
53
Merci !
54
Teaser
55
adopteunamigos.com
Venez écrire des BDD avec nous
Conférence 1 à 14h

Diffusion de la méthode BDD chez AXA via les 3 amigos

  • 1.
    14.11.2017 Après s’être organisé entribus d’indiens, AXA diffuse BDD avec les 3 Amigos Emilie-Anne Guerch – Emmanuel Lehmann
  • 2.
    2 Emilie-Anne GUERCH coach agile Emmanuel LEHMANN coach craft Mamission : Accompagner les guildes d’AXA France dans le cadre de la transformation en Feature Teams d’AXA. (Product Owner repentie qui a longtemps « écrit » des BDD) Ma mission : Accompagner les tribus dans le cadre de la transformation vers des pratiques DevOps.
  • 3.
    3 13 octobre 2016 14novembre 2017
  • 4.
  • 5.
    5 2011 Adoption de l’Agile à laDSI AXA France 2014 2015-2016 2017 50% des équipes sont agiles : des constats qui nous permettent d’aller plus loin  Poursuivre la récurrence des Feedback Métier  Ancrer l’amélioration du TTM  L’agilité ne concerne que l’équipe Dev/Test. Le travail reste entier sur les parties amont et aval. Expérimentation des Feature Teams: l’agilité à l’échelle de l’organisation  Équipes agiles de bout en bout pour limiter les délais « handover »  Cycles de développement plus courts pour mieux répondre aux ajustements des besoins  Équipes produit autonomes et polyvalentes (Business, DSI, Ops) pour délivrer plus vite la valeur  Objectifs business clairs et partagés pour délivrer les bons produits Déploiement des Feature Team : ONE TEAM. Expérimentation de nouvelles pratiques d’ingénierie  Le rapprochement avec le métier pour co-construire nos produits  L’amélioration continue de l’efficacité des équipes élargies  Mise en place de nouvelles pratiques d’ingénierie et intégration des OPS aux tribus.
  • 6.
    6 Tribu Tribu Squad SquadSquad Squad Squad Squad Squad Squad PO / BA Scrum Master Soft. Eng Testeurs PO / BA Scrum Master Soft. Eng Testeurs PO / BA Scrum Master Soft. Eng Testeurs PO / BA Scrum Master Soft. Eng Testeurs PO / BA Scrum Master Soft. Eng Testeurs PO / BA Scrum Master Soft. Eng Testeurs PO / BA Scrum Master Soft. Eng Testeurs PO / BA Scrum Master Soft. Eng Testeurs Une nouvelle organisation orientée « Produit » Guilde Dev
  • 7.
  • 8.
    8 Focus sur l’axe de «Pratiques d’ingénierie » Agile Toolset Software Craftsmanship Automation deployment & Monitoring Software Factory Tests Factory & Automation Nouvelles Pratiques d’Ingénierie
  • 9.
    9 Sofware Crafsmanship Software Factory Janvier à Juin: 5 tribus expérimentales > Septembre : généralisation par vague Agile Toolset 1. Pratiques agiles généralisées 2. Plus de notion de contributeurs 3. Pratique 3 amigos 4. Pilotage par les indicateurs Tests Factory & Automation Automation Deployment & Monitoring
  • 10.
    10 Sofware Crafsmanship Software Factory Janvier à Juin: 5 tribus expérimentales > Septembre : généralisation par vague Agile Toolset 1. Partage de règles de développement / Clean code 2. Revue de code / Maîtrise de la dette technique 3. Développement piloté par les tests (BDD / TDD) 4. Maitrise performance applicative et sécurité Tests Factory & Automation Automation Deployment & Monitoring
  • 11.
    11 Sofware Crafsmanship Software Factory Janvier à Juin: 5 tribus expérimentales > Septembre : généralisation par vague Agile Toolset 1. Utilisation d’un gestionnaire de source (GIT ou SVN) 2. Outillage contrôle qualité 3. Outillage contrôle sécurité applicative 4. Outillage Tests automatisé intégré Tests Factory & Automation Automation Deployment & Monitoring
  • 12.
    12 Sofware Crafsmanship Software Factory Janvier à Juin: 5 tribus expérimentales > Septembre : généralisation par vague Agile Toolset 1. Stratégie de tests définie 2. Pair testing 3. Automatisation des parcours clés 4. Intégration des tests à la PIC (bouchonnage et JDD) Tests Factory & Automation Automation Deployment & Monitoring
  • 13.
    13 Sofware Crafsmanship Software Factory Janvier à Juin: 5 tribus expérimentales > Septembre : généralisation par vague Agile Toolset 1. OPS dédiés à la tribu 2. Déploiement automatisé via la PIC 3. Monitoring des services 4. Déploiement continu sans arrêt de service Tests Factory & Automation Automation Deployment & Monitoring
  • 14.
    14 Les 3 amigosau cœur des nouvelles pratiques
  • 15.
    15 Slide qui partdu V pour arriver sur une boule Software Craftsmanship Software Factory Agile Toolse t Tests Factory & Automation Automation Deployment & Monitoring
  • 16.
    16 La révélation 2017 - AXAFrance C’est fou ! Quand on se parle, on comprend mieux !
  • 17.
    17 Comment faisait-on avant ? PO Recueille le besoin 1 BA Écritle descriptif de l'US 2 Equipe de développement réalise la fonctionnalité 4 Equipe de test écrit les cas de tests et la campagne de test 5 Le testeur compare sa compréhension de la fonctionnalité qui a été rédigé par ce que le business analyst a compris de ce que le Product owner a recueilli comme besoin avec ce que le développeur a compris de la fonctionnalité qui a été rédigé par ce que le business analyst a compris de ce que le Product owner a recueilli comme besoin. Testeur écrit les BDD 3 6 Equipe de test teste
  • 18.
    18 PO / BA recueillentle besoin auprès des experts métier Software Craftsmanship Software Factory Agile Toolse t Tests Factory & Automation Automation Deployment & Monitoring PO / Dev / Testeur découvrent et spécifient le besoin Vision, objectifs et capacité Fonctionnalités + règles + liste scenarios Equipe de développement réalise la fonctionnalité Equipe teste la fonctionnalité (basé sur les scenarios) 1 2 3 4 5 Les scenarios servent de documentation et de mesure du progrès Rapports de tests (avancement)
  • 19.
    19 PO / BA recueillentle besoin auprès des experts métier Software Craftsmanship Software Factory Agile Toolse t Tests Factory & Automation Automation Deployment & Monitoring Vision, objectifs et capacité Fonctionnalités + règles + liste scenarios Equipe de développement réalise la fonctionnalité Equipe teste la fonctionnalité (basé sur les scenarios) 1 3 4 5 Les scenarios servent de documentation et de mesure du progrès Rapports de tests (avancement)
  • 20.
    20 Comment se passe un atelier3 amigos ? Celui qui connait le besoin Celui qui va présenter le besoin Celui qui va lister les règles (nommées) Celui qui va expliquer les termes métier PO ou BA Celui qui va implémenter​ Celui qui va identifier les briques / couches impactées Celui qui va orienter les scénarios vers les couches à modifier ​Celui qui va demander des exemples valorisés​ Celui qui va demander des bouchons précis​ Dev Celui qui va concevoir les cas de tests et faire le pair test Celui qui va concevoir les JDD Celui qui va concevoir les bouchons Celui qui a une vision de la stratégie de testsTesteur Attention : Interdiction de sortir de l’atelier tant que tout le monde n’a pas compris ou n’est pas d’accord sur l’exhaustivité des cas.
  • 21.
    21 Nos conseils 1.Ne pas multiplier le nombre de règle par scénario 2. Ne pas utiliser d’élément IHM ou trop technique 3. Utiliser des outils  Diagramme  Tableau Excel  WireFrame 4. Utiliser des exemples précis de la vraie vie  Utiliser les persona 5. Example mapping A la sortie de l’atelier : • Les règles sont priorisées Trouver les règles qui apportent le maximum de valeur • Chaque règle fait l’objet d’au moins un exemple/scénario
  • 22.
    22 Exemple d’output d’un atelier 3 amigos Gestiondes Virements Virement simple Virement hors provision Virement plafonné Solde Cpt Chèque = 500€ Solde Cpt Epargne = 0€ Vire 100€ Cpt Ch vers Cpt Ep Solde Cpt Chèque = 400€ Solde Cpt Epargne = 100€ Virement Confirmé Solde Cpt Chèque = 50€ Solde Cpt Epargne = 1000€ Vire 100€ Cpt Ch vers Cpt Ep Solde Cpt Chèque = 50€ Solde Cpt Epargne = 1000€ Virement KO HORS PROVISION Solde Cpt Chèque = 1000€ Solde Cpt Epargne = 0€ Limite virement = 500€ Vire 501€ Cpt Ch vers Cpt Ep Solde Cpt Chèque = 1000€ Solde Cpt Epargne = 0€ Virement KO PLAFOND DEPASSE
  • 23.
    23 Exemple d’output d’un atelier 3 amigos Dansle but de pouvoir gérer mes comptes En tant que client banque Je souhaite pouvoir effectuer des virements entre mes comptes RG1 : virement simple, je vire X€ d'un compte A vers le compte B, le solde est impacté dans les deux comptes. RG2 : virement hors provision, solde A insuffisant RG3 : virement plafonné Virement simple • Solde Cpt Chèque =500€ • Solde Cpt Epargne =0€  Vire 100€ Cpt Ch vers Cpt Ep  Solde Cpt Chèque =400€  Solde Cpt Epargne =100€  Virement OK Virement hors provision • Solde Cpt Chèque =50€ • Solde Cpt Epargne =1000€  Vire 100€ Cpt Ch vers Cpt Ep  Solde Cpt Chèque =50€  Solde Cpt Epargne =1000€  Virement KO HORS PROVISION Virement plafonné • Solde Cpt Chèque =1000€ • Solde Cpt Epargne =0€ • Limite virement =500€  Vire 501€ Cpt Ch vers Cpt Ep  Solde Cpt Chèque =1000€  Solde Cpt Epargne =0€  Virement KO PLAFOND DEPASSE @RG1 Scenario: Virement simple Given j'ai un compte cheque avec un solde de 500€ Given j'ai un compte épargne avec un solde de 0€ When j'effectue un virement de 100€ du compte cheque vers le compte épargne Then le solde du compte cheque est 400€ Then le solde du compte épargne est 100€ Then le virement est confirmé @RG2 Scenario: Virement hors provision Given j'ai un compte cheque avec un solde de 50€ Given j'ai un compte épargne avec un solde de 1000€ When j'effectue un virement de 100€ du compte cheque vers le compte épargne Then le solde du compte cheque est 50€ Then le solde du compte épargne est 1000€ Then le virement est refusé pour motif hors provision @RG3 Scenario: Virement plafonné Given j'ai un compte cheque avec un solde de 1000€ Given j'ai un compte épargne avec un solde de 0€ Given la limite de virement est 500€ When j'effectue un virement de 501€ du compte cheque vers le compte épargne Then le solde du compte cheque est 1000€ Then le solde du compte épargne est 0€ Then le virement est refusé pour motif plafond dépassé
  • 24.
  • 25.
  • 26.
    26 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Commen t [Given(@"j'ai un compte cheque avec un solde de (.*)€")] public void GivenJAiUnCompteChequeAvecUnSoldeDe(int solde) [Given(@"j'ai un compte épargne avec un solde de (.*)€")] public void GivenJAiUnCompteEpargneAvecUnSoldeDe(int solde) [Given(@"la limite de virement est (.*)€")] public void GivenLaLimiteDeVirementEst(int limite)
  • 27.
    27 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Commen t [When(@"j'effectue un virement de (.*)€ du compte cheque vers le compte épargne")] public void WhenJEffectueUnVirementDeDuCompteChequeVersLeCompteEpargne(int montant) [Then(@"le solde du compte cheque est (.*)€")] public void ThenLeSoldeDuCompteChequeEst(int solde) [Then(@"le solde du compte épargne est (.*)€")] public void ThenLeSoldeDuCompteEpargneEst(int solde)
  • 28.
    28 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Commen t [Then(@"le virement est confirmé")] public void ThenLeVirementEstConfirme() [Then(@"le virement est refusé pour motif hors provision")] public void ThenLeVirementEstRefusePourMotifHorsProvision() [Then(@"le virement est refusé pour motif plafond dépassé")] public void ThenLeVirementEstRefusePourMotifPlafondDepasse()
  • 29.
    29 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Ecrire du Code de Test Commen t Compte CompteCheque = new Compte(); [Given(@"j'ai un compte cheque avec un solde de (.*)€")] public void GivenJAiUnCompteChequeAvecUnSoldeDe(int solde) { CompteCheque.Solde = solde; } [Given(@"j'ai un compte épargne avec un solde de (.*)€")] public void GivenJAiUnCompteEpargneAvecUnSoldeDe(int solde) { CompteEpargne.Solde = solde; }
  • 30.
    30 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Ecrire du Code de Test Commen t [When(@"j'effectue un virement de (.*)€ du compte cheque vers le compte épargne")] public void WhenJEffectueUnVirementDeDuCompteChequeVersLeCompteEpargne(int montant) { StatutVirement = srvVirement.EffectuerVirement(montant, CompteCheque, CompteEpargne); } ServiceVirement srvVirement = new ServiceVirement(); RetourVirement StatutVirement;
  • 31.
    31 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Ecrire du Code de Test Commen t [Then(@"le solde du compte cheque est (.*)€")] public void ThenLeSoldeDuCompteChequeEst(int solde) { Assert.AreEqual(solde, CompteCheque.Solde); } [Then(@"le solde du compte épargne est (.*)€")] public void ThenLeSoldeDuCompteEpargneEst(int solde) { Assert.AreEqual(solde, CompteEpargne.Solde); } [Then(@"le virement est confirmé")] public void ThenLeVirementEstConfirme() { Assert.AreEqual(RetourVirement.Ok, StatutVirement); }
  • 32.
    32 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Ecrire du Code de Test Commen t Roug e
  • 33.
    33 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Ecrire du Code de Test Commen t Roug e Ecrire du Code de Production Ecrire du Code De Tests Unitaires TDD
  • 34.
    34 BDD / TDD [TestClass] publicclass ServiceVirementDevrait { [TestMethod] public void DebiterUnMontantDuCompteALorsDuVirement() { //Arrange Compte A = new Compte(); A.Solde = 20; Compte B = new Compte(); ServiceVirement srv = new ServiceVirement(); //Act var retour = srv.EffectuerVirement(5, A, B); //Assert Assert.AreEqual(15, A.Solde); Assert.AreEqual(RetourVirement.Ok, retour); }
  • 35.
    35 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Ecrire du Code de Test Commen t Roug e Ecrire du Code de Production Ecrire du Code De Tests Unitaires TDD
  • 36.
    36 BDD / TDD publicRetourVirement EffectuerVirement(int montant, Compte compteDebiteur, Compte compteCrediteur) { compteDebiteur.Solde -= montant; return RetourVirement.Ok; }
  • 37.
    37 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Ecrire du Code de Test Commen t Roug e Ecrire du Code de Production Ecrire du Code De Tests Unitaires TDD
  • 38.
    38 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Ecrire du Code de Test Commen t Roug e Ecrire du Code de Production Ecrire du Code De Tests Unitaires TDD
  • 39.
    39 BDD / TDD [TestMethod] publicvoid CrediterUnMontantDuCompteBLorsDuVirement() { //Arrange Compte A = new Compte(); A.Solde = 20; Compte B = new Compte(); B.Solde = 5; ServiceVirement srv = new ServiceVirement(); //Act var retour = srv.EffectuerVirement(5, A, B); //Assert Assert.AreEqual(10, B.Solde); Assert.AreEqual(RetourVirement.Ok, retour); }
  • 40.
    40 BDD / TDD publicRetourVirement EffectuerVirement(int montant, Compte compteDebiteur, Compte compteCrediteur) { compteDebiteur.Solde -= montant; compteCrediteur.Solde += montant; return RetourVirement.Ok; }
  • 41.
    41 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Ecrire du Code de Test Commen t Roug e Ecrire du Code de Production Vert Ecrire du Code De Tests Unitaires TDD
  • 42.
    42 BDD / TDD@RG1 Scenario: Virement simple Given j'ai un compte cheque avec un solde de 500€ Given j'ai un compte épargne avec un solde de 0€ When j'effectue un virement de 100€ du compte cheque vers le compte épargne Then le solde du compte cheque est 400€ Then le solde du compte épargne est 100€ Then le virement est confirmé @RG2 Scenario: Virement hors provision Given j'ai un compte cheque avec un solde de 50€ Given j'ai un compte épargne avec un solde de 1000€ When j'effectue un virement de 100€ du compte cheque vers le compte épargne Then le solde du compte cheque est 50€ Then le solde du compte épargne est 1000€ Then le virement est refusé pour motif hors provision @RG3 Scenario: Virement plafonné Given j'ai un compte cheque avec un solde de 1000€ Given j'ai un compte épargne avec un solde de 0€ Given la limite de virement est 500€ When j'effectue un virement de 501€ du compte cheque vers le compte épargne Then le solde du compte cheque est 1000€ Then le solde du compte épargne est 0€ Then le virement est refusé pour motif plafond dépassé
  • 43.
    43 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Ecrire du Code de Test Commen t Roug e
  • 44.
    44 BDD / TDD[TestMethod] public void NePasDebiterUnMontantSuperieurAuSoldeDuCompteALorsDuVirement() { //Arrange Compte A = new Compte(); A.Solde = 20; Compte B = new Compte(); B.Solde = 5; ServiceVirement srv = new ServiceVirement(); //Act var retour = srv.EffectuerVirement(21, A, B); //Assert Assert.AreEqual(20, A.Solde); Assert.AreEqual(5, B.Solde); Assert.AreEqual(RetourVirement.SoldeDepasse, retour); }
  • 45.
    45 BDD / TDD publicRetourVirement EffectuerVirement(int montant, Compte compteDebiteur, Compte compteCrediteur) { if (montant > compteDebiteur.Solde) { return RetourVirement.SoldeDepasse; } compteDebiteur.Solde -= montant; compteCrediteur.Solde += montant; return RetourVirement.Ok; }
  • 46.
    46 BDD / TDD [TestMethod] publicvoid NePasDebiterUnMontantSuperieurAuPlafondLorsDuVirement() { //Arrange Compte A = new Compte(); A.Solde = 20; Compte B = new Compte(); B.Solde = 5; ServiceVirement srv = new ServiceVirement(); srv.Plafond = 2; //Act var retour = srv.EffectuerVirement(5, A, B); //Assert Assert.AreEqual(20, A.Solde); Assert.AreEqual(5, B.Solde); Assert.AreEqual(RetourVirement.PlafondDepasse, retour); }
  • 47.
    47 BDD / TDDpublic class ServiceVirement { public int Plafond { get; internal set; } public ServiceVirement() { //Todo : demander la limite de plafond par défaut Plafond = 1000; } public RetourVirement EffectuerVirement(int montant, Compte compteDebiteur, Compte compteCrediteur) { if (montant > compteDebiteur.Solde) { return RetourVirement.SoldeDepasse; } if (montant > Plafond) { return RetourVirement.PlafondDepasse; } compteDebiteur.Solde -= montant; compteCrediteur.Solde += montant; return RetourVirement.Ok; }
  • 48.
    48 BDD / TDDBesoin Fonctionnalité User StoryScenarios Etapes (steps) DEV + QSI + PO Pourquo i Qui Quoi Définition d’étapes Ecrire du Code de Test Commen t Roug e Ecrire du Code de Production Vert Ecrire du Code De Tests Unitaires Refactoring TDD
  • 49.
    49 BDD / TDD Enrésumé En découvrant ensemble les scénarios et les règles, nous bâtissons une compréhension commune et forte Les scénarios servent d’exemples pour piloter le développement Les scénarios sont attachés à des tests automatisés qui démontrent l’avancement et préviennent la régression Les scénarios et règles documentent la fonctionnalité de manière permanente et vivante…
  • 50.
    50 Pourquoi il fautvous y mettre ?
  • 51.
  • 52.
    52 Sensibilisation des interlocuteursmétier et direction (2015)
  • 53.
  • 54.
  • 55.
    55 adopteunamigos.com Venez écrire desBDD avec nous Conférence 1 à 14h

Notes de l'éditeur

  • #6 EA
  • #26 Les scénarios sont trié par priorité et regroupés pour former des User Story INVEST On peut maintenant passer au développement en TDD du virement simple.
  • #27 On écrit ou génère chaque définition d’étape pour le lier à une méthode, fonction [Given(@"j'ai un compte cheque avec un solde de (.*)€")] public void GivenJAiUnCompteChequeAvecUnSoldeDe(int solde) [Given(@"j'ai un compte épargne avec un solde de (.*)€")] public void GivenJAiUnCompteEpargneAvecUnSoldeDe(int solde) [Given(@"la limite de virement est (.*)€")] public void GivenLaLimiteDeVirementEst(int limite)
  • #28 [When(@"j'effectue un virement de (.*)€ du compte cheque vers le compte épargne")] public void WhenJEffectueUnVirementDeDuCompteChequeVersLeCompteEpargne(int montant) [Then(@"le solde du compte cheque est (.*)€")] public void ThenLeSoldeDuCompteChequeEst(int solde) [Then(@"le solde du compte épargne est (.*)€")] public void ThenLeSoldeDuCompteEpargneEst(int solde)
  • #29 [Then(@"le virement est confirmé")] public void ThenLeVirementEstConfirme() [Then(@"le virement est refusé pour motif hors provision")] public void ThenLeVirementEstRefusePourMotifHorsProvision() [Then(@"le virement est refusé pour motif plafond dépassé")] public void ThenLeVirementEstRefusePourMotifPlafondDepasse()
  • #30 Nous pouvons maintenant écrire du code de test pour piloter / générer notre développement. Si possible, écrire du code le plus simple possible pour chaque étape.
  • #31 Nous pouvons maintenant écrire du code de test pour piloter / générer notre développement. En général, seul ce bout de code ne suffira pas mais on ne va pas plus loin pour l’instant.
  • #32 Nous pouvons maintenant écrire du code de test pour piloter / générer notre développement. On écrit toutes les vérifications,
  • #33 Les étapes du premier scénario sont prêtes, nous pouvons lancer le test. Il ne devrait pas fonctionner.
  • #34 Nous pouvons commencer le cycle de TDD pour implémenter le comportement.
  • #35 Le virement doit pouvoir débiter le montant du compte A
  • #36 Le test unitaire ne passe pas, il faut écrire du code de production pour le faire passer vert.
  • #37 On écrit du code de production
  • #38 Le test unitaire devrait fonctionner.
  • #39 Nous pouvons relancer le test du scénario. Il n’est toujours pas fonctionnel, il faut que le compte à créditer soit impacté.
  • #40 Le virement doit pouvoir créditer le montant du compte B Le test unitaire est Rouge mais le précédent est toujours Vert.
  • #41 On écrit du code de production On lance les tests.
  • #42 Le test unitaire passe vert. Le précédent test unitaire l’est toujours (pas de régression) Le scénario passe vert. On peut archiver le scénario dans le code source pour livrer au plus vite. Nous pouvons donner un état d’avancement précis sur le développement de la fonctionnalité : le virement simple est implémenté, il reste le virement hors provision et le virement plafonné.
  • #43 Rappel des scénarios de la fonctionnalité.
  • #44 On peut lancer les deux autres scénarios, au cas où le premier scénario aurait permis de les valider. Le virement hors provision ne fonctionne : le compte débiteur est passé en négatif.
  • #45 Le virement doit pouvoir créditer le montant du compte B. Le test unitaire est rouge, nous pouvons écrire le code simple pour le faire passer vert.
  • #46 Nous ajoutons le code de production pour faire passer le test.
  • #47 Nous ajoutons un test unitaire pour le virement plafonné.
  • #48 Nous ajoutons le code de production. Nous relançons tous les tests.
  • #49 Tous les tests sont passés au vert, les tests unitaires et scénarios. Nous pouvons archiver la fonctionnalité. Nous pouvons sereinement améliorer le design de notre code par des session de refactoring vu que la fonctionnalité est entièrement testée. Une fois le code prêt, nous l’archivons pour le soumettre à une revue de code.