Génie Logiciel – Première partie
Introduction générale
Ø Plan de la première partie
Rappels historiques et définition du génie logiciel
Présentation des cycles de développement (concepts et outils)
Les Tests
ú Tests unitaires, tests de couverture, tests de non régressions…
Les grands principes de développement
ú KISS, SOLID, DRY, YAGNI…
Les patrons de conception
ú Les patrons du GoF essentiellement
Ø Objectifs:
Comprendre comment s’inscrit le développement dans un processus industriel
Savoir écrire des tests pour produire du code plus fiable
Maitriser les principaux patrons de conception
Définitions
Définitions
Ø Selon le journal officiel et l’arrêté du 30 décembre 1983: « Le génie logiciel est
l'ensemble des activités de conception et de mise en œuvre des produits et
des procédures tendant a rationaliser la production du logiciel et son suivi »
Ø La qualité d’un logiciel se mesure à travers plusieurs items
Fiabilité
ú Le logiciel répond au besoin initial
Ø « Le logiciel est l'ensemble des programmes, procédés et règles, et
éventuellement de la documentation, relatifs au fonctionnement d'un
ensemble de traitement de l'information »
Ø Le génie logiciel couvre tout ce qui est lié à la fabrication d’un logiciel
C’est l’ « art » de produire de bons logiciels au meilleur rapport qualité/prix
Il se base sur des méthodes et sur des outils permettant de formaliser et
d’automatiser la production de logiciels
Il nécessite une bonne connaissance des différentes techniques mais également
de l’entrainement et de l’expérience
3
ú Le logiciel fonctionne même dans des conditions imprévues au départ
Ergonomie
ú L’utilisateur peut exploiter le logiciel de manière simple et intuitive
Extensibilité
ú Le logiciel peut être enrichi sans devoir repartir de 0 à chaque fois
Réutilisabilité
ú Le logiciel peut être utilisé dans des contextes différents de celui de départ
Compatibilité (ou interopérabilité)
ú Le logiciel peut interagir avec d’autres logiciels pour fournir de nouveaux services
Portabilité
ú Capacité du logiciel à être adapté à des environnements informatiques différents
2
4
Définitions
Coût
Rappels historiques
Ø Jusque dans les années 60, le logiciel n’était pas considéré comme quelque
ú Direct: Argent investi pour le développement et la maintenance du logiciel au cours de
chose de critique
sa vie
ú Indirect: Argent généré par les utilisateurs pour son utilisation et sa possession
Performances
ú En terme de résultats, de vitesse d’exécution, d’utilisation mémoire…
Intégrité
Ø Plusieurs organismes de standardisation/normalisation propose des normes
pour évaluer les logiciels
AFNOR, ANSI, ISO (9126+), ACM et IEEE
Ø Le génie logiciel est donc bien plus que simplement du développement
Rapidement le fait qu’il n’y ait pas de méthodes unifiées a posé problème
ú Les développements individuels ne tenaient pas les délais, étaient souvent émaillés de
bug
Le coût du développement des logiciels n’a cessé de croitre alors que dans le
même temps le coût du matériel diminuait
Ø Le tournant a lieu à la fin des année 60 quand le coût de production d’un
logiciel a dépasse celui des machines qui le faisait fonctionner
Les temps sont explosés, les budgets dépassés, il y a de graves erreurs dans les
produits finaux, les logiciels produits ne sont pas maintenables…
On est entré dans ce que l’on appelle la crise du logiciel qui continue encore de
Le développement n’est qu’une partie d’un projet informatique
nos jours
5
Publicité
6
Rappels historiques
Rappels historiques
Ø La complexité explose et le coût de maintenance devient largement supérieur
Ø Les grands bugs de l’histoire
au coût de production
En 1962, la mission Mariner 1 qui devait explorer Vénus fut détruite après un vol
On considère qu’entre 1965 et 1995 la taille des logiciels a été multipliée par 100
de 293s
alors que la productivité des développeurs n’a été multiplié que par 3
Windows NT a été produit de zéro par 8 personnes à partir de 1988
ú Il a eu 3 ans de retard sur le planning initial qui était de 18mois
ú L’équipe est montée à 200 personnes pour NT 3,1, 800 personnes pour NT4
Windows 2000 avait une équipe de 1400 développeurs et 1700 testeurs
ú Le code source dans son ensemble occupait 50Gb et il fallait 2h pour le synchroniser et
8h pour le recompiler
ú Au total sa production aura mobilisé 5000 personnes pour un coût de 1 milliard de
dollars
ú Plus de détails sur : https://www.usenix.org/legacy/events/usenix-
win2000/invitedtalks/lucovsky_html/sld001.htm
ú Une erreur dans le code de guidage déviait la fusée vers le sol au lieu de la trajectoire
prévue ce qui a nécessité de la détruire en vol
« Une erreur de caractère en Fortran serait à l’origine du crash
« « Le trait d’union le plus cher de l’histoire » Arthur C. Clarke
ú Cout: 18,5 millions de dollars
En 1996 le vol inaugural d’Ariane 5 s’auto détruit au bout de 36,7s à cause d’un
programme issue d’Ariane 4
ú Le programme n’a pas supporté la puissance d’accélération d’Ariane 5
« En fait Ariane 5 s’inclinait plus vite qu’Ariane 4 ce qui était normal
« Le programme a considéré que la trajectoire était non conforme au plan de tir et a
déclenché l’auto destruction
ú Il transportait 4 satellites d’une valeur de 370 millions de dollars
7
8
Rappels historiques
Rappels historiques
En 1999, perte de la sonde Mars climate orbiter après 9 mois de voyages
ú Il y a eu une confusion entre des pieds et des mètres dans un sous programme
ú Cout: 120 millions de dollars
En l’an 2000, le fameux bug ne se produisit pas mais les travaux de vérification et
de maintenance ont été évalués à 600 millions de dollars
En 2002, l’hôpital St Mary’s Mercy dans le Michigan a déclaré par erreur la mort
de 8500 personnes
ú Elles ont reçus à leur domicile une facture et une déclaration de décès
ú Les compagnies d’assurances et la sécurité sociale américaine ont également été
prévenue
ú Il a fallu des semaines pour que ces « décès » soient annulés
Entre 2009 et 2011, la Lexus ES350 a été impliqué dans de nombreuses sorties de
route à grande vitesse
ú L’ordinateur de bord pouvait accélérer jusqu’à 150km/h en désactivant la pédale de
frein. Bilan: entre 200 et 400 morts
Ø En 2009, le moteur de recherche de google a notifié ses utilisateurs que tous
les sites du monde étaient malicieux…..y compris lui-même
Ø En 2012, le groupe Knight Capital a perdu 440 millions de dollars en 45
minutes à cause d’un mauvais déploiement d’une mise à jour d’un
programme de trading
La mise à jour ayant échouée, l’ancienne version du programme a continué à être
utilisée pendant ces 45 minutes
Ø Plus globalement, en 2002, le NIST a estimé que les erreurs logicielles
coutaient 59 milliards de dollars annuellement ce qui représente 0,6% du PIB
des USA
9
10
Les cycles de développement
Les cycles de développement
Ø Les cycles de développement sont des processus définissant un ensemble
structuré d’activités permettant d’obtenir un logiciel
Ø Il existe de nombreux modèles, le sujet ayant été étudié depuis les années 80,
mais tous reposent au moins sur 4 phases essentielles
La spécification des besoins
La conception générale du logiciel qui va servir à définir son organisation
L’implémentation qui sera la réalisation qui en découle
La validation (ou tests la plupart du temps) qui permet de s’assure que la solution
proposée vérifie les besoins définis à la première phase
Publicité
La prise en compte de l’évolution pour pouvoir répondre aux changements de
besoins
12
Les cycles de développement
Ce qu’il faut éviter
Ø Le cycle de développement peut également inclure
Les produits qui sont les résultats des activités des processus
Les rôles qui définissent les responsabilités des personnes impliquées dans les
différents processus
Les pré-conditions et les post-conditions qui permettent de définir les assertions
en entrée et en sortie des processus
Ø Du point de vue méthodologique on trouve une vision dirigée par la
planification et une vision agile
La planification définis tous les processus et actions à l’avance et les progrès sont
évalués par rapport à ce plan
Dans les méthodes agiles on privilégie l’approche incrémentale qui permet
d’adapter les processus pour s’adapter aux évolutions des besoins
En pratique, on retrouve souvent un mélange des deux approches
13
http://bonkersworld.net/building-software
Les cycles de développement – La cascade
Les cycles de développement – La cascade
Ø Introduit dans les année 70, basé sur le fonctionnement des projets en BTP
Analyse des besoins
Analyse des besoins
Spécifications
Conception de
l’architecture
Conception de
détaillée
Implémentation
Tests et validation
Déploiement et
maintenance
15
Spécifications
Ø L’analyse des besoins permet de faire l’analyse du problème avec le client
L’objectif est de définir les attentes et de déterminer ce qu’il est possible et
impossible de faire
On y fixe les conditions générales d’exécution du projet
Permet de fixer le cahier des charges
Ø Les spécifications reprennent ce cahier des charges
Part de la description informelle pour arriver à des choses précises
ú Objets à manipuler, taches à effectuer..
Permet de planifier de manière détaillée la suite du processus
14
16
Les cycles de développement – La cascade
Les cycles de développement – La cascade
Conception de
l’architecture
Conception de
détaillée
Ø La conception de l’architecture est une conception générale du système
On définit les principaux composants et la manière dont ils s’interfacent
On choisit les principales structures de données à utiliser
Ø La conception détaillée permet de rentrer dans le cœur des composants
définis dans l’étape précédente
On détaille jusqu’à arriver aux lignes de code quasiment
Ø Ces deux phases reposent souvent sur l’utilisation de méthodologie comme
UML
Les cycles de développement – La cascade
Ø Avantages
Facilite la gestion de projet en particulier lorsque le projet est distribué sur
plusieurs sites
Simple et logique
Ø Inconvénients
Le découpage rigide du projet rend difficile de s’adapter aux changements des
besoins du client
ú Lorsque le projet prend plusieurs années cela peut être problématique surtout dans le
monde informatique où les choses évoluent rapidement
ú Le modèle est par contre très bien adapté si les exigences (requirements) sont bien
fixées et ne sont pas sujette à changement
Les tests arrivent tard dans le processus
Publicité
ú Il peut arriver qu’ils mettent en évidence des problèmes nécessitant de remonter à la
première étape ce qui est alors très couteux
17
19
Implémentation
Tests et validation
Ø L’implémentation est la partie de réalisation du programme dans le langage
choisi dans les étapes supérieures
Cette phase s’appuie sur la conception et sur les exigences
Elle est parfois décomposer en deux taches: Implémentation et Intégration
ú La tache d’intégration consiste à regrouper les différents composants implémentés pour
arriver au produit final
Ø Les tests et validation permettent de vérifier que le produit logiciel obtenu est
bien conforme aux attentes du client
Les tests sont automatisable et sont écrits indépendamment de la phase
d’implémentation
18
Les cycles de développement – La cascade
Source Univ. of London Computer Center Newsletter n53 march 73
20
Les cycles de développement – Le cycle en V
Les cycles de développement – Le cycle en V
Ø C’est une évolution du modèle précédent
Ø Avantages
Simple à appréhender
Les vérifications ont lieu à chaque étape ce qui lui permet d’être plus adaptable
que le modèle en cascade
Segmente clairement le projet
Mise en avant de l’analyse
Ø Inconvénients
Vision en tunnel (peu évolutif)
Manque de souplesse
Nécessite une bonne connaissance des besoins sous peine de déveloper un
logiciel inadapté
Découverte tardive d’erreurs d’analyse
21
22
Les cycles de développement – L’itératif
Les cycles de développement – L’itératif
Ø Dans le développement logiciel, les besoins évoluent rapidement et les
processus classique comme le modèle en cascade ne sont pas adaptés à tous
les projets
Ø Le modèle itératif ou incrémental consiste a concevoir, développer et tester
le logiciel de manière incrémentale en ajoutant progressivement de nouvelles
fonctionnalités
C’est une combinaison du modèle en cascade et de la philosophie du prototypage
Le logiciel est décomposé en composants développés en parallèle et qui sont
fournis au client dès qu’ils sont prets
23
Source: wikipédia
24
Les cycles de développement – L’itératif
Les cycles de développement – Le modèle en spirale
Ø Avantages
Il est plus simple et plus rapide de détecter les incohérences
Ø C’est un modèle qui est centré autour de la gestion des risques avec un vision
en spirale des activités plutôt qu’une séquence avec des retours en arrière
Après chaque itération on effectue des tests de non-régression pour assurer la
Chaque boucle de la spirale représente une étape du processus de
cohérence d’ensemble
Plus simple à tester que les autres modèles car il y a normalement peu de
changement dans les exigences au cours d’une itération
Les premiers prototypes sont disponibles rapidement et permettent au client de
mieux suivre les avancés
Ø Inconvénients
Le nombre de cycle est élevé et donc le projet d’ensemble peut se révéler couteux
L’ajout de fonctionnalités peut avoir un impact sur l’architecture générale du
système qui peuvent faire varier grandement les prototypes
développement
Les risques sont pointés et résolus au fur et à mesure du processus
Ø Il repose sur 4 grands secteurs
La détermination des objectifs permet d’identifier les objectifs de chaque itération
L’identification et la réduction des risques
Le développement et les tests sont ensuite réalisés
Publicité
La planification de l’itération suivante est réalisée
25
26
Les cycles de développement – Le modèle en spirale
Les cycles de développement – Le modèle en spirale
Ø Avantages
Souvent utilisés dans les projets où les risques sont importants (et donc les
impacts financiers pour le développeur et pour le client)
Il y a moins de divergence entre les pré-requis et la conception
ú Les prérequis sont régulièrement vérifiés voir modifiés à chaque passage dans la spirale
ú La production de prototype permet de mieux cibler les couts
Il y a des retours de toutes les parties prenantes (client, concepteur, développeur)
assez rapidement
ú L’expertise du client se développe au fur et à mesure des itérations
Ø Inconvénients
Il faut éviter que les premiers prototypes ne se retrouvent dans le système de
production pour éviter que des risques ne persistent dans ce dernier
Il y a un risque que des boucles se forment à l’intérieur de la spirale
27
28
Les cycles de développement – Le processus unifié
Les cycles de développement – Le processus unifié
Ø Le processus unifié reprend cette idée d’unifier l’itératif avec le modèle en
Ø Une des versions les plus connues est RUP (Rational Unified Process)
cascade
Il est piloté par les cas d’utilisation
Il est centré sur l’architecture à travers la modélisation orientée objet, l’utilisation
Ø Il se décompose en 4 phases
Etudes d’opportunité
Elaboration de la solution à travers l’analyse du besoin
ú Choix de l’architecture et réalisation de prototype d’architecture en petites équipes
Construction de la solution
ú Enrichissement progressif des fonctionnalités
ú Réalisation d’une version béta et rédaction de la documentation
Transition vers le produit final
ú Fabrication, livraison, formation support technique …
29
Les cycles de développement – Les méthodes Agile
Les cycles de développement – Les méthodes Agile
Ø Les méthodes agiles sont des méthodes itératives réutilisant des principes du
processus unifié
Il prévilégie une planification souple et des itérations très courtes
Ø Le terme vient du manifeste agile qui repose sur 4 valeurs et 12 principes
Ø Il faut favoriser
les individus et leurs interactions plus que les processus et les outils
Un logiciel qui fonctionne plutôt qu’une documentation exhaustive
La collaboration avec les clients plutôt que la négociation contractuelle
L’adaptation au changement
Ø Les 12 principes généraux
Satisfaire le client en priorité
Accueillir favorablement les demandes de changement
Livrer le plus souvent possible des versions opérationnelles de l’application
Assurer une coopération permanente entre le client et l’équipe projet
Construire des projets autour d’individus motivés
Privilégier la conversation en face à face
Mesurer l’avancement du projet en termes de fonctionnalités de l’application
Faire avancer le projet à un rythme soutenable et constant
Porter une attention continue à l’excellence technique et à la conception
Faire simple
Responsabiliser les équipes
Ajuster à intervalles réguliers son comportement et ses processus pour être plus
31
efficace
30
32
Les cycles de développement – Les méthodes Agile
Les cycles de développement – Les méthodes Agile
Ø SCRUM
Ø eXtrem Programming
33
34