Chapitre :
La Conception
Eléments de Génie Logiciel 1
Introduction
• Conception: Étape cruciale du développement logiciel; pont entre
l’analyse des besoins et l’implémentation.
• Activité itérative/incrémentale qui transforme progressivement les
besoins vers un produit final.
Eléments de Génie Logiciel 2
Introduction
• Conception Vs Analyse
• Analyser: c’est définir le quoi?
• Concevoir: c’est définir le comment?
• Conception Vs implémentation
• L’implémentation est la mise en œuvre des choix issus de la
conception.
• L’implémentation doit pouvoir répondre aux contraintes de
réalisation sans mettre en cause les choix de conception.
Eléments de Génie Logiciel 3
Activité de conception
• La conception est un processus de résolution de problèmes dont
l’objectif est d’identifier la meilleure façon:
• d’implémenter les besoins fonctionnels d’un système…
• tout en respectant les contraintes imposées par les besoins non
fonctionnels…
• et en adhérant à des principes de base menant à un logiciel de qualité.
• La conception propose une solution au problème spécifié lors de
l’analyse:
• architecture de l’application (architecture logicielle et architecture
physique)
• description détaillée des modules, des interfaces utilisateurs, des
données.
Eléments de Génie Logiciel 4
Activité de conception
• Difficulté de la conception: la conception ne se contente pas
d’identifier le problème mais doit lui apporter une solution valide
• La conception est une activité exigeant la créativité.
• Pas de recettes toute faites mais il existe des méthodologies
(principes & bonnes pratiques) pouvant être de bons conseils.
• Résultat de la phase de conception: une conception (aussi appelée
«design»)
• Influence considérable sur la qualité du logiciel : fiabilité,
correction, évolubilité, etc.
Eléments de Génie Logiciel 5
Activité de conception
• Activité intellectuelle qui se base sur:
• Évolubilité: si le logiciel est difficile à changer, les autres qualités
sont directement compromises: fiabilité, performance, etc.
• Réutilisation: on veut minimiser les coûts et rentabiliser les efforts
de développement.
Eléments de Génie Logiciel 6
Activité de conception
• But: Décomposition progressive du système en modules de plus en
plus détaillés.
Eléments de Génie Logiciel 7
Conception= prise de décisions
• Lors de la résolution d’un problème, tout concepteur fera face à une
série de problèmes:
1. Ce sont des sous-problèmes devant être résolus.
2. Chacun de ces problèmes peut être solutionné de différentes façons
3. Le concepteur doit donc prendre des décisions de conception afin de
résoudre chacun de ces sous-problèmes en tenant compte:
• des exigences
• du design courant
• de la technologie disponible
• des principes du bon design
• de l’expérience passée
4. Il faudra être en mesure de toujours choisir la meilleure alternative
Eléments de Génie Logiciel 8
Etapes de conception
• La conception logicielle comporte deux sous-activités:
• conception architecturale
• conception détaillée
• Ces deux sous-activités sont menées:
• soit l’une à la suite de l’autre, soit en parallèle (selon les besoins)
• en suivant un certain ensemble de principes de conception
Eléments de Génie Logiciel 9
Conception architecturale
• = conception globale = conception de haut niveau
• Objectifs:
• Structuration et organisation générale du système à concevoir
• Contient la description des éléments principaux du système, les
relations entre eux, les contraintes à respecter, les motifs et la
logique de cette décomposition.
• Produit : architecture logicielle
Eléments de Génie Logiciel 10
Architecture Logicielle
• Une architecture logicielle est une représentation abstraite d'un
système exprimée essentiellement à l’aide de composants logiciels en
interaction via des connecteurs. Composants
Connecteurs
• Ne fournit que les propriétés externes des éléments structurants
• Ne se préoccupe pas des détails d'implantation
Eléments de Génie Logiciel 11
Conception détaillée
• = conception de bas niveau
• Détailler les éléments produits dans la conception architecturale et
préparer au mieux l’implémentation:
• Description précise de chaque module
• Algorithmes mis en œuvre
• Traitements effectués an cas d’erreur
Eléments de Génie Logiciel 12
Principes de conception
• Règles et éléments fondamentaux du génie logiciel qui doivent guider
la phase de conception en vue de construire des systèmes fiables et
évolutifs.
• Principes mis en œuvre:
• Abstraction
• Raffinement
• Modularité
• Anticipation des changements
• Généralité
• Rigueur et formalisme
Eléments de Génie Logiciel 13
Principes de conception- Abstraction
Principe selon lequel on représente un problème (une donnée, une
procédure, une entité, etc.) en éliminant les aspects les moins
pertinents pour ne considérer que ceux qui sont essentiels pour servir
les buts d’une réflexion spécifique.
- Permet de maîtriser la complexité d’un problème.
- Permet d’omettre certains détails pour se concentrer sur ceux qui
sont pertinents.
Eléments de Génie Logiciel 14
Principes de conception- Raffinement
Processus de conception qui permet d’élaborer une description étape
par étape depuis une description très abstraite jusqu’à son
implémentation (dans un langage de programmation). A chaque
étape, une ou plusieurs parties d’une description sont redéfinies en
donnant de plus en plus de détails.
- Le raffinement se termine lorsque la description est totalement
exprimée dans un langage de programmation.
- Les principes d’abstraction et de raffinement sont complémentaires.
L’abstraction permet d’omettre les détails d’implémentation. Le
raffinement permet de révéler ces détails.
Eléments de Génie Logiciel 15
Principes de conception- Modularité
Caractéristique d’un logiciel qui se compose de modules séparés,
clairement identifiés, aux interfaces bien définies, pouvant être traités
ou modifiés individuellement.
• Module: Unité fournissant des ressources et/ou des services
• En UML, module= classe, package, composant
• La modularité permet de mieux gérer la complexité des systèmes et
facilite leur maintenance…
Eléments de Génie Logiciel 16
Principes de conception- Anticipation des
changements
Principe selon lequel les choix de conception sont réalisés en anticipant
les modifications qui pourraient être apportées au logiciel et en étant
attentif à l’évolution possible ou attendue du logiciel.
• Un des principaux soucis de l’activité de conception: Développer un
design qui facilite l’ajustement du système aux changements.
• But: obtenir une conception flexible qui puisse bien s’accommoder
des modifications futures
Eléments de Génie Logiciel 17
Principes de conception- Anticipation des
changements
• Types de changements:
• Changements (perfectionnements) du système imposés par les nouvelles
exigences du client ou utilisateur
• Changements (adaptations) imposés par la modification de l’environnement
matériel, social, etc.
• Exemples:
• Changement d’algorithme
• Changement de représentation des données
• Changement de l’environnement d’exécution
• Changements dus au processus de développement si la nature du processus
de développement est itérative et/ou incrémentale.
Eléments de Génie Logiciel 18
Principes de conception- Généralité
• Lorsqu’on résout un problème, il est important de mettre l’accent sur
la recherche d’une solution pour un problème plus général que celui à
résoudre et qui se cache sans doute derrière lui.
• Une solution générale a plus de chance d’être réutilisée.
• Un module général pourra, peut-être, être utilisé à plusieurs niveaux
dans l’application.
Eléments de Génie Logiciel 19
Principes de conception- Rigueur et
formalisme
• La rigueur est un complément nécessaire à la créativité dans l’activité
de conception logicielle.
• Le plus haut degré de la rigueur est le formalisme.
• Le formalisme est encore plus exigeant que la rigueur puisqu’il
demande que le processus de développement soit conduit et évalué
par des lois mathématiques.
• Si on est formel, on est nécessairement rigoureux. Mais si on est
rigoureux, on n’est pas nécessairement formel.
Ex. On peut décrire un système en langue naturelle de façon
rigoureuse. Pour être formel toutefois, on utilisera un langage
logique, des modèles mathématiques, etc.
Eléments de Génie Logiciel 20
Qualité d’une bonne conception
• Un bon design devrait favoriser l’indépendance des modules
• Pour évaluer l’indépendance des modules, on se base généralement
sur les concepts suivants:
• Couplage
• Cohésion
• Une conception de qualité apporte à la fois:
• Une forte cohésion,
• Un faible couplage.
Eléments de Génie Logiciel 21
Couplage
• Couplage: mesure de l’interdépendance entre deux modules.
• Un ensemble de modules est faiblement couplé si les liens de
dépendances entre les modules sont peu nombreux.
Système non couplé Système faiblement couplé Système fortement couplé
Interaction d’utilisation:
•appel de fonction
• appel de procédure
• utilisation d’une variable
Eléments de Génie Logiciel 22
Couplage
• Un faible couplage est précurseur…
• d’un bon découpage du système: les éléments qui dépendent les
uns des autres ne sont pas éparpillés à travers les modules du
système.
• d’une facilité de maintenance: une modification dans un module
affecte éventuellement un nombre restreint d’autres modules.
Nombre de révisions réduites…
Eléments de Génie Logiciel 23
Cohésion
• Cohésion= Mesure de la force des relations qui unissent les éléments
fonctionnels à l’intérieur d’un module.
• Un module est fortement cohésif si tous ses éléments sont destinés
et sont essentiels à la réalisation d’une tâche commune unique.
• Une forte cohésion est un signe:
d’un bon découpage du système: les éléments qui sont en rapport
les uns avec les autres se retrouvent dans un même module.
d’une facilité de maintenance: les éléments destinés à une même
tâche sont regroupés et on peut facilement les retrouver.
d’un faible couplage: les éléments inter-dépendants se trouvant
dans le même module, les dépendances inter-modules sont
moindres… Eléments de Génie Logiciel 24
Méthodes de conception
• Méthode:
• Est une démarche, série d’étapes
• Basée sur des concepts
• Utilise une notation
• Méthode de conception
• Démarche (processus): spécifique à chaque méthode
• Concepts: principes du génie logiciel
• Notation:
Graphique
textuelle
Eléments de Génie Logiciel 25
Méthodes de conception
• Objectifs
– Faciliter le passage spécification-conception
– Faciliter la communication entre concepteurs
– Améliorer la qualité
– Améliorer la productivité
• On peut grossièrement distinguer deux familles de méthodes de conception:
• Méthodes fonctionnelles (plusieurs familles)
Le logiciel est vu comme un ensemble d’unités fonctionnelles
• Méthodes orientées objet
Le logiciel est vu comme un ensemble d’objets, chaque objet possède un état
et offre des méthodes qui peuvent modifier ou consulter son état.
Eléments de Génie Logiciel 26
Méthodes fonctionnelles
• Unité de décomposition : module.
• Système = ensemble de modules avec des interactions entre eux.
• approche générale :
décomposition fonctionnelle en modules, basée sur les traitements.
• Résultat :
- état du système centralisé
- conception complexe : nombreuses interconnexions entre les modules pour les
logiciels complexes
• Exemples: SADT, SASD qui regroupent Structured Anaysis (SA) et Structured
Design (SD) sont des exemples bien connus de méthodes fonctionnelles d’analyse
et conception. Ces méthodes datent des années 70.
Eléments de Génie Logiciel 27
Méthodes fonctionnelles
• méthodes descendantes
Système
• Résultat : hiérarchie
Fonction 1 Fonction 2
Exemple : Gestion de bibliothèque
Sous Sous Sous Sous
Gestion de fonction 11 fonction 12 fonction 21 fonction 22
bibliothèques
Gestion des Gestion de
ouvrages prêts
Gestion Gestion de Gestion des Gestion des
d’acquisition réparation emprunts réservations
Eléments de Génie Logiciel 28
Méthodes fonctionnelles
Exemple: SADT
• SADT (Structured Analysis and
design Technics)
• Un modèle SADT = {diagrammes
ordonnés hiérarchiquement}.
• Démarche d’analyse structurée qui
identifie et organise les détails d’un
système qu’on veut appréhender
suivant une hiérarchie de modèles
parfaitement référencée.
Eléments de Génie Logiciel 29
Exemple SADT
Vente par correspondance
Eléments de Génie Logiciel 30
Méthodes orientés objets
• Unité de décomposition : objet
• Système = ensemble d’objets en interaction
• approche générale :
décomposition basée sur les objets
• Résultat
- état du système décentralisé
- système compréhensible, fossé sémantique réduite entre le monde réel et la
solution
Eléments de Génie Logiciel 31
Qu’est ce qu’un objet?
• Entité concrète ou abstraite du domaine d'application
• Décrit par état (attributs) + comportement (opérations pour
manipuler cet état)
Eléments de Génie Logiciel 32
Méthodes orientés objets
Exemple: UML2
• UML 2 est un bon moyen pour faire la conception d’un système
Eléments de Génie Logiciel 33