--- title: "Conduite de projet: introduction" date: 2024-09-10 tags: [""] categories: ["Conduite de projet", "Cours"] mathjax: true --- Les projets informatiques peuvent prendre plusieurs formes: * **Projet de développement logiciel** pour livrer la première version utilisable du logiciel. * **Projet de tierce maintenance applicatice** pour en assurer la maintenance. * **Projet de mise en production** pour assurer la production (exploitation). Mener à bien ces différents projets est un long chemin, il est facile de se perde surtout *si les contours sont flous*. Et pour ça nous allons avoir besoin d'un peut de **formalisme**. ## Projet de développement 1. Tout part **d'un utilisateur** qui a un besoin, il peut ne pas en être conscient ou l'exprimer. 2. Le **propriétaire** (ou le *producteur*) exprime ce besoin dans un *cahier des charges*. 3. Le **développeur** va spécifier le besoin dans *la réponse au cahier des charges* 4. Le **propriétaire** accepte la réponse. 5. Le **développeur** réalise le développement et le livre. 6. Le **propriétaire** mets à disposition le logiciel à *l'utilisateur* Nous utilisons les termes de *MOA* pour *Maître d'ouvrage* (le propriétaire) et *MOE* pour *Maître d'œuvre* (le développeur). Le cycle de développement se décompose en 3 phases: 1. **l'analyse**: le *MOE* spécifie ce qu'il peut réaliser, mais aussi ce qu'il ne peut pas; 2. **la conception**: le *MOE* organise son développement; 3. **le développement**: le *MOE* développe les différents composants. ## L'analyse Le cahier des charge représente un peu *la lettre au père noël* du *MOA* au *MOE*. Ce dernier doit alors spécifier ce qu'il est capable de réaliser mais aussi **le chiffrer**. Le *MOE* peut refuser de aire telle ou telle spécification du budget et de ses capacités. Au niveau du chiffrage, on évalue en **jour/homme**, c'est une tâche qui demande de l'expérience car semée de pièges. ## La conception C'est l'écriture du code des différents composants de l'application, il y a alors plusieurs points de vies: * application **monolithique**; * composition en **modules**, ils permettent aussi de découper en tâche. Il faut aussi définir les différentes interactions entre les modules. Il faut aussi choisir **une architecture** (3 tiers, en couche, par service). ## Les besoins Nous pouvons utiliser la méthode sur **6 artefacts**: ![Schéma: les six artefacts](./imgs/6_artefacts.svg) L'expression des besoin contient elle aussi des pièges: * les besoins fantômes; * les besoins mal exprimés. Un besoin se caractérise par deux stades: 1. en cours de rédaction; 2. rédigé et en attente de qualification. 6 bonnes pratiques: * un besoin doit être identifié par un numéro de besoin * un besoin doit être précis * un besoin doit être qualifié (type, difficulté, priorisé) * un besoin doit être planifié (échéance, unité de temps) * un besoin doit être clos (à un moment donné) * les besoins doivent être homogénéisés Nos besoins contiennent dont un *identifiant*, une *description*, un *objectif* et un *contrôle*. Il faut absolument **tuer tout espace laissé au flou et à l'interprétation**. Nous avons besoin de précision. **Homogénéiser**: chacun des besoins doivent avoir le même point de vue, exprimé de la même façon avec la même granularité. Un besoin doit être **priorisé** selon 3 critères: `élevé`, `normal`, `bas` ### 4 types de besoins * Nouvelle fonctionnalité. * Bugfix / amélioration * Amélioration de performances * Refactoring (visibilité du code)