# Agilité dans l'embarqué ## État des lieux des méthodes de génie logiciel - Coût élevé de développement logiciel : - Taille et complexité du projet - Besoins utilisateurs en constante évolution | | Nombre de journées / homme | Cout du projet en euros (~500€/j) | | -------- | -------- | -------- | | Petit projet | 20 à 100 j/h | | | Moyen projet | 100 à 500 j/h | | | Gros projet | > 500 j/h | | ### Réussite des projets Projet réussi = QCD : **Q**ualité, **C**oût, **D**élais (~30%) Challenged = Projets terminés (~50%) Failed = abandonnés (~20%) Dans un produit, 7% des fonctionnalités sont toujours utilisées, contre 45% qui ne sont jamais utilisées. Avant les méthodes agiles, on travaillait sur des méthodes prédictives : on prévoyait la durée, les coûts, la qualité ex : - Cycle en V (Analyse, Spec, Conception, Développement, TU, TI, TV, recette) - Cycle en cascade (Requirement analysis, design, development, testing, maintenance) ### Avantages : - Clarté des responsabilités de chacun - Netteté du périètre de chacune des étapes - Adapté si bombreux interlocuteurs ; le verrouillage de chaque étape nécessite l'adhésion de tous - Garantie du respect des besoins validés au départ du projet - Respect du planning et du budget validés au lancement - Garantie de la Qualité ### Inconvénients : - Avantages pas toujours au rendez-vous - Effet tunnel - Impossible de prendre en compte des nouveaux besoins en cours de route sans exploser le délai et les budgets, voire remettre en cause la conception ## Les méthodes Agiles Les méthodes Agiles se veulent plus pragmatiques que les méthodes "traditionnelles". Impliquent au maximum le demandeur (client) et permettent une grande réactivité à ses demandes Elles visent la satisfaction réelle du besoin du client et non les termes d'un contrat de développement ### Le manifeste Agile En 2001, 17 figures éminentes du développement logiciel se sont réunies pour débattre du thème unificateur de leurs méthodes respectives, dites méthodes agiles. - Mettre en oeuvre des individualités et des intéractions plutôt que des procédés et des outils. - Produire un logiciel entirèrement testé et qui fonctionne plutôt qu'une docuentation claire *lol*. - Collaborer avec le client, plutôt que de négocier un contrat --> client = partenaire - Répondre aux modifications, plutot que suivre un plan. 12 principes pour les méthodes Agiles : 1. Notre plus haute priorité est de satisfaire le client en livrant rapidement et régulièrement des fonctionnalité sà grande valeur ajoutée 2. Accueuillez positivement les changements de besoins, même tard dans le projet. Les processus agiles exploitent le changement pour donner un avantage compétitif au client 3. Livrer fréquemment un logiciel oppérationnel avec des cyclces de quelques semaines à quelques mois et une préférence pour les plus courts 4. Clients et développeurs doivent travailler ensemble 5. Réaliser les projets vaec des personnes motivées, Fournir un environnement et un soutient dont elles ont besoin et leur faire confiance pour atteindre le objectifs fixés 6. La méthode la plus simple et la plus efficace pour transmettre d l'information à l'équipe de dev et à l'intérireur de celle-ci est le dialogue en face à face 7. Un logiciel opérationnel est la principale mesure d'avancement. 8. Les processus agiles encourangent un rythme de développement **soutenable**. Ensemble, les commanditaire, les développeurs et les utilisateurs devraient être capables de maintenir un rythme de développement constant. 9. Une attention continuel'excellence techinque et à une bonne conception renforce l'agilité 10. La somplicité (art de minimiser la quantité de travail inutile) est essentielle. 11. Les meilleurs architectures, spécifications et conceptions émergent d'équipes auto-organisées 12. A intervalles réguliers, l'équipe réfléchit aux moyens de devenir plus efficace, puis règle et modifie son comportement en conséquence. Plusieurs méthodes de développement Agile : - Extreme Programming (XP) - SCRUM - Kanban - Lean Développement agile / adaptatif : **Développement loficiel itératif centré sur les personnes** et qui met l'accent sur **la satisfaction du client** à travers l'**intégration continue d'un logiciel entièrement fonctionnel**. ## La méthode SCRUM ### Approche Crée en 2002, son nom est un terme emprunté au rugby qui signifie "la mêlée". Elle s'appuie sur le découpage des projets en itérations nommées "sprints". ### Process "Faire petit" - Permet une meilleure compréhension - Meilleure estimation - Meilleur suivi - Validation plus aisée - Permet de limiter les risques "Faire complet" - Toutes les étapes (spec, conception, codage, intégration, tests), à chaque "sprint" - Logiciel montrable au client et qui fonctionne - Ne pas revenir sur ce qui est fait ### Rôles ## Synthèse sur les pratiques agiles