Extreme Programming
Oxyl - ENSTA
2022/2023
Gaëtan Puget
gpuget@oxyl.fr
https://slides.com/gpuget/extreme-programming/live
https://github.com/gpuget/ExtremeProgramming
Programme
-
17/01 : Cours et planning
24/01 : Sprint 1
31/01 : Démo / Rétro
07/02 : Sprint 2
Évaluation sur les TP et la participation
Introduction
Les origines de l'XP
Cycle en V
Quels sont les problèmes ?
Cycle en V
- Temps entre l'analyse du besoin et la recette
- Changement de besoin
- Beaucoup de travail peut-être "pour rien"
- Ségrégation MOA/MOE
- 80% projets sont en retard
Pourquoi l'XP ?
Recevez 100 points d'expérience par itération !
Pourquoi l'XP ?
-
Les besoins sont affinés tout au long du projet
-
Adapté aux changements
-
-
Le client est directement impliqué
-
Meilleure visibilité
-
Mise en production régulière
-
Historique
- Projet C3, mise à jour du système de paie chez Chrysler (1996)
- Kent Beck, Ward Cunningham et Ron Jeffries
- Signataires du Manifest Agile en 2001
- Beck, pratique du TDD et JUnit
- Cunningham, créateur du concept de wiki
- Jeffries, ...
Formalisation
- Extreme Programming Explained: Embrace Change (Beck, 1999)
- Extreme Programming Installed (Jeffries, 2001)
- Extreme Programming Refactored: The Case Against XP (Stephens & Rosenberg, 2003)
Objectifs
- Projet orienté
produitclient - Résistance aux changements
- Qualité
- Réduction des coûts (moins de bugs, moins de travail inutile)
- Maîtrise des délais et de la satisfaction
Théorie
Qu'est-ce que l'XP ?
Valeurs de l'XP
- Communication
- Simplicité
- Feedback
- Courage
- Respect
Communication
Communication
- Transparence
- Contact humain
- Communication directe / intense
- Entre toutes les parties prenantes
- Client, managers, devs, etc.
Simplicité
Simplicité
- KISS (Keep It Simple, Stupid)
- YAGNI (You Ain't Gonna Need It)
- Ne pas anticiper
- Arriver rapidement au résultat
Feedback
Feedback
- Tests unitiares (fonctionnement du code)
- Tests fonctionnels (avancement du produit)
- Livraison fréquentes (itérations courtes)
- Meilleur pilotage
Courage
Courage
- Être honnête avec soi-même et ses collègues
- Être honnête sur l'état du projet
- Accepter le changement
- Accepter de jeter et recommencer
Respect
Respect
- Respect des autres
- Communication
- Pratiques (compilation, tests)
- Respect de soi-même
- Ne pas tout accepter
- Respecter ses engagements
Des valeurs à la pratiques
Pratiques collaboratives
Pratiques collaboratives
- Utilisation de métaphores
- Conventions de nommage/code
- Appropriation collective du code
- Intégration continue
Métaphores
-
Médium de communication
-
Outil de vulgarisation
-
Utilisations d'analogies et champs lexicaux
-
Améliore la communication
-
Aide au développement
-
Métaphores
-
Avantages
-
Simplification du domaine métier
-
Reformulation et précision
-
Association d'idées
-
-
Inconvénients
-
Pratique controversée
-
Peu documentée
-
Conventions de code
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
Martin Golding
Conventions de code
- Bonnes pratiques
- Uniformisation du code
- Maintenance facile (techniquement)
- Comparaison immédiate
Nommage des variables, documentation, indentation, architecture, etc.
Propritété collective du code
- Responsabilité partagée
- Connaissance globale (tout le projet)
- Connaissance partagée (par tout le monde)
- Maintenance facile (théoriquement)
Intégration continue
- Incorporation du nouveau code de manière systématique et automatique
- Vérification de la compilation
- Vérification des conventions de code
- Vérification des tests
- Notification aux développeurs
Intégration continue
Intégration continue
-
Avantages
-
Meilleure visibilité
-
Résolution des anomalies facilité (rapide et ciblé)
-
-
Inconvénients
-
Acceptation par l'équipe
-
Mise en place de l'architecture
-
TP1 - User Stories
User stories
-
Décrire
un usecaseune fonctionnalité -
Identifiant (unique)
-
Description
-
En tant que... (qui ?)
-
Je peux/veux... (quoi ?)
-
Pour/afin de... (pourquoi ?)
-
-
Valeur métier (estimation client)
-
Critères d'acceptation
INVEST
- Independant
- Negociable
- Valuable
- Estimable
- Small
- Testable
Consignes
- Former des groupes de 4-5 personnes
- Choisir un sujet
- Créer un projet github
- Créer une vingtaine de user stories
- brainstorming + regroupement
- INVEST
- valeur métier + critères d'acceptation
Exemple
User stories
Id | En tant que... | Je veux... | Pour... | Valeur métier |
---|---|---|---|---|
1 | joueur | voir mes cartes | choisir une action | 100 |
2 | spectateur | consulter les cartes d'un joueur | suivre le cours de la partie | 60 |
... | ... | ... | ... | ... |
Exemple
Critères d'acceptation
Ref | Étant donné(s)... | Quand... | Alors... |
---|---|---|---|
1 | un joueur sans carte | je ne lui donne aucune carte | il ne peut voir aucune carte |
1 | un joueur avec 1 carte | je lui donne une carte | il peut voir ses 2 cartes |
... | ... | ... | ... |
Sujets au choix
Casse-briquePongTetrisSnakeBataille navaleMorpion2048Bowling (historiquement)
Pratiques de pilotage
Pratiques de pilotage
- Client sur site
- Planning Poker
- Rythme soutenable
- Petites livraisons
- Tests de fonctionnels
Rappels : acteurs agiles
- Le client
- Le "Product Owner"
- Le "Scrum Master"
- Le reste de l'équipe (multidisciplinaire)
Client sur site
Client sur site
- Prise de décision
- Définition des exigences
- Définition des priorités
- Validation des avancées
Planning Poker
Planning Poker
- Estimer le coût des tâches (complexité ou temps)
- Préciser les tâches
- Ouvrir la discussion
- Estimer la vélocité (ce que pourra produire l'équipe)
Rythme soutenable
Rythme soutenable
-
Rester réaliste sur le contenu de l'itération
-
Alterner les périodes
-
de tension et de détente
-
nouvelles fonctionnalités et correctifs
-
Livraisons fréquentes
Charges répartie et risques amoindris
Tests d'acceptation
Tests d'acceptation
- Définis par des critères d'acceptation
- Effectués par le client
- Validés (ou non) par le client
TP2 - Planning Poker
Consignes
- Reprendre les user stories du TP1
- Faire des estimations (complexité)
- Répartir les tâches en 2 itérations (~ 2 x 3h30)
- Selon la valeur métier (priorité)
- Selon vos estimations
- Selon le livrable
Prendre en considération que vous allez coder en Java en binôme et effectuer des tests
Pratiques de développmeent
Pratiques de développement
- Programmation en binôme
- Conception simple
- Tests unitaires
- Refactoring
Programmation en binôme
Programmation en binôme
- Pilote : accès clavier, explique ce qu'il fait
- Co-pilote : assite, suggère des options
- Responsabilité communes de la qualité
- Complémentarité et divergeance
- Roulement des rôles et des paires
- Roulement des paires
Programmation en binôme
-
Avantages
-
Diffusion des connaissances
-
Amélioration de la communication
-
-
Inconvénients
-
Difficile à faire accepter
-
Besoin de proximité
-
Problème d'affinités et de bruits
-
Conception simple
Conception simple
-
KISS
-
Plus compréhensible
-
Plus maintenable
-
Qualitatif
-
-
YAGNI
-
Pas de perte de temps
-
Moins de chose (maintenance, documentation, complexité)
-
Quantitatif
-
Tests unitaires
Tests unitaires
- Guide de développement
- Assurance
- Retour immédiat
- Description de l'application
Refactoring
Refactoring
- Nettoyer le code
- Faire passer les tests
- Changer l'implémentation (mais pas le comportement)
- Restructurer par étapes
TP3 - TDD
Test Driven Development
- Écrire un test
- Faire échouer le test
- Faire le minimum pour faire passer le test
- Faire des améliorations sans changer le comportement
- Recommencer
Git
- Branche master
- Branche dev
- Branches feature
- Au moins 2 contributeurs
- Beaucoup de commit !
Si je fais une diapo dessus, c'est important ;)
Consignes
- Séance 1
- Réaliser les tâches de l'itération 1
- Faire une livraison
- Séance 2
- Réévaluer les tâches de l'itération 2
- Réaliser les tâches prévues
- Faire une seconde livraison
Présentation XP
By gpuget
Présentation XP
Cours sur les méthodes agiles Extreme Programming
- 251