Les Ateliers de Génie Logiciel
Les Ateliers de Génie Logiciel
Sources
Cours de Christine Solnon
Cours de Jean-Pierre Fournier
Cours de Fabrice Kordon
Cours de Françoise Deloule
Plan
1. Introduction
2. Qu'est ce qu'un atelier de génie logiciel ?
3. Les outils « CASE »
4. L'intégration d'outils CASE
5. Les différents types d'AGL
6.
Introduction
Comment faire un logiciel ?
Introduction
« 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 »
(arrêté du 22 déc. 81)
Autrement dit,
Autrement dit, et de façon plus générale, un logiciel est un
ensemble de programmes informatiques (du code) mais
également un certain nombre de documents se rapportant à ces
programmes et nécessaires à leur installation, utilisation,
développement et maintenance: spécifications, schémas
conceptuels, jeux de tests, mode d'emploi, ... .
Introduction
La crise du logiciel
La ``crise du logiciel'' est apparue à la fin des années 60 et provient
d'un décalage entre les progrès matériels d'une part et logiciels d'autre
part: alors qu'apparaissaient les ordinateurs de la troisième génération,
de plus en plus puissants et de moins en moins coûteux, la construction
de logiciels restait dans le domaine de l'artisanat et du folklore, où
chacun y allait de sa petite recette. De fait, alors que les nouvelles
machines rendaient possibles des applications jusqu'alors irréalisables,
les méthodes de développement logiciel ne s'appliquaient pas à de
grands systèmes :
Introduction
La crise du logiciel
la construction de logiciels coutait très cher (200 millions de dollars pour
fabriquer OS-360),
les délais n'étaient pas respectés (2 ans de retard pour les premiers
compilateurs PL/1, Algol 68, ADA),
les logiciels n'étaient pas évolutifs (parfois écrits en assembleur pour un type
de machine) ce qui les rendait très rapidement obsolètes,
avec des performances poussives (Univac, le système de réservation pour United
Air Lines au début des années 75 n'a jamais servi car les temps de réponse
étaient trop longs !),
une fiabilité aléatoire (la sonde américaine qui devait aller sur Vénus s'est
perdue, à cause d'une mauvaise instruction... plus récemment, la trajectoire de
Ariane 5 a été modifiée à cause d'un débordement de capacité),
et une convivialité discutable (des interfaces homme/machine inexistantes).
Introduction
Le génie logiciel
« Le génie logiciel est l'ensemble des activités de conception et
de mise en oeuvre des produits et des procédures tendant à
rationaliser la production du logiciel et son suivi » (arrêté du
30 déc. 83)
Autrement dit,
le génie logiciel est « l'art » de produire de bons logiciels, au
meilleur rapport qualité/prix.
Il est basé sur des méthodologies et des outils qui permettent
de formaliser et même d'automatiser partiellement la
production de logiciels,
Il est également basé sur des concepts plus informels, et
demande des capacités de communication, d'interprétation et
d'anticipation.
Le génie logiciel demande de la part de l'informaticien
Une bonne formation aux différentes techniques (le « savoir »)
Un certain entraînement et de l'expérience (le « savoir
faire »).
Si le génie logiciel est l'art de produire de bons
logiciels, il est nécessaire de fixer les critères de
qualité d'un logiciel.
Les qualités d'un logiciel
On peut séparer ces qualités en deux catégories
lors de l'utilisation
lors de la maintenance
Les qualités du logiciel lors de l'utilisation
fiabilité (correction et robustesse),
adéquation aux besoins (y compris aux besoins implicites !),
ergonomie (simplicité et rapidité d'emploi, personnalisation),
efficacité,
convivialité,
faible coût et respect des délais bien entendu,
etc.
Les qualités du logiciel lors de la maintenance:
Une enquête effectuée aux USA en 1986 auprès de 55 entreprises
révèle que 53% du budget total d'un logiciel est affecté à la
maintenance. Ce coût est réparti comme suit :
34% maintenance évolutive : modification des spécifications initiales ;
10% maintenance adaptative : nouvel environnement, nouveaux
utilisateurs ;
17% maintenance corrective : correction des bogues ;
16% maintenance perfective : améliorer les performance sans changer
les spécifications ;
6% assistance aux utilisateurs ;
6% contrôle qualité ;
7% organisation/suivi ;
4% divers.
Ceci s'explique par l'augmentation de la complexité des logiciels avec la
montée en puissance des performances du matériel.
Les qualités du logiciel lors de la maintenance:
un logiciel doit pouvoir être maintenu pour le corriger,
l'améliorer, l'adapter aux changements de son environnement,
...
Pour cela, il doit être:
Flexible
utilisation du paramétrage, de la généricité, de l'héritage,
Portable
éviter l'assembleur et les langages trop confidentiels,
Structuré
utilisation de modules ou de classes, de procédures ou de
fonctions
Avec une indépendance maximum entre les structures
utilisation de l'abstraction,
et bien sur, documenté.
Ces différentes qualités ne sont pas toujours compatibles ni
même réalisables
Nécessaire de trouver des compromis.
Les objectifs de qualité doivent être définis pour chaque
logiciel.
La qualité du logiciel doit être contrôlée par rapport à ces
objectifs.
Les qualités du logiciel
Selon les domaines, des définitions plus précises de la qualité du logiciel
peuvent se dégager.
En génie logiciel divers travaux ont mené à la définition de la qualité du
logiciel en termes de facteurs, qui dépendent, entre autres, du domaine
de l'application et des outils utilisés.
Les facteurs peuvent être classés en internes (visibles par les
développeurs) et externes (visibles par les utilisateurs).
Parmi ces derniers nous retiendrons:
Validité : aptitude d'un produit logiciel à remplir exactement ses
fonctions, définies par le cahier des charges et les spécifications.
Fiabilité (ou robustesse) : aptitude d'un produit logiciel à fonctionner
dans des conditions anormales.
Extensibilité : facilité avec laquelle un logiciel se prête à une
modification ou à une extension des fonctions qui lui sont demandées.
Réutilisabilité : aptitude d'un logiciel à être réutilisé, en tout ou en
partie, dans de nouvelles applications.
Les qualités du logiciel lors de l'utilisation
Compatibilité : facilité avec laquelle un logiciel peut être
combiné avec d'autres logiciels.
Efficacité : Utilisation optimales des ressources matérielles.
Portabilité : facilité avec laquelle un logiciel peut être
transférée sous différents environnements matériels et
logiciels.
Vérifiabilité : facilité de préparation des procédures de test.
Intégrité : aptitude d'un logiciel à protéger son code et ses
données contre des accès non autorisés.
Les qualités du logiciel lors de l'utilisation
Facilité d'emploi : facilité d'apprentissage, d'utilisation, de
préparation des données, d'interprétation des erreurs et de
rattrapage en cas d'erreur d'utilisation.
Ces facteurs sont parfois contradictoires, le choix des compromis
doit s'effectuer en fonction du contexte. Par exemple,la facilité
d'emploi et la fiabilité peuvent être contradictoires.
Activités de développement
Le logiciel est produit selon un procédé de production ou un
processus de développement. Ce processus a les caractéristiques
suivantes :
il fait une large place à l'analyse des besoins, à la conception et
à la validation ;
il s'opère par raffinements successifs : la partie technique du
développement d'un logiciel consiste en l'établissement d'une
suite de descriptions de plus en plus proches d'un programmes
exécutable et sa documentation ;
certaines étapes peuvent déclencher la révision des étapes
précédentes : un manque de précision des spécifications peut
être détecté lors de la conception. Une erreur de conception
peut ne paraître que lors du test du logiciel.
Activités de développement
pour pallier au problème de l'invisibilité, il donne lieu à la
production de documents intermédiaires permettant de contrôler
un logiciel en cours de développement ;
la plupart du temps il est poursuivi après la livraison du logiciel,
pour la maintenance qui peut remettre en cause les fonctions du
système et impliquer des modifications et/ou un
redéveloppement.
L'ensemble des phases par lesquelles passe le logiciel s'appelle le
cycle de vie.
Activités de développement
Les activités relevant du génie logiciel sont bien définies :
l'analyse des besoins;
la spécification globale;
la conception architecturale et détaillée.
représentent environ 40% de l'effort dans un projet bien
conduit;
la programmation
représentant 15 à 20% de l'effort;
la validation et vérification
représentent de l'ordre de 40% de l'effort;
la gestion de configuration et intégration.
Activités de développement
l'analyse des besoins :
But : éviter de produire un logiciel non adéquat.
Démarche : pour établir les besoins (le cahier des charges) il faut
étudier :
le domaine d'application ;
l'état actuel de l'environnement du futur système ;
le rôle du système ;
les ressources disponibles et requises ;
les contraintes d'utilisation ;
les performances attendues ;
...
Il faut surtout établir un dialogue avec les experts du domaine, qui ne
sont pas forcément des informaticiens, et, pour ce faire, utiliser des
méthodes plutôt cognitives : entretiens, questionnaires, observation de
l'existant et étude de situations similaires.
Cette activité doit être menée en liaison avec les études de faisabilité
et la planification, et doit se poursuivre durant tout le processus de
développement.
Activités de développement
la spécification globale :
But : Établir une première description du futur système.
Cette activité utilise les résultats de l'analyse des besoins, les
considérations techniques et la faisabilité informatique pour
produire une description de ce que doit faire le système mais
sans préciser comment il le fait (on précise le quoi mais pas le
comment).
Activités de développement
Conception architecturale et détaillée :
But : enrichir la description du logiciel de détails
d'implémentation afin d'aboutir à une description très proche
d'un programme (décrire le comment).
La conception architecturale (ou conception globale) a pour but de
décomposer le logiciel en composants plus simples, définis par leurs
interfaces et leurs fonctions (les services qu'ils rendent).
La conception détaillée fournit pour chaque composant une
description de la manière dont les fonctions ou les services sont
réalisés : algorithmes, représentation des données.
Activités de développement
Conception architecturale et détaillée :
Le contrat qui lie l'ensemble des développeurs entre eux et avec le
chef de projet est la conception. La conception décrit de manière
détaillée l'ensemble des solutions techniques devant être mises en
oeuvre pour implanter ce qui a été spécifié. Il est formellement
impossible de faire plus, ou moins, que ce que la conception a décrit.
Aucune initiative individuelle n'est possible dans ce cadre. Toutes
les influences et toutes les contraintes ont été prises en compte
pour concevoir, et l'initiative d'un membre de l'équipe n'ayant pas
de vision d'ensemble est à proscrire (rappelons que personne n'a
jamais une vision d'ensemble suffisamment détaillée d'un grand
projet pour prendre une décision technique très pointue).
Activités de développement
Conception architecturale et détaillée :
La conception détaillée reflète évidemment tous les éléments
annoncés dans la spécification. Elle y ajoute de façon aussi détaillée
que souhaitable les conditions "quoi; comment, quand" des différents
modules qu'elle décrit.
Activités de développement
Programmation :
But : réalisation, à partir de la conception détaillée, d'un ensemble
de programme ou de composants de programmes.
Activités de développement
Programmation :
Un logiciel est découpé en éléments logiques indépendants (en
général des classes et opérations). Il est bon de décrire
comment chaque élément s'engage sur les points suivants :
quoi : quelle est la fonctionnalité implantée par ce
programme. Bien sûr, dire ce que fait une fonction est une
condition incontournable.
comment : quelles sont les règles de nommage (noms de
fonction, types des arguments, types en général) pour obtenir
cette fonctionnalité.
quand : quelles sont les données de base pour lesquelles
son fonctionnement est garanti (contraintes de domaine).
Activités de développement
Programmation :
Le corollaire de ces engagements est une facilité de
développement accrue. En effet, on ne peut exiger d'une
fonction de prévoir, voire de traiter un cas exceptionnel. Hors
de son domaine de définition officiel, on doit considérer qu'une
fonction produit des résultats indéterminés (il est bon de
penser que le programme s'interrompra).
En d'autres termes, on ne doit pas considérer qu'une fonction
traite une exception. Traiter une exception, c'est à dire s'en
sortir honorablement, revient à ajouter l'exception au domaine
de définition, même si le résultat du calcul sur cette valeur est
sujet à caution, ou même illogique.
Il arrive toutefois que lorsque le développement n'est pas bien
encadré on finisse par ne plus savoir ce que fait exactement
une fonction.
Ce n'est pas rare !!!
Activités de développement
Programmation :
Deuxième pôle du contrat "interne" entre les différents modules
d'un logiciel, l'interface de programmation (API : Application
Programming Interface en anglais) doit être définie une fois pour
toutes de façon très rigoureuse, et ne plus varier. Ainsi, les différents
développeurs d'une équipe peuvent utiliser dans leurs programmes les
formes définitives des appels de fonctions, noms de types et noms de
variables.
Il est d'usage que sur l'ensemble d'un projet, ou sur une même
gamme de produits, soient définis des guides de style pour la
définition des types et des signatures de fonctions et méthodes (y
compris leur nommage). On pourra, par exemple, décider que toutes les
fonctions du module graphique commencent par "Gr", que tous les
objets externes aient des noms commençant par une lettre capitale,
que tous les objets statiques soient en majuscules, qu'aucun nom de
On appelle signature d'une fonction l'énoncé exact de son en tête
mentionnant la totalité des types des arguments avec leurs atributs
Activités de développement
Gestion de configurations et intégration
La gestion de configurations a pour but de maîtriser l'évolution
et la mise à jour des composants tout au long du processus de
développement. Les environnements intégrés de développement
permettent de gérer de façon plus cohérentes les documents
relatifs à un logiciel.
L'intégration a pour but de réaliser un ou plusieurs systèmes
exécutables à partir des composants. Les choix possibles
correspondent à des variantes du système.
Activités de développement
Validation et vérification
La validation a pour but de répondre à la délicate question :
a-t-on décrit le bon système, celui qui répond à l'attente
des utilisateurs ? Elle consiste essentiellement en des revues
et inspections de spécifications ou de manuels et du
prototypage rapide.
La vérification répond à la question : le développement est-
il correct par rapport à la spécification globale ? Ce qui
consiste à s'assurer que les descriptions successives et, in
fine, le logiciel lui-même satisfont la spécification globale.
Elle inclut des inspections de spécifications et de programmes
ainsi que de la preuve et du test.
Activités de développement
Validation et vérification
On distingue les tests statiques (examen ou analyse du texte)
et les tests dynamiques. les tests dynamiques consistent en
l'exécutions du logiciel sur un sous-ensemble des données
permettant de vérifier :
tous les chemins d'accès logiques ;
la plage de validité des données et en particulier les «
conditions limites » ;
la conformité des résultats aux spécifications.
Par ailleurs, on distingue trois niveaux de test :
les tests unitaires pour les composants isolés ;
les tests d'intégration pour un assemblage de
composants ;
Le test système qui consiste à tester le logiciel dans
des conditions opérationnelles et au delà (surcharge,
défaillances matérielles, ...).
Problématique:
Comment faciliter la réalisation de ces étapes ?
Comment assurer la cohérence ?
Les AGL!
Acronymes:
AGL : Atelier de Génie Logiciel
CASE : Computer Aided Software Engineering