GÉNIE LOGICIEL
Prof Anouar RAGRAGUI
2021-2022
2 Plan du cours
Introduction
Processus de développement logiciel (Cycle
de vie logiciel)
Méthodologie UP, RUP
Méthodes agiles
Ingénierie objet (Design patterns)
MVC
3 Plan de la séance
Préliminaires
Critères de réussite d’un projet informatique
Approches du génie logiciel
Processus de développement logiciel
4 Préliminaires
Définitions
Bugs informatiques
Quelques statistiques
Crise du logiciel
Génie Logiciel
Préliminaires ► Définitions (Système informatique)
Critères de réussite d’un projet informatique ► Bugs informatiques
Approches du génie logiciel ► Quelques statistiques
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
Un Système informatique est l’ensemble composé de
matériels et de logiciels nécessaires pour réaliser des
traitements de l’information.
Depuis quelques années, la fabrication du matériel est
assurée par quelques fabricants seulement.
Le matériel est relativement fiable
Le marché est standardisé
Les problèmes liés à l’informatique sont essentiellement des
problèmes de Logiciel !!!!
Préliminaires ► Définitions (Logiciel 1/4)
Critères de réussite d’un projet informatique ► Bugs informatiques
Approches du génie logiciel ► Quelques statistiques
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
Un logiciel est un ensemble d’entités nécessaires au
fonctionnement d’un processus de traitement automatique de
l’information.
Logiciel = programme + utilisation
Fichiers connexes Programmes
Documentations
Préliminaires ► Définitions (Logiciel 2/4)
Critères de réussite d’un projet informatique ► Bugs informatiques
Approches du génie logiciel ► Quelques statistiques
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
Un logiciel est en général un sous-système d’un système
englobant.
Il interagit avec son environnement:
des opérateurs humains (utilisateurs, administrateurs, . . . ) ;
d’autres logiciels;
des contrôleurs matériels.
Il réalise une spécification :
son comportement vérifie un ensemble de critères qui
régissent ses interactions avec son environnement.
Préliminaires ► Définitions (Exemple: Airbus 380)
Critères de réussite d’un projet informatique ► Bugs informatiques
Approches du génie logiciel ► Quelques statistiques
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
trop d’ordinateurs et trop de logiciels (Airbus A380)
Prix de 394 M Euros
On estime que la partie informatique représente le tiers du coût
Environ 1 Milliard de lignes de code
Un vrai challenge pour les informaticiens!!!!!!!!
Préliminaires ► Définitions (Logiciel 3/4)
Critères de réussite d’un projet informatique ► Bugs informatiques
Approches du génie logiciel ► Quelques statistiques
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
Difficultés spécifiques du logiciel :
Support immatériel
Un objet technique fortement contraint:
Structure complexe
Relatif au métier du domaine traité (gestion, automobile,
aéronautique,…)
Difficile de mesurer la qualité
Conséquences critiques causées par des modifications
infimes
Défaillances logicielles est principalement humaines
Préliminaires ► Définitions
Critères de réussite d’un projet informatique ► Bugs informatiques (Bugs célèbres)
Approches du génie logiciel ► Quelques statistiques
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
10
Sonde Mariner 1, 1962 (coût : $18,5 millions )
Défaillance des commandes de guidage due à une erreur de spécification
erreur de programme fortran. Le point avait remplacé par une virgule
Accidents d’irradiation de Therac 25 (1985-87):
fautes de conception dans le matériel et le logiciel d’un appareil de
traitement médical par irradiation
la mort de plusieurs personnes
Le projet TAURUS,1993. Ce fut un projet d'informatisation de la bourse de
Londres. Il a été abandonné définitivement après quatre années de labeur et
a engendré environ 300 millions de livres de perte.
Ariane V vol 501, 1996 (coût : $370 millions)
Explosion après 40 secondes de vol: 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é
Bug de l'an 2000 (coût : $600 millions)
les dates se faisaient uniquement sur les deux derniers chiffres de l'année
► Définitions
Préliminaires
Critères de réussite d’un projet informatique ► Bugs informatiques (Raisons principales)
Approches du génie logiciel ► Quelques statistiques
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
11
Erreurs humaines
Taille et complexité des logiciels
Taille des équipes de conception/développement
Faible communication entre les parties prenantes
Manque des méthodes de conception
Spécifications incomplètes: phase d'analyse des besoins du
client incomplète.
Mauvaise gestion des changements
Négligence et manque de méthodes et d'outils des phases de
validation/vérification
► Définitions
Préliminaires
Critères de réussite d’un projet informatique ► Bugs informatiques (Raisons principales)
Approches du génie logiciel ► Crise du logiciel
Processus de développement logiciel ► Génie Logiciel
12
► Définitions
Préliminaires
Critères de réussite d’un projet informatique ► Bugs informatiques
Approches du génie logiciel ► Quelques statistiques (1/4)
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
13
En 1979, une étude du gouvernement américaine, basée sur
neuf projets logiciels, fait apparaitre les symptômes suivants :
beaucoup de logiciels ne sont pas livrés, pas utilisés ou
abandonnes.
Plus précisément, le coût se répartit de la façon suivante:
► Définitions
Préliminaires
Critères de réussite d’un projet informatique ► Bugs informatiques
Approches du génie logiciel ► Quelques statistiques (2/4)
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
14
Enquête sur des milliers de projets, de toutes tailles et
de tous secteurs
(Standish Group, Chaos Report 2015)
► Définitions
Préliminaires
Critères de réussite d’un projet informatique ► Bugs informatiques
Approches du génie logiciel ► Quelques statistiques (3/4)
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
15
Petits vs grands projets
(Standish Group, Chaos Report 2015)
► Définitions
Préliminaires
Critères de réussite d’un projet informatique ► Bugs informatiques
Approches du génie logiciel ► Quelques statistiques (4/4)
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
16
Succès des projets par rapport à leur taille
100%
80%
60%
40%
20% Taux de Succès
0%
(Standish Group, Chaos Report 2009)
► Définitions
Préliminaires
Critères de réussite d’un projet informatique ► Bugs informatiques
Approches du génie logiciel ► Quelques statistiques
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
17
Naissance du génie logiciel
les pères du génie logiciel se prénomment Friedrich Bauer et
Louis Bolliet
Cette spécialité a en effet vu le jour en 1968 sous le
parrainage de l'OTAN
Elle avait pour objectif de répondre a 2 constations :
D'une part, le logiciel n'était pas fiable
D'autre part, il était difficile à réaliser dans les délais et
budgets prévus et en satisfaisant le cahier des charges
► Définitions
Préliminaires
Critères de réussite d’un projet informatique ► Bugs informatiques
Approches du génie logiciel ► Quelques statistiques
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
18
Constats:
Le coût de construction du logiciel est devenu plus important que
celui de la construction du matériel.
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
Introduction de l’expression
« Génie Logiciel » (Software Engineering)
Comment faire des logiciels de qualité ? Qu’attend-on d’un
logiciel ? Quels sont les critères de qualité pour un logiciel ?
► Définitions
Préliminaires
Critères de réussite d’un projet informatique ► Bugs informatiques
Approches du génie logiciel ► Quelques statistiques
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
19
Le génie logiciel est un domaine des sciences de l’ingénieur
dont l’objet d’étude est la conception, la fabrication, et la
maintenance des systèmes informatiques complexes.
Le génie logiciel vise à garantir :
la spécification répond aux besoins réels de ses clients ;
le logiciel respecte sa spécification ;
Les coûts alloués pour sa réalisation sont respectés ;
les délais de réalisation sont respectés.
Appliquer des méthodes fiables qui vont guider le
développement du logiciel, de sa conception à sa livraison.
► Définitions
Préliminaires
Critères de réussite d’un projet informatique ► Bugs informatiques
Approches du génie logiciel ► Quelques statistiques
Processus de développement logiciel ► Crise du logiciel
► Génie Logiciel
20
Pour résumer, nous dirons que :
La motivation première du génie logiciel est la réduction des couts
de développement du logiciel
Le Génie logiciel est un ensemble de moyens (techniques et
méthodologiques) permettant la construction de systèmes
informatiques répondant à des critères de qualité préalablement
définis
Sa mise en œuvre implique la prise en compte :
➢ Des environnements de développement avec toute la variété
d'outils et d'approches
➢ Des méthodes et des techniques de gestion de processus
➢ Des relations que celle-ci entretient avec les commanditaires et les
utilisateurs du produit
Critères de réussite d’un projet
21
informatique
Piliers de réussite
Loi de Hofstadter (Loi de glissement de planning)
Qualités attendues d’un logiciel
► Piliers de réussite
Préliminaires
Critères de réussite d’un projet informatique ► Loi de Hofstadter (Loi de glissement de planning)
Approches du génie logiciel ► Qualités attendues d’un logiciel
Processus de développement logiciel
22
Coût
Succès du
Projet
Qualité Délai
► Piliers de réussite
Préliminaires
Critères de réussite d’un projet informatique ► Loi de Hofstadter (Loi de glissement de planning)
Approches du génie logiciel ► Qualités attendues d’un logiciel
Processus de développement logiciel
23
« Il faut toujours plus de temps que prévu,
même en tenant compte de la Loi de Hofstadter »
valable aussi en développement logiciel!!!!
Douglas Hofstadter, Gödel, Escher, Bach : Les Brins d'une Guirlande Éternelle, 1979
► Piliers de réussite
Préliminaires
Critères de réussite d’un projet informatique ► Loi de Hofstadter (Loi de glissement de planning)
Approches du génie logiciel ► Qualités attendues d’un logiciel
Processus de développement logiciel
24
La norme ISO 9126 définit six groupes
d'indicateurs de qualité des logiciels
Validité
Facilité d’utilisation
Performance
Fiabilité
Portabilité
Maintenabilité
► Piliers de réussite
Préliminaires
Critères de réussite d’un projet informatique ► Loi de Hofstadter (Loi de glissement de planning)
Approches du génie logiciel ► Qualités attendues d’un logiciel (validité)
Processus de développement logiciel
25
Adéquation entre le besoin effectif du client et les fonction
offertes par le logiciel
Solutions :
Analyse exhaustive des besoins
Améliorer la communication entre les intervenants
Travailler avec rigueur
► Piliers de réussite
Préliminaires
Critères de réussite d’un projet informatique ► Loi de Hofstadter (Loi de glissement de planning)
Approches du génie logiciel ► Qualités attendues d’un logiciel (Facilité d’utilisation)
Processus de développement logiciel
26
Efficacité et satisfaction avec laquelle des utilisateurs
accomplissent leurs objectifs selon leur environnement
Facilité de compréhension: comprendre ce que l’on peut
faire avec le logiciel.
Facilité d’apprentissage : savoir comment travailler avec le
logiciel
Facilité d’exploitation : effort nécessaire pour utiliser le
logiciel
Solutions :
◼ Analyse du mode opératoire des utilisateurs.
◼ Adapter l’ergonomie des logiciels aux utilisateurs.
► Piliers de réussite
Préliminaires
Critères de réussite d’un projet informatique ► Loi de Hofstadter (Loi de glissement de planning)
Approches du génie logiciel ► Qualités attendues d’un logiciel (Performance)
Processus de développement logiciel
27
Rapport entre les ressources dédiées (temps,
matériel, utilisateurs) et la quantité des résultats
produits.
Solutions :
Logiciels plus simples
Veiller à la complexité des algorithmes
Machines plus performantes
► Piliers de réussite
Préliminaires
Critères de réussite d’un projet informatique ► Loi de Hofstadter (Loi de glissement de planning)
Approches du génie logiciel ► Qualités attendues d’un logiciel (Fiabilité)
Processus de développement logiciel
28
Justesse et conformité: le logiciel retourne des résultats corrects quelles que
soient les conditions d’exploitation.
Robustesse et sureté: le logiciel fonctionne raisonnablement en toutes
circonstances (utilisation intensive), même en dehors des conditions d’utilisation
prévues (tolérance aux pannes)
Mesures :
σ(𝑑𝑢𝑟é𝑒 𝑑𝑒 𝑓𝑜𝑛𝑐𝑡𝑖𝑜𝑛𝑛𝑒𝑚𝑒𝑛𝑡 − 𝑑𝑢𝑟é𝑒 𝑑𝑒 𝑝𝑎𝑛𝑛𝑒)
MTBF: Mean Time Between Failures 𝑛𝑜𝑚𝑏𝑟𝑒 𝑑𝑒 𝑝𝑎𝑛𝑛𝑒
Disponibilité (pourcentage du temps pendant lequel le système est utilisable) et
Taux d’erreur (nombre d’erreurs par KLOC)
Solutions :
Utiliser des méthodes formelles, des langages et des méthodes de programmation
de haut niveau
Vérifications, tests
► Piliers de réussite
Préliminaires
Critères de réussite d’un projet informatique ► Loi de Hofstadter (Loi de glissement de planning)
Approches du génie logiciel ► Qualités attendues d’un logiciel (Portabilité)
Processus de développement logiciel
29
Facilité d'adaptation à des changements d'environnements
opérationnels (matériel ou logiciel)
Facilité d'installation
Coexistence avec d’autres logiciels
Solutions :
Rendre le logiciel indépendant de son environnement
d’exécution.
Machines virtuelles.
► Piliers de réussite
Préliminaires
Critères de réussite d’un projet informatique ► Loi de Hofstadter (Loi de glissement de planning)
Approches du génie logiciel ► Qualités attendues d’un logiciel (Maintenabilité)
Processus de développement logiciel
30
L'effort nécessaire à corriger ou transformer le logiciel.
Solutions:
La conception par sous-ensembles faciles à démonter et
à interchanger.
Une parfaite communication entre opérateur et
technicien de maintenance.
31 Approches du génie logiciel
Introduction
Approches formelles
Approches semi-formelles
Approches empiriques
Les grands principes du génie logiciel
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Approches formelles
Approches du génie logiciel ► Approches semi-formelles
Processus de développement logiciel ► Approches empiriques
► Les grands principes du génie logiciel
32
Le génie logiciel est un domaine en pleine évolution qui offre une grande
palette d’outils et de méthodes pour parvenir à construire du logiciel de
qualité.
Aucune de ces méthodes ne s’est imposée à ce jour : il faut donc prendre du
recul sur les concepts et les conseils qu’elles préconisent et utiliser son bon
sens pour les adapter à chaque situation.
Ces méthodes se distinguent principalement par :
leur degré de formalisme ;
leur champ d’application ;
les contraintes de qualité qu’elles ambitionnent.
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Approches formelles
Approches du génie logiciel ► Approches semi-formelles
Processus de développement logiciel ► Approches empiriques
► Les grands principes du génie logiciel
33
Les approches formelles utilisent des outils mathématiques et
des méthodes de preuve pour construire un logiciel correct par
construction dont la vérification est automatisée ou assistée.
Exemple (approches formelles)
Méthodes : méthode B, model-checking, logique de Hoare, . . .
Outils et notations : Coq, Z, Atelier B, Why, Frama-C, . . .
Ces méthodes sont utilisées pour développer des logiciels
critiques.
Elles correspondent au niveau le plus élevé de certification.
e.g. applications de la méthode B pour développer le logiciel
embarqué des lignes de métro 14 (1998) et 1 à Paris
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Approches formelles
Approches du génie logiciel ► Approches semi-formelles
Processus de développement logiciel ► Approches empiriques
► Les grands principes du génie logiciel
34
Les approches semi-formelles visent à introduire un langage
normalisé pour décrire le logiciel et sa spécification.
Cependant, la sémantique du langage de spécification n’est
pas formalisée.
Bien que ces approches précisent le discours du concepteur si
on le compare à celui décrit à l’aide du langage naturel, elles
contiennent certaines ambiguïtés et n’offrent aucune garantie
sur la qualité des résultats.
Exemple (approches semi-formelles)
Méthodes : Rationale Unified Process, Merise, . . .
Outils et notations : UML, Analyse SI, . . .
Ces méthodes sont utilisées aujourd’hui par l’industrie du logiciel.
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Approches formelles
Approches du génie logiciel ► Approches semi-formelles
Processus de développement logiciel ► Approches empiriques
► Les grands principes du génie logiciel
35
Les approches empiriques mettent en avant un ensemble de
“bonnes pratiques” qui ont fait leur preuve par l’expérience.
Exemple (approches empiriques)
Méthodes : unit testing ([Link]. la famille xUnit), peer review,
relecture de code, extreme programming, programmation
défensive, . .
Outils : plates-formes de test, gestionnaire de versions
([Link]. Git), outil de documentation automatique ([Link].
Doxygen) / literate programming, . . .
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Approches formelles
Approches du génie logiciel ► Approches semi-formelles
Processus de développement logiciel ► Approches empiriques
► Les grands principes du génie logiciel
36
Un certain nombre de grands principes (de bon sens) se retrouvent
dans toutes ces méthodes.
La rigueur;
La décomposition des problèmes en sous-problèmes;
La modularité;
L’abstraction
L’anticipation des évolutions;
La généricité;
La construction incrémentale
C. Ghezzi. Fundamentals of Software Engineering. Prentice Hall, 2nd edition, 2002.
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Approches formelles
Approches du génie logiciel ► Approches semi-formelles
Processus de développement logiciel ► Approches empiriques
► Les grands principes du génie logiciel (Rigueur)
37
Les principales sources de défaillances d’un logiciel sont d’origine
humaine.
La production de logiciel est une activité créative, mais qui doit se
conduire avec une certaine rigueur
À tout moment, il faut se questionner sur la validité de son action.
Des outils de vérification accompagnant le développement peuvent
aider à réduire les erreurs.
Exemples
générateurs de code, assistants de preuves, générateurs de tests,
profileurs, test coverage, outil d’intégration continue, fuzzer, . . .
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Approches formelles
Approches du génie logiciel ► Approches semi-formelles
Processus de développement logiciel ► Approches empiriques
► Les grands principes du génie logiciel (Décomposition des
problèmes)
38
C’est un aspect de la stratégie générale du « diviser pour régner »
Simplifier les problèmes (temporairement) pour aborder leur
complexité progressivement.
Décorréler les problèmes pour n’en traiter qu’un seul à la fois.
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Approches formelles
Approches du génie logiciel ► Approches semi-formelles
Processus de développement logiciel ► Approches empiriques
► Les grands principes du génie logiciel (Décomposition des
problèmes)
39
Exemple
◼ Comment créer dynamiquement une page internet pour
visualiser et modifier le contenu d’une base donnée sans la
corrompre ?
Décomposition en trois composants :
Modèle: son rôle est gérer le stockage des données.
Vue: son rôle est de formater les données.
Contrôleur: son rôle est de n’autoriser que les modifications
correctes.
◼ Comment acheminer un email de façon sûr à travers un réseau?
Décomposition en couches utilisée sur Internet : SMP TCP ..
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Approches formelles
Approches du génie logiciel ► Approches semi-formelles
Processus de développement logiciel ► Approches empiriques
► Les grands principes du génie logiciel (Modularité)
40
C’est une instance cruciale du principe de décomposition
des problèmes.
Il s’agit de partitionner le logiciel en modules qui :
ont une cohérence interne (des invariants) ;
possèdent une interface ne divulguant sur le contenu du
module que ce qui est strictement nécessaire aux modules
clients.
L’évolution de l’interface est indépendante de celle de
l’implémentation du module.
Les choix d’implémentation sont indépendants de l’utilisation
du module.
D. L. Parnas. On the criteria to be used in decomposing systems into modules. Communications of the ACM. Vol. 15 Issue
12, 1972
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Approches formelles
Approches du génie logiciel ► Approches semi-formelles
Processus de développement logiciel ► Approches empiriques
► Les grands principes du génie logiciel (Abstraction)
41
C’est encore une instance du principe de décomposition des
problèmes.
Il s’agit d’exhiber des concepts généraux regroupant un certain
nombre de cas particuliers et de raisonner sur ces concepts
généraux plutôt que sur chacun des cas particuliers.
Le fait de fixer la bonne granularité de détails permet:
de raisonner plus efficacement ;
de factoriser le travail en instanciant le raisonnement général sur
chaque cas particulier.
Exemple (Support dans les langages de programmation)
les classes abstraites dans les langages à objets
(FormeGéométrique, Carrée, rectangle, Triangle)
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Approches formelles
Approches du génie logiciel ► Approches semi-formelles
Processus de développement logiciel ► Approches empiriques
► Les grands principes du génie logiciel (Anticipation des
évolutions)
42
Un logiciel a un cycle de vie plus complexe que l’habituel
commande → spécification → production → livraison
La maintenance est la gestion des évolutions du logiciel.
Il est primordial de prévoir les évolutions possibles d’un logiciel
pour que la maintenance soit la plus efficace possible.
Pour cela, il faut s’assurer que les modifications à effectuer soient
le plus locales possibles.
Ces modifications ne devraient pas être intrusives car les
modifications du produit existant remettent en cause ses précédentes
validations.
Concevoir un système suffisamment riche pour que l’on puisse le
modifier incrémentalement est l’idéal.
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Approches formelles
Approches du génie logiciel ► Approches semi-formelles
Processus de développement logiciel ► Approches empiriques
► Les grands principes du génie logiciel (Généricité)
43
proposer des solutions plus générales que le problème pour
pouvoir les réutiliser et les adapter à d'autres cas
Un logiciel réutilisable a beaucoup plus de valeur qu’un composant
dédié.
Un composant est générique lorsqu’il est adaptable.
Exemple :
plutôt que d’écrire une identification spécifique à un écran particulier,
écrire (ou réutiliser) un module générique d’authentification (saisie
d’une identification et éventuellement d’un mot de passe).
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Approches formelles
Approches du génie logiciel ► Approches semi-formelles
Processus de développement logiciel ► Approches empiriques
► Les grands principes du génie logiciel (Construction
incrémentale)
44
Un développement logiciel a plus de chances d’aboutir s’il suit
un cheminement incrémental (baby-steps).
Exemple Laquelle de ses deux méthodes de programmation
est la plus efficace ?
1. Écrire l’ensemble du code source d’un programme et compiler.
2. Écrire le code source d’une fonction ou module, le compiler, et
passer à la suivante.
45 processus de développement logiciel
Introduction
Activités du développement logiciel
Modèles de cycle de vie d’un logiciel
► Introduction (1/2)
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel
Approches du génie logiciel ► Modèles de cycle de vie d’un logiciel
Processus de développement logiciel
46
Un processus de développement logiciel est un ensemble
(structuré) d’activités que conduisent à la production d’un
logiciel
« La qualité du processus de fabrication est garante de la
qualité du produit »
Pour obtenir un logiciel de qualité, il faut en maîtriser le
processus d’élaboration
La vie d’un logiciel est composée de différentes étapes
La succession de ces étapes forme le cycle de vie du logiciel
Il faut contrôler la succession de ces différentes étapes
► Introduction (2/2)
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel
Approches du génie logiciel ► Modèles de cycle de vie d’un logiciel
Processus de développement logiciel
47
En pratique:
Il n’existe pas de processus idéal.
La plupart des entreprises adapte les processus
existants à leurs besoins.
Ces besoins varient en fonction du domaine, des
contraintes de qualité, des personnes impliquées.
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel
Approches du génie logiciel ► Modèles de cycle de vie d’un logiciel
Processus de développement logiciel
48
Les étapes ou Activités du développement d’un logiciel
Analyse des besoins
Spécification
Conception
Programmation
Validation et vérification
Livraison
Maintenance
Chaque Activité:
possède des entrées et des sorties
Les livrables font parties des sorties (Documents, Planning, code
source)
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel (Analyse des besoins)
Approches du génie logiciel ► Modèles de cycle de vie d’un logiciel
Processus de développement logiciel
49
Objectif :
Comprendre les besoins du client
Objectifs généraux, environnement du futur système,
ressources disponibles, contraintes de performance...
Entrée : Fournie par le client
Expert du domaine d'application, futur utilisateur
Documents produits : Cahier des charges (+ manuel
d'utilisation préliminaire)
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel (Spécification)
Approches du génie logiciel ► Modèles de cycle de vie d’un logiciel
Processus de développement logiciel
50
Objectif :
É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)
Entrée : Cahier des charges + considérations de
faisabilité
Document produit : Cahier des charges fonctionnel
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel (Conception)
Approches du génie logiciel ► Modèles de cycle de vie d’un logiciel
Processus de développement logiciel
51
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é...)
Entrée : Cahier des charges fonctionnel
Document produit : Dossier de conception
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel (Programmation)
Approches du génie logiciel ► Modèles de cycle de vie d’un logiciel
Processus de développement logiciel
52
Objectif :
Implémentation de la solution conçue
Choix de l'environnement de développement, du/des
langage(s) de programmation, de normes de
développement...
Entrée : Dossier de conception
Documents produits : Code documenté + manuel d'utilisation
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel
Validation et vérification 1/3
Approches du génie logiciel ►
Processus de développement logiciel ► Modèles de cycle de vie d’un logiciel
53
Objectifs :
Validation : assurer que les besoins du client sont satisfaits (au
niveau de la spécification, du produit fini...)
Vérification : assurer que le logiciel satisfait sa spécification
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel
Validation et vérification 2/3
Approches du génie logiciel ►
Processus de développement logiciel ► Modèles de cycle de vie d’un logiciel
54
Essayer le logiciel sur des données d’exemple pour s’assurer qu’il
fonctionne correctement
Tests unitaires : faire tester les parties du logiciel par leurs
développeurs
Tests d’intégration : tester pendant l’intégration
Tests de validation : pour acceptation par l’acheteur
Tests système : tester dans un environnement proche de l’environnement
de production
Tests Alpha : faire tester par le client sur le site de développement
Tests Bêta : faire tester par le client sur le site de production
Tests de régression : enregistrer les résultats des tests et les comparer à
ceux des anciennes versions afin de vérifier le taux de compatibilité
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel
Validation et vérification 3/3
Approches du génie logiciel ►
Processus de développement logiciel ► Modèles de cycle de vie d’un logiciel
55
Méthodes de validation :
Revue de spécification, de code
Prototypage rapide
Développement de tests exécutables
Méthodes de vérification :
Test (à partir de la spécification) :exécution d'un programme sur des
données choisies dans le but de détecter des non-conformités par
rapport à la spécification
Preuve de programmes :preuve mathématique qu'un programme
satisfait sa spécification en termes de pré- et post-conditions
Model-checking: analyse d'un modèle du programme dans le but de
prouver mathématiquement qu'il vérifie certaines propriétés dynamiques
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel (Livraison)
Approches du génie logiciel ► Modèles de cycle de vie d’un logiciel
Processus de développement logiciel
56
Fournir au client une solution logicielle qui fonctionne
correctement Installation :
rendre le logiciel opérationnel sur le site du client
Formation: enseigner aux utilisateurs comment se servir
du logiciel
Assistance : répondre aux questions des utilisateurs
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel
Maintenance 1/3
Approches du génie logiciel ►
Processus de développement logiciel ► Modèles de cycle de vie d’un logiciel
57
Lois de Belady et Lehman:
❑ Un logiciel est en constante évolution
La livraison n’est pas une fin en soi, après sa livraison un
logiciel peut être modifié
❑ Lorsqu’un logiciel évolue, il devient:
✓ moins structuré
✓ Plus complexe
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel
Maintenance 2/3
Approches du génie logiciel ►
Processus de développement logiciel ► Modèles de cycle de vie d’un logiciel
58
On distingue trois types de maintenance:
Maintenance Corrective : identifier et corriger des erreurs
trouvées après la livraison:
◼ Identifier la défaillance;
◼ le fonctionnement Localiser la partie du code responsable;
◼ Corriger et estimer l’impact d’une modification
Attention!!!
◼ La majorité des corrections introduisent de nouvelles erreurs
◼ Les coûts de correction augmentent considérablement avec le
délai de détection
La maintenance corrective donne lieu à des nouvelles
livraisons
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel
Maintenance 3/3
Approches du génie logiciel ►
Processus de développement logiciel ► Modèles de cycle de vie d’un logiciel
59
Maintenance Adaptative : Adapter le logiciel afin qu’il continue
à fonctionner correctement en tenant compte des changement
enregistrés dans l'environnement:
❑ format des données,
❑ environnement d'exécution,
❑ changement de SGBD,
❑ Maintenance Perfective : comprend tous les changements
faits sur un système afin de satisfaire aux besoins de l’utilisateur.
❑ améliorer la performance,
❑ ajouter des fonctionnalités,
❑ améliorer la maintenabilité.
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel
Quelques statistiques 1/2
Approches du génie logiciel ►
Processus de développement logiciel ► Modèles de cycle de vie d’un logiciel
60
Origine des erreurs Coût de la maintenance
Définition des besoins Conception Définition des besoins Conception
Codage Intégration & Tests Codage Intégration & Tests
1% 4%
10%
13%
7%
27% 56%
82%
Source Martin & Leffinel
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel
Quelques statistiques 2/2
Approches du génie logiciel ►
Processus de développement logiciel ► Modèles de cycle de vie d’un logiciel
61
❑ Répartition de l’effort
Définition des
besoins
Conception
Codage
Intégration &
Tests
Maintenance
Source Martin & Leffinel Répartition d'effort de développement
► Introduction
Préliminaires
Critères de réussite d’un projet informatique ► Activités du développement logiciel
Approches du génie logiciel ► Modèles de cycle de vie d’un logiciel
Processus de développement logiciel
62
« La qualité du processus de fabrication est garante de la qualité du produit »
Ensemble d’activités conduisant à la production d’un logiciel:
processus de développement ou Cycle de vie d’un logiciel
Buts:
Maitriser le projet,
bien le découper
assigner correctement les tâches
anticiper et gérer les risques.
On peut distinguer deux classes de Cycle de vie logiciel:
Modèles linéaires (classiques)
◼ Modèle en cascade
◼ Modèle en V
Modèles incrémentaux et itératifs
◼ Modèle en prototype
◼ Modèle en spirale
◼ Modèle incrémental