Génie logiciel avancé
Logiciel : définitions
Ensemble d'entités nécessaires au fonctionnement d'un processus de
traitement automatique de l'information
●
Programmes, données, documentation...
Ensemble de programmes qui permet à un système informatique
d’assurer une tâche ou une fonction en particulier
Logiciel = programme + utilisation
2
Logiciel : caractéristiques
Environnement
●
utilisateurs : grand public (traitement de texte),
spécialistes (calcul scientifique, finances),
développeurs (compilateur)
●
autres logiciels : librairie, composant
●
matériel : capteurs (système d'alarme),
réseau physique (protocole),
machine ou composant matériel contrôlé (ABS)
Spécification : ce que doit faire le logiciel, ensemble de critères que
doivent satisfaire son fonctionnement interne et ses interactions avec
son environnement
3
Spécification
Spécification fonctionnelle
●
Fonctionnalités du logiciel, réponse aux besoins des utilisateurs
Spécification non fonctionnelle
●
Facilité d'utilisation : prise en main et robustesse
●
Performance : temps de réponse, débit, fluidité...
●
Fiabilité : tolérance aux pannes
●
Sécurité : intégrité des données et protection des accès
●
Maintenabilité : facilité à corriger et à faire évoluer le logiciel
●
Portabilité : adaptabilité à d'autres environnements matériels ou
logiciels
4
Crise du logiciel
Constat du développement logiciel fin années 60 :
●
délais de livraison non respectés
●
budgets non respectés
●
ne répond pas aux besoins de l'utilisateur ou du client
●
difficile à utiliser, maintenir, et faire évoluer
5
Étude du DoD 1995
Étude du Department of Defense des États-Unis sur les logiciels
produits dans le cadre de 9 gros projets militaires
3% 2%
19% 29%
Utilisés directement
Utilisés après quelques modifications
Utilisés après de fortes modifications
Jamais utilisés
Payés et pas livrés
47% Jarzombek, Stanley J., The 5th annual JAWS S3 proceedings, 1999
6
Étude du Standish group
Enquête sur des milliers de projets, de toutes tailles et de tous secteurs
100%
80%
60%
40%
20%
0%
1994 1996 1998 2000 2002 2004 2006 2008 2010 2012
Standish group, Chaos Manifesto 2013 - Think Big, Act Small, 2013
Projets réussis : achevés dans les délais et pour le budget impartis, avec
toutes les fonctionnalités demandées
Projets mitigés : achevés et opérationnels, mais livrés hors délais, hors
budget ou sans toutes les fonctionnalités demandées
Projets ratés : abandonnés avant la fin ou livrés mais jamais utilisés
7
Petits vs grands projets
4% 10%
20%
38% Projets réussis
Projets mitigés
Projets ratés
52%
76%
Petits projets Grands projets
budget ≤ $1 million budget ≥ $10 millions
Standish group, Chaos Manifesto 2013 - Think Big, Act Small, 2013
8
Utilisation des fonctionnalités implantées
Toujours, 7%
Souvent, 13%
Jamais, 45%
Parfois, 16%
Rarement, 19%
Standish group, Chaos Manifesto 2002, 2002
9
Bugs célèbres
Sonde Mariner 1, 1962
●
Détruite 5 minutes après son lancement; coût : $18,5 millions
●
Défaillance des commandes de guidage due à une erreur de spécification
●
Erreur de transcription manuelle d'un symbole mathématique dans la
spécification
Therac-25, 1985-87
●
Au moins 5 morts par dose massive de radiations
Electron mode X-ray mode Problem
●
Problème d'accès concurrents dans le contrôleur
Processeur Pentium, 1994
●
Bug dans la table de valeurs utilisée par l'algorithme de division
Ariane V vol 501, 1996
●
Explosion après 40 secondes de vol; coût : $370 millions
●
Panne du système de navigation due à un dépassement
de capacité (arithmetic overflow)
●
Réutilisation d'un composant d'Ariane IV non re-testé
10
Plus récemment
PlayStation Network, avril 2011
●
Des millions de données personnelles et bancaires piratées
●
Pertes financières de plusieurs milliards de dollars
●
Vulnérabilité du réseau connue mais conséquences mal évaluées ?
Outil de chiffrement OpenSSL, mars 2014
●
500 000 serveurs web concernés par la faille
●
Vulnérabilité permettant de lire une portion de la mémoire d'un serveur distant
De manière générale, fiabilité, sûreté et sécurité des logiciels
●
Transports automobile, ferroviaire, aéronautique
●
Contrôle de processus industriels, nucléaire, armement
●
Médical : imagerie, appareillage, télé-surveillance
●
e-commerce, carte bancaire sans contact, passeport électronique
11
Pourquoi ?
Raisons principales des bugs :
●
Erreurs humaines
●
Taille et complexité des logiciels
●
Taille des équipes de conception/développement
●
Manque de méthodes de conception
●
Négligence de la phase d'analyse des besoins du client
●
Négligence et manque de méthodes et d'outils des phases de
validation/vérification
12
Mythes du logiciel
●
Idée grossière du logiciel suffisante pour commencer à programmer
Faux : échecs dus principalement à une idée imprécise du logiciel
●
Travail terminé quand programme écrit et fonctionnel
Faux : maintenance du logiciel = plus du 50% du coût total
●
Facile de gérer spécifications changeantes
Faux : changements de spécifications souvent coûteux
●
En cas de retard, solution : ajouter des programmeurs
Faux : période de familiarisation et communication plus difficile
impliquent perte de productivité
« Ajouter des programmeurs à un projet en retard ne fait que le
retarder davantage »
13
Génie logiciel
Idée : appliquer les méthodes classiques d'ingénierie au domaine du
logiciel
Ingénierie (ou génie) : Ensemble des fonctions allant de la conception
et des études à la responsabilité de la construction et au contrôle des
équipements d'une installation technique ou industrielle
Génie civil, naval, aéronautique, mécanique, chimique...
14
Génie logiciel
Définition : Ensemble des méthodes, des techniques et des outils
dédiés à la conception, au développement et à la maintenance des
systèmes informatiques
Objectif : Avoir des procédures systématiques pour des logiciels de
grande taille afin que
●
la spécification corresponde aux besoins réels du client
●
le logiciel respecte sa spécification
●
les délais et les coûts alloués à la réalisation soient respectés
15
Génie logiciel
Particularités du logiciel :
●
produit invisible et immatériel
●
difficile de mesurer la qualité
●
conséquences critiques causées par modifications infimes
●
mises à jour et maintenance dues à l'évolution rapide de la
technologie
●
difficile de raisonner sur des programmes
●
défaillances logicielles principalement humaines
16
Principes d'ingénierie pour le logiciel
Sept principes fondamentaux
●
Rigueur : principale source d'erreurs humaine, s'assurer par tous les
moyens que ce qu'on écrit est bien ce qu'on veut dire et que ça
correspond à ce qu'on a promis (outils, revue de code...)
●
Abstraction : extraire des concepts généraux sur lesquels raisonner,
puis instancier les solutions sur les cas particuliers
●
Décomposition en sous-problèmes : traiter chaque aspect
séparément, chaque sous-problème plus simple que problème global
●
Modularité : partition du logiciel en modules interagissant,
remplissant une fonction et ayant une interface cachant
l'implantation aux autres modules
17
Principes d'ingénierie pour le logiciel
●
Construction incrémentale : construction pas à pas, intégration
progressive
●
Généricité : proposer des solutions plus générales que le problème
pour pouvoir les réutiliser et les adapter à d'autres cas
●
Anticipation des évolutions : liée à la généricité et à la modularité,
prévoir les ajouts/modifications possibles de fonctionnalités
De façon transversale
●
Documentation : essentielle pour le suivi de projet et la
communication au sein de l'équipe de projet
●
Standardisation/normalisation : aide à la communication pour le
développement, la maintenance et la réutilisation
18
Processus de développement logiciel
Ensemble d'activités successives, organisées en vue de la production
d'un logiciel
En pratique :
●
Pas de processus idéal
●
Choix du processus en fonction des contraintes (taille des
équipes, temps, qualité...)
●
Adaptation de « processus types » aux besoins réels
19
Processus de développement logiciel
Activités du développement logiciel
●
Analyse des besoins
●
Spécification
●
Conception
●
Programmation
●
Validation et vérification
●
Livraison
●
Maintenance
Pour chaque activité : Utilisation et production de documents
20
Analyse des besoins
Objectif : Comprendre les besoins du client
●
Objectifs généraux, environnement du futur système,
ressources disponibles, contraintes de performance...
Analyse
des besoins
Besoins du client Cahier des charges
(+ manuel d'utilisation
préliminaire)
21
Spécification
Objectifs :
●
Établir une description claire de ce que doit faire le logiciel
(fonctionnalités détaillées, exigences de qualité, interface...)
●
Clarifier le cahier des charges (ambiguïtés, contradictions)
Spécification
Cahier des charges Cahier des charges
fonctionnel
22
Conception
Objectif : Élaborer une solution concrète réalisant la spécification
●
Description architecturale en composants (avec interface et
fonctionnalités)
●
Réalisation des fonctionnalités par les composants
(algorithmes, organisation des données)
●
Réalisation des exigences non-fonctionnelles (performance,
sécurité...)
Conception
Cahier des charges Dossier de conception
fonctionnel
23
Programmation
Objectif : Implantation de la solution conçue
●
Choix de l'environnement de développement, du/des
langage(s) de programmation, de normes de
développement...
Programmation
Dossier de conception Code documenté
+ manuel d'utilisation
24
Validation et vérification
Objectifs :
●
Validation : assurer que les besoins du client sont satisfaits (au
niveau de la spécification, du produit fini...)
Concevoir le bon logiciel
●
Vérification : assurer que le logiciel satisfait sa spécification
Concevoir le logiciel correctement
Validation
Cahier des
Besoins charges Logiciel
du client fonctionnel
Vérification
25
Méthodes de validation et vérification
Méthodes de validation :
●
Revue de spécification, de code
●
Prototypage rapide
●
Développement de tests exécutables (extreme programming)
Méthodes de vérification :
●
Test (à partir de la spécification)
●
Preuve de programmes
●
Model-checking (vérification de modèles)
26
Démarche de test
Plan de test
●
Description des exigences de test (couverture des exigences
fonctionnelles et non fonctionnelles)
●
Choix d'une stratégie de test et planification des tests
Cahier de tests
●
Description des cas de test (couverture des exigences de test)
●
Élaboration des procédures de test
Dossier de tests
●
Implémentation et exécution des tests
●
Évaluation de l'exécution des tests et analyse des résultats
●
Rapport de test
27
Maintenance
Types de maintenance :
●
Correction : identifier et corriger des erreurs trouvées après la
livraison
●
Adaptation : adapter le logiciel aux changements dans
l'environnement (format des données, environnement
d'exécution...)
●
Perfection : améliorer la performance, ajouter des
fonctionnalités, améliorer la maintenabilité du logiciel
28
Répartition de l'effort
7%
6%
8% Spécification
Conception
Programmation
Intégration/Test
19% 60% Maintenance
29
Rapport effort/erreur/coût
100
80
Intégration/Test
60
Programmation 40
Conception
20
Spécification
0
Effort Origine Coût de la
des erreurs maintenance
30
Processus en cascade
Chaque étape doit être terminée avant que ne commence la suivante
À chaque étape, production d'un document base de l'étape suivante
Spécification Cahier des charges
fonctionnel
Conception Dossier de
conception détaillée
Programmation
Code documenté +
et test unitaire
Rapport de tests unitaires
Intégration
et test système Rapport de validation
Livraison
et maintenance
31
Processus en cascade
Caractéristiques :
●
Hérité des méthodes classiques d'ingénierie
●
Découverte d'une erreur entraîne retour à la phase à l'origine de
l'erreur et nouvelle cascade, avec de nouveaux documents...
●
Coût de modification d'une erreur important, donc choix en
amont cruciaux (typique d'une production industrielle)
Pas toujours adapté à une production logicielle, en particulier si
besoins du client changeants ou difficiles à spécifier
32
Processus en V
Caractéristiques :
●
Variante du modèle en cascade
●
Mise en évidence de la complémentarité des phases menant à la
réalisation et des phases de test permettant de les valider
Inconvénients : les mêmes que le cycle en cascade
●
Processus lourd, difficile de revenir en arrière
●
Nécessite des spécifications précises et stables
●
Beaucoup de documentation
33
Processus en V
Analyse Écriture
Recette
des besoins Validation
Tests d'acceptation
Spécification
et système
Conception Intégration et
architecturale tests d'intégration
Conception
Tests unitaires
détaillée
Programmation
34
Niveaux de test
Test unitaire : test de chaque unité de programme (méthode, classe,
composant), indépendamment du reste du système
Test d'intégration : test des interactions entre composants (interfaces
et composants compatibles)
Test d'acceptation et système : test du système complet par rapport à
son cahier des charges
Recette : faite par le client, validation par rapport aux besoins initiaux
(tests, validation des documents, conformité aux normes...)
35
Développement par prototypage
Principe :
●
Développement rapide d'un prototype avec le client pour valider
ses besoins
●
Écriture de la spécification à partir du prototype, puis processus
de développement linéaire
Cahier
Besoins des charges
Prototype Logiciel
du client fonctionnel
Avantage : Validation concrète des besoins, moins de risques d'erreur
de spécification
36
Développement incrémental
Principe :
●
Hiérarchiser les besoins du client
●
Concevoir et livrer au client un produit implantant un sous-
ensemble de fonctionnalités par ordre de priorité
Spécification Spéc. Spéc. Spéc. Spéc.
Conception Conc. Conc. Conc. Conc.
Programmation Prog. Prog. Prog. Prog.
Validation et vérification V&V V&V V&V V&V
Livraison Livr. Livr. Livr. Livr.
Développement en cascade Développement incrémental
Avantage : Minimiser le risque d'inadéquation aux besoins
Difficulté : Intégration fonctionnalités secondaires non pensées en amont
37
Méthodes agiles et extreme programming
Principes :
●
Implication constante du client
●
Programmation en binôme (revue de code permanente)
●
Développement dirigé par les tests
●
Cycles de développement rapides pour réagir aux changements
Avantages : développement rapide en adéquation avec les besoins
Inconvénients : pas de spécification, documentation = tests,
maintenance ?
Fonctionne pour petites équipes de développement (< 20) car
communication cruciale
38
Documentation
Objectif : Traçabilité du projet
Pour l'équipe :
●
Regrouper et structurer les décisions prises
●
Faire référence pour les décisions futures
●
Garantir la cohérence entre les modèles et le produit
Pour le client :
●
Donner une vision claire de l'état d'avancement du projet
Base commune de référence :
●
Personne quittant le projet : pas de perte d'informations
●
Personne rejoignant le projet : intégration rapide
39
Documents de spécification et conception
Rédaction : le plus souvent en langage naturel (français)
Problèmes :
●
Ambiguïtés : plusieurs sens d'un même mot selon les personnes
ou les contextes
●
Contradictions, oublis, redondances difficiles à détecter
●
Difficultés à trouver une information
●
Mélange entre les niveaux d'abstraction (spécification vs.
conception)
D. Longuet - Génie logiciel 40
Documents de spécification et conception
Alternatives au langage naturel
Langages informels :
●
Langage naturel structuré : modèles de document et règles de
rédaction précis et documentés
●
Pseudo-code : description algorithmique de l'exécution d'une
tâche, donnant une vision opérationnelle du système
Langages semi-formels :
●
Notation graphique : diagrammes accompagnés de texte
structuré, donnant une vue statique ou dynamique du système
Langages formels :
●
Formalisme mathématique : propriétés logiques ou modèle du
comportement du système dans un langage mathématique
D. Longuet - Génie logiciel 41
Documents de spécification et conception
Langages informels ou semi-formels :
✔ Avantages : intuitifs, fondés sur l'expérience, facile à apprendre
et à utiliser, répandus
✗ Inconvénients : ambigus, pas d'analyse systématique
Langages formels :
✔ Avantages : précis, analysables automatiquement, utilisables
pour automatiser la vérification et le test du logiciel
✗ Inconvénients : apprentissage et maîtrise difficiles
En pratique : utilisation de langages formels principalement pour
logiciels critiques, ou restreinte aux parties critiques du système
D. Longuet - Génie logiciel 42
Modélisation
Modèle : Simplification de la réalité, abstraction, vue subjective
●
modèle météorologique, économique, démographique...
Modéliser un concept ou un objet pour :
●
Mieux le comprendre (modélisation en physique)
●
Mieux le construire (modélisation en ingénierie)
En génie logiciel :
●
Modélisation = spécification + conception
●
Aider la réalisation d'un logiciel à partir des besoins du client
D. Longuet - Génie logiciel 43
Modélisation graphique
Principe : « Un beau dessin vaut mieux qu'un long discours »
Seulement s'il est compris par tous de la même manière
D. Longuet - Génie logiciel 44
UML : Unified Modeling Language
Langage :
●
Syntaxe et règles d'écriture
●
Notations graphiques normalisées
… de modélisation :
●
Abstraction du fonctionnement et de la structure du système
●
Spécification et conception
… unifié :
●
Fusion de plusieurs notations antérieures : Booch, OMT, OOSE
●
Standard défini par l'OMG (Object Management Group)
●
Dernière version : UML 2.4.1 (août 2011)
En résumé : Langage graphique pour visualiser, spécifier, construire et
documenter un logiciel
D. Longuet - Génie logiciel 45
Pourquoi UML ?
Besoin de modéliser pour construire un logiciel
●
Modélisation des aspects statiques et dynamiques
●
Modélisation à différents niveaux d'abstraction et selon
plusieurs vues
●
Indépendant du processus de développement
Besoin de langages normalisés pour la modélisation
●
Langage graphique, semi-formel
●
Standard très utilisé
Conception orientée objet
●
Façon efficace de penser le logiciel
●
Indépendance du langage de programmation (langages non objet)
D. Longuet - Génie logiciel 46
Conception orientée objet avec UML
UML n'est pas une méthode de conception
UML est un outil indépendant de la méthode
D. Longuet - Génie logiciel 47
Diagrammes UML
Représentation du logiciel à différents points de vue :
●
Vue des cas d'utilisation : vue des acteurs (besoins attendus)
●
Vue logique : vue de l’intérieur (satisfaction des besoins)
●
Vue d'implantation : dépendances entre les modules
●
Vue des processus : dynamique du système
●
Vue de déploiement : organisation environnementale du logiciel
Vue Vue
d'implantation logique
Vue des cas
d'utilisation
Vue de Vue des
déploiement processus
D. Longuet - Génie logiciel 48
Diagrammes UML
14 diagrammes hiérarchiquement dépendants
Modélisation à tous les niveaux le long du processus de développement
Diagrammes structurels : Diagrammes comportementaux :
●
Diagramme de classes ●
Diagramme de cas d'utilisation
●
Diagramme d'objets ●
Diagramme états-transitions
●
Diagramme de composants ●
Diagramme d'activité
●
Diagramme de déploiement
Diagrammes d'interaction :
●
Diagramme de paquetages ●
Diagramme de séquence
●
Diagramme de structure ●
Diagramme de communication
composite ●
Diagramme global d'interaction
●
Diagramme de profils ●
Diagramme de temps
D. Longuet - Génie logiciel 49
Exemple d'utilisation des diagrammes
●
Diagrammes de cas d'utilisation : besoins des utilisateurs
Spécification
●
Diagrammes de séquence : scénarios d'interactions entre les
utilisateurs et le logiciel, vu de l'extérieur
●
Diagrammes d'activité ou états-transitions : enchaînement
d'actions représentant un comportement du logiciel
●
Diagrammes de classes : structure interne du logiciel
●
Diagrammes d'objet : état interne du logiciel à un instant donné
Conception
●
Diagrammes états-transitions : évolution de l'état d'un objet
●
Diagrammes de séquence : scénarios d'interactions avec les
utilisateurs ou au sein du logiciel
●
Diagrammes de composants : composants physiques du logiciel
●
Diagrammes de déploiement : organisation matérielle du logiciel
D. Longuet - Génie logiciel 50