# 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 /!\\