---
# System prepended metadata

title: Conception agile de projet informatique CM01
tags: [agile, '2023']

---

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