2. 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.
5. 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. 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
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
15. 15
Slide qui part du V pour arriver sur une
boule
Software
Craftsmanship
Software
Factory
Agile
Toolse
t
Tests Factory
& Automation
Automation Deployment
& Monitoring
17. 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. 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. 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. 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. 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
23. 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é
26. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 36
BDD / TDD
public RetourVirement EffectuerVirement(int montant, Compte
compteDebiteur, Compte compteCrediteur)
{
compteDebiteur.Solde -= montant;
return RetourVirement.Ok;
}
37. 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. 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. 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. 40
BDD / TDD
public RetourVirement EffectuerVirement(int montant, Compte compteDebiteur, Compte compteCrediteur)
{
compteDebiteur.Solde -= montant;
compteCrediteur.Solde += montant;
return RetourVirement.Ok;
}
41. 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. 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 / 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. 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
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. 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. 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. 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. 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…
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.
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)
[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)
[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()
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.
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.
Nous pouvons maintenant écrire du code de test pour piloter / générer notre développement.
On écrit toutes les vérifications,
Les étapes du premier scénario sont prêtes, nous pouvons lancer le test.
Il ne devrait pas fonctionner.
Nous pouvons commencer le cycle de TDD pour implémenter le comportement.
Le virement doit pouvoir débiter le montant du compte A
Le test unitaire ne passe pas, il faut écrire du code de production pour le faire passer vert.
On écrit du code de production
Le test unitaire devrait fonctionner.
Nous pouvons relancer le test du scénario.
Il n’est toujours pas fonctionnel, il faut que le compte à créditer soit impacté.
Le virement doit pouvoir créditer le montant du compte B
Le test unitaire est Rouge mais le précédent est toujours Vert.
On écrit du code de production
On lance les tests.
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é.
Rappel des scénarios de la fonctionnalité.
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.
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.
Nous ajoutons le code de production pour faire passer le test.
Nous ajoutons un test unitaire pour le virement plafonné.
Nous ajoutons le code de production.
Nous relançons tous les tests.
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.