# Conception agile de projet informatique CM01 ###### tags: `agile` `2023` https://valentin.lachand.net/teaching/2022/conception-projet-agile-2022 7 TD 4x2h CM 50% note sur exam final 50% note sur projet (rendu + rapport) ## I. Génie logiciel * Définition : Ensemble de méthodes et outils pour la production et mainteance de composant logiciels de qualité * Pourquoi ? : Logiciel de + en + gros, techno en évolution et archi multiples * Principes : Rigueur, séparation des problèmes, modularité, abstraction, prévoir le changement, généricité, incrément ## II. Un bon logiciel ### Qualité : * Facteurs externes : * Correction : répond au besoin * Utilisabilité : facilité d'apprentissage, préparation des données, correction des erreurs et interprétation des retours * Robustesse : fiabilité, fonctionne dans des conditions non prévues au cahier des charges * Compatibilité : combiné avec d'autres * Extensibilité: : facilité d'ajout de fonction * Efficacité : utilisation optimal des ressources matérielles, proco, mémoire, réseau * Intégrité : sécurité, protection contre accès non autorisés * Facteurs internes : * Ré-utilisabilité (réutilisation du logiciel, composant) * Vérifiabilité (logiciel à tester) * Portabilité (différents environnements logiciels et matériels) * Lisibilité : respect des conventions et commentaires pour bloc compliqué, documentation * Modularité : code en module, composant ## III. Projet et différents acteurs ### Un projet : Ensemble d'actions à entreprendre afin de répondre à un besoin défini, dans un délai fixé, mobilisant ressources humaines et matérielles et possédant un coût. ### Acteurs du projet * Maître d'ouvrage (MOA) : personne physique ou morale propriétaire de l'ouvrage. Détermine objectifs, budget et délais. * Maître d'oeuvre (MOE) : personne physique ou moral qui reçoit mission et assure la conception et réalisation. ## IV. Conduire un projet Organisation méthodique mise en oeuvre pour que l'ouvrage réalisé par le MOE réponde au MOA. ### Direction de projet : * Gestion des gens : organisation, communication, animation * Gestion technique : objectifs, méthode, qualité * Gestion de moyens : planification, contrôle, coûts et délais * Prise de décision : analyse, reporting et synthèse. ### Projet logiciel : Comment piloter un projet ? ### Cycle de vie d'un logiciel : De la spécification à la maintenance et exploitation. 1. Organiser les différentes phases. 2. Guider le développement 3. Assurer la maintenance ## V. Modèles de cycle de vie Modèle linéaire : Cascades et variantes (modèle en V) Modèles non-linéaire : spirale, incrémentaux ### Cascade : Flot descendant, retour limité, validation par reviews. => Echecs sur gros systèmes : délais long, test à la fin et difficulté à se tenir aux besoins. ### Modèle en V Variante de la cascade Tests bien structurés Hiérarchisation du système Validation finale tardive (coûteuse en cas d'erreur) Variante : W (valider maquette avant conception) ### Anti-cascade : Feedback et adaptation (reconnaître les changements) Construction par incréments, gestion des risques, culture produit à culture projet et souplesse ### Modèle en spirale : Boucle de : Construction, vérifi, identification et eval. => figement progressif ## VI. Méthodes * Guide plus ou moins formalisé * Capitaliser : experiences sur projets antérieurs et règles dans le domaine du problème * Méthode définit : concept de modélisation, chrono des activités, ensemble de règles * Description d'une méthode : gens, activités, résultats ### Méthodes agiles : * Adaptatives : * itérations courtes (sprint) * Lien fort avec client * Fixer délais et coût mais pas la portée (rendu final) * Insistance sur les dev : * Spécialiste mais pas unité interchangeables * Communication humaine * Equipes auto-organisés * Auto-adaptatif : * Révision du processus à chaque itération ## VII. Developpement logiciel et activités ### 1. Spécification des besoins Fondamentale mais difficile * Informaticiens au service du client * Exigences : fonctionnele (à quoi sert), non-fonctionnelle (performance) * Conception participative (chacun à son mot à dire) #### FURPS : FONCTIONNALITÉ (fonctions,, capacité et sécurité) UTILISABILITÉ (facteur humain, aide et documentation) FIABILITÉ (pannes, récupération et prévisibilité) PERFORMANCE (temps de réponse, exactitude) SUPPORTABILITY (adaptabilité, internationalisable et configurable) #### FURPS + Ajout de : * implémentation (ressources, langage et outils, matériel) * Interface (contrainte d'interfaçage avec systèmes externes) * Exploitation (gestion du système) * Conditionnement * Aspect juridique (licences) ### 2. Analyse et conception Analyse avant conception #### Analyse - Investigation du domaine et compréhension du problème et des besoins - Recherche du bon système (comprendre le client) #### Conception - Implémentation et mise en place de solutions et comment - Construction du système ### 3. Implémentation et tests #### Implémentation Un ou plusieurs langage et activité la plus coûteuse #### Tests * Tests unitaires * Test de classe et composant * Test du système intégré (parcours utilisateur et tout se passe bien) * Non régression : ce qui est valide doit le rester, necessite des outils. ## VIII. Outils et processus Planification : Trello Gestion des versions : Git, SVN Documentation : JavaDoc Maquettage : Figma Gestion des tests : JUnit Modélisation : Draw.io pour UML ... Vérification, communication, etc. ## IX. Cahier des charges Spécifier un système à réaliser (fonctionnalités, description du contexte, contraintes de délais, prix et préférences) ### Fonctionnel : * Préciser les orientations et le champ de domaine étudié * Analyser l'existant au niveau orga, documents utilisés, traintements effectués et données manipulées * Proposer des solutions d'orga, fonctionnelles et techniques qui répondent aux exigences. Obtenir une description globale Vérifier la faisabilité Aboutir à un choix d'une solution type de dev. ### Spécifications fonctionnelles * Besoins fonctionnels : * Liste de fonctions à remplir * Scénarios * Cas d'utilisation * Ne pas parler de réalisation technique ### Spécifications techniques * Comment réaliser * Liste de fonctions à coder * Architecture * Mélange technique et métier facile à faire /!\\