Genie Logiciel
Genie Logiciel
Genie Logiciel
Support de cours
Introduction au Génie
Logiciel
Mamoun ALISSALI
Novembre 1998
Avertissement
Ce document est en cours d'élaboration ce qui ne me permet pas d'en diffuser que la version HTML. En
attendant une version papier présentable, voici, en plus des références bibliographiques, quelques sites
WEB qui peuvent intéresser le lecteur :
● Programmation - Objets - Modélisation de la connaissance
● Préface
❍ Objectifs
❍ Position du problème
❍ Agencement de la programmation et de la conception
❍ Conclusion
● Principes du Génie Logiciel
❍ Introduction
■ Définitions
■ Objectif et nécessité
❍ Qualité du logiciel
❍ Modélisation
❍ Conditions limites
❍ Compromis de priorités
❍ Architectures type
■ Transformation par lots (Pipeline)
■ Transformation continue
■ Interface interactive
■ Simulation dynamique
■ Systémes temps réel
■ Gestionnaire de transactions
❍ Conception des objets
● Management des projets logiciels
● Gestion des projets Logiciels
● Validation, Vérification et tests
● Qualité et assurance qualité
● Gestion des configurations
● Liste des figures
● Références
● Index
Suivant : Objectifs Précédent : Support de cours : Introduction Père : Support de cours : Introduction
Préface
● Objectifs
● Position du problème
● Agencement de la programmation et de la conception
● Conclusion
Index
description des fonctions
expérimentalemaquette
abstraction ,
activité
analyse des risques
Analyse
des besoins
architecturale
conception
architecture
du système
fermée
ouverte
association ,
attribut ,
cahier des charges ,
cardianlité
classe
classe
fille
mère
clé
comportement ,
conception
architecturale
détaillée
globale
concurrence
configurations
gestion de
contrainte
couche ,
cycle de vie
cycle de vie
modèles de
d'objets
diagramme
d'états
diagramme
de données
dictionnaire
de l'événement
paramètres
description des fonctions
diagramme
d'objets
d'états
à flot de données|textbf
diagrammes
à flot de données
dictionnaire
de données
détaillée
conception
développement
processus de
encapsulation
entité
entité-association
en étoile
organisation
exploratoire
maquette
expérimentalemaquette
fille
classe
gestion
de configurations
globale
conception
généralisation
héritage
identité
instance
intégration
de logiciel
tests@{tests d'}
invisibilité
l'interface
utilisateur
logiciel
intégration de
noyau de
validation de
vérification de
maintenance
maquettage
maquette
exploratoire
masquage de données
modularité
Modularité
principes de
module ,
module
fermé
ouvert
modules
modèle
modèle
de la cascade
dynamique|textbf
en V
entité-association
objet
modèles
de cycle de vie
mère
classe
méthode
Méthode OMT
méthodes ascendantes
méthodes descendates
noyau
de logiciel
objet
modèle
opération
organisation
en étoile
paramètres
de l'événement
partage hiérarchique
partition
partitions
phase
polymorphisme
processus
de développement
procédé
de production
production
procédé de
propriété
protocôle
client-serveur
égal-à-égal
prototypage rapide
raffinements successifs
revue
réutilisation
scénario
signature
sous-classe
sous-système
spécialisation
super-classe
synchronisation
système
architecture du
test
système
tests
dynamiques
intégration@d'intégration
statiques
unitaires
transition
utilisateur
l'interface
validation
de logiciel
vérification
de logiciel
à flot de données
diagrammes
étape
état ,
événement
Objectifs
Ce document tente de présenter quelques aspects, de nature plutôt pratique, du vaste domaine du Génie
Logiciel. Nous insisterons sur trois points principaux : la conception du logiciel, la conduite de projet et
le travail d'équipe.
Les évolutions récentes dans le monde de l'informatique (taille et nature des logiciels, ouverture réseau,
etc.) créent une demande croissante de la part de l'industrie de concepteurs informaticiens. Pour diverses
raisons, la conception est généralement enseignée après la programmation. Quelque soit la démarche, il
est indispensable d'enseigner les deux : la programmation et la conception, mais lorsqu'il s'agit de <<
grands systèmes >> l'expérience prouve que la conception reste handicapée et en arrière plan lorsqu'elle
est introduite après une certaine expérience en programmation. Ainsi, notre approche vise à former des
concepteurs qui savent programmer plutôt que des programmeurs qui savent concevoir.
Pour éviter une polémique souvent rencontrée dans les milieux de l'enseignement et de l'industrie, il est
important de souligner que cette démarche au lieu de les contredire, renforce et appuie les points suivants
:
● les bases de l'informatique (programmation, algorithmique et structures de données) sont
indispensables ;
● la programmation orientée-objet est complexe et nécessite une attention particulière ;
● il est impératif que les étudiants puissent mener au moins un << grand projet >> de A a Z.
Sur un autre plan, étroitement lié au premier, les systèmes informatiques deviennent de plus en plus
grands et complexes. Ils ne peuvent plus être conçus, réalisés et maintenus par une seule (ou un nombre
réduit de) personne(s). D'où la nécessité de former nos étudiants au travail d'équipe et à la gestion des
projets également.
Position du problème
Un système informatique est un système complexe, qui répond à des besoins issus du << monde réel >>
et non pas des contraintes des ordinateurs sur lesquels il sera réalisé. Le tout est de faire le pont entre les
deux : exprimer une << modélisation du monde réel >> en termes de langage de programmation
fatalement lié à l'ordinateur. Cette dichotomie a de tout temps existé pour l'informatique. Si on tient
compte du très jeune âge de cette discipline relativement à d'autres domaines scientifiques, il paraît
évident que les techniques les plus récentes sont les plus adéquates.
Mais de quoi s'agit-il au juste ? De la modélisation du << monde réel >> à l'aide des techniques
orientées-objet et de la programmation qui porte le même nom. Mais les deux ne sont pas indissociables,
comme le prouvent des environnements très évolués, complexes, performants et fiables tels que
X/Window, Motif et DCE (tous disponible pour les plate-formes les plus courantes) conçus orienté-objet
et réalisés en C !
Agencement de la programmation et de
la conception
Mettons les choses à leurs places : la programmation est l'outil qui permet de réaliser ce qui a été conçu.
Mettre l'outil avant le concept revient à apprendre à un apprenti garagiste à utiliser le tournevis, la
perceuses et tous les détails de tous les outils dont il pourrait ou pas avoir besoin, sans lui expliquer à
quoi il servent vraiment ni lui montrer le véritable objectif : construire ou réparer une voiture ! Le
logiciel avec ses particularités (et surtout sa complexité) est un produit exactement comme (et parfois
beaucoup plus sérieusement) une voiture.
Il se trouve que la modélisation du monde réel, qui permet d'appréhender le logiciel dans sa globalité, est
aussi simple que notre propre conception du monde réel. Un objet chaise appartient à la classe des
chaises1 qui peut être décrite par des propriétés statiques (comme la couleur et le poids) et fonctionnelles,
comme le fait qu'on peut s'asseoir dessus2. Cette description générique peut être instanciée pour chaque
nouvel objet pour décrire ses caractéristiques propres3. Mais en même temps deux objets ayant
exactement les mêmes caractéristiques sont quand même deux objets différents4. Les chaises, aussi bien
que les tables, les armoires, etc. sont des meubles. La classe meuble regroupe toutes les caractéristiques
de ces << sous-classes >>, on dit que celles-ci héritent leur propriétés d'une << classe-mère >>5.
Ce sont là les concepts clefs de l'orienté-objet, le reste n'est pas plus complexe, alors que la
programmation orintée-objet, abordée séparément, paraît très complexe car elle doit ramener tout ça à
des structures de données et des algorithmes, tout ce qu'un ordinateur sait faire jusqu'à preuve du
contraire. Comment donc faire le pont entre les deux ? Il faut transcrire les objets du monde réel en objets
informatiques, c.à.d. tenir compte des contraintes qu'impose la réalisation sur ordinateur. Ces contraintes
sont variées mais très bien étudiées et classées dans des catégories pour lesquelles nous avons les
solutions adéquates ou, au moins, des idées assez précises. Pour ne prendre qu'un exemple simple, alors
que nous parlons dans le monde réel d'une << collection de chaises >>, un informaticien parlerait d'un
tableau ou d'une liste de chaises : il s'agit de << Structure de Données >> informatique et cet aspect est
indépendant (tant qu'il ne s'agit pas de la réalisation) de l'approche orientée-objet. Il en va de même pour
les << opérations >> sur les objets : rechercher une chaise se traduit par un algorithme encore
indépendant de l'orienté-objet. De ce point de vue, un langage de programmation orienté-objet n'est pas
un meilleur langage de programmation procédurale (ou impérative), mais un outil de construction de
systèmes complexes qui ne peut d'ailleurs pas s'affranchir des acquis informatiques de base (les
Structures de Données et les Algorithmes). Le savoir faire d'un concepteur est justement de faire cette
liaison entre ces acquis et la modélisation du monde réel, et c'est cette compétence qu'on appelle une
méthode.
Conclusion
Une erreur courante consiste à apprendre et à utiliser intensivement la programmation orientée-objet
avant la conception, mais ceci revient à mettre la charrue devant les bufs.
On peut même en dire plus : les langages à objets offrent un avantage ceratin mais ils ne sont
indispensables ni à la conception ni à la réalisation du logiciel objet.
Le processus de conception n'est en réalité rien d'autre que rappeler (et se rappeler) ce qu'est un
ordinateur et comment réaliser ou simuler les objets du monde réel, par leurs caractéristiques et leurs
comportements, sur des machines dont la principale caractéristique reste (encore jusqu'à preuve du
contraire) leur capacité à exécuter de manière répétitive et très organisée des tâches fondées sur la
logique formelle et la logique formelle seule !
● Introduction
❍ Définitions
❍ Objectif et nécessité
● Qualité du logiciel
● Modélisation
Suivant : Définitions Précédent : Principes du Génie Logiciel Père : Principes du Génie Logiciel
Introduction
Le génie logiciel est un domaine de recherche qui a été défini (fait rare) du 7 au 11 octobre 1968, à
Garmisch-Partenkirchen, sous le parrainage de l'OTAN. Il a pour objectif de répondre à un problème qui
s'énonçait en deux constatations :
d'une part le logiciel n'était pas faible, d'autre part, il était incroyablement difficile de
réaliser dans des délais prévus des logiciels satisfaisant leur cahier des charges.
La production du logiciel implique des environnements de développement, avec toute la variété d'outils
et d'approches dont on peut disposer, les méthodes et les techniques de gestion de processus, mais aussi
les aspects humains au sein de l'équipe de développement et les relations que celle-ci entretient avec les
commanditaires et les utilisateurs du produit.
● Définitions
● Objectif et nécessité
Définitions
Objectif et nécessité
L'objectif du génie logiciel est d'optimiser le coût de développement du logiciel. L'importance d'une
approche méthodologique s'est montrée par la crise de l'industrie du logiciel à la fin des années 70 :
● augmentation des coûts ;
● difficultés d'évolution ;
● non fiabilité ;
Les exemples suivants montre l'ampleur de l'impact des défaillances dûes au manque de méthodologie de
développement :
● la sonde Mariner vers Vénus s'est perdue dans l'espace à cause d'une erreur de programme
FORTRAN ;
● en 1972, lors d'une expérience météorologique en France 72 ballons contenant des instruments de
mesure furent détruits à cause d'un défaut dans le logiciel ;
● en 1981, le premier lancement de la navette spatiale a été retardé de deux jours à cause d'un
problème logiciel. La navette a d'ailleurs été lancé sans que l'on ait localisé exactement le
problème (mais les symptôme étaient bien délimités) ;
● le développement du compilateur PL1 de Control Data n'a jamais abouti ;
● L'explosion d'Ariane 5, le 4 juin 1996, qui a coûté un demi milliard de dollars (non assuré !), est
dûe à une faute logicielle d'une composante dont le fonctionnement n'était pas indispensable
durant le vol [12].
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 ;
● 16% maintenance perfective : améliorer les performance sans changer les spécifications ;
Qualité du logiciel
Cette définition est délibéremment ambiguë puisqu'elle se veut générale. Selon les domaines des
définitions plus précises peuvent se dégager. En génie logiciel divers travaux ont mené à la défintion 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 [19] :
● 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.
● Compatibilité : facilité avec laquelle un logiciel peut être combiné avec d'autres logiciels.
● 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.
Modélisation
Un modèle est une abstraction de quelque chose de réel qui permet de comprendre avant de construire,
ou de retrouver les informations nécessaire pour effectuer des entretiens, modifications et extensions. Il
est plus aisé de se référer à un modèle qu'à l'entité d'origine car le modèle simplifie la gestion de la
complexité en offrant des points de vue et des niveaux d'abstractions plus ou moins détaillés selon les
besoins.
Il n'y a pas de « modèle correct unique » pour une situation donnée, mais un modèle est plus ou moins
adéquat selon qu'il réussisse à saisir les aspects cruciaux et négliger les autres en fonction du but
recherché. L'abstraction dans ce contexte signifie l'examen sélectif de certains aspects du problème ; c'est
l'outil qui permet de délimiter notre connaissance de l'univers aux entités et aux interactions qui nous
concernent dans une situation donnée.
La modélisation est utilisée en Génie Logiciel à différents niveaux. Dans ce document nous parlerons des
modèles de développement du logicielcha:modelesDev, des modèles de cycle de viesec:modCycVie ainsi
que des modèles du logiciel produits par l'analyse fonctionellecha:SADT, la conception
fonctionnellecha:concFctl et l'analyse et la conception orientées objetcha:OMT.
● Introduction
● Le cycle de vie du logiciel
● Les activités
❍ Analyse des besoins
■ Spécification globale
■ Conception architecturale et détaillée
■ Programmation
■ Gestion de configurations et intégration
■ Validation et vérification
■ Rôle du maquettage
● Modèles du cycle de vie
❍ Modèle de la cascade
❍ Modèle en V
■ Relations entre phases et activités selon le modèle en V
❍ Modèle en spirale
■ Risques majeurs du développement du logiciel
■ Exemple : Console de contrôle de lumière
❍ Modèles par incrément
■ Avantages
■ Risques
■ Exemple : Une extension pour une chaîne d'édition
● Analyse et spécification du logiciel
❍ Techniques de spécification
■ Énonces informels
■ Présentations formatées
■ Techniques graphiques ou semi-formelles
■ Techniques formelles
● Conception du logiciel
❍ Méthodes d'analyse et de conception
❍ Méthodes fonctionnelles
■ Analyse structurée
■ Analyse « temps réel »
■ Méthodes de conception fonctionnelle
Introduction
Comparé aux autre produits, le logiciel présente quelques, particularités, p.e. le problème de production
en série ne se pose pas. Néanmoins il 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.
● 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.
● Spécifications ;
● Production ;
● Contrôles ;
● Essais ;
● Contrôle de la production ;
● Vente/utilisation/entretien ;
Pour mieux maîtriser le processus développement on se réfère à des modèles de cycle de vie, (cf. 2.4 et
1.3) permettant de prendre en compte, en plus des aspects techniques, l'organisation et les aspects
humains.
Il est important de noter qu'une étape, telle que la conception, peut faire intervenir plusieurs activités,
comme celles de la spécification globale, du maquettage et de la validation. Inversement une activité
comme la documentation peut se dérouler pendant plusieurs étapes.
Les relations entre les différentes activités, entre les différentes étapes et entre les étapes et les activités
dépendent du modèle. La définition fournie par le modèle en Vsec:relPhaseAc est parmi les plus
complètes.
La continuité du cycle de vie du logiciel implique qu'il faut respecter l'enchaînement des différentes
phases. Le processus de développement consiste à décomposer le problème en veillant à :
● à chaque niveau de décomposition, bien décrire le problème et sa décomposition en
sous-problèmes ;
● bien préciser le procédé de recomposition (ou intégration) : l'assemblage des solutions des sous
problèmes ne donne pas automatiquement la solution du problème ;
● concevoir (et utiliser) des solutions réutilisables.
Suivant : Analyse des besoins Précédent : Le cycle de vie du Père : Modèles de développement du
logiciel
Les activités
Le développement du logiciel peut être découpé en plusieurs activités qui seront présentées brièvement
ici et dont les plus importantes seront détaillées dans les chapitres suivants.
Suivant : Modèles du cycle de vie Précédent : Les activités Père : Les activités
Sous-sections
● Spécification globale
● le rôle du système ;
● ...
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.
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
Programmation
But : réalisation, à partir de la conception détaillée, d'un ensemble de programme ou de composants de
programmes.
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 description successives et, in fine, le logiciel lui-même satisfont la
spécification globale. Elle inclut des inspection de spécifications et de programmes ainsi que de la preuve
et du test.
On distingue les tests statiques (examen ou analyse du texte) des tests dynamiques. Ceux derniers
consiste en l'exécutions du logiciel sur un sous-ensemble des données permettant de vérifier :
● tous les chemins d'accès logiques ;
● le test système qui consiste à tester le logiciel dans des conditions opérationnelles et au delà
(surcharge, défaillances matérielles, ...).
Rôle du maquettage
Le maquettage ou prototypage rapide (rapid prototyping) est une technique qui permet de surmonter la
difficulté de spécification du logiciel due à la différence de terminologie et au manque de précision dans
l'expression des besoins. Cette activité consiste à développer rapidement une ébauche du futur système
(maquette ou prototype).
Il est important de préciser le rôle de la maquette : elle peut être exploratoire si elle est utilisée pour
préciser les besoins des utilisateurs, ou expérimentalemaquette si elle intervient lors de la conception
pour aider à expérimenter différents choix.
Dans un projet « bien conduit », l'effort se répartit comme suit : 15 à 20% programmation, 40%
spécification et conception, 40% validation et vérification.
Suivant : Modèle de la cascade Précédent : Analyse des besoins Père : Modèles de développement du
logiciel
● Modèle de la cascade
● Modèle en V
❍ Relations entre phases et activités selon le modèle en V
● Modèle en spirale
❍ Risques majeurs du développement du logiciel
❍ Exemple : Console de contrôle de lumière
● Modèles par incrément
❍ Avantages
❍ Risques
❍ Exemple : Une extension pour une chaîne d'édition
Suivant : Modèle en V Précédent : Modèles du cycle de vie Père : Modèles du cycle de vie
Modèle de la cascade
Dans ce modèle le principe est très simple : chaque phase se termine à une date précise par la production
de certains documents ou logiciels. Les résultats sont définis sur la base des interactions entre étapes et
activités, ils sont soumis à une revue approfondie, on ne passe à la phase suivante que s'ils sont jugés
satisfaisants.
Certaines phases portent le nom d'une activité ce qui signifie que l'activité est essentielle pour cette
phase, mais n'impose pas qu'elle n'ait lieu que dans cette étape. D'autres activités interviennent, par
exemple le contrôle technique et la gestion de la configuration sont présents tout au long du processus.
Le modèle original ne comportait pas de possibilité de retour en arrière. Celle-ci a été rajoutée
ultérieurement sur la base qu'une étape ne remet en cause que l'étape précédente, ce qui, dans la pratique,
s'avère insuffisant.
Les développements récents de ce modèle font paraître de la validation-vérification à chaque étape :
● faisabilité et analyse des besoins : validation ;
Suivant : Modèle en spirale Précédent : Modèle de la cascade Père : Modèles du cycle de vie
Sous-sections
● Relations entre phases et activités selon le modèle en V
Modèle en V
Le principe de ce modèle est qu'avec toute décomposition doit être décrite la recomposition, et que toute
description d'un composant est accompagnée de tests qui permettront de s'assurer qu'il correspond à sa
description.
Ceci rend explicite la préparation des dernières phases (validation-vérification) par les premières
(construction du logiciel), et permet ainsi d'éviter un écueil bien connu de la spécification du logiciel :
énoncer une propriété qu'il est impossible de vérifier objectivement après la réalisation.
On distingue donc deux sortes de dépendances :
● enchaînement et itération : se déroulent essentiellement de gauche à droite.
Notons aussi que les activités de chaque phase peuvent être réparites en 5 catégories :
● assurance qualité ;
● production ;
● contrôle technique ;
● gestion ;
● contrôle de qualité.
composants Sortie :
- DTI complet
- listage des composants testés
- Dossier des tests de validation
Validation - Test du logiciel complet Entrée : DSL, DTV,
en fonctionnement opérationnel cahier des recettes
- Recette : tests faits par Sortie :
le commanditaire - DTV complet
- Vérification et gestion - Manuel d'utilisation
des modification et d'installation
- dossier définitif de livraison - Dossier de livraison
Suivant : Modèles par incrément Précédent : Modèle en V Père : Modèles du cycle de vie
Sous-sections
● Risques majeurs du développement du logiciel
Modèle en spirale
Proposé par B. Boehm en 1988, ce modèle est beaucoup plus général que le précédent. Il met l'accent sur
l'activité d'analyse des risques : chaque cycle de la spirale se déroule en quatre phases :
1.
détermination, à partir des résultats des cycles précédents --ou de l'analyse préliminaire des
besoins, des objectifs du cycle, des alternatives pour les atteindre et des contraintes ;
2.
analyse des risques, évaluation des alternatives et, éventuellement maquettage ;
3.
développement et vérification de la solution retenue, un modèle « classique » (cascade ou en V)
peut être utilisé ici ;
4.
revue des résultats et vérification du cycle suivant.
L'analyse préliminaire est affinée au cours des premiers cycles. Le modèle utilise des maquettes
exploratoires pour guider la phase de conception du cycle suivant. Le dernier cycle se termine par un
processus de développement classique.
Ce modèle a été moins expérimenté que les deux précédents. Sa mise en uvre demande de grandes
compétences et devrait être limitée aux projets innovants à cause de l'importnace qu'il accorde à l'analyse
des risques. Néanmoins, ce dernier concept peut être appliqué aux autres modèles.
● produit « plaqué or » ;
● validité des besoins ;
● composants externes manquants ;
● tâches externes défaillantes ;
● problèmes de performance ;
● exigences démesurées par rapport à la technologie.
Suivant : Analyse et spécification du logiciel Précédent : Modèle en spirale Père : Modèles du cycle de
vie
Sous-sections
● Avantages
● Risques
● Exemple : Une extension pour une chaîne d'édition
Avantages
● chaque développement est moins complexe ;
● les intégrations sont progressives ;
● possibilité de livraisons et de mises en service après chaque incrément ;
● meilleur lissage du temps et de l'effort de développement à cause de la possibilité de recouvrement
des différentes phases.
Risques
● mettre en cause le noyau ou les incréments précédents ;
● ne pas pouvoir intégrer de nouveaux incréments.
Les noyau, les incréments ainsi que leurs interactions doivent donc être faites globalement, au début du
projet. Les incréments doivent être aussi indépendants que possibles, fonctionnellement mais aussi sur le
plan du calendrier du développement.
● Techniques de spécification
❍ Énonces informels
❍ Présentations formatées
❍ Techniques graphiques ou semi-formelles
❍ Techniques formelles
Sous-sections
● Énonces informels
● Présentations formatées
● Techniques graphiques ou semi-formelles
● Techniques formelles
Techniques de spécification
Énonces informels
description en langage naturel pouvant respecter des plans types (standardisés ou propres à une entreprise
ou à un projet).
Risque de non-cohérence, d'ambiguïté, de non complétudes, de difficulté d'organisation et de redondance
d'informations.
Présentations formatées
Dictionnaire de données ou glossaire :
spécification de l'ensemble des données utilisées en analyse et en conception. Définition des
termes, sigles, codes, symboles, synonymes et alias. Peut utiliser des notations syntaxique strictes
de forme Backus-Naur. Peut contenir des infos sur les spécifications des données, les fichiers qui
les contiennent et les processus qui les utilisent.
Table de décision :
correspondance entre les valeurs d'entrée et les valeurs de sortie d'un processus (adaptée à la
définition des systèmes finis).
Table états-transitions :
table des états et, pour chaque état les événements qui provoquent la transition à un autre état, les
actions à effectuer et l'état suivant pour chaque transition. Peut être représentée par une matrice.
Techniques formelles
The virtues of a software technology developed on mathematical basis have been envisioned
as being capable of providing software that is (a) correct, and the correctness can be proved
mathematically, (b) safe, so that it can be used in the implementation of critical systems, (c)
portable, i.e., independent of computing platforms and language generations, and (d)
evolutionary, i.e., it is self-adaptable and evolves with the problem domain.
Call for papers, AMAST '2000, 20 May to 27 May 2000, Iowa City, Iowa, USA.
Conception du logiciel
La conception est un processus créatif qui nécessite de l'expérience et un certain flair de la part du
programmeur [25].
L'objectif du processus de conception est de construire, à partir des spécification des besoins, obtenues
par la phase d'analyse une première conception informelle qu'il s'agit de traduire, par un processus de
raffinements successifs avec retour en arrière, en une conception formelle.
La continuité entre les différentes phases doit être garantie, mais uniquement du point de vue fonctionnel.
En particulier le découpage et l'architecture proposés par la conception peuvent être (et c'est très souvent
le cas) très différents de ceux de l'analyse/spécification.
Sous-sections
● Analyse structurée
Méthodes fonctionnelles
Les méthodes fonctionnelles trouvent leur origine dans les langages procéduraux. Elles mettent en
évidence les fonctions à assurer et proposent une approche hiérarchique descendante et modulaire.
Ces méthodes utilisent intensivement les raffinements successifs pour produire des spécification dont
l'essentielle est sous forme de notation graphique en diagrammes de flots de données. Le plus haut niveau
représente l'ensemble du problème (sous frome d'activité, de données ou de processus, selon la méhtode).
Chaque niveau est ensuite décomposé en respectant les entrées/sorties du niveau supérieur. La
décompisition se poursuit jusqu'à arriver à des composants « maîtrisables ».
Analyse structurée
Dans la méthode d'Analyse Structurée le plus haut niveau est appelé diagramme de contexte. Une boîte
de DFD représente un processus et doit être décomposée. Chaque processus (ou traitement) non
décomposé est décrit par une « mini-spécification » ; un dictionnaire précise la définition des données,
processus et zones de stockage.
Par exemple la méthode SADTcha:SADT permet de produire un modèle du logiciel sous forme d'une
suite cohérente et hiérarchisée de diagrammes obtenues par raffinements successifs.
● vue structurée : documentation des composantes du système ainsi que leurs relations.
● Présentation générale
❍ Historique
● Le Modèle SADT
● La syntaxe des diagrammes SADT
❍ Actigrammes
❍ Datagrammes
■ Remarques
❍ Les textes explicatifs
❍ Les diagrammes pour explication seulement
❍ Liste hiérarchique et numérotation des diagrammes
❍ Glossaires
❍ Conditions d'activation
❍ Processus de liens
● Travail en équipe
❍ Cycle auteur/lecteur
Suivant : Historique Précédent : SADT: méthode d'analyse fonctionnelle et Père : SADT: méthode
d'analyse fonctionnelle et
Présentation générale
● Historique
Historique
● Développée à SOFTTECH (U.S.A.) en 1976 ;
● utilisée dans des projets industriels à ITT, THOMSON, AÉROSPATIALE etc.
● peut être utilisée pour décrire (spécifier) n'importe quel système (cf. 3.1.1) ;
● sert à définir des modèles de systèmes existants, idéaux, réalisables compte tenu des contraintes
d'un projet, etc.
Suivant : La syntaxe des diagrammes SADT Précédent : Historique Père : SADT: méthode d'analyse
fonctionnelle et
Le Modèle SADT
Un modèle SADT représente une image d'un système qu'on veut appréhender. La technique d'analyse
structurée identifie et organise les détails d'un tel système suivant une hiérarchie parfaitement référencée.
Un modèle SADT est composé de :
● Diagrammes d'activités ou actigrammes, représentant l'ensemble des activités du système.
● Conditions d'activation.
Suivant : Actigrammes Précédent : Le Modèle SADT Père : SADT: méthode d'analyse fonctionnelle et
● Actigrammes
● Datagrammes
❍ Remarques
● Les textes explicatifs
● Les diagrammes pour explication seulement
● Liste hiérarchique et numérotation des diagrammes
● Glossaires
● Conditions d'activation
● Processus de liens
Suivant : Datagrammes Précédent : La syntaxe des diagrammes SADT Père : La syntaxe des
diagrammes SADT
Actigrammes
Un actigramme est identifié par un verbe d'action, il gère des données désignés par des noms à partir de
directives de contrôle (désignés par des noms aussi) en s'appuyant sur les potentialités des
mécanismes. Il génère des données en sortie par création ou par modifications des données en entrée.
Les données de contrôle ne sont pas modifiées par l'activité mais influent sur son déroulement (ex. choix
de l'utilisateur dans un menu).
Les mécanismes, ou supports, de l'activité désignent le « comment » de la réalisation de l'activité. Ils
peuvent aussi représenter « qui » la réalise. Les mécanismes peuvent être développés par des modèles
SADT indépendants.
Suivant : Les textes explicatifs Précédent : Actigrammes Père : La syntaxe des diagrammes SADT
Sous-sections
● Remarques
Datagrammes
Un datagramme représente des données créées par des activités Génératrices (en entrée) et consommées
par des activités Utilisatrices (en sortie), sous le contrôle d'activité de contrôle.
Pour une données, les mécanismes expriment le support de stockage (physique ou logique) de la donnée.
Remarques
● On peut associer un Label de propriété, représentant une information nécessaire courte, à une boîte
(Activité ou donnée).
● Une flèche véhicule une classe de données (ou d'activités) et non pas une seule donnée ou activité.
Son label doit décrire de façon précise et concise l'information véhiculée.
● Contrairement aux organigrammes, les flèches ne représentent ni les commandes ni leurs
séquencement. Elles montrent uniquement les contraintes : ce dont une boîte a besoin pour
fonctionner.
● Lorsqu'il y a réciprocité dans les interfaces entre deux boîtes, on peut remplacer les deux flèches
par une flèche à double sens. Il faut dans ce cas placer un point à droite ou en dessous de chaque
extrémité de la flèche. L'étiquette peut être simple si l'information est la même dans les deux sens,
ou double, avec les deux parties séparée par une barre dans le cas contraire.
● Une flèche peut reboucler pour indiquer la mise à jour d'une donnée.
● Dans le cas général, toutes les flèches présentes sur une boîtes doivent paraître sur la feuille fille
(diagramme fils, détaillant la boîte). Pour éviter toute ambiguïté, ces flèches doivent être
numérotées avec les codes MECS accompagnés d'un numéro d'identification.
● Cependant, une information peut être implicitement présente pour tous les fils, ou, dans un fils,
être trop détaillée pour paraître dans le père. Dans ce cas on utilise une notation paranthésée pour
le label de la flèche qui la représente.
Commentaires et suggestions.
Dernière mise à jour le 18 janvier 2000.
Suivant : Les diagrammes pour explication seulement Précédent : Datagrammes Père : La syntaxe des
diagrammes SADT
Suivant : Liste hiérarchique et numérotation des Précédent : Les textes explicatifs Père : La syntaxe des
diagrammes SADT
Suivant : Glossaires Précédent : Les diagrammes pour explication seulement Père : La syntaxe des
diagrammes SADT
Suivant : Conditions d'activation Précédent : Liste hiérarchique et numérotation des Père : La syntaxe
des diagrammes SADT
Glossaires
L'utilisation de glossaires améliore la lisibilité des diagrammes et permet d'utiliser des labels court et
précis pour les flèches et les boîtes.
Suivant : Processus de liens Précédent : Glossaires Père : La syntaxe des diagrammes SADT
Conditions d'activation
Dans les actigrammes permettent de spécifier dans quelles circonstances une boîte sera activée et ce
qu'elle produira.
Suivant : Travail en équipe Précédent : Conditions d'activation Père : La syntaxe des diagrammes
SADT
Processus de liens
Suivant : Cycle auteur/lecteur Précédent : Processus de liens Père : SADT: méthode d'analyse
fonctionnelle et
Travail en équipe
À la fin de chaque phase le chef de projet convoque l'équipe pour une revue au cours de laquelle
s'effectue une analyse critique permettant de s'assurer que les éléments de décision pour le passage à la
phase suivante sont acquis.
● Cycle auteur/lecteur
Cycle auteur/lecteur
Chaque membre de l'équipe est appelé auteur lorsqu'il produit de la documaentation (une partie du
modèle SADT). Tout document produit doit être revu par au moins un autre membre de l'équipe pour
compléter les points de vue, corriger les erreurs, etc. L'auteur propose son document à la relecture par
d'autres membres de l'équipe (les lecteurs. Le document peut circuler plusieurs fois entre l'auteur et
chacun des lecteurs avant de trouver une solution satisafaisante. Tout échange de document doit se faire
par l'intermédiaire du biliothécaire qui enregistre toutes les informations nécessaires afin de garder trace
de tous les documents et de pouvoir bien gérer les différentes versions.
Conception du logiciel
● Qualité de la conception
❍ Modularité
■ Principes de Modularité
■ Principe d'ouverture/fermeture
❍ Critères de qualité de la conception
■ Cohésion
■ Couplage
■ Compréhensibilité
■ Adaptabilité
❍ Processus de conception de logiciel
■ La description de la conception
Qualité de la conception
Une « bonne » conception se définit en termes de la satisfaction des besoins et des spécifications : les
critères de qualités peuvent donc varier énormément d'un système à un autre ou même pour deux
implantation différentes d'un même système (cf. 1.2).
Par la suite on considérera de préférence les facteurs qui facilitent la gestion du produit tout le long de
son cycle de vie. Il s'agit essentiellement de l'extensibilité, la réutilisabilité, la compatibilité, la portabilité
la vérifiabilité et la facilité d'emploi.
Une bonne structuration participe largement à la production d'un logiciel qui possède ces caractéristiques.
Comme dans beaucoup de domaine, cette bonne structuration se base sur la Modularité.
● Modularité
❍ Principes de Modularité
❍ Principe d'ouverture/fermeture
● Critères de qualité de la conception
❍ Cohésion
❍ Couplage
❍ Compréhensibilité
❍ Adaptabilité
● Processus de conception de logiciel
❍ La description de la conception
Sous-sections
● Principes de Modularité
● Principe d'ouverture/fermeture
Modularité
Un module est un élément de petite taille (en général un ou quelques sous-programmes) qui sert, par
assemblage à la construction de logiciels. Un module doit être cohérent et autonome. Un ensemble de
modules (un logiciel ou un assemblage de modules) doit être bien organisé en architecture robuste.
La modularité se fait ressentir dans la conception et dans la programmation, d'où on peut parler de deux
sortes de modules : modules de conception et modules de programmation.
Principes de Modularité
Un module rend des « services » (ex. printf, perror) ou effectue des traitements (ex. scanf, strcpy, atoi).
Pour exploiter un module dans un logiciel, il est nécessaire (et suffisant) d'avoir une description précise
de ce qu'il fait, ce qui, dans la pratique se traduit par le passage d'information à travers son interface. De
ce point de vue, on peut dire qu'un module est défini par son interface. D'où les principes de la
modularité [20] (cf exemple) :
● Interfaces explicites : chaque fois que deux modules A et B communiquent, cela doit ressortir
clairement du texte de A, de B ou des deux.
● Petites interfaces (couplage faible) : si deux modules communiquent, ils doivent échanger aussi
peu d'informations que possible.
● Masquage de l'information : seules les informations qui servent à la communication avec d'autres
modules doivent être publiques (visibles de l'extérieur du module).
● Peu d'interfaces : un module doit communiquer avec aussi peu d'autres que possible.
● Unités linguistiques modulaires : les modules doivent correspondre à des unités syntaxiques du
langage.
remarque : la modularité n'implique pas automatiquement la réutilisabilité (qui ne sera pas abordée ici)
dans tous les cas.
Principe d'ouverture/fermeture
Un module est dit :
● ouvert : s'il est encore disponible pour des extensions/modifications ;
● fermé : s'il est prêt à être utilisé par d'autres modules ce qui suppose qu'il est stable.
Ces deux principes sont souvent contradictoires. Les langages à objets proposent une solution avec
l'héritage. Dans le cas général il faut garder une trace précise des dépendances entre les modules pour
savoir quels sont les modules « clients » à rouvrir suite à une modification sur un module donné.
Sous-sections
● Cohésion
● Couplage
● Compréhensibilité
● Adaptabilité
Couplage
Le couplage est relatif à la cohésion : il exprime le degré d'interconnexion des différents composants d'un
système. Un couplage fort (partage de données, échange d'informations de contrôle, codage en dur des
paramètres du système, etc.) implique des difficultés d'entretien.
Compréhensibilité
La compréhensibilité d'un module dépend de :
● sa cohésion ;
Adaptabilité
L'adaptabilité dépend du couplage et de la documentation. Une conception ou un logiciel adaptable doit
avoir un haut degré de lisibilité : fournir plusieurs représentations, cohérentes avec l'implantation, à
différents niveaux d'abstraction. Les modification doivent être faciles à incorporer sur tous les niveaux
pour ne pas avoir des problèmes d'incohérence.
Sous-sections
● La description de la conception
● Spécification abstraite : pour chaque sous-système produire une spécification abstraite des services
qu'il offre et des contraintes auxquelles il est soumis.
● Conception de l'interface : pour chaque sous-système, concevoir et documenter (de manière claire)
l'interface avec les autres sous-systèmes.
● Conception des composants de chaque sous-système.
La description de la conception
Une conception est utilisée de différentes manières :
● pour produire des implantations ;
● ...
Dans la pratique la conception du sytème produit une description (un modèle) du système qui sous forme
de spécifications formalisées avec des techniques d'analysesec:techSpecif, des descriptions en langage
naturel ou en langage de description de programmes (pseudo-langage)4.1.
Le choix des techniques utlisées dépend de la méthode de conception et de l'adéquation de la technique
aux besoins précis (image d'ensemble, description d'algorithmes et de structures de données, etc.)
Suivant : Les diagrammes de flux de Précédent : Processus de conception de logiciel Père : Support de
cours : Introduction
Conception fonctionnelle
On a dit que cette stratégie était obsolète et qu'elle devait être remplacée par l'approche orientée objet,
mais il existe beaucoup de standards, méthodes, CASE (ou AGL) et systèmes développés selon cette
approche.
On résume ici la présentation faite par I. Sommerville [25] de variante de cette approche développée par
Constantine et Yourdon sous le nom de la conception structurée. Elle utilise trois types de documents :
● diagramme de flux de données ;
Pour minimiser les effets que peut avoir une modification imprévue de l'état du système par une fonction,
il faut minimiser la description de l'état du système et rendre explicite le partage des informations (ex.
déclaration extern en C). Cette approche est naturelle lorsque l'état du système ne dépend que d'une
entrée. Dans ce cas-là une conception orientée objet n'en différerait que par la syntaxe. (ex. Distributeur
Automatiques de Billets, cf. transparent--à faire).
Suivant : Approche orientée objet Précédent : Les diagrammes de flux de Père : Conception
fonctionnelle
Suivant : Première définition Précédent : Les diagrammes de structure Père : Support de cours :
Introduction
● Première définition
● Caratéristiques des objets
❍ Identité : notion d'objet
❍ Classification : notion de classe
■ Attributs
■ Opérations et méthodes
❍ Polymorphisme : notion de surcharge
❍ Héritage : notion de paratge
Suivant : Caratéristiques des objets Précédent : Approche orientée objet Père : Approche orientée objet
Première définition
L'approche orientée objet considère le logiciel comme une collection d'objets dissociés définis par des
propriété. Une propriété est soit un attribut : une entité élementaire (donnée) de la description de l'état
de l'objet, ou une opération : entité élemntaire de la description du comportement de l'objet. Un objet
comprend donc à la fois une structure de données (son état sous forme de collection d'attributs) et une
collection d'opérations (son comportement).
Cette défintion permet de déterminer un certain nombre de caractéristiques pour qu'une approche soit dite
orientée objet. Parmi les caractéristiques considérées par les différents génie-logiciens nous retenons les
suivantes : l'identité, la classification, le polymorphisme et l'héritage.
Suivant : Identité : notion d'objet Précédent : Première définition Père : Approche orientée objet
Suivant : Classification : notion de classe Précédent : Caratéristiques des objets Père : Caratéristiques
des objets
énormes différences des mise en vre spécifiques, la pédale d'accélération est la même pour tous les
véhicules.
Sous-sections
● Attributs
● Opérations et méthodes
Attributs
Un attribut est données définie par un nom unique pour une classe (mais deux attributs de deux classes
différents peuvent avoir le même nom) et par une valeur pour chaque instance d'objet de de la classe.
L'ensemble des attributs définit l'état de la classe. Dans la modélisation objet, contrairement aux usages
courants en bases de données par exemple et conformément au principe de l'identité, un identificateur
d'objet n'est pas nécessaire et ne doit pas faire partie des attributs de l'objet. Un tel identificateur est un
détail interne (d'implantation) et ne doit pas être confondu avec des attributs permettant d'identifier un
objet de manière unique mais ayant un sens dans le monde réel, tel que le numéro de sécutrité social ou
le numéro d'immatriculation.
Opérations et méthodes
Une opération est une action ou une transforamtion qu'un objet peut effectuer ou subir. L'ensemble des
opérations définit le comportement de l'objet.
Une opération est une abstraction définie par sa signature : le nom de l'opération, le type de valeur de
retour et le nombre et les types de ses arguments. Concrètement une opération peut être implantée de
manières différentes dans différentes classes. Une telle implantation est appelée méthode. Une opération
a un objet cible comme argument implicite permettant ainis d'identifier la méthode à appeler (cf 6.2.3).
Une fenêtre est un rectangle, mais qui, en plus, a ses propres propriétés. La classe Fenêtre peut s'écrire
:
Puisque la classe Fenêtre est une sous-classe de Rectangle, elle hérite de ses propriétés, celles-ci
n'ont pas besoin d'être redéfinies explicitement. Par contre une fenêtre a ses propres propriétés telles que
la largeur-du-bord ou l'opération fermer. Elle peut aussi redéfinir les propriétés de sa classe
mère en s'appuyant éventuellement sur les définition d'origine. Par exemple pour dessiner une fênetre il
faut dessiner le rectangle et le bord.
De la même manière une voiture ou une moto peut être définie en terme d'une super-classe Véhicule.
Suivant : Introduction Précédent : Héritage : notion de paratge Père : Support de cours : Introduction
● Introduction
● Analyse
❍ Modèle objet
■ Identification des objets
■ Sélection des classes pertinentes
■ Préparation d'un dictionnaire de données
■ Identification des associations
■ Sélection des bonnes associations
■ Identification des attributs
■ Sélection des attributs
■ Affinage en utilisant l'héritage
■ Vérification des chemins d'accès
■ Itération de la modélisation objet
■ Groupement des classes en modules
❍ Modèle dynamique
■ Préparation des scénarios
■ Format d'interface
■ Identification des événements
■ Construction des diagrammes d'états
■ Vérification de la correspondance des événements entre les objets
❍ Modèle fonctionnel
■ Exemples
■ Importance relative des modèles
■ Étapes de la conception
❍ Transformation continue
■ Principe
■ Exemples
■ Importance relative des modèles
■ Étapes de la conception
❍ Interface interactive
■ Principe
■ Exemples
■ Importance relative des modèles
■ Étapes de la conception
❍ Simulation dynamique
■ Principe
■ Exemples
■ Importance relative des modèles
■ Étapes de la conception
❍ Systémes temps réel
■ Principe
■ Exemples
■ Importance relative des modèles
■ Étapes de la conception
❍ Gestionnaire de transactions
■ Principe
■ Exemples
■ Importance relative des modèles
■ Étapes de la conception
● Conception des objets
Suivant : Analyse Précédent : OMT : méthode d'analyse et Père : OMT : méthode d'analyse et
Introduction
La Méthode OMT [23] suit les étapes suivantes :
Analyse
: décrire le but du système et non pas la façon dont il sera réalisé. Il ne faut prendre aucune
décision d'implantation (7.2) ;
Conception système
: définit le découpage du système en sous-systèmes, à partir des résultats de l'analyse et dans
l'objectif de définir le choix de l'architecture (7.3) ;
Conception des objets
: raffiner les structures de données et les algorithmes en y ajoutant les détails d'implantation et en
tenant compte de l'environnement (7.12) ;
La différence avec l'approche fonctionnelle réside dans le fait que l'on utilise des objets qui appartiennent
au domaine de l'application plutôt que des fonctionnalités, ce qui garantit une meilleure évolution du
système.
La méthode sera présentée à l'aide d'un exemple, dont l'énoncé, schématisé par la figure 7.1, peut être
résumé comme suit :
Concevoir un logiciel de gestion d'un réseau de guichets automatiques bancaires (GAB). Le
système doit permettre de gérer les transactions des clients qui portent sur des comptes
apprtenant à plusieurs banques. Chaque banque dispose d'un ordinateur, l'ensemble des
banques est géré par un consortium qui dispose aussi de son propre ordinateur. Tous les
ordinateurs sont reliés par un réseau inforamtique. Les clients doivent pouvoir effectuer
leurs transactions à partir d'un guichet automatique par l'intermédiaire d'un agent caissier.
Analyse
Cette phase consiste à produire un modèle représenté sous trois aspects :
● Modèle objet
❍ Identification des objets
❍ Sélection des classes pertinentes
❍ Préparation d'un dictionnaire de données
❍ Identification des associations
❍ Sélection des bonnes associations
❍ Identification des attributs
❍ Sélection des attributs
❍ Affinage en utilisant l'héritage
■ La généralisation
■ La spécialisation
■ Remarque
■ Étude des figures 7.9 et 7.10
❍ Vérification des chemins d'accès
❍ Itération de la modélisation objet
■ Détection de manque d'objets
■ Indices
❍ Groupement des classes en modules
■ Exemple
● Modèle dynamique
❍ Préparation des scénarios
❍ Format d'interface
❍ Identification des événements
■ Exemple
❍ Construction des diagrammes d'états
❍ Vérification de la correspondance des événements entre les objets
● Modèle fonctionnel
❍ Identification des valeurs d'entrée et de sortie
❍ Construction du diagramme à flot de données
❍ Description des fonctions
❍ Identification des contraintes entre objets
❍ Spécification des critères d'optimisation
● Ajouter les opérations
❍ Les opérations du modèle objet
❍ Les opérations des événements
❍ Les opérations des activités et des actions entre les états
❍ Les opérations des fonctions
❍ Les opérations « pense-bête » (shopping-list)
❍ Simplification des opérations
● Itération de l'analyse
❍ Affiner le modèle d'analyse
❍ Reformuler les besoins
Sous-sections
● Identification des objets
Modèle objet
Le modèle objet comporte la description des objets, leurs attributs et les association qui les relient. La
démarche consiste à identifier les objets, leurs associations et leurs attributs, puis raffiner de différentes
manières pour obtenir un diagramme d'objets.
Pour ce faire on se réfère à l'énoncé du problème (ou le cahier des charges) (fig. 7.3) et on exploite nos
connaissances sur le domaine de l'application (fig. 7.4).
L'application de ces critères au système GAB, qui n'est qu'un exemple et non pas une application réelle,
donne les observations suivantes :
La généralisation
C'est le regroupement des attributs, associations et opérations communs dans une super-classe. Par
exemple, transaction peut être une super-classe de transaction caissier et
transaction distante, par contre ordinateur central et ordinateur de banque
n'ont pas grand-chose en commun et la création d'une super-classe. Il peut s'avérer nécessaire de redéfinir
les classes mais il ne faut pas forcer ; les suggestions de généralisation doivent venir du monde réel ou de
par la symétrie. La généralisation peut s'effectuer à partir d'une association (ex. point d'entrée
pour GAB et caissier d'agence). Dans tous les cas de figure il faut essayer de maximiser la
généralisation en regroupant autant d'attributs et d'associations que possible. La symétrie permet de
rajouter les attributs nécessaires à la distinction entre les sous-classes ;
La spécialisation
Elle est, généralement, apparente dans le domaine de l'application. Il s'agit de détecter les expressions qui
se composent d'un nom et d'un adjectif, le nom deviendra celui de la super-classe (ex. barre de menu
déroulant et menu étendu). La source la plus fréquente de la spécialisation est l'énumération de
sous-ensembles du domaine de l'application. Ce raffinement peut permettre de détecter certaines
mauvaises conceptions (de classes), mais il ne faut pas trop raffiner. Par exemple compte GAB se
spécialise en chèque et épargne, mais dans notre application cette spécialisation peut ne pas être très
utile, et il serait avantageux de la remplacer par un attribut type_compte.
Remarque
les mêmes super-classe peuvent être trouvées par l'une ou l'autre approche.
Il vaut mieux éviter l'héritage multiple qui, en général, simplifie l'écriture du code mais augmente
considérablement la complexité de la conception et de l'implantation. Il est cependant souvent utile de
définir une super-classe regroupant les informations communes à toutes les classes.
On s'intéresse aux deux derniers cas pour illustrer une généralisation (fig. 7.10) :
Indices
Classes inutiles
: elles se manifestent par le défaut d'attributs, associations et opérations.
Associations inutiles
peuvent être détectées par :
Le résultat de ces amélioration est le diagramme, plus claire et plus simple, de la figure 7.11.
Exemple
GAB est une petite application qui n'a pas vraiment besoin d'être découpée en modules, mais pour
l'exemple il peut être décomposé en :
Sous-sections
● Préparation des scénarios
● Format d'interface
● Identification des événements
❍ Exemple
● Construction des diagrammes d'états
● Vérification de la correspondance des événements entre les objets
Modèle dynamique
Objectif : description des aspects temporels et dynamiques du système et des objets.
Un événement est un stimuli externe visible, avec ses réponses. On commence la modélisation
dynamique par l'extraction d'un résumé des séquences d'événements ; pour chaque objet il faut établir un
diagramme d'états avec les événements entrants et sortants et qui montre les interactions entre objets (cf.
fig 7.15). On n'établit pas d'algorithme, ce qui relève de l'implantation, si l'événement n'est pas externe.
Ces diagrammes sont essentiels pour les systèmes interactifs, contrairement aux systèmes statiques
comme les Bases de Données. Il faut aussi noter qu'ils ne sont pas suffisants pour les systèmes temps
réel.
Un scénario est une séquence type d'événements, il permet de décrire les interactions courantes pour
l'extraction des événements et l'identification des objets cibles 7.1. Le suivi des séquences et des états
permet d'établir les diagrammes d'états et de les comparer afin d'obtenir la correspondance
événement-objet. L'ensemble des diagrammes d'état définit le modèle dynamique.
La modélisation dynamique passe par les phases suivantes :
Dans ce processus (exemples fig. 7.12 et 7.13) il faut éviter de décrire directement le modèle général (à
cause de sa complexité). Il faut par contre étoffer ou inventer des interactions qui correspondent à
l'énoncé du problème, et y ajouter les cas d'exceptions. Ces derniers peuvent être des oublis ou des
défauts, des conditions limites ou des erreurs humaines comme les dépassements des valeurs et la nature
des données. En particulier il faut veiller à gérer :
Pour chaque événement il faut identifier l'acteur mais sans se soucier, dans un premier temps, du format
du message. Ceci laisse la liberté d'imaginer d'autres cas d'exception.
Il faut aussi envisager les scénarios qui correspondent à tous les types d'interactions, comme par exemple
l'ouverture de compte, le création de nouvelles cartes et banques, l'obtention d'un journal de transactions,
etc.
Format d'interface
Les opérations d'un logiciel interactif peuvent être partagés en deux catégories : la logique de
l'application et l'interface utilisateur. Le découplage de ces deux aspects permet d'effectuer des tests
indépendants et donc de réaliser les deux parties en parallèle. Il est important de noter qu'il s'agit de deux
aspects très différents : pour l'interface c'est l'ergonomie et non pas la logique qu'on cherche à optimiser.
L'interface est aussi importante pour les évaluations.
L'analyse permet la description des flots de données et de contrôle quelque soit le format de présentation
(ligne de commande, fichier, interface graphique, communication distante, etc.). Le modèle dynamique
décrit ce qui se passe et non pas comment cela se passe ; il doit se concentrer sur la logique de contrôle
de l'application.
L'interface peut par contre être simulée par l'utilisation de procédures factices pour la simulation du
système. Dans l'interface ce sont les informations échangées et non pas leur format qui sont importantes
(fig. 7.14), par exemple la séquence des touches pour entrer un mot de passe est beaucoup moins
importante que l'information elle-même.
Exemple
mot de passe et délivrer billets sont les 2 classes d'événements mais compte OK,
mauvais compte et mauvais mot de passe ne doivent pas être groupés car ce sont des
événements différents. Par contre on peut considérer que toutes les entrées clavier correspondent à une
même classe d'événement, mis à part valider qui altère le comportement du système.
Pour chaque événement il faut identifier sa classe émettrice et sa classe réceptrice qui peuvent être
identique si la classe s'envoie l'événement à lui-même.
Dans le cas de l'exemple le scénario permet de définir le suivi d'événements de la figure 7.15 et de
produire le diagramme de flots d'événements entre classes/modules de la figure 7.16. La dernière étape
consiste à attacher les événements aux classes sans s'occuper du séquencement.
Le modèle d'objets décrit les flots d'informations possibles, le diagramme d'états décrit les flots de
contrôle possibles.
passé et n'affectent pas le contrôle on peut se satisfaire d'établir la liste d'événements d'entrée et de sortie.
On peut aussi ne pas passer par les suivis d'événements mais dans tous les cas un nombre minimum de
scénarios est nécessaire.
Dans l'exemple GAB, Caissier d'agence, Consortium et Banque sont des acteurs pour
lesquels on fournit des diagrammes d'états comme celui de la classe GAB (fig. 7.17). Carte
bancaire Transaction et Compte sont des objets passifs. Client et Caissier sont des classes
extérieurs au système qui ne nécessitent pas d'implantation et dont les interactions avec le point d'entrée
ont déjà été montrées.
Les deux figures 7.18 et 7.19 montrent respectivement les diagrammes d'états des classes consortium
et Banque. Ces duex diagrammes doivent être confrontés au précédent pour vérfier la cohérence : les
événements en entrée et en sortie doivent être conformes à ceux émis et reçus par la classe GAB.
Sous-sections
● Identification des valeurs d'entrée et de sortie
Modèle fonctionnel
Le modèle fonctionnel s'intéresse au traitement des données sans tenir compte du séquencement, des
décisions ni de la structure des objets. Il montre les dépendances et les relations entre les valeurs.
Le modèle fonctionnel est représenté par des diagrammes à flot de données où, par comparaison avec les
diagrammes d'état des classes, les traitements correspondent aux activités et aux actions, et les flots
correspondent aux objets et aux valeurs d'attributs.
Pour développer le diagramme il faut suivre le cheminement des valeurs de la sortie vers l'entrée de
préférence. Il est important de distinguer les données réservoirs qui servent à stocker des valeurs pour
des traitements ultérieurs, comme compte dans le cas de l'exemple.
Les décisions sur le séquencement des opérations font partie du modèle dynamique et ne doivent pas
figurer ici car certaines opérations, comme la vérification du mot de passe, peuvent être optionnelles ou
s'exclure mutuellement. Néanmoins, les fonctions de décision peuvent être indiquées (par des flèches
sortantes en pointillé) sur le diagramme à flot de données pour souligner un traitement complexe, mais
elles affectent le flot de contrôle et non pas les valeurs des données. Par exemple l'erreur éventuellement
produite par vérifier mot de passe est indiquée, mais la flèche de contrôle du flot vers le
processus mise à jour du compte est laissée comme implicite (cf. fig. 7.22).
Sous-sections
● Les opérations du modèle objet
Sous-sections
● Affiner le modèle d'analyse
Itération de l'analyse
À cause de la complexité des interactions entre les différentes parties d'un système, il est indispensable
d'approcher la solution de manière itérative, en proposant une première approximation qu'on affine a fur
et à mesure que s'accroit notre compréhension du problème. Il ne faut cependant pas pousser l'analyse
trop loin puisqu'elle n'a pas de frontière exacte avec la conception.
Conception du système
● Introduction
● Décomposer le système
● Couches
● Partitions
● Topologie du système
Introduction
La conception du système implique des décisions sur l'architecture du système. Il s'agit de l'organisation
du systèmes en sous-systèmes, l'allocation de ceux-ci aux ressources logicielles et matérielles, et
d'importantes décisions conceptuelles qui vont former la base de la conception détaillée.
Il existe un certain nombre d'architectures typiquessec:archiType adaptées aux différents types
d'applications. Chacun des sous-modèles, objet, dynamique et fonctionnel, a une importance plus ou
moins grande selon le type de l'application. Dans la pratique on est souvent amené à combiner et/ou à
adapter deux ou plusieurs de ces architectures, il s'agit donc de s'inspirer plutôt que de copier ces
architecture.
Décomposer le système
Un sous-système fournit un moyen cohérent de se pencher sur un aspect particulier d'un problème. Dans
la pratique, c'est un regroupement d'un petit nombre de composants (classes, associations, événements et
contraintes) qui partagent les mêmes propriétés du point de vue de leur fonctionnalité, de leur
emplacement physique ou ressources et/ou des ressources matérielles et logicielles qu'ils exploitent.
Un sous-système peut être décomposé en modules. Dans les deux cas, les composants (sous-systèmes ou
modules) sont reliés par des interfaces bien définies selon le principe de la modularitésec:modularité.
Dans le cas des sous-systèmes, l'interface définit le protocôle (ou modalités) de communication. On
distingue généralement deux types de protocôles : le client-serveur, et le égal-à-égal. Dans le premier cas
le client demande au serveur d'effectuer un service et de lui rendre le résultat. Le clien doit donc
connaître l'interface du serveur, mais celui-ci n'a pas à coonaître les interfaces de ses clients.
Le protocôle égal-à-égal est plus compliqué : un sous-système peut s'adresser à un autre sous-système s'il
en connaît l'interface, la réponse n'est pas nécessairement immédiate : le deuxième sous système peut
aussi appeler le premier pour lui communiquer le résultat.
Un système peut être décomposé horizontalement, en couches, ou verticalement, en partitions.
Couches
Une couche est une tranche horizontale permettant de faire abstraction de ce qui se trouve en dessous et
de fournir les bases d'implantation de ce qui se trouve au dessus. Ce qui implique une relation de type
client-serveur du haut vers le bas : chaque couche est client de celle qui la précède et serveur de celle qui
la suit.
Par exemple dans un système de fenêtrage la couche supérieure s'occoupe des opérations sur les fenêtres
qui sont réalisées en termes d'opérations sur des objets géométrique, qui sont à leur tour réalisées par des
opérations sur pixels définies et termes d'opérations d'entrée/sortie sur des périphériques.
Une architecture en couches peut être fermée : une couche ne connaît que celle qui la précède, ou ouverte
une couche peut utiliser toutes ou plusieurs de celles qui la précèdent. Une Ce dernier type permet d'avoir
un code plus compact et plus efficace, mais ne respecte pas le principe de masquage d'informations : une
modification sur une couche basse peut impliquer des modificatins sur l'ensemble du système.
Normalement la description du problème définit les deux couches extrêmes du système : la couche la
plus haute représente le système lui-même (du point de vue de l'utilisateur), et la couche la plus basse
définit les ressources disponibles (matériel, système d'exploitation, etc.). C'est la tâche du concepteur de
définir des couches intermédiaires en fonction de l'écart entre ces deux couches (qui exprime en quelque
sorte la taille et la complexité du système).
Il est conseillé de toujours concevoir une couche de services de bas niveau qui fait abstraction du
matériel utilisé et rend le système portable.
Partitions
Une partition correspond à une « tranche » verticale réalisant un ensemble cohérent de fonctions dans un
système. Par exemple dans un système d'exploitation on peut distinguer des gestionnaires de processus,
de mémoire, de fichier et de communication réseau. Une partition peut avoir connaissance des autres
mais pas en profondeur.
Comme le montre la figure 7.25 La plupart des grands systèmes reposent sur un mélange de couches et
de partitions.
Topologie du système
Pour représenter les intereactions entre les sous-systèmes le concepteur doit fournir un diagramme à flot
de donnéessec:techSpecif qui décrit les échanges entre les sous-systèmes. En général, selon l'architecture
du systèmesec:archiType, ce diagramme représente une organisation plus ou moins simple comme le
pipeline et l'étoile.
Suivant : Concurrences intrinsèques Précédent : Topologie du système Père : OMT : méthode d'analyse
et
● Concurrences intrinsèques
● Tâches concurrentes
Suivant : Tâches concurrentes Précédent : Identification des ressources Père : Identification des
ressources
Concurrences intrinsèques
Tâches concurrentes
Suivant : Réservoires de données Précédent : Tâches concurrentes Père : OMT : méthode d'analyse et
Suivant : Partage des ressources globales Précédent : Allocation des sous-systèmes aux
processeurs/tâches Père : OMT : méthode d'analyse et
Réservoires de données
Suivant : Logiciel de contrôle Précédent : Réservoires de données Père : OMT : méthode d'analyse et
Suivant : Conditions limites Précédent : Partage des ressources globales Père : OMT : méthode
d'analyse et
Logiciel de contrôle
Suivant : Compromis de priorités Précédent : Logiciel de contrôle Père : OMT : méthode d'analyse et
Conditions limites
Suivant : Architectures type Précédent : Conditions limites Père : OMT : méthode d'analyse et
Compromis de priorités
Suivant : Transformation par lots (Pipeline) Précédent : Compromis de priorités Père : OMT : méthode
d'analyse et
Architectures type
❍ Exemples
❍ Importance relative des modèles
❍ Étapes de la conception
● Gestionnaire de transactions
❍ Principe
❍ Exemples
❍ Importance relative des modèles
❍ Étapes de la conception
Sous-sections
● Principe
● Exemples
● Importance relative des modèles
● Étapes de la conception
Exemples
Compilateur, programme de paye, calculs (dessin, architecture, météorologie, etc.).
Étapes de la conception
● Éclater les transforamtions : ajouter des détails au modèle fonctionnel pour obtenir les étages de
traitement.
● Définir les classes de données intermédiaires (échangés entre les étages). chaque ensemble de
données sera décrit par un modèle objet cohérent et faiblement couplé aux autres modèles (ex.
l'arbre d'analyse d'un compilateur).
Suivant : Interface interactive Précédent : Transformation par lots (Pipeline) Père : Architectures type
Sous-sections
● Principe
● Exemples
● Importance relative des modèles
● Étapes de la conception
Transformation continue
Principe
Dasn ce type de système les sorites, construites de manière incrémentatle, dépendent activement des
entrées et sont régulièrement mises à jour en fonctions de celles-ci. Cette mise à jour est théoriquement
continue mais a lieu a des intervalles périodiques dans la pratique.
Exemples
Traitement du signal, systèmes de fenetrage, surveillance de processus, etc.
Étapes de la conception
● Dessiner un DFD des entrées/sorties, les réservoires de données intérieurs au pipeline déterminent
les paramètres des transformations.
● Définir les objets intermédiaires, par exemple chaque objet graphique a une version représentant
une abstraction appropriée à chaque étage du traitement.
● Décomposer les opérations et ajouter la propagation des modifications. Par exemple la
modification de la position d'un objet implique la modification d'une partie du dessin (nouveaux
objets masqués ou découverts).
● Optimiser, peut nécessiter l'ajout de nouveaux objets.
Sous-sections
● Principe
● Exemples
● Importance relative des modèles
● Étapes de la conception
Interface interactive
Principe
Exemples
Importance relative des modèles
Modèle objet :
Modèle dynamique :
Modèle fonctionnel :
Étapes de la conception
Suivant : Systémes temps réel Précédent : Interface interactive Père : Architectures type
Sous-sections
● Principe
● Exemples
● Importance relative des modèles
● Étapes de la conception
Simulation dynamique
Principe
Exemples
Importance relative des modèles
Étapes de la conception
Sous-sections
● Principe
● Exemples
● Importance relative des modèles
● Étapes de la conception
Étapes de la conception
Suivant : Conception des objets Précédent : Systémes temps réel Père : Architectures type
Sous-sections
● Principe
● Exemples
● Importance relative des modèles
● Étapes de la conception
Gestionnaire de transactions
Principe
Exemples
Importance relative des modèles
Modèle objet :
Modèle dynamique :
Modèle fonctionnel :
Étapes de la conception
Suivant : Management des projets logiciels Précédent : Gestionnaire de transactions Père : OMT :
méthode d'analyse et
Suivant : Gestion des projets Logiciels Précédent : Conception des objets Père : Support de cours :
Introduction
Suivant : Validation, Vérification et tests Précédent : Management des projets logiciels Père : Support
de cours : Introduction
Suivant : Qualité et assurance qualité Précédent : Gestion des projets Logiciels Père : Support de cours
: Introduction
Suivant : Gestion des configurations Précédent : Validation, Vérification et tests Père : Support de
cours : Introduction
Suivant : Liste des figures Précédent : Qualité et assurance qualité Père : Support de cours :
Introduction
Suivant : Références Précédent : Gestion des configurations Père : Support de cours : Introduction
Suivant : Index Précédent : Liste des figures Père : Support de cours : Introduction
Références
1
Christian Bénard.
Les 9 points clés de la conduite d'un projet informatique.
Collection Homme et Technique. Les Éditions d'Organisation, Paris, 1992.
2
Grady Booch.
Object Oriented Design with applications.
Benjamin/Cummings, California, 1991.
3
Grady Booch.
Conception orientée objets et applications.
Addison-Wesley, Paris, Janvier 1992.
4
J. P. Calvez.
Spécification et conception des systèmes, une méthodologie.
Masson, Paris, 1991.
5
B. Coulange.
Réutilisation du logiciel.
Masson, Paris, 1996.
6
W. Curtis.
``management and experimentation in software enginnering''.
Proceedings of the IEEE, 68(9), 1980.
7
Ferdinand de Saussure.
Cours de linguistique Générale.
1915.
8
NATO Scientifc Affairs Division.
Software engineering.
Report on a conference sponsred by the nato science comitee, gamisch-partenkirchen, 7-11 october
1968, jan 1969.
9
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides.
Design Patterns - Elements of Reusable Object-Oriented Software.
Addison-Wesley Publishing Company, 1995.
Version francaise publiee par : International Thomson Publishing France, Paris, 1996.
10
Marie-Claude Gaudel, Bruno Marre, Françoise Schlienger, and Gilles Bernot.
précis de génie logiciel.
Enseignement de l'Inforamtique. Masson, Paris, 1996.
11
Patrick Jaulent.
Génie Logiciel : les méthodes.
Armand Colin, Paris, 1990.
12
Jean-Marc Jézéquel and Bertrand Meyer.
Design by contract: The lessons of ariane.
Computer (IEEE), 30(2):129-130, January 1997.
13
R. Kehoe and A. Jarvis.
ISO 9000-3: A Tool for Software Product and Process Improvement.
Springer, New York, 1996.
14
Michel Lai.
UML - La notation unifiée de modélisation en objet. Applications en Java.
Masson, Paris, 1997.
Avec CD.
15
Richard C. Lee and William M. Tepfenhart.
UML et C++, Guide pratique du développement orienté objet.
Simon and Schuster Macmillan, 1998.
16
Jean Pierre Martin.
Du bricolage à l'industrialisation : La qualité du ogiciel.
Afnor Gestion. Afnor, Paris, 1987.
17
G. Masini, A. Napoli, D. Colnet, D. Léonard, and K. Tombre.
Les langages à objets.
InterEditions, Paris, 1989.
18
J. McCall.
Factors in Software Quality.
Commentaires et suggestions.
Dernière mise à jour le 18 janvier 2000.