Académique Documents
Professionnel Documents
Culture Documents
Expertisé par :
Ce polycopié de cours est le fruit de six années d‟expérience dans l‟enseignement du module « Génie
Logiciel » en faveur les étudiants de la 1ere année Master (spécialité GL) au niveau du département
informatique de l‟université de Tiaret. Il contient neuf (09) chapitres détaillant les connaissances de base
ainsi que les concepts avancés de l‟ingénierie des logiciels. D‟autres part, il est enrichi par une variété de
questions et d‟exercices proposés avec solutions de la plupart d‟entre eux.
Apres fixer les objectifs visés, chaque chapitre commence par une introduction avant d‟aborder les
thèmes y afférant. Et il se termine par un rappel des points clés retenus et une série d‟exercices avec leurs
solutions.
Aussi, et pour un accès rapide et permanent, les chapitres de ce polycopié sont disponibles en ligne via la
plateforme Moodle de l‟université de Tiaret (http://moodle.univ-tiaret.dz/course/view.php?id=37).
Ce document a été élaboré en se basant sur les célèbres références dans le domaine du génie logiciel, tel
que les livres de Sommerville, Pressman, Shari et Jacques Lonchamp, et plusieurs d‟autres sources
intéressantes et disponibles sur Internet (Springer, par exemple).
- En premier lieu, les étudiants en génie logiciel vont y trouver les connaissances théoriques et les
bonnes pratiques nécessaires pour apprendre la discipline de l‟ingénierie des logiciels.
- Egalement, les enseignants peuvent en bénéficier pour préparer soit des cours ou des fiches de
travaux dirigés (TD) à travers les exercices et les solutions proposés.
- Enfin, ce polycopié s‟adresse à toute personne intéressée par la conception et le développement
des logiciels de manière professionnelle.
Bonne lecture.
Tiaret, le 02/02/2020
Sommaire
Sommaire
Chapitre 1: Introduction au Génie Logiciel ....................................................................................................5
1. Introduction ..................................................................................................................................................... 5
2. Histoire du Génie Logiciel ................................................................................................................................ 6
3. Développement de logiciel professionnel ....................................................................................................... 7
4. Éthiques de l'ingénierie du logiciel ................................................................................................................ 12
5. Étude de Cas .................................................................................................................................................. 13
6. Points clés ...................................................................................................................................................... 17
7. Exercices ........................................................................................................................................................ 18
8. Solutions ........................................................................................................................................................ 19
Chapitre 2: Processus de Développement Logiciel ..................................................................................... 22
1. Introduction ................................................................................................................................................... 22
2. Modèles d’un processus logiciel .................................................................................................................... 23
3. Les activités d’un processus ........................................................................................................................... 26
4. Faire face au changement ............................................................................................................................. 28
5. Amélioration des processus ........................................................................................................................... 31
6. Points clés ...................................................................................................................................................... 32
7. Exercices ........................................................................................................................................................ 32
8. Solutions ........................................................................................................................................................ 35
Chapitre 3: Développement Agile des Logiciels........................................................................................... 39
1. Introduction ................................................................................................................................................... 39
2. Méthodes Agiles ............................................................................................................................................ 40
3. Techniques de développement agile ............................................................................................................. 42
4. Gestion de Projet Agile .................................................................................................................................. 48
5. Mise à l'échelle des méthodes agiles ............................................................................................................ 51
6. Points clés ...................................................................................................................................................... 56
7. Exercices ........................................................................................................................................................ 57
8. Solutions ........................................................................................................................................................ 60
1
Sommaire
2
Sommaire
3
Chapitre
I Introduction au
Génie Logiciel
Objectifs
Themes couverts
4
Chapitre 1: Introduction au Génie Logiciel
Chapitre 1:
1. Introduction
5
Chapitre 1: Introduction au Génie Logiciel
Il est devenu clair que les approches individuelles au développement du programme n‟ont pas pu
développer les grands et complexes systèmes logiciels et qui restent:
non fiables et ne satisfont pas leurs cahiers des charges
coûtent plus chers que prévu,
et ont été livrés en retard.
Tout au long des années 1970 et 1980, une variété de nouvelles techniques et méthodes de génie
logiciel ont été développés. Outils et notations standards ont été élaborés et sont maintenant
largement utilisés.
L‟initiative viendra de la division des affaires scientifiques de l‟OTAN (NATO)1, qui organise en
octobre 1968 sur la suggestion de F. L. Bauer, professeur à l‟université technique de Munich,
une conférence de travail sur les difficultés de la production de logiciel et les moyens de les
surmonter.
Intitulée Working Conference on Software Engineering, elle est considérée comme l‟événement
fondateur de cette nouvelle discipline et c‟est elle qui popularise le terme de software
engineering, traduit en français par « génie logiciel ».
Bauer donne la définition suivante du terme GL : “Establishment and use of sound engineering
principles to obtain economically software that is reliable and works on real machines
efficiently”
Le génie logiciel (software engineering) est une science de génie industriel qui étudie les
méthodes de travail et les bonnes pratiques des ingénieurs qui développent des logiciels. Le génie
logiciel s'intéresse en particulier aux procédures systématiques qui permettent d'arriver à ce que
des logiciels de grande taille correspondent aux:
attentes du client,
soient fiables,
aient un coût d'entretien réduit et
de qualité et de bonnes performances tout en respectant les délais et les coûts de
construction.
Le génie logiciel est préoccupé par le développement
des logiciels professionnels rentables.
1
L'Organisation du traité de l'Atlantique Nord (OTAN ou Otan ; en anglais : North Atlantic Treaty Organization)
6
Chapitre 1: Introduction au Génie Logiciel
Définition 1: « Le génie logiciel est une discipline d'ingénierie qui s'occupe de tous les aspects de
la production de logiciels ». Le génie logiciel est intéressé par les théories, les méthodes et les
outils de développement de logiciels professionnels.
Définition 3: « Le génie logiciel est un domaine des sciences de l‟ingénieur dont l‟objet d‟étude
est la conception, la fabrication, et la maintenance des systèmes informatiques complexes».
Méthodologies (ou
processus) UP, RUP, XP, Scrum, …
Définition 1: ensemble d'éléments en interaction dynamique, dont les éléments sont organisés et
coordonnés en vue d'atteindre un objectif, qui évolue dans un environnement.
Definition 2: Un système est un ensemble d‟éléments interagissant entre eux suivant un certains
nombres de principes et de règles dans le but de réaliser un objectif.
7
Chapitre 1: Introduction au Génie Logiciel
Définition 3: selon l'arrêté du 22 décembre 1981: ensemble des programmes, procédés et règles,
et éventuellement de la documentation, relatifs au fonctionnement d'un ensemble de traitements
de l'information.
Question Réponse
Qu'est ce qu'un logiciel? Les programmes informatiques et la documentation associée. Les produits
logiciels peuvent être développés pour un client particulier ou peuvent
être développés pour un marché général.
Quelles sont les Un bon logiciel doit offrir la fonctionnalité et les performances requises
caractéristiques d‟un bon pour l'utilisateur et doit être maintenable, fiable et utilisable.
logiciel?
Qu'est-ce que le génie Le génie logiciel est une discipline d'ingénierie qui s'occupe de tous les
logiciel? aspects de la production de logiciels.
Quelles sont les activités Spécification des logiciels, développement des logiciels, validation des
fondamentales de génie logiciel et l'évolution des logiciels.
logiciel?
Quelle est la différence entre L‟informatique focalise sur la théorie et les principes fondamentaux; génie
le génie logiciel et de logiciel est concerné par les pratiques de développement et de la
l'informatique? réalisation des logiciels utiles.
Quelle est la différence entre Ingénierie des systèmes s'intéresse à tous les aspects du développement des
le génie logiciel et de systèmes à base d'ordinateur, y compris le matériel, les logiciels et
l'ingénierie de système? l'ingénierie des processus. Génie logiciel fait partie de ce processus plus
général.
8
Chapitre 1: Introduction au Génie Logiciel
Spécification du produit
Les caractéristiques essentielles pour un bon logiciel (Comment concevoir un logiciel de qualité ?)
Caractéristique Description
Maintenabilité Le logiciel doit pouvoir évoluer pour s‟adapter aux besoins changeants des
(maintainability) clients. Il s'agit d'un attribut essentiel parce que le changement de logiciel est
une exigence inévitable dans un environnement commercial en évolution.
Efficacité ou performance Les logiciels ne doivent pas gaspiller les ressources système telles que la
(Efficiency or performance) mémoire et les cycles du processeur. L‟efficacité inclut donc la réactivité, le
temps de traitement, l‟utilisation de la mémoire, etc.
Acceptabilité ou Le logiciel doit être acceptable par les utilisateurs pour lesquels il est conçu.
utilisabilité (acceptability or Cela signifie qu'il doit être documenté, compréhensible, utilisable et compatible
usability) avec d'autres systèmes qu'ils utilisent.
Génie logiciel
Le génie logiciel est une discipline d'ingénierie qui s'occupe de tous les aspects de la production de
logiciels dès les premières étapes de spécification du système jusqu‟à la maintenance du système
après qu'il a été mis en usage.
Discipline d'ingénierie :
Utilisation des théories et des méthodes appropriées pour résoudre les problèmes en tenant
compte de l'organisation et les contraintes financières.
9
Chapitre 1: Introduction au Génie Logiciel
Spécification du logiciel, où les clients et les ingénieurs définissent le logiciel qui doit être produit
et les contraintes sur son fonctionnement.
Validation du logiciel, où le logiciel est vérifié pour s'assurer que c'est ce que le client demande.
L'évolution du logiciel, où le logiciel est modifié pour tenir compte de l'évolution des besoins des
clients et du marché.
Hétérogénéité
De plus en plus, les systèmes doivent fonctionner comme des systèmes distribués dans des
réseaux qui regroupent différents types d‟ordinateurs et d‟appareils mobiles.
Sécurité et confiance
Comme le logiciel est intimement lié à tous les aspects de nos vies, il est essentiel que nous
puissions faire confiance à ce logiciel.
Echelle
Le logiciel doit être développé dans une très large gamme d'échelles, à partir de très petits
systèmes embarqués dans des appareils mettables (wearable) ou portables, jusqu'à des
systèmes basés sur l'Internet, basés sur le cloud, qui desservent une communauté mondiale.
Les méthodes de génie logiciel et les outils utilisés dépendent du type d'application en cours
d'élaboration, des exigences de la clientèle et l„esprit de l'équipe de développement.
Types d'applications
10
Chapitre 1: Introduction au Génie Logiciel
5) Systèmes de divertissement
Ce sont des systèmes qui sont principalement pour un usage personnel et qui sont destinées à
divertir l'utilisateur. Ex. Games.
8) Systèmes de systèmes
Ce sont des systèmes qui sont composés d'un certain nombre d'autres systèmes logiciels.
Remarque: les limites entre ces types de systèmes sont floues. Ex. Les systèmes de
traitement par lots sont souvent utilisés avec des systèmes Web. Par exemple, dans
une entreprise, les demandes de remboursement de frais de déplacement peuvent être
soumises via une application Web, mais traitées dans une application de traitement
par lots pour un paiement mensuel.
Certains principes fondamentaux s'appliquent à tous les types de système de logiciels, quelles que
soient les techniques de développement utilisées:
Les systèmes doivent être développés en utilisant un processus de développement réussi et
compréhensible. L'organisation qui développe le logiciel doit planifier le processus de
développement et avoir une idée claire de ce qui sera produit et du moment où il sera
terminé. Bien entendu, différents processus sont utilisés pour différents types de logiciels.
La fiabilité et la performance sont importantes pour tous les types de systèmes. Les
11
Chapitre 1: Introduction au Génie Logiciel
logiciels doivent se comporter comme prévu, sans défaillance et doivent être disponibles
pour une utilisation en cas de besoin. Son fonctionnement doit être sûr (savety) et, dans la
mesure du possible, protégé contre les attaques externes (security). Le système doit
fonctionner efficacement et ne doit pas gaspiller de ressources.
Comprendre et gérer les spécifications logicielles et les exigences (ce que le logiciel doit
faire) sont important. Vous devez savoir ce que les différents clients et utilisateurs du
système attendent de celui-ci et gérer leurs attentes afin qu'un système utile puisse être livré
dans les limites du budget et du calendrier.
Vous devez utiliser le plus efficacement possible les ressources existantes. Cela signifie
que, le cas échéant, vous devez réutiliser un logiciel déjà développé plutôt que d‟écrire un
nouveau logiciel.
Systèmes basés sur le Web sont des systèmes distribués complexes mais les principes fondamentaux
du génie logiciel discutés précédemment s'appliquent aussi à eux car ils sont parmi les types de
systèmes.
Les idées fondamentales de l'ingénierie logicielle discutés s'appliquent au logiciel basé sur le Web de
la même manière qu'ils s'appliquent à d'autres types de systèmes logiciels.
Génie logiciel implique des responsabilités plus larges que la simple application des compétences
techniques.
Les ingénieurs logiciels doivent se comporter de façon responsable, honnête et éthique s‟ils veulent
être respectés en tant que professionnels.
Le comportement éthique est plus que simplement faire respecter la loi, mais consiste à la suite
d'une série de principes qui sont moralement corrects.
12
Chapitre 1: Introduction au Génie Logiciel
Confidentialité
Les ingénieurs devraient normalement respecter la confidentialité de leurs employeurs ou
clients, indépendamment de si oui ou non un accord formel de confidentialité a été signé.
Compétence
Les ingénieurs ne devraient pas dénaturer leur niveau de compétence. Ils ne doivent pas
accepter le travail qui est en dehors de leur compétence.
Les sociétés professionnelles publient des codes de conduite définissant les normes de
comportement attendues de leurs membres.
5. Étude de Cas
Collecte des données provenant d'un capteur de glucose sanguin et calcule la quantité d'insuline
nécessaire pour être injecté.
13
Chapitre 1: Introduction au Génie Logiciel
Envoie des signaux à une micro-pompe pour délivrer la dose correcte d'insuline.
Un système de sécurité critique parce que les faibles taux de glycémie peuvent entraîner un mauvais
fonctionnement du cerveau, le coma et la mort; et des taux élevés de sucre dans le sang ont des
conséquences à long terme, tels que des lésions oculaires et rénales.
Le système doit fonctionner de manière fiable et de fournir la bonne quantité d'insuline pour contrer
le niveau actuel des taux de sucre sanguin.
Le système doit donc être conçu et mis en œuvre pour s'assurer que le système répond toujours à ces
exigences.
Mentcare: Un système d'information sur les patients pour soins de santé mentale
Un système d'information patient pour soutenir les soins de santé mentale est un système
d'information médicale qui gère les informations sur les patients souffrant de problèmes de santé
mentale et les traitements qu'ils ont reçus.
La plupart des patients de santé mentale ne nécessitent pas de traitement de l'hôpital dédié, mais ont
besoin d'assister à des cliniques spécialisées régulièrement où ils peuvent rencontrer un médecin qui
a une connaissance approfondie de leurs problèmes.
Pour aider les patients à y assister, ces cliniques n‟existent pas seulement dans les hôpitaux. Ils
peuvent également être organisés dans les cabinets médicaux locales ou dans les centres
communautaires.
Le Mentcare est un système d'information qui est destiné à être utilisé dans les cliniques.
Il fait usage d'une base de données centralisée de l'information du patient, mais a également été
conçu pour fonctionner sur un PC, de sorte qu'il peut être consulté et utilisé à partir des sites qui
n'ont pas de connectivité réseau sécurisée.
14
Chapitre 1: Introduction au Génie Logiciel
Lorsque les systèmes locaux disposent d'un accès réseau sécurisé, ils utilisent l'information du
patient dans la base de données, mais ils peuvent télécharger et utiliser des copies locales des
dossiers des patients lorsqu'ils sont déconnectés.
Buts de Mentcare:
Pour générer des informations de gestion qui permettent aux gestionnaires de services de santé
d‟évaluer le rendement par rapport aux objectifs locaux et gouvernementaux.
De fournir au personnel médical de l'information opportune pour soutenir le traitement des patients.
La surveillance du patient
Le système surveille les dossiers des patients qui sont impliqués dans le traitement et émet
des avertissements si les éventuels problèmes sont détectés.
Rapports administratifs
Le système génère des rapports de gestion mensuels indiquant le nombre de patients traités
dans chaque clinique, le nombre de patients qui sont entrés et sortis du système de soins, le
nombre de patients sélectionnés, les médicaments prescrits et leurs coûts, etc.
Préoccupations Mentcare
Vie privée
Il est essentiel que l'information du patient est confidentielle et n'est jamais divulguée à
personne en dehors de personnel médical autorisé et le patient lui-même.
Sécurité
Certaines maladies mentales provoquent les patients à devenir suicidaire ou un danger pour
d'autres personnes. Chaque fois que possible, le système doit avertir le personnel médical sur
les patients potentiellement suicidaires ou dangereux.
Le système doit être disponible en cas de besoin par ailleurs, la sécurité peut être
compromise et il peut être impossible de prescrire le bon médicament aux patients.
Le gouvernement d'un pays avec de grandes zones de nature sauvage décide de déployer plusieurs
centaines de stations météorologiques dans les régions éloignées.
Les stations météorologiques collectent des données à partir d'un ensemble d'instruments qui
mesurent la température et la pression, le soleil, la pluie, la vitesse du vent et direction du vent.
La station météorologique comprend un certain nombre d'instruments qui mesurent les
paramètres météorologiques tels que la vitesse et direction du vent, les températures du sol et
de l'air, la pression barométrique et les précipitations sur une période de 24 heures. Chacun
15
Chapitre 1: Introduction au Génie Logiciel
de ces instruments est contrôlé par un système de logiciel qui effectue les lectures de
paramètres périodiquement et gère les données collectées à partir des instruments.
Gérer l'alimentation du système, veiller à ce que les batteries sont chargées à chaque fois que les
conditions environnementales le permettent, mais aussi si les générateurs sont arrêtés à cause des
conditions météorologiques potentiellement néfastes, tels que des vents forts.
Soutenir la reconfiguration dynamique où des parties du logiciel sont remplacés par de nouvelles
versions et où les instruments de sauvegarde sont commutés dans le système en cas de défaillance
du système.
Les outils inclus dans chaque version de l'environnement sont choisis par les enseignants et les
apprenants en fonction de leurs besoins spécifiques.
Ceux-ci peuvent être des applications générales telles que des feuilles de calcul, des
applications de gestion de l'apprentissage comme un environnement d'apprentissage virtuel
(VLE) pour gérer la soumission et l'évaluation des devoirs, les jeux et les simulations.
Le système est un système axé sur les services avec tous les composants du système considérés
comme un service remplaçable.
Cela permet au système d'être mis à jour progressivement à mesure que de nouveaux services sont
disponibles.
16
Chapitre 1: Introduction au Génie Logiciel
Il permet également de configurer rapidement le système pour créer des versions de l'environnement
pour différents groupes tels que les très jeunes enfants qui ne peuvent pas lire, les étudiants seniors,
etc.
Services d’iLearn
Services d'utilité qui fournissent des fonctionnalités basiques indépendantes de l'application et qui
peuvent être utilisées par d'autres services du système.
Services d'application qui fournissent des applications spécifiques telles que les courriels, les
conférences, le partage de photos, etc., et l'accès à des contenus éducatifs spécifiques tels que des
films scientifiques ou des ressources historiques.
Les services intégrés sont des services proposant une API (interface de programmation
d'applications) et auxquels les autres services peuvent accéder par l'intermédiaire de cette API. La
communication directe entre les services est donc possible.
Les services indépendants sont des services auxquels on accède facilement via une interface de
navigateur et qui fonctionnent indépendamment d'autres services. L'information ne peut être
partagée qu'avec d'autres services grâce à des actions explicites de l'utilisateur telles que copier et
coller; une ré-authentification peut être requise pour chaque service indépendant.
6. Points clés
Les ingénieurs en logiciel ont des responsabilités à la profession d'ingénieur et de la société. Ils ne
doivent pas simplement être concernés par les questions techniques.
Les associations professionnelles publient des codes de conduite qui énoncent les normes de
comportement attendues de leurs membres.
Trois études de cas sont présentées pour les utilisés dans les futurs chapitres.
Le génie logiciel est une discipline d'ingénierie qui s'occupe de tous les aspects de la production de
logiciels.
Les caractéristiques essentielles des logiciels sont la maintenabilité, la fiabilité et la sécurité,
l'efficacité et l'acceptabilité.
Les activités de haut niveau de spécification, de développement, de validation et d'évolution font
partie de tous les processus de logiciels.
Les notions fondamentales du génie logiciel sont universellement applicables à tous les types de
développement des systèmes.
Il y a beaucoup de différents types de systèmes et chacun requiert des outils et des techniques de
génie logiciel appropriés pour leur développement.
Les idées fondamentales du génie logiciel sont applicables à tous les types de système de logiciel.
Les ingénieurs logiciels ont des responsabilités à l'égard de la profession d'ingénieur et de la
société. Ils ne devraient pas seulement se préoccuper des problèmes techniques.
Les sociétés professionnelles publient des codes de conduite définissant les normes de
comportement attendues de leurs membres.
17
Chapitre 1: Introduction au Génie Logiciel
7. Exercices
I) Quiz :
2: Le logiciel est un produit qui peut être fabriqué en utilisant les mêmes technologies utilisées pour
d'autres artefacts d'ingénierie.
a. Vrai
b. Faux
6: Dans sa forme la plus simple, un dispositif (device) informatique externe peut accéder aux
services de données en nuage (cloud computing) à l'aide d'un navigateur Web.
a. Vrai
b. Faux
8: La réutilisation des logiciels réduit le coût et augmente la valeur des systèmes dans lesquels ils
sont incorporés.
18
Chapitre 1: Introduction au Génie Logiciel
a. Vrai
b. Faux
10: En général, le logiciel ne réussit que si son comportement est conforme aux objectifs de ses
concepteurs.
a. Vrai
b. Faux
8. Solutions
I) Quiz :
1:a 2:b 3:c 4:b 5:b 6:a 7:a 8:a 9:a 10:b
19
Chapitre 1: Introduction au Génie Logiciel
Pour les utilisateurs de produits génériques, cela signifie qu'ils n'ont aucun contrôle sur
la spécification de logiciels et ne peuvent donc pas contrôler l'évolution du produit. Le
développeur peut décider d'inclure/exclure des fonctionnalités et changer l'interface
utilisateur. Cela pourrait avoir des implications pour les processus métiers de
l'utilisateur et ajouter des coûts de formation supplémentaires lorsque de nouvelles
versions du système sont installées. Il peut également limiter la flexibilité du client à
changer leurs propres processus métiers.
3. Les quatre caractéristiques standards sont :
La maintenabilité (maintainability), la fiabilité (dependability or reliability), la
performance ou l‟efficacité (performance), et la utilisabilité (facile à utiliser,
convivialité) ou acceptabilité (usability).
D'autres attributs peuvent être inclus:
- La réutilisabilité (reusability) : peut être utilisé dans d‟autres applications,
- la distribuabilité (distributability) : peut être distribué sur un réseau ou sur un
ensemble de processeurs,
- la portabilité (portability) : peut fonctionner sur des plateformes multiples, et
- l'interopérabilité (interoperability) : peut travailler avec une large gamme de
systèmes logiciels.
4. La fiabilité et la performance des logiciels :
a) Fiabilité :
Correction, justesse, conformité : le logiciel est conforme à ses spécifications, les résultats sont
ceux attendus.
Robustesse, sureté : le logiciel fonctionne raisonnablement en toutes circonstances, rien de
catastrophique ne peut survenir, même en dehors des conditions d‟utilisation prévues
- Quelques métriques:
MTBF : Mean Time Between Failures
Disponibilité (pourcentatge du temps pendant lequel le système est utilisable) et Taux
d‟erreur (nombre d‟erreurs par KLOC)
b) Performance :
Les logiciels doivent satisfaire aux contraintes de temps d‟exécution
Quelques métriques: Temps d‟exécution.
20
Chapitre
Processus de
II Développement
Logiciel
Objectifs
Themes couverts
21
Chapitre 2:
1. Introduction
Le processus logiciel
Un processus logiciel est un ensemble structuré d'activités nécessaires pour développer un système
logiciel.
Un modèle de processus logiciel est une représentation abstraite d'un processus. Il présente une
description d'un processus d'une certaine perspective particulière.
Lorsque nous décrivons et discutons les processus, nous parlons généralement sur les activités de
ces processus tels que la spécification d'un modèle de données, la conception d'une interface
utilisateur, etc., et l'ordre de ces activités.
22
Chapitre 2: Processus de Développement Logiciel
Processus pilotés par plan (planifié): sont des processus où toutes les activités du processus
sont planifiées à l'avance et les progrès sont mesurés sur ce plan.
Processus agiles, dont la planification est progressive et il est plus facile de modifier le
processus afin de refléter l'évolution des besoins des clients.
Dans la pratique, les processus les plus pratiques comprennent des éléments des deux approches
planifiée et agiles.
Dans la pratique, la plupart des grands systèmes sont développés en utilisant un processus qui
intègre des éléments de tous ces modèles.
23
Chapitre 2: Processus de Développement Logiciel
Partitionnement inflexible du projet en étapes distinctes, il est difficile de répondre à l'évolution des
besoins des clients.
Par conséquent, ce modèle ne convient que si les exigences sont bien comprises et les
changements seront assez limitées au cours du processus de conception.
Peu de systèmes d'entreprises ont des besoins stables.
Le modèle en cascade est surtout utilisé pour les grands projets d'ingénierie des systèmes où un
système est développé sur plusieurs sites.
Dans ces circonstances, la nature du modèle piloté par plan du modèle en cascade permet de
coordonner le travail.
2) Le développement incrémental
Il est plus facile d'obtenir les commentaires des clients sur le travail de développement qui a été fait.
Les clients peuvent faire des commentaires sur les démonstrations du logiciel et voir ce qui a
été mis en œuvre.
24
Chapitre 2: Processus de Développement Logiciel
La structure du système tend à se dégrader que les nouvelles augmentations sont ajoutées.
En plus du temps et de l'argent dépensé sur le reconstruction pour améliorer le logiciel, le
changement régulier tend à corrompre sa structure. L'intégration de nouveaux changements
des logiciels devient de plus en plus difficile et coûteux.
3) Intégration et configuration
Basé sur la réutilisation systématique où les systèmes sont intégrés à partir de composants existants
ou les systèmes COTS (Commercial-Off-The-Shelf).
Les éléments réutilisés peuvent être configurés pour adapter leur comportement et leur
fonctionnalité aux exigences de l'utilisateur.
Systèmes autonomes de logiciels (COTS) qui sont configurés pour une utilisation dans un
environnement particulier.
Collections d'objets qui sont développées comme un paquet à être intégré dans un Framework de
composants tels que .NET ou J2EE.
Services Web qui sont développés selon les normes de service (l‟architecture SOA) et qui sont
disponibles pour l'invocation à distance.
25
Chapitre 2: Processus de Développement Logiciel
Avantages et désavantages
Réduction des coûts et des risques, car moins de logiciels sont développés à partir de zéro.
Mais, les compromis entre les exigences sont inévitables, de sorte que le système ne répond pas aux
besoins réels des utilisateurs.
Activité:
Classer les processus de développement des logiciels suivants selon les modèles étudiés:
Les processus de développement des logiciels sont des séquences d'activités techniques,
collaboratives et de gestion avec l'objectif global de la spécification, la conception, la mise en œuvre
(implémentation) et le test (validation et vérification) d‟un système de logiciel.
Ces activités fondamentales du processus sont organisées différemment dans les différents processus
de développement. Dans le modèle en cascade, elles sont organisées en séquence, alors que dans le
développement incrémental, elles sont entrelacées.
a) Spécification du logiciel
Le processus d‟établissement des services nécessaires et les contraintes sur les opérations du
système et le développement.
26
Chapitre 2: Processus de Développement Logiciel
Implémentation
Traduire cette structure dans un programme exécutable;
Les activités de conception et d‟implémentation sont étroitement liés et peuvent être entrelacées.
Conception de base de données, où vous concevez les structures de données du système et la façon
dont ceux-ci sont à être représenté dans une base de données.
Conception de l'interface, où vous définissez les interfaces entre les composants du système.
Choix et conception de composants, où vous recherchez des composants réutilisables. S‟il n‟est pas
disponible, vous concevez comment cela va fonctionner.
Implémentation du Système
Le logiciel est mis en œuvre soit en développant un programme ou plusieurs programmes, soit en
configurant un système d'application.
La conception et l‟implémentation sont des activités entrelacées pour la plupart des types de
systèmes logiciels.
Le débogage est l'activité consistant à trouver des défauts de programme et à corriger ces défauts.
Vérification et validation (V & V) est destiné à montrer que le système est conforme à sa
spécification et répond aux exigences de la clientèle du système.
Test du système comprend l'exécution du système avec des cas de test qui sont dérivés à partir de la
spécification des données réelles à traiter par le système.
Niveaux du test
Test du composant:
Les différents composants sont testés de façon indépendante;
Les composants peuvent être des fonctions ou des objets ou des groupes cohérents de ces
entités.
27
Chapitre 2: Processus de Développement Logiciel
Test du système:
Test du système dans son ensemble. Le test des propriétés émergentes est particulièrement
important.
Test d'acceptation:
Test avec les données du client pour vérifier que le système répond aux besoins du client.
d) Évolution du logiciel
Comme les besoins évoluent à travers l'évolution des circonstances de l‟entreprise (business), le
logiciel qui supporte l'entreprise doit également évoluer et changer.
Bien qu'il y ait une délimitation entre le développement et l'évolution (Maintenance), cela est de plus
en plus sans importance puisque de moins en moins de systèmes sont complètement nouveaux.
Tolérance au changement, où le processus est conçu de sorte que les changements peuvent être
accommodés à un coût relativement faible.
Ceci implique normalement une certaine forme de développement incrémental. Les
modifications proposées peuvent être implémentées dans des incréments qui ne sont pas
encore développés. Si cela est impossible, alors un seul incrément (une petite partie du
système) peut être modifiée pour incorporer le changement.
Le prototypage du système, où une version du système ou une partie du système est développée
rapidement pour vérifier les besoins du client et la faisabilité des décisions de conception. Cette
approche appuie l'anticipation des changements.
28
Chapitre 2: Processus de Développement Logiciel
Livraison incrémentale, où les incréments du système sont livrés au client pour commentaires et
expérimentations. Cela prend en charge à la fois l„anticipation des changements et la tolérance aux
changements.
Prototypage de logiciels
Un prototype est une version initiale d'un système utilisé pour démontrer les concepts et
d‟expérimenter les options de conception.
Avantages du prototypage
Amélioration de la facilité d'utilisation du système.
Une correspondance plus étroite aux besoins réels des utilisateurs.
Amélioration de la qualité de conception.
Amélioration de la maintenabilité.
Réduire l‟effort du développement
Le développement du prototype
Livraison incrémentale
Plutôt que de livrer le système en une seule livraison, le développement et la livraison est
décomposée en incrémentations, et avec chaque incrémentation, une partie de la fonctionnalité
requise est livrée.
29
Chapitre 2: Processus de Développement Logiciel
Les besoins des utilisateurs sont prioritaires et les plus hautes exigences prioritaires sont incluses
dans les premières incrémentations.
Une fois le développent d'un incrément est lancé, les exigences sont gelés alors que les exigences
des incrémentations ultérieures peuvent continuer évoluer.
Développement incrémental
Développer le système par incréments et évaluer chaque incrément avant de procéder à
l'élaboration de l'incrément suivant;
Approche normale utilisée dans les méthodes agiles;
Évaluation faite par procuration utilisateur/client.
Livraison incrémentale
Déployer une incrémentation pour être utilisée par les utilisateurs finaux;
Une évaluation plus réaliste sur l'utilisation pratique des logiciels;
Difficile à implémenter pour les systèmes de remplacement parce que les incréments ont
moins de fonctionnalité que le système à remplacer.
Livraison incrémentale
La valeur du client peut être fournie avec chaque incrément afin que la fonctionnalité du système
soit disponible plus tôt.
Les premiers incréments agissent comme un prototype pour aider à éliciter les exigences pour des
incréments ultérieurs.
Les services du système de priorité élevée ont la tendance de recevoir la plupart des tests.
La plupart des systèmes exigent un ensemble d‟installations de base qui sont utilisés par les
différentes parties du système.
Comme les exigences ne sont pas définies en détail jusqu'à un incrément soit implémenté, il
peut être difficile d'identifier les installations communes qui sont nécessaires par tous les
incréments.
30
Chapitre 2: Processus de Développement Logiciel
L'essence des processus incrémentaux est que la spécification est développée en conjonction avec le
logiciel.
Cependant, cela est contraire au modèle d'approvisionnement de nombreuses organisations,
où la spécification complète du système fait partie du contrat de développement du système.
De nombreuses entreprises de logiciels se sont tournées vers l'amélioration des processus logiciels
pour améliorer la qualité de leurs logiciels, réduire les coûts ou accélérer leurs processus de
développement.
L'amélioration des processus signifie comprendre les processus existants et modifier ces processus
pour accroître la qualité des produits et/ou réduire les coûts et le temps de développement.
Approches d'amélioration
L'approche agile, axée sur le développement itératif et la réduction des frais généraux dans le
processus logiciel.
Les principales caractéristiques des méthodes agiles sont la livraison rapide de la
fonctionnalité et la réactivité à l'évolution des besoins des clients.
Mesure de processus
Vous mesurez un ou plusieurs attributs du processus logiciel ou du produit. Ces mesures
constituent une base de référence qui vous aide à décider si les améliorations de processus
ont été efficaces.
31
Chapitre 2: Processus de Développement Logiciel
Changement de processus
Des changements de processus sont proposés pour répondre à certaines des faiblesses du
processus identifiées. Ceux-ci sont introduits et le cycle reprend pour recueillir des données
sur l'efficacité des changements.
6. Points clés
Les processus de développement des logiciels sont les activités impliquées dans la production d'un
système de logiciel. Modèles de processus logiciel sont des représentations abstraites de ces
processus.
L‟Évolution du logiciel a lieu lorsque vous changez les systèmes logiciels existants afin de répondre
aux nouvelles exigences. Le logiciel doit évoluer pour rester utile.
Les processus devraient inclure des activités telles que le prototypage et la livraison incrémentale
(progressive) pour faire face aux changements.
Les processus peuvent être structurés pour le développement et l'exécution itérative de sorte que
des changements peuvent être effectués sans perturber le système dans son ensemble.
Les principales approches de l'amélioration des processus sont les approches agiles, axées sur la
réduction des frais généraux des processus et les approches basées sur la maturité, basées sur une
meilleure gestion des processus et l'utilisation de bonnes pratiques d'ingénierie logicielle.
7. Exercices
I) Quiz :
1 : Le modèle de développement des logiciels en cascade est
a. Une approche raisonnable lorsque les exigences sont bien définies.
b. Une bonne approche lorsqu'un programme de travail est requis rapidement.
c. La meilleure approche à utiliser pour les projets avec de grandes équipes de
développement.
d. Un modèle ancien qui est rarement utilisé.
32
Chapitre 2: Processus de Développement Logiciel
33
Chapitre 2: Processus de Développement Logiciel
9: Laquelle parmi les suivantes n‟est pas une phase du modèle RUP (Rational Unified Process)?
a. Phase de création
b. Phase d'élaboration
c. Phase de construction
d. Phase de validation
10: Lequel de ces éléments n'est pas une caractéristique du Processus Logiciel Personnel? (PSP :
Personal Software Process)?
a. Met l'accent sur la mesure personnelle du produit de travail.
b. Le praticien exige une supervision minutieuse par le chef de projet.
c. Le praticien individuel est responsable de l'estimation et de la planification.
d. Le praticien a l‟habilité de contrôler la qualité des produits logiciels.
11: Quel est l'objectif du Processus Logiciel d'Equipe (TSP :Team Software Process)?
a. Accélérer l'amélioration des processus logiciels
b. Permettre une meilleure gestion de temps par des professionnels hautement qualifiés
c. Créer des équipes de logiciels auto-dirigés
d. Montrer aux gestionnaires comment réduire les coûts et maintenir la qualité
e. b et c
12: Les outils technologiques des processus permettent aux entreprises de logiciels de compresser
les plannings en ignorant les activités sans importance.
a. Vrai
b. Faux
13: Il est généralement admis que l'on ne peut pas avoir de processus logiciels faibles et créer des
produits finis de haute qualité.
a. Vrai
b. Faux
1. Donner les raisons de votre réponse en fonction du type de système en cours de développement,
proposer le modèle de processus logiciel générique le plus appropriée qui pourrait être utilisé
comme une base pour la gestion de développement des systèmes suivants:
Un système pour contrôler le freinage anti-blocage (Anti-lock Braking System) dans une
voiture.
Un système de réalité virtuelle pour soutenir la maintenance des logiciels.
Un système de comptabilité de l'université qui remplace un système existant.
Un système interactif de planification de voyage qui aide les utilisateurs à planifier leurs
voyages avec le plus bas impact sur l'environnement.
34
Chapitre 2: Processus de Développement Logiciel
8. Solutions
I) Quiz :
1:a 2:b 3:d 4:b 5:c 6:e 7:c 8:d 9:d 10:b 11:e 12:b 13:a
1) Les modèles de processus logiciel générique le plus appropriés pour les systèmes suivants:
35
Chapitre 2: Processus de Développement Logiciel
b) Les exigences du système sont beaucoup plus détaillées que les exigences de l'utilisateur et sont
destinées à être une spécification précise du système qui peut faire partie d'un contrat de système.
Ils peuvent également être utilisés dans les situations où le développement est sous-traité
(externalisé) et l'équipe de développement a besoin d'une spécification complète de ce qui devrait
être développé. Les exigences du système sont développées après l'établissement des exigences
des utilisateurs.
6) Les systèmes doivent être modifiés car ils sont installés dans un environnement. L'environnement
s'adapte à eux et cette adaptation génère naturellement des exigences système
nouvelles/différentes. En outre, l'environnement du système est dynamique et produit
constamment des nouvelles exigences à la suite de modifications apportées au métier, les
objectifs de l‟entreprise et les politiques commerciales. Le système devrait être adapté pour tenir
compte ces exigences ou il sera moins utile.
Exemples d'activités de processus qui soutiennent le changement:
a. Enregistrement de la justification des exigences de sorte que la raison pour laquelle une
exigence est incluse est connue. Cela aide les changements futurs.
b. Traçabilité des exigences qui montre les dépendances entre les exigences et entre les
exigences et la conception/code du système.
36
Chapitre 2: Processus de Développement Logiciel
37
Chapitre
III
Développement
Agile des Logiciels
Objectifs
• Comprendre la raison d'être des méthodes agiles de développement
logiciel, le manifeste agile et les différences entre le développement agile
et piloté plan;
• connaître les pratiques clés dans extreme programming (XP) et comment
ils se rapportent aux principes généraux des méthodes agiles;
• comprendre l'approche Scrum pour la gestion agile de projets;
• être conscient des issues et des problèmes de mise à l'échelle des
méthodes agiles pour le développement de grands systèmes logiciels.
Themes couverts
• Méthodes agiles
• Techniques de développement agile
• Gestion de projet Agile
• Mise à l'échelle des méthodes agiles
38
Chapitre 3: Développement Agile des Logiciels
Chapitre 3:
1. Introduction
Le développement et la livraison rapides sont maintenant souvent l'exigence la plus importante pour
les systèmes logiciels
Les entreprises fonctionnent selon une exigence de changement rapide et il est pratiquement
impossible de produire un ensemble d‟exigences logicielles stables
Le logiciel doit évoluer rapidement pour refléter les besoins changeants de l'entreprise.
Le développement axé sur le plan est essentiel pour certains types de systèmes mais ne répond pas à
ces besoins commerciaux.
Des méthodes de développement agiles ont émergé à la fin des années 1990, dont l'objectif était de
réduire radicalement le délai de livraison pour les systèmes logiciels de travail
Développement Agile
Le système est développé en une série de versions ou d'incréments avec des parties prenantes
(stakeholders) impliquées dans la spécification et l'évaluation de la version.
Support d'outils étendu (par exemple des outils de test automatisés) utilisés pour supporter le
développement.
39
Chapitre 3: Développement Agile des Logiciels
Développement agile
La spécification, la conception, la mise en œuvre et les tests sont interreliés et les résultats du
processus de développement sont décidés par le biais d'un processus de négociation durant le
processus de développement du logiciel.
2. Méthodes Agiles
Méthodes Agiles
L'insatisfaction suscitée par les frais généraux liés aux méthodes de conception de logiciels des
années 1980 et 1990 a conduit à la création de méthodes agiles. Ces méthodes:
Concentrent sur le code plutôt que sur le design
Sont basés sur une approche itérative du développement de logiciels
Sont destinés à fournir des logiciels de travail rapidement et évoluer cette rapidité pour
répondre aux exigences changeantes.
L'objectif des méthodes agiles est de réduire les frais généraux dans le processus logiciel (par
exemple en limitant la documentation) et de pouvoir répondre rapidement aux besoins changeants
sans de trop travail.
40
Chapitre 3: Développement Agile des Logiciels
Nous découvrons les meilleures façons pour développer un logiciel en le faisant et en aidant les
autres à le faire. A travers ce travail, nous en sommes venus à valoriser:
Personnes et interaction plutôt que processus et outils
Logiciel fonctionnel plutôt que documentation complète
Collaboration avec le client plutôt que négociation de contrat
Réagir au changement plutôt que suivre un plan
En fait, bien que les éléments de droite soient importants, nous pensons que les éléments de gauche
le sont encore plus.
Principle Description
Implication du client Les clients doivent être étroitement impliqués tout au long du
(Customer processus de développement. Leur rôle est de fournir et de
involvement) prioriser les nouvelles exigences du système et d'évaluer les
itérations du système.
41
Chapitre 3: Développement Agile des Logiciels
Beaucoup de méthodes
eXtreme Programming
Dynamic Software Development Method
Adaptive Software Development
Crystal Clear
SCRUM
Feature Driven Development
eXtreme Programming
Une méthode agile très influente, développée à la fin des années 1990, qui a introduit une série de
techniques de développement agiles.
42
Chapitre 3: Développement Agile des Logiciels
Planification incrémentale Les exigences sont enregistrées sur des cartes de « stories » et
(Incremental planning) les « stories » à inclure dans une sortie (release) sont
déterminées par le temps disponible et leur priorité relative. Les
développeurs décomposent ces stories dans des «tâches» de
développement. Voir les figures 3.5 et 3.6.
Petites sorties ou versions (Small L'ensemble minimal de fonctionnalités utiles qui fournit une
releases) valeur commerciale est développé en premier. Les versions du
système sont fréquentes et ajoutent progressivement des
fonctionnalités à la première version.
Conception Simple (Simple Suffisamment de conception est réalisée pour répondre aux
design) exigences actuelles et pas plus.
Développement piloté par test Un framework de test unitaire automatisé est utilisé pour écrire
(test-first development ou des tests pour une nouvelle pièce de fonctionnalité avant que
test-driven development) cette fonctionnalité soit implémentée.
Remaniement de code Tous les développeurs sont censés ajuster le code en
(refactoring) permanence dès que des améliorations de code sont trouvées.
Cela permet de garder le code simple et maintenable.
Programmation par paire Les développeurs travaillent par paires, vérifient le travail de
(Pair programming) l'autre et fournissent le support pour toujours faire un bon
travail.
Propriété collective Les paires de développeurs travaillent sur toutes les parties du
(Collective ownership) système, et que tous les développeurs prennent la responsabilité
de tout le code. Tout le monde peut changer n'importe quoi.
Intégration continue Dès que le travail sur une tâche est terminé, il est intégré à
(Continuous integration) l'ensemble du système. Après une telle intégration, tous les tests
unitaires du système doivent passer.
Rythme durable Les grandes quantités d'heures supplémentaires ne sont pas
(Sustainable pace) considérées comme acceptables car l'effet net est souvent de
réduire la qualité du code et la productivité à moyen terme
Client sur site Un représentant de l'utilisateur final du système (le client)
(On-site customer) devrait être disponible à plein temps pour l'utilisation de
l'équipe XP. Dans un processus de programmation extrême, le
client est un membre de l'équipe de développement et est chargé
d‟apporter les exigences du système à l'équipe pour la mise en
œuvre.
XP et principes agiles
Le développement incrémental est pris en charge par de petites versions fréquentes du système.
43
Chapitre 3: Développement Agile des Logiciels
Les personnes et pas les processus à travers la programmation par paires, la propriété collective et
un processus qui évite les longues heures de travail.
Extreme programming a un accent technique et n'est pas facile à intégrer avec la pratique de gestion
dans la plupart des organisations.
Par conséquent, alors que le développement agile utilise des pratiques de XP, la méthode telle que
définie à l'origine n'est pas largement utilisée.
Principales pratiques
Scénarios (stories) d'utilisateurs pour la spécification
Remaniement (Refactoring)
Développement piloté par Test
Programmation par paire (en binôme)
Dans XP, un client ou un utilisateur fait partie de l'équipe XP et il est responsable de prendre des
décisions sur les exigences.
Les exigences de l'utilisateur sont exprimées sous la forme de scénarios (stories) utilisateur.
Ceux-ci sont écrits sur des cartes et l'équipe de développement les décompose en tâches
d'implémentation. Ces tâches sont la base des estimations de l'échéancier et des coûts.
Le client choisit les stories à inclure dans la prochaine version en fonction de ses priorités et des
estimations du calendrier.
44
Chapitre 3: Développement Agile des Logiciels
Remaniement (Refactoring)
La sagesse conventionnelle en génie logiciel consiste à concevoir pour le changement. Cela vaut la
peine de consacrer du temps et de l'énergie à anticiper les changements, car cela réduit les coûts plus
tard dans le cycle de vie.
XP, cependant, soutient que cela ne vaut pas la peine car les changements ne peuvent pas être
anticipés de manière fiable.
Au contraire, il propose une amélioration constante du code (refactoring) pour faciliter les
changements quand ils doivent être implémentés.
Remaniement (Refactoring)
Les modifications sont plus faciles à faire car le code est bien structuré et clair.
Exemples de refactoring
Ranger et renommer les attributs et les méthodes pour les rendre plus faciles à comprendre.
45
Chapitre 3: Développement Agile des Logiciels
Le remplacement du code en ligne par des appels à des méthodes incluses dans une bibliothèque de
programmes.
Les tests sont essentiels pour XP et XP a développé une approche où le programme est testé après
chaque changement.
Écrire des tests avant le code clarifie les exigences à mettre en œuvre.
Les tests sont écrits sous forme de programmes plutôt que de données afin de pouvoir être exécutés
automatiquement. Le test inclut une vérification qu'il a correctement exécuté.
Il s'appuie généralement sur un framework de test tel que Junit.
Tous les tests précédents et nouveaux sont exécutés automatiquement lorsque de nouvelles
fonctionnalités sont ajoutées, vérifiant ainsi que la nouvelle fonctionnalité n'a pas introduit d'erreurs.
Implication du client
Le rôle du client dans le processus de test est d'aider à développer des tests d'acceptation pour les
stories qui seront implémentées dans la prochaine version du système.
Le client qui fait partie de l'équipe écrit des tests au fur et à mesure du développement. Tout nouveau
code est donc validé pour s'assurer qu'il est ce que le client a besoin.
Cependant, les personnes qui adoptent le rôle de client ont un temps limité et ne peuvent donc pas
travailler à plein temps avec l'équipe de développement. Ils peuvent estimer que fournir les
exigences était suffisant d'une contribution et peuvent donc être réticents à s'impliquer dans le
processus de test.
46
Chapitre 3: Développement Agile des Logiciels
L'automatisation des tests signifie que les tests sont écrits en tant que composants exécutables avant
la mise en œuvre de la tâche
Ces composants de test doivent être autonomes, simuler la soumission des entrées à tester et
vérifier que le résultat satisfait aux spécifications de sortie. Un framework de test automatisé
(par exemple Junit) est un système qui facilite l'écriture de tests exécutables et la soumission
d'un ensemble de tests pour l'exécution.
Comme les tests sont automatisés, il y a toujours un ensemble de tests qui peuvent être exécutés
rapidement et facilement
Chaque fois qu'une fonctionnalité est ajoutée au système, les tests peuvent être exécutés et
les problèmes introduits par le nouveau code peuvent être détectés immédiatement.
Les programmeurs préfèrent la programmation que faire tests et parfois ils prennent des raccourcis
lors de l'écriture des tests. Par exemple, ils peuvent écrire des tests incomplets qui ne vérifient pas
toutes les exceptions possibles qui peuvent se produire.
Certains tests peuvent être très difficiles à écrire progressivement. Par exemple, dans une interface
utilisateur complexe, il est souvent difficile d'écrire des tests unitaires pour le code qui implémente
la «logique d'affichage» et le flux de travail (workflow) entre les écrans.
Il est difficile de juger de l'exhaustivité d'un ensemble de tests. Bien que vous puissiez avoir
beaucoup de tests système, votre ensemble de test peut ne pas fournir une couverture complète.
La programmation par paire implique des programmeurs travaillant par paires, développant du code
ensemble.
Cela aide à développer une possession commune du code et propage les connaissances à travers
47
Chapitre 3: Développement Agile des Logiciels
l'équipe.
Les paires sont créées dynamiquement afin que tous les membres de l'équipe travaillent ensemble
pendant le processus de développement.
Le partage des connaissances qui se produit lors de la programmation par paires est très important
car il réduit les risques globaux pour un projet lorsque les membres quittent. l'équipe.
La programmation par paire n'est pas nécessairement inefficace et il existe des preuves qui
suggèrent qu'une paire travaillant ensemble est plus efficace que deux programmeurs travaillant
séparément.
La responsabilité principale des gestionnaires de projet de logiciel est de gérer le projet afin que le
logiciel est livré à temps et dans le budget prévu pour le projet.
L'approche standard de la gestion de projet est axée sur le plan. Les gestionnaires établissent un plan
pour le projet montrant ce qui devrait être fourni, quand il devrait être livré et qui travaillera sur le
développement des livrables du projet.
La gestion de projet agile nécessite une approche différente, adaptée au développement incrémental
et aux pratiques utilisées dans les méthodes agiles.
Scrum est une méthode de développement agile orientée projet informatique dont les ressources sont
régulièrement actualisées.
Le principe de base étant d'être toujours prêt à réorienter le projet au fil de son avancement.
Scrum
Scrum (www.scrum.org) est une méthode agile qui se concentre sur la gestion du développement
itératif plutôt que sur des pratiques agiles spécifiques.
48
Chapitre 3: Développement Agile des Logiciels
Terminologie Scrum
produit partiel (ou L'incrément logiciel fourni par un sprint. L'idée est que cela devrait être
increment) «potentiellement livrable», ce qui signifie qu'il est dans un état fini et qu'aucun autre
potentiellement livrable travail, tel que le test, n'est nécessaire pour l'intégrer dans le produit final. En
ou utilisable pratique, cela n'est pas toujours réalisable.
(Potentially shippable
product increment)
Carnet de produit Ceci est une liste d'éléments à faire que l'équipe Scrum doit aborder. Il peuvent être
(Product Backlog) des définitions de caractéristiques pour le logiciel, les exigences logicielles, les
stories d‟utilisateur ou la description des tâches supplémentaires nécessaires, telles
que la définition de l'architecture ou la documentation de l'utilisateur.
Propriétaire du produit Un individu (ou éventuellement un petit groupe) dont le travail consiste à identifier
(Product owner) les caractéristiques ou les exigences du produit, à donner propriété pour le
développement et à revoir continuellement le Product Backlog pour s'assurer que le
projet continue de répondre aux besoins critiques de l'entreprise. Le Product Owner
peut être un client mais peut également être un gestionnaire de produit dans une
société de logiciels ou un autre représentant des parties prenantes.
Scrum Une réunion quotidienne de l'équipe Scrum qui examine les progrès et priorise le
travail à faire ce jour-là. Idéalement, cela devrait être une courte réunion en face à
face qui inclut toute l'équipe.
Scrum Master Le Scrum Master est responsable pour s'assurer que le processus Scrum est suivi et
guide l'équipe dans l'utilisation efficace du Scrum. Il est responsable de l'interface
avec le reste de la compagnie et de veiller à ce que l'équipe Scrum ne soit pas
détournée par une interférence extérieure. Les développeurs Scrum sont
catégoriques que le Scrum Master ne doit pas être considéré comme un gestionnaire
de projet. D'autres, cependant, peuvent ne pas toujours trouver facile de voir la
différence.
Sprint Une itération de développement. Les sprints durent généralement de 2 à 4 semaines.
Vélocité Une estimation de l'effort de Product Backlog qu'une équipe peut couvrir en un seul
(Velocity) sprint. Comprendre la vitesse d'une équipe les aide à estimer ce qui peut être couvert
dans un sprint et fournit une base pour mesurer l'amélioration des performances.
49
Chapitre 3: Développement Agile des Logiciels
Le point de départ de la planification est le product backlog, qui est la liste des travaux à effectuer
sur le projet.
La phase de sélection implique toute l'équipe du projet qui travaille avec le client pour sélectionner
les caractéristiques et les fonctionnalités du product backlog à développer pendant le sprint.
Une fois que ceux-ci sont convenus, l'équipe s'organise pour développer le logiciel.
Au cours de cette étape, l'équipe est isolée du client et de l'organisation, toutes les communications
étant acheminées par le «Scrum Master».
Le rôle du Scrum Master est de protéger l'équipe de développement des distractions externes.
À la fin du sprint, le travail effectué est revu et présenté aux parties prenantes. Le prochain cycle de
sprint commence alors.
50
Chapitre 3: Développement Agile des Logiciels
Le «Scrum Master» est un facilitateur qui organise des réunions quotidiennes, suit le Backlog du
travail à faire, enregistre les décisions, mesure le progrès par rapport Backlog et communique avec
les clients et la direction en dehors de l'équipe.
Toute l'équipe participe à de courtes réunions quotidiennes (Scrums) où tous les membres de
l'équipe partagent des informations, décrivent leurs progrès depuis la dernière réunion, les
problèmes qui se sont posés et ce qui est prévu pour le lendemain.
Cela signifie que tout le monde au sein de l'équipe sait ce qui se passe et, si des problèmes
surviennent, peut réorganiser le travail à court terme pour y faire face.
Avantages de Scrum
Toute l'équipe a la visibilité de tout et par conséquent la communication d'équipe est améliorée.
Les clients voient la livraison des incréments à temps et obtiennent des commentaires sur le
fonctionnement du produit.
La confiance entre les clients et les développeurs est établie et une culture positive est créée dans
laquelle tout le monde s'attend à ce que le projet réussisse.
Scrum distribué
Les méthodes agiles ont été couronnées de succès pour des projets de petite et moyenne taille qui
peuvent être développés par une petite équipe co-localisée.
51
Chapitre 3: Développement Agile des Logiciels
Il est parfois soutenu que le succès de ces méthodes provient d'une meilleure communication, ce qui
est possible lorsque tout le monde travaille ensemble.
La mise à l'échelle des méthodes agiles implique de les modifier pour faire face à des projets plus
grands et plus longs où il y a plusieurs équipes de développement, travaillant peut-être dans
différents localisations.
La mise à l'échelle s'intéresse à la manière dont les méthodes agiles peuvent être introduites dans
une grande entreprise avec de nombreuses années d'expérience en développement de logiciel.
Lors de la mise à l'échelle des méthodes agiles, il est important de maintenir les fondamentaux
agiles:
Planification flexible, versions système fréquentes, intégration continue, développement
piloté par les tests et bonnes communications d'équipe.
L'informalité du développement agile est incompatible avec l'approche juridique de la définition des
contrats couramment utilisée dans les grandes entreprises.
Les méthodes agiles sont plus appropriées pour le développement de nouveaux logiciels plutôt que
pour la maintenance des logiciels. Pourtant, la majorité des coûts de logiciels dans les grandes
entreprises proviennent de la maintenance de leurs systèmes logiciels existants.
Les méthodes agiles sont conçues pour de petites équipes co-localisées, mais le développement de
logiciels implique maintenant des équipes réparties dans le monde entier.
Problèmes contractuels
La plupart des contrats de logiciels pour les systèmes personnalisés sont basés sur une spécification
qui définit ce qui doit être implémenté par le développeur du système pour le client du système.
Cependant, cela empêche l'entrelacement entre les spécifications et le développement comme c'est la
norme dans le développement agile.
Un contrat qui paie pour le temps de développement plutôt que la fonctionnalité est requis.
Cependant, cela est considéré comme un risque élevé par nombreux services juridiques parce
que ce qui doit être livré ne peut pas être garanti.
La plupart des entreprises dépensent plus pour la maintenance de logiciels existants que pour le
développement de nouveaux logiciels. Donc, si les méthodes agiles doivent être couronnées de
succès, elles doivent soutenir la maintenance ainsi que le développement original.
52
Chapitre 3: Développement Agile des Logiciels
Les systèmes développés en utilisant une approche agile sont-ils maintenables, étant donné
l'importance accordée au processus de développement de la minimisation de la
documentation officielle?
Les méthodes agiles peuvent-elles être utilisées efficacement pour faire évoluer un système
en réponse à des demandes de changement de clients?
Des problèmes peuvent survenir si l'équipe de développement originale ne peut pas être maintenue.
Maintenance agile
Le développement agile repose sur l'équipe de développement qui sait et comprend ce qui doit être
fait.
Pour les systèmes à longue durée de vie, c'est un vrai problème car les développeurs d'origine ne
travailleront pas toujours sur le système.
La plupart des projets comprennent des éléments de processus agiles et planifiés. Décider de
l'équilibre dépend de:
Est-il important d'avoir une spécification et une conception très détaillées avant de passer à
la mise en œuvre? Si c'est le cas, vous devez probablement utiliser une approche axée sur le
plan.
Est-ce une stratégie de livraison incrémentale, où vous livrez le logiciel aux clients et
obtenez un retour rapide de leur part, réaliste? Si c'est le cas, envisagez d'utiliser des
méthodes agiles.
Quelle est la taille du système en cours de développement? Les méthodes agiles sont plus
efficaces lorsque le système peut être développé avec une petite équipe co-localisée capable
de communiquer de manière informelle. Cela peut ne pas être possible pour les grands
systèmes qui nécessitent des équipes de développement plus importantes, de sorte qu'une
approche axée sur le plan peut devoir être utilisée.
Principe Pratique
Implication du client Cela dépend d'un client désireux et capable de passer du temps avec l'équipe de
(Customer développement et qui peut représenter toutes les parties prenantes du système.
involvement) Souvent, les représentants des clients ont d'autres demandes sur leur temps et ne
peuvent pas participer pleinement au développement du logiciel.
Là où il y a des parties prenantes externes, telles que les régulateurs, il est difficile
de représenter leur point de vue à l'équipe agile.
Embrasser le Prioriser les changements peut être extrêmement difficile, en particulier dans les
changement systèmes pour lesquels il existe de nombreuses parties prenantes. Généralement,
(Embrace change) chaque partie prenante donne des priorités différentes aux différents changements.
53
Chapitre 3: Développement Agile des Logiciels
livraison incrémentale Les itérations rapides et la planification à court terme du développement ne cadrent
(Incremental delivery) pas toujours avec les cycles de planification à long terme de la planification des
activités et du marketing. Les responsables marketing peuvent avoir besoin de
connaître les caractéristiques du produit plusieurs mois à l'avance pour préparer une
campagne marketing efficace.
Principe Pratique
Maintenir la simplicité Sous la pression des calendriers de livraison, les membres de l'équipe peuvent ne
(Maintain simplicity) pas avoir le temps de réaliser les simplifications souhaitables du système.
Personnes pas Les membres individuels de l'équipe peuvent ne pas avoir de personnalités
Processus adéquates pour la participation intense typique des méthodes agiles et peuvent donc
(People not process) ne pas bien interagir avec les autres membres de l'équipe.
Issues du Système
Personnes et équipes
Quelle est la qualité des concepteurs et des programmeurs dans l'équipe de développement?
Il est parfois soutenu que les méthodes agiles nécessitent des niveaux de compétences plus
élevés que les approches basées sur le plan dans lesquelles les programmeurs traduisent
simplement une conception détaillée en code.
Issues organisationnels
Les organisations d'ingénierie traditionnelles ont une culture du développement basé sur le plan, car
c'est la norme en ingénierie.
54
Chapitre 3: Développement Agile des Logiciels
Est-ce une pratique organisationnelle standard d'élaborer une spécification détaillée du système?
Les représentants des clients seront-ils disponibles pour fournir des commentaires sur les incréments
du système?
Les grands systèmes sont généralement des ensembles de systèmes distincts de communication, où
des équipes distinctes développent chaque système. Souvent, ces équipes travaillent dans différents
endroits, parfois dans des fuseaux horaires différents.
Les grands systèmes sont des «brownfield systems», c'est-à-dire qu'ils intègrent et interagissent
avec un certain nombre de systèmes existants. La plupart des exigences du système sont concernées
par cette interaction et ne se prêtent donc pas vraiment à la flexibilité et au développement
incrémental.
Lorsque plusieurs systèmes sont intégrés pour créer un système, une partie importante du
développement concerne la configuration du système plutôt que le développement du code d'origine.
Les grands systèmes et leurs processus de développement sont souvent limités par des règles et
réglementations externes limitant leur développement.
Les grands systèmes ont un long temps d'approvisionnement et de développement. Il est difficile de
maintenir des équipes cohérentes qui connaissent le système au cours de cette période car,
inévitablement, les personnes passent à d'autres emplois et projets.
Les grands systèmes ont généralement un ensemble diversifié de parties prenantes. Il est
pratiquement impossible d'impliquer toutes ces différentes parties prenantes dans le processus de
développement.
Pour le développement de grands systèmes, il n'est pas possible de se concentrer uniquement sur le
code du système.
L'intégration continue est pratiquement impossible. Cependant, il est essentiel de maintenir des
constructions système fréquentes et des versions régulières du système.
55
Chapitre 3: Développement Agile des Logiciels
Multi-équipes Scrum
Réplication de rôle
Chaque équipe a un Product Owner pour son composant de travail et ScrumMaster.
Architectes de produits
Chaque équipe choisit un architecte produit et ces architectes collaborent pour concevoir et
faire évoluer l'architecture globale du système.
Scrum of Scrums
Il y a un Scrum of Scrums quotidien où les représentants de chaque équipe se rencontrent
pour discuter des progrès et planifier le travail à faire.
Les gestionnaires de projet qui n'ont pas l'expérience des méthodes agiles peuvent être réticents à
accepter le risque d'une nouvelle approche.
Les grandes organisations ont souvent des procédures et des normes de qualité que tous les projets
doivent suivre et, en raison de leur nature bureaucratique, elles risquent d'être incompatibles avec les
méthodes agiles.
Les méthodes agiles semblent fonctionner mieux lorsque les membres de l'équipe ont un niveau de
compétence relativement élevé. Cependant, au sein des grandes organisations, il y aura
probablement un large éventail de compétences et de capacités.
Il peut y avoir une résistance culturelle aux méthodes agiles, en particulier dans les organisations qui
utilisent depuis longtemps des procédés d'ingénierie des systèmes conventionnels.
6. Points clés
Les méthodes agiles sont des méthodes de développement incrémentielles qui se concentrent sur le
développement rapide de logiciels, les versions fréquentes du logiciel, la réduction des frais
généraux en minimisant la documentation et en produisant un code de haute qualité.
Scrum est une méthode agile qui fournit un cadre de gestion de projet.
Il est centré autour d'un ensemble de sprints, qui sont des périodes fixes lors du
développement d'un incrément système.
56
Chapitre 3: Développement Agile des Logiciels
et agile.
Mettre à l'échelle des méthodes agiles pour les grands systèmes est difficile.
Les grands systèmes ont besoin d'une conception initiale et certains documents et pratiques
organisationnelles peuvent entrer en conflit avec l'informalité des approches agiles.
7. Exercices
I) Quiz :
1) L'agilité n'est rien de plus que la capacité d'une équipe de projet à réagir rapidement au
changement.
a) Vrai
b) Faux
2) Lequel des éléments suivants n'est pas nécessaire pour appliquer l'agilité à un processus
logiciel?
4) Dans les processus logiciels agiles, les priorités les plus élevées sont pour satisfaire le client
à travers la livraison précoce et continue des versions utiles.
a) Vrai
b) Faux
5) Lesquels des traits suivants doivent exister parmi les membres d'une équipe logicielle agile?
a) Compétence
b) Capacité de prise de décision
c) Confiance mutuelle et respect
d) Tout ce qui précède
57
Chapitre 3: Développement Agile des Logiciels
6) Dans le développement agile, il est plus important de créer des logiciels qui répondent aux
besoins des clients d‟aujourd'hui que de se soucier des fonctionnalités qui pourraient être
nécessaires dans le futur.
a) Vrai
b) Faux
7) Quelles sont les quatre activités cadres (framework) trouvées dans le modèle de processus
eXtreme Programming (XP)?
8) Tous les modèles de processus agiles se conforment plus ou moins aux principes énoncés
dans le "Manifeste pour le développement des logiciels agiles".
a) Vrai
b) Faux
9) Quelles sont les trois activités cadres (Framework) pour le modèle de processus Adaptive
Software Development (ASD)?
10) Laquelle n'est pas l‟une des questions clés auxquelles chaque membre de l'équipe doit
répondre à chaque réunion Scrum quotidienne?
a) Vrai
58
Chapitre 3: Développement Agile des Logiciels
b) Faux
12) Dans le développement piloté par les fonctionnalités (FDD : Feature-Driven
Development), une fonctionnalité valorisée par le client est une fonction valorisée par le client
qui peut être fournie en deux semaines ou moins.
a) Vrai
b) Faux
13) La modélisation agile (AM : Agile Modeling) fournit des conseils au praticien au cours de
laquelle de ces tâches logicielles?
a) Analyse
b) Conception
c) Codage
d) Test
e) Les deux A et B
14) Le processus unifié agile (AUP) utilise les activités UP classiques (création, élaboration,
construction, transition) pour aider l'équipe à visualiser le flux de processus global.
a) Vrai
b) Faux
15) Dans les modèles de processus agiles, le seul produit de travail livrable est le programme
de travail.
a) Vrai
b) Faux
1. Expliquez pourquoi la livraison rapide et le déploiement de nouveaux systèmes sont souvent plus
importants pour les entreprises que la fonctionnalité détaillée de ces systèmes.
2. Expliquer comment les principes fondamentaux des méthodes agiles conduisent au développement
et au déploiement accélérés de logiciels.
3. Extreme programming exprime les exigences des utilisateurs comme des stories, chaque story
étant écrite sur une carte. Discutez des avantages et des inconvénients de cette approche de la
description des exigences.
4. Quand recommanderiez-vous l'utilisation d'une méthode agile pour développer un système
logiciel?
5. Expliquer pourquoi le développement piloté par le test aide le programmeur à développer une
meilleure compréhension des exigences du système. Quelles sont les difficultés potentielles avec le
développement piloté par le test?
6. Comparer et opposer l'approche Scrum à la gestion de projet avec les approches planifiées
conventionnelles. Les comparaisons devraient être basées sur l'efficacité de chaque approche pour
59
Chapitre 3: Développement Agile des Logiciels
planifier l'allocation des personnes aux projets, estimer le coût des projets, maintenir la cohésion de
l'équipe et la gestion des changements dans l'adhésion à l'équipe de projet.
7. Suggérez quatre raisons pour lesquelles le taux de productivité des programmeurs travaillant en
binôme pourrait être plus de la moitié de celui de deux programmeurs travaillant individuellement.
8. Pourquoi est-il nécessaire d'introduire des méthodes et de la documentation à partir d'approches
basées sur des plans lors de la mise à l'échelle de méthodes agiles pour des projets plus importants
développés par des équipes de développement distribuées.
9. Vous êtes un gestionnaire de logiciels dans une entreprise qui développe des logiciels de contrôle
critiques pour les avions. Vous êtes responsable du développement d'un système d'aide à la
conception de logiciels qui prend en charge la traduction des exigences logicielles en une
spécification logicielle formelle. Commentez les avantages et les inconvénients des stratégies de
développement suivantes:
a) Recueillir les exigences d'un tel système auprès des ingénieurs logiciels et des parties
prenantes externes (telles que l'autorité de certification réglementaire) et développer le
système en utilisant une approche planifiée.
b) Développez un prototype utilisant un langage de script, tel que Ruby ou Python, évaluez ce
prototype avec des ingénieurs logiciels et d'autres parties prenantes, puis examinez les
exigences du système. Redévelopper le système final en utilisant Java.
c) Développer le système en Java en utilisant une approche agile avec un utilisateur impliqué
dans l'équipe de développement.
10. Il a été suggéré que l'un des problèmes d'avoir un utilisateur étroitement impliqué dans une équipe
de développement de logiciels est qu'ils «vont natifs»; c'est-à-dire qu'ils adoptent les perspectives
de l'équipe de développement et perdent la vue des besoins de leurs collègues utilisateurs. Suggérez
trois façons de contourner ce problème et discutez des avantages et des inconvénients de chaque
approche.
11. Pour réduire les coûts et l'impact environnemental des déplacements quotidiens, votre entreprise
décide de fermer un certain nombre de bureaux et d'aider le personnel à travailler à domicile.
Cependant, la haute direction qui introduit la politique ne sait pas que le logiciel est développé en
utilisant des méthodes agiles, qui reposent sur un travail d‟équipes étroites et la programmation par
paires. Discutez des difficultés que cette nouvelle politique pourrait causer et de la façon dont vous
pourriez contourner ces problèmes
8. Solutions
I) Quiz :
1:b 2:a 3:e 4:a 5:d 6:a 7:d 8:a 9:d 10:c 11:a 12:b 13:e 14:a
15:b
60
Chapitre 3: Développement Agile des Logiciels
a) Personnes et interaction plutôt que processus et outils. En prenant les avantages des
compétences individuelles et en veillant à ce que l'équipe de développement sache ce que font les
autres, les frais généraux de communication formelle et d'assurance de processus sont évités. Cela
signifie que l'équipe peut se concentrer sur le développement de logiciels de travail.
b) Logiciel fonctionnel plutôt que documentation complète. Cela contribue à accélérer le
développement parce que le temps n'est pas passé à se développer, vérifier et gérer la
documentation. Le temps du programmeur est plutôt axé sur le développement et le test du code.
c) Collaboration avec le client plutôt que négociation de contrat. Plutôt que de passer du temps à
développer, analyser et négocier les exigences à inclure dans un contrat système, les développeurs
agiles soutiennent qu'il est plus efficace d'obtenir des commentaires des clients directement au
cours du développement sur ce qui est requis. Cela permet de développer et de livrer des
fonctionnalités utiles plus tôt que cela ne serait possible si des contrats étaient requis.
d) Réagir au changement plutôt que suivre un plan. Les développeurs agiles soutiennent (à juste
titre) qu'être attentif aux changements est plus efficace que de suivre un processus basé sur un plan
parce que le changement est inévitable quel que soit le processus utilisé. Il y a des frais généraux
importants dans la modification des plans pour s'adapter au changement et l'inflexibilité d'un plan
signifie que le travail peut être fait qui est ensuite mis au rebut.
3.
Avantages des stories:
1. Ils représentent des situations réelles qui se posent généralement afin que le système soutenir les
opérations les plus courantes de l'utilisateur.
2. Il est facile pour les utilisateurs de comprendre et de critiquer les stories.
3. Ils représentent des incréments de fonctionnalité - la mise en œuvre d'un story délivre une
certaine valeur pour l'utilisateur.
Inconvénients des stories
1. Ils sont susceptibles d'être incomplètes et leur nature informelle rend l‟incomplétude difficile à
détecter.
2. Ils se concentrent sur les exigences fonctionnelles plutôt que les non-fonctionnelles.
3. Représentation des exigences transversales du système telles que la performance et la fiabilité
est impossible lorsque les stories sont utilisées.
4. La relation entre l'architecture du système et les stories d‟utilisateurs est peu claire et donc, la
conception architecturale est difficile.
6.
Il n'y a pas de mécanisme formel dans Scrum pour la planification des membres du projet ayant une
expertise très spécifique à affecter temporairement à une équipe. Ce besoin doit être identifié par le
maître Scrum et il doit discuter de la manière dont l'expertise peut être mise à disposition.
61
Chapitre 3: Développement Agile des Logiciels
Scrum
Les coûts du projet sont estimés en fonction de la date de livraison requise pour le logiciel et les
personnes travaillant dans l'équipe Scrum. La fonctionnalité du système est ajustée pour qu'un
système de travail soit toujours livré pour l'estimation du coût original. Bien sûr, cela peut ne pas
convenir au client et il doit s'impliquer dans le rééchelonnement de la livraison du système.
Développement basé sur un plan
Les coûts du projet sont basés sur une analyse des fonctionnalités spécifiées dans le document
d'exigences ainsi que sur les exigences non fonctionnelles du système. Ils peuvent être ajustés pour
refléter la taille de l'équipe et le calendrier de livraison. Il est normal que les coûts soient
sous-estimés et que le projet final coûte beaucoup plus cher que prévu. Un coût moyen pour les
membres de l'équipe est supposé.
Maintenir la cohésion de l'équipe
Scrum
Les membres de l'équipe se rencontrent quotidiennement en face à face ou par voie électronique.
Des discussions informelles et des communications approfondies sont encouragées. Les membres
de l'équipe négocient le travail à effectuer à partir le backlog du projet. Tout cela conduit à un
sentiment partagé de propriété du produit et à une équipe cohésive (très soudée).
La cohésion d'équipe est la responsabilité du chef de projet et il doit prendre des actions explicites
pour l'encourager. L'approche générale repose sur des réunions formelles relativement peu
fréquentes et qui ne conduisent pas au développement d'une équipe cohésive
Scrum
C'est un sujet qui est rarement abordé dans Scrum mais qui est un problème fondamental parce que
tant d'informations sont informelles et dépendent des gens qui se souviennent de ce qui a été
convenu. Quand quelqu'un part, il peut être très difficile de mettre à jour un membre de l'équipe de
remplacement, surtout si la documentation du projet est très limitée.
Le plan de gestion du projet est basé sur l'expertise plutôt que sur les individus et les documents de
projet devraient être disponibles. Par conséquent, si un membre de l'équipe quitte, alors un nouveau
membre de l'équipe avec une expertise comparable peut lire ce qui a été fait et, après avoir compris
cela, devrait pouvoir servir de remplaçant.
62
Chapitre 3: Développement Agile des Logiciels
8.
1. La planification de projet est souvent essentielle lors du développement de logiciels avec des
équipes plus importantes pour (a) s'assurer que les bonnes personnes sont disponibles quand elles sont
nécessaires pour être impliquées dans le processus de développement et (b) s'assurer que les livraisons
des différentes parties du système développé par différentes équipes sont alignés. Cela signifie que si
la partie A dépend de la partie B, le calendrier devrait s'assurer que la partie B est développée avant la
partie A.
2. L'analyse des besoins et la documentation sont importantes pour décider comment répartir le travail
entre les équipes et s'assurer que chaque équipe a une certaine compréhension de ce que font les autres
équipes.
4. La gestion des risques peut être nécessaire pour s'assurer que toutes les équipes comprennent les
risques encourus et peuvent organiser leur travail pour minimiser ces risques. La gestion des risques
peut également être utile pour gérer les différents calendriers de livraison utilisés par différentes
équipes.
10.
1. Impliquer plusieurs utilisateurs dans l'équipe de développement. Les avantages sont que vous
obtenez plusieurs points de vue sur le problème, une meilleure couverture des tâches de l'utilisateur et
donc des exigences et moins de chances d'avoir un utilisateur atypique (Sans type déterminé.). Les
désavantages sont le coût, les difficultés à obtenir l'engagement de l'utilisateur et les éventuels conflits
d'utilisateurs.
2. Changer l'utilisateur qui est impliqué dans l'équipe. Les avantages sont, encore une fois, des
perspectives multiples. Les désavantages sont que chaque utilisateur prend du temps pour être
productif et des exigences contradictoires possibles de différents utilisateurs.
3. Validez les suggestions de l'utilisateur avec les autres représentants des utilisateurs. Les
avantages sont la vérification indépendante des suggestions; désavantage est que cela ralentit le
processus de développement car il faut du temps pour faire les vérifications.
63
Chapitre
IV Ingénierie des
Exigences
Objectifs
• comprendre les concepts de l'utilisateur et des exigences du système et
pourquoi ces exigences devraient être écrites de différentes manières;
• comprendre les différences entre les exigences logicielles fonctionnelle et
non fonctionnelle;
• comprendre les principales activités d'ingénierie des exigences de
élicitation, Spécification (analyse) et la validation, et les relations entre ces
activités;
• comprendre comment les exigences peuvent être organisées dans un
document des exigences du logiciel;
Themes
couverts
• Exigences fonctionnelles et non fonctionnelles
• Processus d'ingénierie des exigences
• Elicitation des exigences
• Spécification des exigences
• Validation des exigences
• Changement des exigences
64
Chapitre 4: Ingénierie des Exigences
Chapitre 4:
Ingénierie des Exigences
1. Introduction
Le processus d'établissement des services que le client a besoin d'un système et les contraintes sous
lesquelles il fonctionne et il est développé.
Les exigences elles-mêmes sont les descriptions des services de système et les contraintes qui sont
générées au cours du processus d'ingénierie des exigences.
Cela peut aller d'une déclaration abstraite de haut niveau d'un service ou d'une contrainte de système
à une spécification fonctionnelle mathématique détaillée.
Ceci est inévitable car les exigences peuvent remplir une double fonction
Peuvent-être la base d'une offre pour un contrat - doivent donc être ouvertes à
l'interprétation;
Peuvent-être la base pour le contrat lui-même - doivent donc être défini en détail;
Ces deux déclarations peuvent être appelés exigences.
“If a company wishes to let a contract for a large software development project, it must define its
needs in a sufficiently abstract way that a solution is not pre-defined. The requirements must be written
so that several contractors can bid for the contract, offering, perhaps, different ways of meeting the
client organization‟s needs. Once a contract has been awarded, the contractor must write a system
definition for the client in more detail so that the client understands and can validate what the software
will do. Both of these documents may be called the requirements document for the system.” [Davis, A.
M. (1993). Software Requirements: Objects, Functions and States. Englewood Cliffs, NJ:Prentice Hall]
65
Chapitre 4: Ingénierie des Exigences
Toute personne ou organisation qui est touchée par le système d'une manière ou d'une autre et qui a
un intérêt légitime
66
Chapitre 4: Ingénierie des Exigences
Types d'intervenants
Les utilisateurs finaux
Les gestionnaires de système
Propriétaires de système
Parties prenantes externes
Les infirmières qui coordonnent les consultations avec les médecins et administrent certains
traitements.
Un gestionnaire de l'éthique médicale qui doit s'assurer que le système respecte les lignes directrices
éthiques actuelles en matière de soins aux patients.
Les gestionnaires de soins de santé qui obtiennent des informations de gestion du système.
Le personnel des dossiers médicaux est responsable de veiller à ce que les informations du système
puissent être maintenues et préservées, et à ce que les procédures de tenue (sauvegarder) de dossiers
soient correctement mises en œuvre.
De nombreuses méthodes agiles font valoir que la production d'exigences détaillées du système est
une perte de temps car les exigences changent si rapidement.
Les méthodes agiles utilisent généralement l'ingénierie des exigences incrémentales et peuvent
exprimer des exigences en tant que «user stories» (voir le chapitre 3).
Ceci est pratique pour les systèmes de métier (d‟entreprise), mais problématique pour les systèmes
qui nécessitent une analyse avant livraison (par exemple, des systèmes critiques) ou des systèmes
développés par plusieurs équipes.
67
Chapitre 4: Ingénierie des Exigences
Exigences non-fonctionnelles
Les contraintes sur les services ou les fonctions offertes par le système telles que des
contraintes de temps, les contraintes sur le processus de développement, normes, etc.
Elles s'appliquent souvent au système dans son ensemble plutôt qu'à des fonctionnalités ou
services individuels.
Exigences du domaine
Contraintes sur le système à partir du domaine d'opération.
Dépend du type de logiciel, des utilisateurs attendus et du type de système où le logiciel est utilisé.
Les exigences des utilisateurs fonctionnelles peuvent être des déclarations de haut niveau sur ce que
le système devrait faire.
Les exigences fonctionnelles du système devraient décrire les services du système en détail.
Un utilisateur doit être en mesure de rechercher les listes de rendez-vous pour toutes les cliniques.
Le système doit générer chaque jour, pour chaque clinique, une liste de patients qui doivent assister à
des rendez-vous ce jour-là.
Chaque membre du personnel utilisant le système doit être identifié de manière unique par son
numéro d'employé de 8 chiffres.
Les problèmes surviennent lorsque les exigences ne sont pas précisément indiquées.
Exigences ambiguës peuvent être interprétées de différentes manières par les développeurs et les
utilisateurs.
Complete
Elles devraient inclure les descriptions de toutes les exigences nécessaires.
Cohérente
68
Chapitre 4: Ingénierie des Exigences
Il ne devrait pas y avoir aucun conflit ou des contradictions dans les descriptions des
exigences du système.
Celles-ci définissent les propriétés et les contraintes système, par exemple la fiabilité, temps de
réponse et les besoins de stockage. Les contraintes sont sur les capacités des dispositifs d‟entrées/sortie,
les représentations du système, etc.
Exigences du processus peuvent aussi être spécifiées en mandatant un IDE particulier, langage de
programmation ou une méthode de développement.
Exigences non fonctionnelles peuvent être plus critiques que les exigences fonctionnelles. Si celles-ci
ne sont pas remplies, le système peut être inutile.
Les exigences non fonctionnelles peuvent affecter l'architecture globale d'un système plutôt que les
composants individuels.
Par exemple, pour s‟assurer que les exigences de performance sont remplies, vous pouvez
organiser le système afin de minimiser les communications entre les composants.
Une exigence non-fonctionnelle unique, comme une exigence de sécurité, peut générer un certain
nombre d'exigences fonctionnelles connexes qui définissent les services du système qui sont requises.
Il peut également générer des exigences qui restreignent les exigences existantes.
69
Chapitre 4: Ingénierie des Exigences
Exigences de produit
Exigences qui précisent que le produit livré doit se comporter d'une manière particulière par
exemple, la vitesse d'exécution, la fiabilité, etc.
Exigences organisationnelles
Exigences qui sont une conséquence des politiques et procédures organisationnelles par
exemple, les standards des processus utilisés, les exigences de mise en œuvre, etc.
Exigences externes
Exigences qui découlent de facteurs qui sont externes au système et ses exigences par
exemple, les exigences d‟interopérabilité, les exigences législatives, etc.
Product requirement
The Mentcare system shall be available to all clinics during normal working hours (Mon–Fri, 0830–
17.30). Downtime within normal working hours shall not exceed five seconds in any one day.
Organizational requirement
Users of the Mentcare system shall authenticate themselves using their health authority identity card.
External requirement
The system shall implement patient privacy provisions as set out in HStan-03-2006-priv.
Objectifs et exigences
Un problème commun aux exigences non fonctionnelles est que les utilisateurs ou les clients
proposent souvent ces exigences sous forme d'objectifs généraux, tels que la facilité d'utilisation, la
capacité du système à récupérer après une défaillance ou la réponse rapide de l'utilisateur.
Les objectifs énoncent de bonnes intentions des utilisateurs du système, mais posent des problèmes
aux développeurs de systèmes car ils laissent une marge d‟interprétation et de litige une fois le système
livré.
Les exigences non fonctionnelles peuvent être très difficile pour les énoncer avec précision, et les
exigences imprécises peuvent être difficiles à vérifier.
Objectif(but)
Une intention générale de l'utilisateur tel que la facilité d'utilisation.
70
Chapitre 4: Ingénierie des Exigences
Le système devrait être facile à utiliser par le personnel médical et devrait être organisée de telle
sorte que les erreurs de l'utilisateur sont réduits au minimum. (Objectif)
Le personnel médical doit pouvoir utiliser toutes les fonctions du système après quatre heures de
formation. Après cette formation, le nombre moyen d'erreurs commises par les utilisateurs
expérimentés ne doit pas dépasser deux par heure d'utilisation du système. (Exigence non-fonctionnelle
vérifiable)
Propriété Mesure
Taille Mbytes
(Size) Number of ROM chips
71
Chapitre 4: Ingénierie des Exigences
Dans la pratique, RE est une opération itérative dans lequel ces activités sont entrelacés.
Implique le personnel technique travaillant avec les clients pour se renseigner sur le domaine
d'application, les services que le système devrait fournir et les contraintes opérationnelles du système.
Peut impliquer les utilisateurs finaux, les gestionnaires, les ingénieurs impliqués dans l'entretien, les
experts du domaine, les syndicats, etc. Ils sont appelés parties prenantes (stakeholders).
Les ingénieurs logiciel travaillent avec un éventail de parties prenantes du système pour connaître le
domaine d'application, les services que le système devrait fournir, la performance du système requise,
les contraintes matérielles, d'autres systèmes, etc.
Les parties prenantes expriment des exigences dans leurs propres termes.
72
Chapitre 4: Ingénierie des Exigences
Les facteurs organisationnels et politiques peuvent influer sur les exigences du système.
Les exigences changent pendant le processus d'analyse. De nouveaux parties prenantes peuvent
émerger et l'environnement de métier peut être changé.
Prioritisation et négociation
Donner la priorité à des exigences et résoudre les conflits des exigences.
Le processus de collecte d'informations sur les systèmes requis et existants et la distillation des
exigences de l'utilisateur et du système à partir de ces informations.
Interaction avec les parties prenantes du système de gestionnaires aux régulateurs externes.
Interview
Interviews formels ou informels avec les parties prenantes font partie de la plupart des processus de
RE.
Types d„interview
Interview fermé basé sur la liste prédéterminée de questions
73
Chapitre 4: Ingénierie des Exigences
Interview ouvert où diverses questions sont explorées avec les parties prenantes.
L‟interview efficace
Soyez ouvert d'esprit, évitez les idées préconçues sur les exigences et soyez prêt à écouter les
parties prenantes.
Invitez l'interviewé à lancer des discussions en utilisant une question de tremplin, une
proposition d'exigences ou en travaillant ensemble sur un système prototype.
Les interviews sont bons pour obtenir une compréhension globale de ce que les parties prenantes font
et comment ils peuvent interagir avec le système.
Les intervieweurs doivent être ouverts d'esprit sans idées préconçues sur ce que le système devrait
faire
Vous devez encourager l'utilisation pour parler du système en suggérant des exigences plutôt que de
simplement leur demander ce qu'ils veulent.
Les spécialistes de l'application peuvent utiliser un langage pour décrire leur travail qui n'est pas
facile à comprendre pour l'ingénieur des exigences.
Les interviews ne sont pas bonnes pour comprendre les exigences de domaine
Les ingénieurs d'exigences ne peuvent pas comprendre la terminologie d‟un domaine
spécifique;
Certaines connaissances du domaine sont si familières que les gens trouvent difficile
d„expliquer ou pensent que cela ne vaut pas la peine de s'exprimer.
Ethnographie
Un scientifique social passe un temps considérable en observant et en analysant comment les gens
fonctionnent réellement.
Les études ethnographiques ont montré que le travail est généralement plus riche et plus complexe
que d‟être suggéré par des simples modèles de systèmes.
Portée de l'ethnographie
Exigences qui sont dérivées de la façon de travail des gens plutôt que la façon suggérée par un
processus.
Exigences qui sont dérivées de la coopération et de la sensibilisation aux activités d'autres personnes.
Prise de conscience de ce que font les autres conduit à des changements dans la façon dont
74
Chapitre 4: Ingénierie des Exigences
Ethnographie est efficace pour comprendre les processus existants, mais ne peut pas identifier les
nouvelles fonctionnalités qui devraient être ajoutés à un système.
Stories et scénarios
Les scénarios et les stories d‟utilisateurs sont des exemples concrets (real-life examples) de la
manière dont un système peut être utilisé.
Les stories et les scénarios sont une description de la façon dont un système peut être utilisé pour une
tâche particulière.
Parce qu'ils sont basés sur une situation pratique, les parties prenantes peuvent être rattachées à eux
et peuvent commenter leur situation par rapport à l‟histoire (story).
Jack is a primary school teacher in Ullapool (a village in northern Scotland). He has decided that a
class project should be focused around the fishing industry in the area, looking at the history,
development and economic impact of fishing. As part of this, pupils are asked to gather and share
reminiscences from relatives, use newspaper archives and collect old photographs related to fishing and
fishing communities in the area. Pupils use an iLearn wiki to gather together fishing stories and
SCRAN (a history resources site) to access newspaper archives and photographs. However, Jack also
needs a photo sharing site as he wants pupils to take and comment on each others‟ photos and to upload
scans of old photographs that they may have in their families.
Jack sends an email to a primary school teachers group, which he is a member of to see if anyone can
recommend an appropriate system. Two teachers reply and both suggest that he uses KidsTakePics, a
photo sharing site that allows teachers to check and moderate content. As KidsTakePics is not
integrated with the iLearn authentication service, he sets up a teacher and a class account. He uses the
iLearn setup service to add KidsTakePics to the services seen by the pupils in his class so that when
they log in, they can immediately use the system to upload photos from their mobile devices and class
computers.
Scénarios
Initial assumption: A user or a group of users have one or more digital photographs to be uploaded to
the picture sharing site. These are saved on either a tablet or laptop computer. They have successfully
logged on to KidsTakePics.
75
Chapitre 4: Ingénierie des Exigences
Normal: The user chooses upload photos and they are prompted to select the photos to be uploaded
on their computer and to select the project name under which the photos will be stored. They should
also be given the option of inputting keywords that should be associated with each uploaded photo.
Uploaded photos are named by creating a conjunction of the user name with the filename of the photo
on the local computer.
On completion of the upload, the system automatically sends an email to the project moderator
asking them to check new content and generates an on-screen message to the user that this has been
done.
No moderator is associated with the selected project. An email is automatically generated to the
school administrator asking them to nominate a project moderator. Users should be informed that there
could be a delay in making their photos visible.
Photos with the same name have already been uploaded by the same user. The user should be asked
if they wish to re-upload the photos with the same name, rename the photos or cancel the upload. If
they chose to re-upload the photos, the originals are overwritten. If they chose to rename the photos, a
new name is automatically generated by adding a number to the existing file name.
Other activities: The moderator may be logged on to the system and may approve photos as they
are uploaded.
System state on completion: User is logged on. The selected photos have been uploaded and assigned
a status „awaiting moderation‟. Photos are visible to the moderator and to the user who uploaded
them.
Le processus d'écriture des exigences de l'utilisateur et du système dans un document d'exigences.
Les exigences des utilisateurs doivent être compréhensibles par les utilisateurs finaux et les clients
qui n'ont pas de formation technique.
Les exigences du système sont des exigences plus détaillées et peuvent inclure des informations plus
techniques.
Les exigences peuvent faire partie d'un contrat pour le développement du système
Il est donc important que ceux-ci soient aussi complets que possible.
76
Chapitre 4: Ingénierie des Exigences
Notation Description
Langage naturel Les exigences sont écrites en utilisant des phrases numérotées en
(Natural language) langage naturel. Chaque phrase doit exprimer une exigence.
Langage naturel Les exigences sont écrits en langage naturel sur un formulaire
structuré standard ou un modèle. Chaque champ fournit des informations sur
(Structured natural un aspect de l'exigence.
language)
Notations graphiques Les modèles graphiques, complétés par des annotations de texte,
(Graphical sont utilisés pour définir les exigences fonctionnelles pour le
notations) système; cas d'utilisation d’UML, des diagrammes de séquence sont
couramment utilisés.
Spécifications Ces notations sont basées sur des concepts mathématiques tels que
mathématiques les machines à états finis ou des ensembles. Bien que ces
(Mathematical spécifications non ambigués peuvent réduire l'ambiguïté dans un
specifications) document d'exigences, la plupart des clients ne comprends pas une
spécification formelle. Ils ne peuvent pas vérifier qu‘elle représente
ce qu'ils veulent et sont réticents à l’accepter comme un contrat de
système
Exigences et conception
En principe, les exigences devraient indiquer ce que le système devrait faire et la conception devrait
décrire comment il le fait.
Les exigences sont écrites comme des phrases en langage naturel complétées par des diagrammes et
des tableaux.
Utilisé pour l‟écriture des exigences parce que c‟est expressive, intuitif et universel. Cela signifie que
les exigences peuvent être comprises par les utilisateurs et clients.
77
Chapitre 4: Ingénierie des Exigences
Utiliser un langage d'une manière cohérente. Utilisation nécessaire pour les exigences obligatoires,
souhaitable pour les exigences desirables.
Inclure une explication (logique) des raisons pour lesquelles une exigence est nécessaire.
Manque de clarté:
La précision est difficile, ce qui rend le document difficile à lire.
3.2 The system shall measure the blood sugar and deliver insulin, if required, every 10 minutes.
(Changes in blood sugar are relatively slow so more frequent measurement is unnecessary; less
frequent measurement could lead to unnecessarily high sugar levels.)
3.6 The system shall run a self-test routine every minute with the conditions to be tested and the
associated actions defined in Table 1. (A self-test routine can discover hardware and software
problems and alert the user to the fact the normal operation may be impossible.)
Spécifications structurées
Approche d'écriture des exigences où la liberté du rédacteur des exigences est limitée et les exigences
sont écrites de manière standard.
Cela fonctionne bien pour certains types d'exigences, par ex. exigences pour le système de contrôle
embarqué, mais elle est parfois trop rigide pour l'écriture des exigences du système métier (entreprise).
78
Chapitre 4: Ingénierie des Exigences
Informations sur les informations nécessaires au calcul et aux autres entités utilisées.
Spécification tabulaire
Particulièrement utile lorsque vous devez définir un certain nombre des alternatives d'action.
Par exemple, les systèmes de pompe à insuline fait ses calculs sur le taux de changement du niveau
de sucre dans le sang et la spécification tabulaire explique comment calculer les besoins en insuline
pour différents scénarios.
Condition Action
79
Chapitre 4: Ingénierie des Exigences
Cas d'utilisation
Les cas d'utilisation sont une sorte de scénario inclus dans le langage UML.
Les cas d'utilisation identifient les acteurs d'une interaction et décrivent l'interaction elle-même.
Un ensemble de cas d'utilisation doit décrire toutes les interactions possibles avec le système.
Modèle graphique de haut niveau complété par une description tabulaire plus détaillée (voir chapitre
5).
Les diagrammes de séquence UML peuvent être utilisés pour ajouter des détails aux cas d'utilisation
en montrant la séquence du traitement des événements dans le système.
Le document des exigences du logiciel (Software Requirements Spécifications - SRS) est la
déclaration officielle de ce qui est exigé des développeurs de systèmes.
Devrait inclure à la fois une définition des exigences des utilisateurs et une spécification des
exigences du système.
Il n‟est pas un document de conception. Autant que possible, il devrait préciser ce que le système doit
faire (QUOI) plutôt que comment il doit le faire (COMMENT).
80
Chapitre 4: Ingénierie des Exigences
Les informations dans le document des exigences dépendent de type du système et de l'approche de
développement utilisée.
Les systèmes développés par l‟incrémentation seront, généralement, moins détaillés dans le
document des exigences.
Les normes relatives aux documents d'exigences ont été conçues par ex. Norme IEEE (ex.
IEEE/ANSI 830-1998). Ceux-ci sont principalement applicables aux exigences pour les grands projets
d'ingénierie des systèmes.
Chapter Description
Préface Cela devrait définir le lectorat prévu du document et décrire son histoire de version,
(Preface) y compris une justification pour la création d'une nouvelle version et un résumé des
modifications apportées dans chaque version.
Introduction Cela devrait décrire le besoin du système. Il devrait décrire brièvement les fonctions
(Introduction) du système et expliquer comment il fonctionnera avec d'autres systèmes. Il doit
également décrire comment le système s'intègre dans l'ensemble des objectifs
commerciaux ou stratégiques de l'organisation qui commande le logiciel.
81
Chapitre 4: Ingénierie des Exigences
Glossaire Cela devrait définir les termes techniques utilisés dans le document. Vous ne devriez
(Glossary) pas faire des hypothèses sur l'expérience ou l'expertise du lecteur.
Définition des Ici, vous décrivez les services fournis pour l'utilisateur. Les exigences non
exigences de fonctionnelles du système devraient également être décrites dans cette section.
l'utilisateur Cette description peut utiliser un langage naturel, diagrammes, ou d'autres notations
(User requirements qui sont compréhensibles pour les clients. Les normes de produits et de processus
definition) qui doivent être suivies doivent être précisés.
Architecture du Ce chapitre devrait présenter une vue d'ensemble de haut niveau de l'architecture
système du système prévue, montrant la répartition des fonctions entre les modules du
(System architecture) système. Les composants architecturaux réutilisés doivent être mis en évidence.
spécification des Cela devrait décrire les exigences fonctionnelles et non fonctionnelles plus en détail.
exigences système Si nécessaire, d'autres détails peuvent également être ajoutés aux exigences non
(System requirements fonctionnelles. Les interfaces avec d'autres systèmes peuvent être définies.
specification)
Modèles du système Cela peut inclure des modèles de système graphique montrant les relations entre les
(System models) composants du système et le système et son environnement. Des exemples de
modèles possibles sont les modèles d'objets, les modèles de flux de données ou les
modèles de données sémantiques..
l'évolution du Cela devrait décrire les hypothèses fondamentales sur lesquelles repose le système,
système ainsi que les changements anticipés dus à l'évolution du matériel, à l'évolution des
(System evolution) besoins des utilisateurs, etc. Cette section est utile pour les concepteurs de systèmes
car elle peut les aider à éviter les décisions de conception qui limiteraient les
changements futurs probables du système.
Index Plusieurs index du document peuvent être inclus. En plus d'un index alphabétique
(Index) normal, il peut y avoir un index de diagrammes, un index de fonctions, et ainsi de
suite.
Concernée par démontrer que les exigences définissent le système que le client veut vraiment.
Coûts de l'erreur sur les exigences sont élevées et donc la validation est très importante
Résolution d'une erreur des exigences après la livraison peut coûter jusqu'à 100 fois le coût
de la fixation d'une erreur de mise en œuvre.
82
Chapitre 4: Ingénierie des Exigences
Validité. Est-ce que le système fournit les fonctions qui supportent bien les exigences du client?
Prototypage
Utilisation d'un modèle exécutable du système pour vérifier les exigences.
Des examens réguliers devraient avoir lieu pendant la formulation de la définition des exigences.
Les examens peuvent être formels (avec des documents complétés) ou informels. Une bonne
communication entre les développeurs, les clients et les utilisateurs peut résoudre les problèmes à un
stade précoce.
Vérifiabilité
Est-ce que l'exigence est concretement vérifiable?
Compréhensibilité
Est-ce que l'exigence est bien comprise?
Traçabilité
Est-ce que l'origine de l'exigence est clairement indiqué?
Adaptabilité
Peut l'exigence être modifié sans un impact important sur d'autres exigences?
83
Chapitre 4: Ingénierie des Exigences
d'autres systèmes, les priorités de métier peuvent changer (avec changements conséquents
dans le système de support requis), et une nouvelle législation et les règlements peuvent être
introduites que le système doit nécessairement respecter.
Les gens qui payent pour un système et les utilisateurs de ce système sont rarement les mêmes
personnes.
Les grands systèmes ont généralement une communauté d'utilisateurs diversifiée, de nombreux
utilisateurs ayant des exigences et des priorités différentes qui peuvent être conflictuelles ou
contradictoires.
Les exigences finales du système sont inévitablement un compromis entre eux et, avec
l'expérience, on découvre souvent que l'équilibre du soutien apporté aux différents
utilisateurs doit être modifié.
La gestion des exigences est le processus de gestion des changement des exigences en cours pendant
le processus d'ingénierie des exigences et le développement du système.
De nouvelles exigences apparaissent lors du développement du système et après sa mise en service
Vous devez garder une trace des besoins individuels et maintenir des liens entre les besoins
dépendants de sorte que vous pouvez évaluer l'impact des changements des exigences. Vous devez
établir un processus formel pour faire des propositions de changement et les relier aux exigences du
système.
84
Chapitre 4: Ingénierie des Exigences
8. Points clés
Les exigences pour un système logiciel énoncent ce que le système doit faire et définir des
contraintes sur son fonctionnement et sa mise en œuvre.
Les exigences fonctionnelles sont des déclarations des services que le système doit fournir ou des
descriptions de la façon dont certains calculs doivent être effectués.
Les exigences non fonctionnelles limitent souvent le système en cours de développement et le
processus de développement utilisé.
Ils sont souvent liés à des propriétés émergentes du système et donc s‟appliquent au système dans
son ensemble.
Points clés
Le processus d'ingénierie des exigences est un processus itératif y compris les exigences extraction,
analyse, spécification et validation.
L‟élicitation et l‟analyse des exigences est un processus itératif qui peut être représenté comme une
85
Chapitre 4: Ingénierie des Exigences
9. Exercices
I) Quiz :
2. Trois choses qui rendent l'élicitation des exigences difficile sont les problèmes de :
a. budgétisation
b. portée du système
c. compréhension
d. volatilité
e. b, c et d
3. Une partie prenante est une personne qui achètera le système logiciel réalisé en cours de
développement.
a. Vrai
b. Faux
4. Il est relativement commun pour différents clients de proposer des exigences contradictoires,
chacun faisant valoir que sa version est la bonne.
a. Vrai
b. Faux
86
Chapitre 4: Ingénierie des Exigences
« Un système de tickets automatisé vend des billets de train. Les utilisateurs sélectionnent leur
destination en introduisant une carte de crédit et un numéro d'identification personnel. Le billet de
train est émis et leur compte de carte de crédit est débité. Lorsque l'utilisateur appuie sur le bouton
« Start », un écran de menu des destinations potentielles est activé, avec un message à
l'utilisateur de sélectionner une destination. Une fois la destination est sélectionnée, les
utilisateurs sont invités à entrer leur carte de crédit. Sa validité est vérifiée et l'utilisateur est alors
invité à entrer un identifiant personnel. Lorsque la transaction de crédit est validée, le ticket est
émis. »
Acteurs: ………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………...
Entrées: ………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………...
Sorties: …………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………...
…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
Exception:
…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………..……
…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
87
Chapitre 4: Ingénierie des Exigences
10.Solutions
I) Quiz :
a) Un client peut acheter plusieurs billets pour la même destination ensemble ou doit il acheter un
à la fois?
b) Les clients peuvent annuler une demande si une erreur a été commise?
d) Qu'est-ce qui se passe si les clients essaient de mettre leur carte avant de choisir une
destination (comme ils le feraient dans les machines DAB (Distributeurs Automatiques de
Billets))?
e) Doit l'utilisateur presser le bouton de démarrage à nouveau s‟il veut acheter un autre billet
vers une autre destination?
f) Le système devrait seulement permettre la vente des billets entre la station où la machine est
située et des destinations directes ou doit-il inclure toutes les destinations possibles?
88
Chapitre 4: Ingénierie des Exigences
a) Entre 06:00 et 23:00 dans une même journée, l'ensemble des temps d'arrêt du système ne doit
pas dépasser 5 minutes.
b) Entre 06:00 et 23:00 dans une même journée, le temps de reprise après un échec du système
ne doit pas dépasser 2 minutes.
c) Entre 23:00 et 06:00 dans une même journée, l'ensemble des temps d'arrêt du système devrait
ne dépasser pas 20 minutes.
Tout cela sont des exigences de disponibilité - Notez que celles-ci varient en fonction du temps
de jour. Les échecs lorsque la plupart des gens circulent sont moins acceptables que les échecs
quand il y a peu de clients.
d) Après que le client appuie sur un bouton de la machine, l'écran devrait être
mis à jour en moins de 0,5 secondes.
e) Le temps d'émission de billet après la validation de la carte de crédit ne devrait
pas dépasser 10 secondes.
f) Lors de la validation des cartes de crédit, l'affichage devrait fournir un message d'état
pour les clients indiquant que l'activité est en cours.
(Cela indique au client que le temps potentiellement de l‟activité de
la validation est toujours en cours et que le système n'a pas tout simplement échoué).
g) Le taux d'échec maximum acceptable pour les demandes d'émission de billets est de 1/10,000
(1 echec dans 10.000 demandes) (ROCOF : Rate Of oCcurrence Of Failures ou bien Taux
d'occurrence de pannes).
Notez que c'est vraiment ROCOF. Je n'ai pas spécifié le nombre acceptable de tickets incorrects
car cela dépend si le système inclut ou non des fonctions de trace permettant aux demandes des
clients d'être consignées. Si c'est le cas, un taux d'échec relativement élevé est acceptable car les
clients peuvent se plaindre et obtenir des remboursements. Sinon, seul un taux d'échec très faible
est acceptable.
Évidemment, ces exigences sont arbitraires et il y a beaucoup d'autres réponses possibles. Vous
devez simplement examiner leur crédibilité.
3) Il existe une variété de différents types de GAB si, évidemment, il n'y a pas
un ensemble définitif de cas d'utilisation qui pourraient être produites. Toutefois, les cas
d'utilisation couvrant les principales fonctions sont : retirer de l'argent, l'affichage du solde,
impression
déclaration, modifier le code PIN et dépôt de cash. La description de cas devrait décrire
les acteurs impliqués, les entrées et sorties, le fonctionnement normal et exceptions.
Retirer de l'argent:
Acteurs: Client, Système bancaire.
89
Chapitre 4: Ingénierie des Exigences
Fonctionnement normal: le client entre sa carte dans la machine. Il/elle entre le code PIN en
utilisant le clavier. S‟il est correct, un menu d'options s‟affiche. L'option Retirer cash est
sélectionnée. Le client est invité à saisir le montant demandé. S‟il y a suffisamment de fonds dans
son compte, l'argent est délivré, un reçu est imprimé et le solde du compte est mis à jour. Avant la
délivrance de l'argent, la carte est
retournée au client qui est incité par la machine pour prendre leur carte.
Exception:
Carte non valide : Carte est conservée par la machine; Client est conseillé de demander
conseils.
PIN incorrect : Le client est demandé à recomposer la clé PIN. S‟il est incorrect après
trois (3)
tentatives, la carte est conservée par la machine et le client est invité à demander conseils.
Solde insuffisant-Transaction terminée. Carte retournée au client avec un message
1)
a) Vrai
b) Faux
c) Faux, un acteur peut être une machine, une entreprise, un système logiciel ou autre
d) Faux, on peut avoir des cas d‟utilisation «internes» qui ne sont pas directement liés à des
acteurs externes.
e) Vrai
f) Vrai
2)
La relation d‟extension est utilisée pour décrire un cas survenant exceptionnellement, ou de
manière conditionnelle. On isole ainsi un cas optionnel du cas principal survenant
systématiquement. Si l‟occurrence de l‟extension est conditionnelle, la condition est décrite
sur la relation. La relation va du cas d‟extension au cas principal. Un point d‟extension est une
zone dans le cas principal, dans lequel est décrite la circonstance dans laquelle l‟extension est
utilisée.
La relation d‟inclusion est utilisée pour décrire un cas qui est commun à plusieurs cas
principaux. Ainsi, un cas d‟inclusion peut (et même doit) être partagé par plusieurs cas
principaux. Le cas d‟inclusion décrit une tâche de bas niveau utilisée par une tâche de plus
haut niveau. La relation va des cas principaux vers le cas d‟inclusion.
3)
Vous pouvez inspirer une solution assez complète à partir le diagramme ci-dessous :
90
Chapitre 4: Ingénierie des Exigences
91
Chapitre
V Modélisation
du Système
Objectifs
Themes couverts
• Modèles de contexte
• Modèles d'interaction
• Modèles structurels
• Modèles comportementaux
• Ingénierie dirigée par les modèles
92
Chapitre 5: Modélisation du Système
Chapitre 5:
Modélisation du Système
1. Introduction
Modélisation du Système
La modélisation de système est le processus de développement de modèles abstraits d'un système,
chaque modèle présente une vue ou une perspective différente de ce système.
La modélisation du système consiste maintenant à représenter un système en utilisant une sorte de
notation graphique, qui est actuellement presque toujours basée sur des notations du langage UML
(Unified Modeling Language).
La modélisation du système aide l'analyste à comprendre la fonctionnalité du système, et les modèles
sont utilisés pour communiquer avec les clients.
Les modèles du système existant sont utilisés lors de l'ingénierie des exigences. Ils aident à clarifier
ce que le système existant fait et peuvent être utilisés comme base pour discuter de ses forces et de ses
faiblesses. Ceux-ci conduisent alors à des exigences pour le nouveau système.
Les modèles du nouveau système sont utilisés lors de l'ingénierie des exigences pour aider à
expliquer les exigences proposées aux autres parties prenantes du système. Les ingénieurs utilisent ces
modèles pour discuter des propositions de conception et documenter le système pour la
l‟implémentation.
Dans un processus d'ingénierie piloté par les modèles, il est possible de générer une implémentation
de système complète ou partielle à partir du modèle de système.
Perspectives du système
Une perspective d'interaction, où vous modélisez les interactions entre un système et son
93
Chapitre 5: Modélisation du Système
Une perspective structurelle, où vous modélisez l'organisation d'un système ou la structure des
données traitées par le système.
Diagrammes d'activité, qui montrent les activités impliquées dans un processus ou dans le traitement
des données.
Diagrammes de cas d‟utilisation, qui montrent les interactions entre un système et son
environnement.
Diagrammes de séquence, qui montrent les interactions entre les acteurs et le système et entre les
composants du système.
Diagrammes de classes, qui montrent les classes d'objets dans le système et les associations entre ces
classes.
Diagrammes d'état, qui montrent comment le système réagit aux événements internes et externes.
En tant que description détaillée du système pouvant être utilisée pour générer une implémentation
du système
Les modèles doivent être à la fois corrects et complets.
2. Modèles de Contexte
Modèles de Contexte
Les modèles de contexte sont utilisés pour illustrer le contexte opérationnel d'un système
Ils montrent ce qui se trouve en dehors des limites du système.
94
Chapitre 5: Modélisation du Système
Les limites du système sont établies pour définir ce qui est à l'intérieur et ce qui est à l'extérieur du
système.
Ils montrent d'autres systèmes qui sont utilisés ou dépendent du système en cours de développement.
La position de la limite du système a un effet important sur les exigences du système.
Il peut y avoir des pressions pour développer des limites de système qui augmentent/diminuent
l'influence ou la charge de travail des différentes parties d'une organisation.
Perspective de processus
Les modèles de contexte montrent simplement les autres systèmes dans l'environnement, pas
comment le système développé est utilisé dans cet environnement.
Les modèles de contexte simples sont utilisés avec d'autres modèles, tels que les modèles de
processus métier. Ils décrivent des processus humains et automatisés dans lesquels des systèmes
logiciels particuliers sont utilisés.
Les modèles de processus révèlent comment le système en cours de développement est utilisé dans
des processus métier plus larges.
Les diagrammes d'activité UML peuvent être utilisés pour définir des modèles de processus métier.
95
Chapitre 5: Modélisation du Système
3. Modèles d’Interaction
Modèle d’Interaction
La modélisation de l'interaction de l'utilisateur est importante car elle permet d'identifier les besoins
des utilisateurs.
La modélisation de l'interaction des composants nous aide à comprendre si une structure de système
proposée est susceptible de fournir les performances et la fiabilité requises du système.
Des diagrammes de cas d'utilisation et des diagrammes de séquence peuvent être utilisés pour la
modélisation d'interaction.
Les cas d'utilisation ont été développés à l'origine pour prendre en charge l'élicitation des exigences
et sont désormais intégrés dans le langage UML.
Chaque cas d'utilisation représente une tâche discrète impliquant une interaction externe avec un
système.
Les acteurs dans un cas d'utilisation peuvent être des personnes ou d'autres systèmes.
Représenté schématiquement pour donner un aperçu du cas d'utilisation et sous une forme textuelle
plus détaillée.
96
Chapitre 5: Modélisation du Système
Diagramme de Séquence
Les diagrammes de séquence font partie de l'UML et sont utilisés pour modéliser les interactions
entre les acteurs et les objets dans un système.
Un diagramme de séquence montre la séquence des interactions qui ont lieu au cours d'un cas
97
Chapitre 5: Modélisation du Système
Les objets et acteurs impliqués sont listés en haut du diagramme, avec une ligne pointillée tirée
verticalement à partir de ceux-ci.
Les interactions entre les objets sont indiquées par des flèches annotées.
Diagramme de séquence pour Afficher les informations du patient «View patient information»
Ce diagramme modélise les interactions impliquées dans le cas d'utilisation «View patient
information», où une réceptionniste médicale peut voir certaines informations sur le patient.
1. La réceptionniste médicale déclenche la méthode ViewInfo dans une instance P de la classe d'objets
PatientInfo, en fournissant l'identifiant du patient, PID. P est un objet d'interface utilisateur, qui est
affiché comme un formulaire d'informations sur le patient.
2. L'instance P appelle la base de données pour retourner l'information requise, fournissant l'identifiant
de la réceptionniste pour permettre la vérification de sécurité (à ce stade, nous ne nous soucions pas
d'où vient UID).
3. La base de données vérifie avec un système d'autorisation que l'utilisateur est autorisé pour cette
action.
4. Si autorisé, les informations du patient sont renvoyées et un formulaire sur l'écran de l'utilisateur est
rempli. Si l'autorisation échoue, un message d'erreur est renvoyé.
98
Chapitre 5: Modélisation du Système
4. Modèles Structurels
Les modèles structurels de logiciel affichent l'organisation d'un système en fonction des composants
qui composent ce système et de leurs relations.
99
Chapitre 5: Modélisation du Système
Les modèles structurels peuvent être des modèles statiques, qui montrent la structure de la
conception du système, ou des modèles dynamiques, qui montrent l'organisation du système lors de son
exécution.
L‟organisation dynamique d'un système sous la forme d'un ensemble de threads en interaction peut
être très différente d'un modèle statique des composants du système.
Vous créez des modèles structurels d'un système lorsque vous discutez et concevez l'architecture du
système.
Diagramme de Classes
Les diagrammes de classes sont utilisés lors du développement d'un modèle de système orienté objet
pour montrer les classes dans un système et les associations entre ces classes.
Une classe d'objets peut être considérée comme une définition générale d'un type d'objet système.
Une association est un lien entre les classes qui indique qu'il existe une relation entre ces classes.
Lorsque vous développez des modèles au cours des premières étapes du processus de génie logiciel,
les objets représentent quelque chose dans le monde réel, comme un patient, une prescription, un
médecin, etc.
Classes UML et association
100
Chapitre 5: Modélisation du Système
La classe « Consultation »
On suppose que les médecins enregistrent des notes vocales qui sont
transcrites plus tard pour enregistrer les détails de la consultation.
Généralisation
La généralisation est une technique quotidienne que nous utilisons pour
gérer la complexité.
Cela nous permet d'inférer que différents membres de ces classes ont des caractéristiques communes,
par ex. les écureuils et les rats sont des rongeurs.
Dans les systèmes de modélisation, il est souvent utile d'examiner les classes d'un système pour voir
s'il existe une possibilité de généralisation. Si des modifications sont proposées, vous n'avez pas besoin
de regarder toutes les classes du système pour voir si elles sont affectées par le changement.
Dans les langages orientés objet, tels que Java, la généralisation est implémentée en utilisant les
mécanismes d'héritage de classe intégrés dans le langage.
Dans une généralisation, les attributs et les opérations associés aux classes de niveau supérieur sont
également associés aux classes de niveau inférieur.
Les classes de niveau inférieur sont des sous-classes qui héritent des attributs et des opérations de
leurs superclasses. Ces classes de niveau inférieur ajoutent ensuite des attributs et des opérations plus
spécifiques.
101
Chapitre 5: Modélisation du Système
Un modèle d'agrégation montre comment les classes qui sont des collections sont composées d'autres
classes.
Les modèles d'agrégation sont similaires à la relation « partie de (part-of) » dans les modèles de
données sémantiques.
L’ association d’aggregation
5. Modèles comportementaux
Les modèles comportementaux sont des modèles du comportement dynamique d'un système en cours
d'exécution. Ils montrent ce qui se passe ou ce qui est supposé se produire lorsqu'un système répond à
un stimulus de son environnement.
De nombreux systèmes d‟entreprise (Business systems) sont des systèmes de traitement de données
qui sont principalement pilotés par des données. Ils sont contrôlés par l'entrée de données dans le
102
Chapitre 5: Modélisation du Système
Par exemple: un système de facturation téléphonique acceptera des informations sur les appels passés
par un client, calculera les coûts de ces appels et générera une facture à envoyer à ce client.
Les modèles pilotés par les données montrent la séquence des actions impliquées dans le traitement
des données d'entrée et la génération d'une sortie associée.
Ils sont particulièrement utiles lors de l'analyse des exigences car ils peuvent être utilisés pour
montrer le traitement de bout en bout dans un système.
Un autre moyen de montrer la séquence de traitement dans un système consiste à utiliser des
diagrammes de séquence UML.
Vous avez vu comment ils peuvent être utilisés pour modéliser l'interaction mais, si vous les dessinez
de sorte que les messages ne soient envoyés que de gauche à droite, ils montrent le traitement
séquentiel des données dans le système.
Les modèles de séquence mettent en évidence des objets dans un système, tandis que les diagrammes
de flux de données (DFD) mettent en évidence les fonctions.
103
Chapitre 5: Modélisation du Système
Les systèmes en temps réel 2 sont souvent pilotés par les événements, avec un minimum de
traitement des données.
Par exemple, un système de commutation de téléphone fixe répond à des événements tels que
«combiné décroché» en générant une tonalité.
La modélisation pilotée par les événements montre comment un système répond aux événements
externes et internes.
Elle est basée sur l'hypothèse qu'un système a un nombre fini d'états et que les événements (stimuli)
peuvent provoquer une transition d'un état à un autre.
Ils montrent que les réponses du système aux stimuli sont souvent utilisées pour modéliser les
systèmes en temps réel.
Les modèles de machine à états montrent les états du système comme des nœuds et les événements
comme des arcs entre ces nœuds. Lorsqu'un événement se produit, le système passe d'un état à un
autre.
« Statecharts »3 sont une partie intégrante de l'UML et sont utilisés pour représenter les modèles de
machines d'état.
2
Un système temps réel est un système capable de contrôler (ou piloter) un procédé physique à une vitesse adaptée à
l'évolution du procédé contrôlé. le système en temps réel ne doit pas simplement délivrer des résultats exacts, il doit les
délivrer dans des délais imposés (soumis à des contraintes temporelles, pas forcément rapide).
3
Appelé aussi: Diagramme états-transitions ou diagramme d‟états
104
Chapitre 5: Modélisation du Système
Nous utilisons un exemple de logiciel de contrôle pour un four à micro-ondes très simple pour
illustrer la modélisation événementielle.
Les vrais fours à micro-ondes sont en réalité beaucoup plus complexes que ce système, mais le
système simplifié est plus facile à comprendre.
3. Appuyez sur Démarrer et les aliments sont cuits pour l'instant donné.
Pour des raisons de sécurité (safety), le four ne doit pas fonctionner lorsque la porte est ouverte et, à
la fin de la cuisson, un signal sonore retentit (produit du beaucoup de bruit). Le four a un affichage
alphanumérique très simple qui est utilisé pour afficher diverses alertes et messages d'avertissement.
Dans les diagrammes d'état UML, les rectangles arrondis représentent les états du système. Ils
peuvent inclure une brève description (après «faire ou Do») des actions entreprises dans cet état.
Les flèches étiquetées représentent des stimuli qui forcent une transition d'un état à un autre. Vous
pouvez indiquer les états de début et de fin en utilisant des cercles pleins, comme dans les diagrammes
d'activité.
105
Chapitre 5: Modélisation du Système
Le problème avec la modélisation basée sur l'état est que le nombre d'états possibles augmente
rapidement. Pour les grands modèles de système, vous devez donc masquer les détails dans le modèles
par la notion de « superstate »
Operation est un super état « Superstate » qui peut être étendu en plusieurs etats séparés « substates »
Half power La puissance du four est réglée sur 300 watts. L'écran affiche 'Half power'.
Full power La puissance du four est réglée sur 600 watts. L'affichage indique 'Full
106
Chapitre 5: Modélisation du Système
power'.
Set time Le temps de cuisson est réglé sur la valeur d'entrée de l'utilisateur.
L'affichage indique le temps de cuisson sélectionné et est mis à jour à
mesure que temps est réglée.
Enabled L'opération du four est activée. L'éclairage du four intérieur est éteint.
L‟écran affiche „Ready to cook‟.
Stimulus Description
Half power L'utilisateur a appuyé sur le bouton «half-power» .
Full power L'utilisateur a appuyé sur le bouton «full-power».
Timer L'utilisateur a appuyé sur les boutons de Timer
Number L'utilisateur a appuyé sur le clavier numérique
Door open L'interrupteur de la porte du four n'est pas fermé.
Door closed L'interrupteur de la porte du four est fermé.
Start L'utilisateur a appuyé sur le bouton «Start».
Cancel L'utilisateur a appuyé sur le bouton «Cancel» .
Activité4 :
1) Donner un exemple d‟un system d‟entreprise (de gestion, en anglais: Business System) et
modéliser son comportement par une modélisation pilotée par les données.
2) Donner un exemple d‟un system temps réel (en anglais: Real-time system) et modéliser son
comportement par une modélisation pilotée par les événements.
4
Remarque: pour les deux modélisations utiliser un outil UML tel que (Astah :
http://astah.net/editions/community).
107
Chapitre 5: Modélisation du Système
L'ingénierie dirigée par les modèles (IDM) est une approche du développement de logiciels où les
modèles plutôt que les programmes sont les principaux résultats du processus de développement.
Les programmes qui s'exécutent sur une plate-forme matérielle/logicielle sont ensuite générés
automatiquement à partir des modèles.
Les partisans de MDE soutiennent que cela augmente le niveau d'abstraction dans l'ingénierie
logicielle, de sorte que les ingénieurs n'ont plus à se soucier des détails du langage de programmation
ou des spécificités des plates-formes d'exécution.
Utilisation de l’IDM
L'ingénierie dirigée par les modèles est encore à un stade précoce de développement, et il n'est pas
clair si cela aura ou non un effet significatif sur la pratique de l'ingénierie logicielle.
Avantages
Permet aux systèmes d'être considérés à des niveaux plus élevés d'abstraction
Générer du code automatiquement signifie qu'il est moins coûteux d'adapter les systèmes à
des nouvelles plateformes.
Les inconvénients
Des modèles pour l'abstraction et pas nécessairement pour la mise en œuvre.
Les économies générées par la génération de code peuvent être compensées par les coûts de
développement de traducteurs (trasformation) pour de nouvelles plates-formes.
L'architecture pilotée par les modèles (MDA) a été le précurseur d'une ingénierie plus générale basée
sur des modèles.
MDA est une approche centrée sur les modèles pour la conception et la mise en œuvre de logiciels
qui utilise un sous-ensemble de modèles UML pour décrire un système.
Des modèles à différents niveaux d'abstraction sont créés. A partir d'un modèle indépendant de haut
niveau, il est possible, en principe, de générer un programme de travail sans intervention manuelle.
Types de Modèles
5
« Model-Driven Engineering - MDE»
6
« Model driven architecture – MDA »
108
Chapitre 5: Modélisation du Système
Transformations MDA
Les développeurs de MDA affirment qu'il est destiné à soutenir une approche itérative du
développement et peuvent donc être utilisés dans des méthodes agiles.
La notion de modélisation initiale poussée contredit les idées fondamentales du manifeste agile et je
soupçonne que peu de développeurs agiles se sentent à l'aise avec l'ingénierie dirigée par les modèles.
Si les transformations peuvent être complètement automatisées et qu'un programme complet peut
être généré à partir d'un PIM, alors, en principe, le MDA pourrait être utilisé dans un processus de
développement agile car aucun codage séparé ne serait requis.
Adoption de MDA
Un support d'outil spécialisé est requis pour convertir des modèles d'un niveau à un autre.
La disponibilité des outils est limitée et les organisations peuvent nécessiter une adaptation et une
109
Chapitre 5: Modélisation du Système
Pour les systèmes à longue durée de vie (long-lifetime systems) développés à l'aide de MDA, les
entreprises hésitent à développer leurs propres outils ou à compter sur de petites entreprises qui
pourraient faire faillite...
Les modèles sont un bon moyen pour faciliter les discussions sur la conception d'un logiciel.
Cependant, les abstractions qui sont utiles pour les discussions peuvent ne pas être les bonnes
abstractions pour la mise en œuvre.
Pour la plupart des systèmes complexes, la mise en œuvre n'est pas le problème majeur - l'ingénierie
des exigences, la sécurité et la fiabilité, l'intégration avec les systèmes existants et les tests sont tous
plus importants.
Les arguments pour l'indépendance de la plate-forme ne sont valables que pour les systèmes de
grande taille et à longue durée de vie. Pour les produits logiciels et les systèmes d'information, les
économies découlant de l'utilisation de MDA risquent d'être compensées par les coûts de son
introduction et de son outillage.
7. Points clés
Un modèle est une vue abstraite d'un système qui ignore les détails du système. Des modèles de
systèmes complémentaires peuvent être développés pour montrer le contexte, les interactions, la
structure et le comportement du système.
Les modèles de contexte montrent comment un système en cours de modélisation est positionné
dans un environnement avec d'autres systèmes et processus.
Les diagrammes de cas d'utilisation et les diagrammes de séquence sont utilisés pour décrire les
interactions entre les utilisateurs et les systèmes dans le système en cours de conception. Les cas
d'utilisation décrivent les interactions entre un système et des acteurs externes; diagrammes de
séquence ajoutent plus d'informations à ceux-ci en montrant des interactions entre les objets du
système.
Les modèles structurels montrent l'organisation et l'architecture d'un système. Les diagrammes de
classes sont utilisés pour définir la structure statique des classes dans un système et leurs
associations.
Les modèles comportementaux sont utilisés pour décrire le comportement dynamique d'un système
d'exécution. Ce comportement peut être modélisé du point de vue des données traitées par le
système ou des événements qui stimulent les réponses d'un système.
Les diagrammes d'activités peuvent être utilisés pour modéliser le traitement des données, où
chaque activité représente une étape du processus.
Les diagrammes d'état sont utilisés pour modéliser le comportement d'un système en réponse à des
événements internes ou externes.
L'ingénierie dirigée par les modèles est une approche du développement de logiciels dans laquelle
un système est représenté sous la forme d'un ensemble de modèles qui peuvent être
automatiquement transformés en code exécutable.
110
Chapitre 5: Modélisation du Système
8. Exercices
I) Quiz :
4. Quel modèle de système est représenté par les opérations ATM présentées ci-dessous:
5. Les diagrammes d'activités sont utilisés pour modéliser le traitement des données
a) Vrai
b) Faux
6. L'ingénierie dirigée par les modèles n'est qu'un concept théorique. Il ne peut pas être converti en
un code de travail/exécutable.
a) Vrai
b) Faux
111
Chapitre 5: Modélisation du Système
8. Lequel des diagrammes suivants n'est pas supporté par UML pour la modélisation pilotée par les
données?
a) Activité
b) Diagramme de flux de données (DFD)
c) Machine à états (Etats-Transitions)
d) Composant
9. _________________ allows us to infer that different members of classes have some common
characteristics.
a) Realization
b) Aggregation
c) Generalization
d) dependency
10. On crée des modèles comportementaux d'un système lorsque nous discutons et concevons
l'architecture du système.
a) Vrai
b) Faux
13. ___________ classes are used to create the interface that the user sees and interacts with as
the software is used.
a) Controller
b) Entity
c) Boundary
d) Business
112
Chapitre 5: Modélisation du Système
113
Chapitre 5: Modélisation du Système
11. Étant donné le diagramme d‟états de la Figure suivante. Donnez la séquence d‟activités
(actions) exécutées quand on se trouve dans l‟état S et :
event1 se produit
event2 se produit
12. Vous êtes un responsable de l'ingénierie logicielle et votre équipe propose que l'ingénierie
dirigée par un modèle soit utilisée pour développer un nouveau système. Quels facteurs
devez-vous prendre en compte lorsque vous décidez d'introduire ou non cette nouvelle
approche dans le développement de logiciels?
9. Solutions
I) Quiz :
114
Chapitre 5: Modélisation du Système
2)
Vous pouvez créer et utiliser un modèle d'un système existant pour les raisons suivantes:
Vous n'avez pas besoin d'un modèle complet sauf si l'intention est de documenter complètement le
fonctionnement du système existant. Le but du modèle dans tels cas est généralement de vous aider à
travailler sur des parties du système, de sorte que seules celles-ci doivent être modélisées.
De plus, si le modèle est utilisé comme un sujet de discussion, il est peu probable intéressé par les détails
et peut donc ignorer les parties du système dans le modèle.
Cela est vrai, en général, pour les modèles de nouveaux systèmes, à moins qu'une approche basée sur les
modèles de développement ait lieu dont un modèle complet est requis. Les autres circonstances dans
lesquelles vous pourriez avoir besoin d'un modèle complet sont quand il y a une exigence contractuelle
pour qu'un tel modèle soit produit dans le cadre de la documentation du système.
5)
Un diagramme relativement simple est tout ce qui est nécessaire ici. Il est préférable de ne pas être trop
pointilleux à propos des choses comme les styles de flèches UML que presque personne ne peut se
rappeler les différences entre eux.
115
Chapitre 5: Modélisation du Système
6)
7) Notez que la solution proposée n‟a pas développé les activités représentant d'autres services ou
l'authentification échouée.
Un effet d‟entrée (introduit par le mot-clé « entry » à l‟intérieur du symbole d‟un état)
représente une action ou une activité qui est exécutée chaque fois que l‟on entre dans cet état.
116
Chapitre 5: Modélisation du Système
Cela permet de
factoriser un même effet qui sera déclenché par toutes les transitions qui entrent dans l‟état.
L‟effet de sortie (introduit par le mot-clé « exit ») est l‟effet symétrique en sortie de l‟état.
11)
1. x
2. y; z; w
12)
Les facteurs dont vous devez tenir compte au moment de prendre cette décision comprennent:
1. L'expertise de l'équipe dans l'utilisation de UML et MDA. (L'expertise est-elle déjà
disponible ou une formation poussée sera-t-elle nécessaire?)
2. Les coûts et la fonctionnalité des outils disponibles pour soutenir MDA. (Les outils sont-ils
disponibles à la maison ou devront-ils être achetés? Sont-ils assez bons pour le type de
logiciel développé?
3. La durée de vie probable du logiciel que vous développez. (MDA est le plus approprié
pour les systèmes à longue durée de vie)
4. Exigences pour la haute performance ou le débit (MDA repose sur la génération de code
qui crée un code qui peut être moins efficace que le code écrit à la main)
5. Les avantages à long terme de l'utilisation de MDA (y a-t-il des économies réelles de cette
approche)?
6. L'enthousiasme des développeurs de logiciels. (Tous les membres de l'équipe sont-ils
engagés envers cette nouvelle approche?)
117
Chapitre
VI Conception
Architecturale
Objectifs
• comprendre pourquoi la conception architecturale du logiciel est
importante;
• comprendre les décisions qui doivent être prises au sujet de l'architecture
du système pendant le processus de conception architecturale;
• ont été introduits à l'idée de modèles architecturaux, des façons bien
éprouvées d'organisation des architectures de système, qui peuvent être
réutilisés dans la conception de systèmes;
• connaître les modèles architecturaux souvent utilisés dans différents
types de systèmes d'application, y compris les systèmes de traitement des
transactions et les systèmes de traitement des langages.
Themes couverts
• Décisions de conception architecturale
• Vues architecturales
• Patrons architecturaux
• Architectures d'application
118
Chapitre 6: Conception Architecturale
Chapitre 6:
Conception Architecturale
1. Introduction
Conception architecturale7
La conception architecturale vise à comprendre comment un système logiciel devrait être organisé et
à concevoir la structure globale de ce système.
La conception architecturale est le lien essentiel entre la conception et l'ingénierie des exigences, car
elle identifie les principaux composants structurels dans un système et les relations entre eux.
La sortie du processus de conception architecturale est un modèle architectural qui décrit comment le
système est organisé comme un ensemble de composants communicants.
Agilité et architecture
Il est généralement admis qu'une première étape des processus agiles consiste à concevoir une
architecture globale des systèmes.
Le refactoring de l'architecture du système est généralement coûteux car il affecte tant de composants
dans le système
7
Appelée aussi: conception générale, conception globale, conception préliminaire (preliminary design ou architectural
design)
119
Chapitre 6: Conception Architecturale
Abstraction architecturale
L'architecture dans le petit est concernée par l'architecture des programmes individuels. À ce niveau,
nous sommes préoccupés par la façon dont un programme individuel est décomposé en composants.
L'architecture dans le grand concerne l'architecture de systèmes d'entreprise complexes qui incluent
d'autres systèmes, programmes et composants de programme. Ces systèmes d'entreprise sont répartis
sur différents ordinateurs, qui peuvent être détenus et gérés par des sociétés différentes.
L'analyse du système
Signifie d'analyser s‟il est possible que le système peut répondre à ses exigences non
fonctionnelles.
Des schémas fonctionnels simples et informels (montrant les entités et les relations) sont la méthode
la plus fréquemment utilisée pour documenter les architectures logicielles.
Mais ceux-ci ont été critiqués parce qu'ils manquent de sémantique, ne montrent pas les types de
relations entre les entités ni les propriétés visibles des entités dans l'architecture.
120
Chapitre 6: Conception Architecturale
Diagrammes de boîtes/lignes
Très abstrait - ils ne montrent pas la nature des relations entre composants ni les propriétés visibles à
l'extérieur des sous-systèmes.
Cependant, utile pour la communication avec les parties prenantes et pour la planification du projet.
La conception architecturale est un processus créatif, de sorte que le processus diffère selon le type
de système développé.
Cependant, un certain nombre de décisions communes couvrent tous les processus de conception et
ces décisions affectent les caractéristiques non fonctionnelles du système.
121
Chapitre 6: Conception Architecturale
Réutilisation de l'architecture
Les systèmes du même domaine ont souvent des architectures similaires qui reflètent les concepts de
domaine.
Les applications de lignes de produits (application product lines) sont construites autour d'une
architecture de base avec des variantes qui répondent aux exigences particulières des clients.
L'architecture d'un système peut être conçue autour d'un ou plusieurs patrons (styles) architecturaux.
Ceux-ci capturent l'essence d'une architecture et peuvent être instanciés de différentes
manières.
Sécurité (security)
Utilisez une architecture en couches avec des atouts (les biens) essentiels dans les couches
internes.
Sureté (savety)
Localisez les fonctions essentielles à la sureté dans un seul composant ou un petit nombre de
composants.
Disponibilité
Inclure des composants et des mécanismes redondants pour la tolérance aux pannes.
Maintenabilité
Utilisez des composants à grain fin remplaçables.
3. Vues architecturales
Vues architecturales
Quelles notations devraient être utilisées pour décrire les modèles architecturaux?
122
Chapitre 6: Conception Architecturale
Krutchen (1995), dans son modèle des 4 + 1 vues de l'architecture logicielle, suggère qu'il devrait
exister quatre vues architecturales fondamentales, qui sont liées à l'aide de scénarios d'utilisation
(modèle +1). Les points de vue qu'il suggère sont les suivants:
1. Une vue logique, qui montre les abstractions clés dans le système en tant qu'objets ou classes
d'objets. Il devrait être possible de lier les exigences système aux entités de cette vue logique.
2. Une vue des processus qui montre comment, au moment de l'exécution, le système est
composé des processus en interaction. Cette vue est utile pour évaluer les caractéristiques
non fonctionnelles du système telles que la performance et la disponibilité.
3. Une vue de développement (composants), qui montre comment le logiciel est décomposé
pour le développement, c'est-à-dire qu'il montre la décomposition du logiciel en composants
mis en œuvre par un seul développeur ou une seule équipe de développement. Cette vue est
utile pour les gestionnaires de logiciels et les programmeurs.
4. Une vue physique (déploiement) qui montre le matériel du système et la manière dont les
composants logiciels sont répartis entre les processeurs du système. Cette vue est utile pour
les ingénieurs système qui planifient un déploiement de système.
Certaines personnes soutiennent que le langage UML (Unified Modeling Language) est une notation
appropriée pour décrire et documenter les architectures de systèmes.
Sommerville n‟est pas d'accord avec cela car il ne pense pas que l'UML inclut des abstractions
appropriées pour une description de système de haut niveau.
Des langages de description architecturaux (ADLs) ont été développés mais ne sont pas largement
utilisés
4. Patrons architecturaux
Un patron architectural est une description stylisée d'une bonne pratique de conception, qui a été
8
object-oriented design patterns (Gamma et al., 1995)
123
Chapitre 6: Conception Architecturale
Les patrons devraient inclure des informations sur quand ils sont et quand ils ne sont pas utiles.
Les patrons peuvent être représentés en utilisant des descriptions tabulaires et graphiques.
Exemple La Figure 6.4 montre l'architecture d'un système d'application basé sur le
Web (web-based application system) organisé en utilisant le patron MVC.
Quand utilisé Utilisé lorsqu'il existe plusieurs façons de visualiser et d'interagir avec les
données. Également utilisé lorsque les exigences futures pour l'interaction
et la présentation des données sont inconnues.
L'organisation du Model-View-Controller
124
Chapitre 6: Conception Architecturale
Pour des implémentations multiplateformes d'un système d'application, seules les couches internes
dépendant de la machine doivent être ré-implémentées pour prendre en compte les fonctionnalités d'un
système d'exploitation ou d'une base de données différents.
125
Chapitre 6: Conception Architecturale
Désavantages En pratique, fournir une séparation nette entre les couches est souvent difficile et
une couche de haut niveau peut avoir à interagir directement avec des couches de
niveau inférieur plutôt que par la couche immédiatement en dessous. Les
performances peuvent être un problème en raison de plusieurs niveaux
d'interprétation d'une demande de service lors du traitement de chaque couche.
126
Chapitre 6: Conception Architecturale
Les sous-systèmes doivent échanger des données. Cela peut être fait de deux façons:
Les données partagées sont conservées dans une base de données centrale ou un référentiel et
peuvent être consultées par tous les sous-systèmes;
Chaque sous-système maintient sa propre base de données et transmet les données
explicitement à d'autres sous-systèmes.
Lorsque de grandes quantités de données doivent être partagées, le modèle référentiel de partage est
le plus souvent utilisé car il s'agit d'un mécanisme efficace de partage de données.
Description Toutes les données d'un système sont gérées dans un référentiel central accessible à tous
les composants du système. Les composants n'interagissent pas directement, uniquement
via le référentiel.
Exemple La Figure 6.9 est un exemple d„un IDE où les composants utilisent un référentiel
d'informations de conception de système. Chaque outil logiciel génère des informations
qui peuvent ensuite être utilisées par d'autres outils.
Quand utilisé Vous devriez utiliser ce patron lorsque vous avez un système dans lequel de grands
volumes d'informations sont générés et doivent être stockés pendant longtemps. Vous
pouvez également l'utiliser dans des systèmes pilotés par les données (data-driven
systems) où l'inclusion de données dans le référentiel déclenche une action ou un outil.
Avantages Les composants peuvent être indépendants: ils n'ont pas besoin de connaître l'existence
d'autres composants. Les modifications apportées par un composant peuvent être
propagées à tous les composants. Toutes les données peuvent être gérées de manière
cohérente car elles se font toutes en un seul endroit.
Désavantages Le référentiel étant un point de défaillance unique, et donc, les problèmes dans le
référentiel affectent l'ensemble du système. Peut être inefficace dans l'organisation de
toutes les communications à travers le référentiel. La distribution du référentiel sur
plusieurs ordinateurs peut s'avérer difficile.
9
dépôt , entrepôt
10
also called, Data-Centered Architecture, ou architecture centrée sur les données.
127
Chapitre 6: Conception Architecturale
Modèle de système distribué qui montre comment les données et le traitement sont répartis sur une
gamme de composants.
Peut-être implémenté sur un seul ordinateur.
Ensemble de serveurs autonomes qui fournissent des services spécifiques tels que l'impression, la
gestion de données, etc.
Le patron Client-serveur
Nom Client-serveur
128
Chapitre 6: Conception Architecturale
Les transformations fonctionnelles traitent leurs entrées pour produire des sorties.
Peut-être référé comme modèle de tuyau et de filtre (comme dans le shell UNIX).
Les variantes de cette approche sont très courantes. Lorsque les transformations sont séquentielles, il
s'agit d'un modèle séquentiel par lots qui est largement utilisé dans les systèmes de traitement de
données.
Description Le traitement des données dans un système est organisé de sorte que chaque composant
de traitement (filtre) soit discret et exécute un type de transformation de données. Les
données circulent (comme dans un tuyau) d'un composant à l'autre pour le traitement.
Exemple La Figure 6.13 est un exemple de système de tuyau et de filtre utilisé pour le traitement
des factures.
Quand utilisé Généralement utilisé dans les applications de traitement de données (à la fois par lots et
par transaction) où les entrées sont traitées dans des étapes distinctes pour générer des
sorties connexes.
Avantages Facile à comprendre et prend en charge la réutilisation de la transformation. Le style de
workflow correspond à la structure de nombreux processus métier. L'évolution en
ajoutant des transformations est simple. Peut-être implémenté en tant que système
séquentiel ou concurrent.
Désavantages Le format de transfert de données doit être convenu entre les transformations
communicantes. Chaque transformation doit analyser son entrée et séparer sa sortie de la
forme convenue. Cela augmente le surdébit du système et peut signifier qu'il est
impossible de réutiliser des transformations fonctionnelles qui utilisent des structures de
données incompatibles.
11
(also called, Data-Flow Architecture ou architecture de flux de données)
129
Chapitre 6: Conception Architecturale
5. Architectures d'application
Comme les entreprises ont beaucoup en commun, leurs systèmes d'application ont également
tendance à avoir une architecture commune qui reflète les exigences de l'application.
Une architecture d'application générique est une architecture pour un type de système logiciel qui
peut être configuré et adapté pour créer un système répondant à des exigences spécifiques.
Types d'application
Deux architectures d'application génériques très répandues sont les systèmes de traitement des
transactions et les systèmes de traitement de la langue.
130
Chapitre 6: Conception Architecturale
Interpréteurs de commande.
Traiter les requêtes des utilisateurs à partir d'une base de données ou les requêtes de mise à jour de la
base de données.
Pour un service, les utilisateurs effectuent des requêtes asynchrones qui sont ensuite traitées par un
gestionnaire de transactions.
Les systèmes d'information ont une architecture générique qui peut être organisée comme une
architecture en couches.
Ce sont des systèmes basés sur des transactions car l'interaction avec ces systèmes implique
généralement des transactions de base de données.
131
Chapitre 6: Conception Architecturale
Les systèmes de gestion des informations et des ressources sont maintenant généralement des
systèmes basés sur le Web où les interfaces utilisateur sont implémentées à l'aide d'un navigateur Web.
Par exemple, les systèmes de commerce électronique sont des systèmes de gestion des ressources
basés sur Internet qui acceptent les commandes électroniques de biens ou de services, puis organisent la
livraison de ces biens ou services au client.
132
Chapitre 6: Conception Architecturale
Implémentation du serveur
Ces systèmes sont souvent implémentés en tant que architecture client-serveur multi-niveaux
Le serveur Web est responsable de toutes les communications de l'utilisateur, l'interface
utilisateur implémenté à l'aide d'un navigateur Web;
Le serveur d'application est responsable de l‟implémentation de la logique spécifique à
l'application ainsi que des requêtes de stockage et de récupération d'informations;
Le serveur de base de données déplace les informations vers et depuis la base de données et
gère la gestion des transactions.
Accepter un langage naturel ou artificiel comme entrée et générer une autre représentation de ce
langage.
Peut inclure un interpréteur pour agir selon les instructions écrites en langage en cours de traitement.
Utilisé dans les situations où le moyen le plus simple de résoudre un problème est de décrire un
algorithme ou de décrire les données du système.
Les outils de « MetaCASE tools12 » traitent les descriptions d'outils, les règles de méthode,
etc. et génèrent des outils.
Composants du compilateur
Un analyseur lexical, qui prend les tokens (jetons) de langage d'entrée et les convertit en une forme
interne.
Une table de symboles, qui contient des informations sur les noms des entités (variables, noms de
12
Un outil MetaCASE est un type de logiciel d'application qui offre la possibilité de créer une ou plusieurs méthodes de
modélisation, langages ou notations à utiliser dans le processus de développement logiciel. Souvent, le résultat est un outil de
modélisation pour ce langage. Les outils MetaCASE sont donc une sorte de workbench (table de travail) de langage,
généralement considéré comme focalisé sur les langages de modélisation graphique.
133
Chapitre 6: Conception Architecturale
Un arbre de syntaxe, qui est une structure interne représentant le programme en cours de
compilation.
Composants du compilateur
Un analyseur sémantique qui utilise les informations de l'arbre de syntaxe et de la table des symboles
pour vérifier la correction sémantique du texte de la langue d'entrée.
Un générateur de code qui «parcourt» l'arbre de syntaxe et génère un code machine abstrait.
6. Points clés
Une architecture logicielle est une description de la façon dont un système logiciel est organisé.
Les décisions de conception architecturale comprennent des décisions sur le type d'application, la
134
Chapitre 6: Conception Architecturale
7. Exercices
I) Quiz :
2. Une vue ________ montre le matériel du système (le hardware) et la manière dont les
composants logiciels sont répartis entre les processeurs du système.
a) physique
b) logique
c) processus
4. Laquelle des vues ci-dessous montre que le système se compose des processus d'interaction au
moment de l'exécution?
a) physique
b) développement
c) logique
d) processus
135
Chapitre 6: Conception Architecturale
6. Lequel des éléments suivants n'est pas inclus dans les décisions de la conception
architecturale?
a) type d'application
b) la distribution du système
c) les styles architecturaux
d) Les tests du système
7. L'architecture, une fois établie, peut également être appliquée à d'autres produits.
a) Vrai
b) Faux
8. Lequel des modèles suivants est la base de la gestion des interactions dans des nombreux
systèmes Web?
a) l'architecture
b) modèle de dépôt
c) modèle-vue-contrôleur
d) système d'exploitation différent
9. Qu'est-ce qui décrit comment un ensemble de composants en interaction peut partager des
données?
a) modèle-vue-contrôleur
b) patron d'architecture
c) modèle de dépôt
d) Aucun des mentionnés
10. Quelle vue dans la conception architecturale montre les abstractions clés dans le système en
tant qu'objets ou classes d'objets?
a) physique
b) développement
c) logique
d) processus
136
Chapitre 6: Conception Architecturale
1. Lorsque vous décrivez un système, expliquez pourquoi vous devrez peut-être concevoir
l'architecture du système avant que la spécification des exigences ne soit complète.
2. Un système d'information doit être développé pour maintenir les informations sur les biens
appartenant à une entreprise de services publics tels que bâtiments, véhicules, équipements,
etc. Il est prévu que le personnel travaillant sur le terrain puisse les mettre à jour en utilisant les
appareils mobiles. La société dispose de plusieurs bases de données existantes qui devraient
être intégrées à travers ce système. Concevoir une architecture en couches pour ce système de
gestion des biens basé sur l'architecture du système d'information générique illustré dans le
chapitre 6.
3. En utilisant le modèle générique d'un système de traitement de langage présenté dans ce
chapitre, concevoir l'architecture d'un système qui accepte les commandes en langage naturel
et les traduire en requêtes de base de données dans un langage tel que SQL.
4. En utilisant le modèle de base d'un système d'information tel que présenté dans ce chapitre,
suggérez les composants qui pourraient faire partie d'une application pour un appareil mobile
qui affiche des informations sur les vols arrivant et partant d'un aéroport particulier.
8. Solutions
I) Quiz :
1 : b, En conception architecturale, vous concevez une organisation système répondant aux exigences
fonctionnelles et non fonctionnelles d'un système.
2 : a, Une vue physique est implémentée par les ingénieurs système mettant en œuvre le matériel du
système.
3 :d, Le langage UML a été conçu pour décrire les systèmes orientés objet et, au stade de la conception
architecturale, vous voulez souvent décrire les systèmes à un niveau d'abstraction plus élevé.
4 : d, Cette vue est utile pour porter des jugements sur les caractéristiques non fonctionnelles du
système telles que la performance et la disponibilité.
5 : d, L'architecture à haute disponibilité peut être affectée par plusieurs facteurs de conception qui
doivent être maintenus pour garantir qu'aucun point de défaillance unique n'existe dans une telle
conception.
6 : d, Les décisions de conception architecturale comprennent des décisions sur le type d'application,
la distribution du système, les styles architecturaux à utiliser et les façons dont l'architecture doit être
documentée et évaluée.
7 : b, Les systèmes du même domaine ont souvent des architectures similaires qui reflètent les
concepts de domaine.
8 : c, Le modèle Model-View-Controller est la base de la gestion des interactions dans de nombreux
systèmes basés sur le Web.
9 : c, La majorité des systèmes qui utilisent de grandes quantités de données sont organisés autour
d'une base de données ou d'un référentiel partagé.
10 : c, Il est possible de relier les exigences système aux entités dans une vue logique.
137
Chapitre 6: Conception Architecturale
11 : d, Tous ces modèles reflètent la stratégie de base utilisée pour structurer un système.
1) L'architecture peut devoir être conçue avant que les spécifications ne soient écrites pour fournir un
moyen de structurer la spécification et développer simultanément différentes spécifications de
sous-système, pour permettre la fabrication de matériel par des sous-traitants et fournir un modèle
pour l'évaluation du système.
2) L‟architecture proposée :
3) L‟architecture proposée :
4)
C'est un système hybride avec quelques éléments du système hébergé sur un serveur distant et
certains éléments de l'application elle-même.
Vous devez prendre en compte les niveaux dans le système d'information et identifier les
composants qui peuvent être inclus à chaque niveau. Des exemples de ces composants pourraient
être:
138
Chapitre 6: Conception Architecturale
Vous devez ensuite décider quels éléments du système d'information doivent être hébergés sur
l'appareil mobile et lesquels doivent être hébergés à distance.
139
Chapitre
VII
Conception et
Implémentation
des Logiciels
Objectifs
• comprendre les activités les plus importantes dans un processus de
conception général orienté objet;
• comprendre quelques modèles utilisés pour documenter une conception
orientée objet;
• connaître l'idée de patrons de conception et comment ceux-ci sont un
moyen de réutiliser les connaissances et l'expérience de conception;
• parmi les issues de l’implémentation d'un logiciel, on devrait comprendre
la réutilisation de logiciels et le développement de logiciels libres.
Themes couverts
140
Chapitre 7: Conception et Implémentation des Logiciels
Chapitre 7:
Conception et Implémentation
des Logiciels
1. Introduction
Conception et Implémentation
La conception et l‟implémentation du logiciel est une étape dans le processus de génie logiciel à
laquelle un système de logiciel exécutable est développé.
Les activités de conception et de mise en œuvre (réalisation) d‟un logiciel sont toujours entrelacées.
La conception de logiciels est une activité créative dans laquelle vous identifiez les
composants logiciels et leurs relations, en fonction des exigences du client.
La mise en œuvre est le processus de réalisation de la conception comme un programme.
Construire ou acheter
Dans un large éventail de domaines, il est maintenant possible d'acheter des systèmes sur l‟étagère
(Commercial Off-The-Shelf ou COTS systems) qui peut être adapté aux besoins des utilisateurs.
Par exemple, si vous souhaitez mettre en œuvre un système de dossiers médicaux, vous
pouvez acheter un paquet qui est déjà utilisé dans les hôpitaux. Il peut être moins cher et plus
rapide à utiliser cette approche plutôt que de développer un système dans un langage de
programmation classique.
Lorsque vous développez une application de cette manière, le processus de conception se préoccupe
de l'utilisation des fonctionnalités de configuration de ce système pour répondre aux exigences du
système.
141
Chapitre 7: Conception et Implémentation des Logiciels
de conception qui se basent sur un processus de décomposition Top-Down des fonctions (ex. SADT)
2) Méthodes systémiques (des années 80): double démarche = Modélisation des données +
modélisation des traitements (Merise, Axial,...).
3) L'émergence des méthodes orientée-objet (1990-1995)
Plus de 50 méthodes objet sont apparues durant cette période (Booch (Grady Booch), Classe-Relation,
13
Fusion, HOOD, OMT (James Rumbaugh), OOA, OOD, OOM, OOSE (Ivar Jacobson)…)
Les processus structurés de conception orientée objet impliquent le développement d'un certain
nombre de différents modèles de système.
Ils nécessitent beaucoup d'efforts pour le développement et la maintenance de ces modèles et, pour
les petits systèmes, cela peut ne pas être rentable.
Cependant, pour les grands systèmes développés par différents groupes, les modèles de conception
constituent un mécanisme de communication important.
Etapes du processus
Il existe une variété de différents processus de conception orientée objet qui dépendent de
13
(1) et (2): approche descendante, 3: approche ascendante
142
Chapitre 7: Conception et Implémentation des Logiciels
Le processus illustré dans ce chapitre utilise une conception d'une station météorologique dans le
désert (ou zone sauvage).
Comprendre les relations entre le logiciel en cours de conception et son environnement externe est
essentiel pour décider comment fournir les fonctionnalités requises du système et comment structurer
le système pour communiquer avec son environnement.
La compréhension du contexte vous permet également d'établir les limites du système. La mise des
limites du système vous permet de décider quelles fonctions sont implémentées dans le système en
cours de conception et quelles fonctions sont présentes dans d'autres systèmes associés.
Pour l‟exemple de station météo, vous devez décider comment la fonctionnalité est distribuée entre le
système de contrôle pour toutes les stations météorologiques et le logiciel intégré dans la station
météorologique elle-même.
Le modèle de contexte du système et les modèles d'interaction présentent des vues complémentaires
des relations entre un système et son environnement:
6. 1) Un modèle de contexte du système est un modèle structurel qui démontre les autres
systèmes de l'environnement du système en cours de développement.
7. 2) Un modèle d'interaction est un modèle dynamique qui montre comment le système
interagit avec son environnement tel qu'il est utilisé.
Le modèle de contexte d'un système peut être représenté en utilisant des associations. Les
associations montrent simplement qu'il existe des relations entre les entités impliquées dans
l'association. La nature des relations est maintenant spécifiée. Vous pouvez donc documenter
l'environnement du système en utilisant un diagramme simple, en montrant les entités du système et
leurs associations.
143
Chapitre 7: Conception et Implémentation des Logiciels
Lorsque vous modélisez les interactions d'un système avec son environnement, vous devez utiliser
une approche abstraite qui n'inclut pas trop de détails. Une façon de faire est d'utiliser un modèle de cas
d'utilisation.
Une figure « Stick » est utilisé dans l'UML pour représenter d'autres
systèmes ainsi que des utilisateurs humains
Chacun de ces cas d'utilisation doit être décrit en langage naturel structuré. Cela aide les concepteurs
à identifier les objets dans le système et leur permet de comprendre ce que le système est censé faire.
144
Chapitre 7: Conception et Implémentation des Logiciels
Description The weather station sends a summary of the weather data that has been
collected from the instruments in the collection period to the weather
information system. The data sent are the maximum, minimum, and
average ground and air temperatures; the maximum, minimum, and
average air pressures; the maximum, minimum, and average wind
speeds; the total rainfall; and the wind direction as sampled at
five-minute intervals.
Comments Weather stations are usually asked to report once per hour but this
frequency may differ from one station to another and may be modified in
the future.
2. Conception architecturale
Une fois les interactions entre le système et son environnement sont comprises, vous utilisez ces
informations pour la conception de l'architecture du système.
Vous identifiez les principaux éléments qui composent le système et leurs interactions, et peut ensuite
organiser les composants à l'aide d'un modèle architectural (patron) comme un modèle en couches ou
client-serveur.
La station météo est composée de sous-systèmes indépendants qui communiquent par la diffusion de
messages sur une infrastructure commune (Ceci est un autre style architectural couramment utilisé).
Chaque sous-système écoute les messages sur cette infrastructure et récupère les messages qui leur
145
Chapitre 7: Conception et Implémentation des Logiciels
sont destinés.
Par exemple, lorsque le sous-système de communication reçoit une commande de contrôle, telle que
shutdown, la commande est récupérée par chacun des autres sous-systèmes, qui se ferment ensuite
correctement. Le principal avantage de cette architecture est qu'il est facile de prendre en charge
différentes configurations de sous-systèmes car l'expéditeur d'un message n'a pas besoin d'adresser le
message à un sous-système particulier.
La Figure suivante montre l'architecture du sous-système de collecte de données « Data Collection »,
qui est incluse dans la Figure précédente. Les objets « Transmitter » et « Receiver » sont concernés par
la gestion des communications et l'objet « WeatherData » encapsule les informations collectées par les
instruments et transmises au système d'informations météorologiques. Cet arrangement suit le modèle
classique de producteur-consommateur.
Identifier les classes d'objets est souvent une partie difficile dans la conception orientée objet.
Il n'y a aucune «formule magique» pour l'identification de l'objet. Elle s‟appuie sur la compétence,
l'expérience
146
Chapitre 7: Conception et Implémentation des Logiciels
L‟identification de l'objet est un processus itératif. Il est peu probable de l‟obtenir dès la première
fois.
À ce stade du processus de conception, vous devriez avoir quelques idées sur les objets essentiels du
système que vous concevez. Au fur et à mesure que votre compréhension de la conception se
développe, vous affinez ces idées sur les objets du système.
La description du cas d'utilisation aide à identifier les objets et les opérations dans le système.
Avec ces objets en tête, vous pouvez commencer à identifier les classes d'objets dans le système.
Approches d'identification
1) Utiliser une analyse grammaticale basée sur une description en langue naturelle du système à
construire (Abbott, 1983). Les objets et les attributs sont des noms; les opérations ou les services sont
des verbes.
2) Utiliser des entités tangibles dans le domaine d'application telles que les avions, les rôles tels que
gérant ou médecin, les événements tels que les demandes, les interactions telles que les réunions, les
lieux tels que les bureaux, les unités organisationnelles telles que les entreprises, les données telles que
les informations capturées, et ainsi de suite. (Coad and Yourdon, 1990, Shlaer et Mellor, 1988,
Wirfs-Brock et al., 1990).
3) Utilisez une approche comportementale et identifier les objets en fonction de ce qui participe à un
comportement.
4) Utiliser une analyse basée sur des scénarios où différents scénarios d'utilisation du système sont
identifiés et analysés. Comme chaque scénario est analysé, l'équipe responsable de l'analyse doit
identifier les objets, les attributs et les opérations requis (Beck et Cunningham, 1989).
En pratique, vous devez utiliser plusieurs sources de connaissances pour découvrir des classes
d'objets.
Les classes d'objets, les attributs et les opérations initialement identifiés à partir de la description
informelle du système peuvent constituer un point de départ pour la conception.
Ces informations peuvent être collectées à partir de documents d'exigences, de discussions avec les
utilisateurs ou d'analyses de systèmes existants.
L'identification de la classe d'objets dans le système de station météorologique peut être basée sur le
matériel tangible et les données du système:
147
Chapitre 7: Conception et Implémentation des Logiciels
système.
Station météo
L'interface de base de la station météo avec son environnement. Il reflète donc les
interactions identifiées dans le modèle de cas d'utilisation.
Données météo
Encapsule les données résumées des instruments.
La classe d'objets WeatherStation fournit l'interface de base de la station météo avec son
environnement. Ses opérations reflètent les interactions illustrées dans la figure précédente. Dans ce
cas, une seule classe d'objets est utilisée pour encapsuler toutes ces interactions, mais dans d'autres
conceptions, vous pouvez concevoir l'interface système en plusieurs classes différentes.
La classe d'objets WeatherData est responsable du traitement de la commande de rapport météo. Il
envoie les données résumées des instruments de la station météorologique au système d'information
météorologique.
Les classes d'objets Thermometer, Anemometer, et Barometer sont directement liées aux instruments
du système. Ils reflètent les entités matérielles tangibles dans le système et les opérations sont
concernées par le contrôle de ce matériel. Ces objets fonctionnent de manière autonome pour collecter
des données à la fréquence spécifiée et stocker les données collectées localement. Ces données sont
fournies à l'objet WeatherData sur demande.
148
Chapitre 7: Conception et Implémentation des Logiciels
Vous utilisez la connaissance du domaine d'application pour identifier d'autres objets, attributs et
services. Nous savons que les stations météorologiques sont souvent situées dans des endroits éloignés
et comprennent divers instruments qui parfois vont mal. Les pannes d'instrument doivent être signalées
automatiquement.
Cela implique que vous avez besoin d'attributs et d'opérations pour vérifier le bon fonctionnement
des instruments. Il y a beaucoup de stations météorologiques à distance, donc chaque station
météorologique devrait avoir son propre identifiant.
À ce stade du processus de conception, vous devriez vous concentrer sur les objets eux-mêmes, sans
penser à la façon dont ils pourraient être implémentés.
Une fois que vous avez identifié les classes d‟objets, affinez la conception de l'objet. Vous recherchez
des fonctionnalités communes, puis concevez la hiérarchie d'héritage pour le système.
Par exemple, vous pouvez identifier une super-classe Instrument, qui définit les caractéristiques
communes à tous les instruments, tels qu'un identifiant, et les opérations « get » et « test ». Vous
pouvez également ajouter de nouveaux attributs et opérations à la super-classe, tels qu'un attribut qui
conserve la fréquence de la collecte de données.
4. Modèles de conception
Les modèles de conception ou de système montrent les objets ou les classes d'objets dans un système.
Ils montrent également les associations et les relations entre ces entités.
Ces modèles sont le pont entre les exigences du système et l‟implémentation. Ils doivent être
abstraits afin que les détails inutiles ne cachent pas les relations entre eux et les exigences du système.
Cependant, ils doivent également inclure suffisamment de détails pour permettre aux programmeurs de
prendre des décisions de mise en œuvre.
Généralement, vous contournez ce type de conflit en développant des modèles à différents niveaux
de détail.
Où il y a des liens étroits entre les ingénieurs de spécification des exigences, les concepteurs et les
programmeurs, alors les modèles abstraits peuvent être tout ce qui est exigé.
Des décisions de conception spécifiques peuvent être prises lors de l‟implémentation du système,
avec des problèmes résolus par des discussions informelles.
Lorsque les liens entre les ingénieurs de spécification du système, les concepteurs et les
programmeurs sont indirects (par exemple, lorsqu'un système est conçu dans une partie d'une
organisation mais implémenté ailleurs), des modèles plus détaillés sont susceptibles d'être nécessaires.
Une étape importante dans le processus de conception consiste donc à décider des modèles de
conception dont vous avez besoin et le niveau de détail requis dans ces modèles.
149
Chapitre 7: Conception et Implémentation des Logiciels
traitement de données séquentiel (data-processing system) d'une manière différente d'un système en
temps réel embarqué (embedded real-time system), et donc vous aurez besoin de différents modèles de
conception.
Le langage UML prend en charge 13 types de modèles différents, mais vous utilisez rarement tous
ces modèles.
Minimiser le nombre de modèles produits réduit les coûts de conception et le temps nécessaire pour
terminer le processus de conception.
Lorsque vous utilisez le langage UML pour développer une conception, vous développez
normalement deux types de modèle de conception:
1) Modèles structurels, qui décrivent la structure statique du système en utilisant des classes
d'objets et leurs relations. Les relations importantes qui peuvent être documentées à ce stade
sont les relations de généralisation (héritage), les relations uses/used-by et les relations de
composition.
2) Modèles dynamiques, qui décrivent la structure dynamique du système et montrent les
interactions entre les objets du système. Les interactions qui peuvent être documentées
incluent la séquence des demandes de service effectuées par les objets et les changements
d'état qui sont déclenchés par ces interactions d'objet.
Dans les premières étapes du processus de conception, SOMMERVILLE pense qu'il y a trois
modèles qui sont particulièrement utiles pour ajouter des détails aux cas d'utilisation et aux modèles
architecturaux:
1) Modèles de sous-système, qui montrent les regroupements logiques des classes d'objets
dans des sous-systèmes cohérents. Ceux-ci sont représentés en utilisant une forme de
diagramme de classes avec chaque sous-système représenté sous la forme d'un package avec
des classes d‟objets incluses. Les modèles de sous-système sont des modèles statiques
(structurels).
2) Modèles de séquence, qui montrent la séquence des interactions de l'objet. Ceux-ci sont
représentés à l'aide d'un diagramme UML de séquence ou de collaboration. Les modèles de
séquence sont des modèles dynamiques.
3) Modèles de machine à états, qui montrent comment les objets individuels changent d'état
en réponse aux événements. Ceux-ci sont représentés dans l'UML en utilisant des
diagrammes d'états. Les modèles de machines d'état sont des modèles dynamiques
Modèles de sous-systeme
Un modèle de sous-système est un modèle statique utile car il montre comment une conception est
organisée en groupes d'objets logiquement liés (comme dans la figure du slide #20).
En plus des modèles de sous-systèmes, vous pouvez également concevoir des modèles de classes
d'objets détaillés, montrant tous les objets dans les systèmes et leurs associations (héritage,
généralisation, agrégation, etc.).
Cependant, il y a un risque à faire trop de modélisation. Vous ne devriez pas prendre de décisions
détaillées sur la mise en œuvre qui devrait vraiment être laissée aux programmeurs du système.
150
Chapitre 7: Conception et Implémentation des Logiciels
Modèles de séquence
Les modèles de séquence sont des modèles dynamiques qui décrivent, pour chaque mode
d'interaction, la séquence des interactions d'objets qui ont lieu.
Lors de la documentation d'une conception, vous devez produire un modèle de séquence pour chaque
interaction significative. Si vous avez développé un modèle de cas d'utilisation, il devrait y avoir un
modèle de séquence pour chaque cas d'utilisation que vous avez identifié.
Modèles de séquences montrent la séquence des interactions d'objets qui ont lieu
Les objets sont disposés horizontalement dans la partie supérieure;
Le temps est représenté verticalement et les modèles sont lues de haut en bas;
Les interactions sont représentées par des flèches marquées, différents styles de flèche
représentent différents types d'interaction;
Un mince rectangle dans une ligne de vie de l'objet représente le moment où l'objet est l'objet
de contrôle dans le système.
Le diagramme précédent montre la séquence des interactions qui se produisent lorsqu'un système
externe demande les données résumées de la station météorologique. Vous lisez les diagrammes de
séquence de haut en bas:
1. The SatComms object receives a request from the weather information system to collect a
weather report from a weather station. It acknowledges receipt of this request. The stick
arrowhead on the sent message indicates that the external system does not wait for a reply
but can carry on with other processing.
2. SatComms sends a message to WeatherStation, via a satellite link, to create a summary of
the collected weather data. Again, the stick arrowhead indicates that SatComms does not
suspend itself waiting for a reply.
3. WeatherStation sends a message to a Commslink object to summarize the weather data. In
this case, the squared-off style of arrowhead indicates that the instance of the
WeatherStation object class waits for a reply.
4. Commslink calls the summarize method in the object WeatherData and waits for a reply.
151
Chapitre 7: Conception et Implémentation des Logiciels
5. The weather data summary is computed and returned to WeatherStation via the Commslink
object.
6. WeatherStation then calls the SatComms object to transmit the summarized data to the
weather information system, through the satellite communications system.
Les objets SatComms et WeatherStation peuvent être implémentés en tant que processus concurrents,
dont l'exécution peut être suspendue et reprise. L'instance d'objet SatComms écoute les messages du
système externe, décode ces messages et lance les opérations de la station météo.
Les diagrammes de séquence sont utilisés pour modéliser le comportement combiné d'un groupe
d'objets, mais vous pouvez également résumer le comportement d'un objet ou d'un sous-système en
réponse à des messages et des événements.
Pour ce faire, vous pouvez utiliser un modèle de machine d'état qui montre comment l'instance
d'objet change d'état en fonction des messages qu'il reçoit. L'UML comprend des diagrammes d'états,
initialement inventés par Harel (1987) pour décrire les modèles de machine d'état.
Les diagrammes d'états sont utilisés pour montrer comment les objets répondent aux différentes
demandes de service et les transitions d'état déclenchées par ces demandes.
Les diagrammes d'états sont des modèles utiles de haut niveau d'un système ou d‟un comportement
d'exécution d‟un objet.
Vous n„avez pas généralement besoin d‟un diagramme d'état pour tous les objets dans le système.
Beaucoup des objets dans un système sont relativement simples et un modèle d'état ajoute des détails
inutiles à la conception.
152
Chapitre 7: Conception et Implémentation des Logiciels
La figure précédente est un diagramme d'état du système de station météorologique qui montre
comment il répond aux demandes de divers services.
5. Spécification d'interface
Une partie importante de tout processus de conception est la spécification des interfaces entre les
composants de la conception. Vous devez spécifier des interfaces pour que les objets et les
sous-systèmes puissent être conçus en parallèle. Une fois qu'une interface a été spécifiée, les
développeurs d'autres objets peuvent supposer que l'interface sera implémentée
Vous ne devez pas inclure les détails de la représentation des données dans une conception
d'interface, car les attributs ne sont pas définis dans une spécification d'interface. Cependant, vous
devez inclure des opérations pour accéder et mettre à jour les données. Comme la représentation des
données est masquée, elle peut être facilement modifiée sans affecter les objets qui utilisent ces
données. Cela conduit à une conception qui est intrinsèquement plus maintenable. Par exemple, une
représentation de tableau d'une pile peut être changée en une représentation de liste sans affecter les
autres objets qui utilisent la pile.
En revanche, il est souvent judicieux d'exposer les attributs dans un modèle de conception statique,
car c'est le moyen le plus compact d'illustrer les caractéristiques essentielles des objets.
Il n'y a pas de simple relation 1:1 entre les objets et les interfaces. Le même objet peut avoir plusieurs
153
Chapitre 7: Conception et Implémentation des Logiciels
interfaces, dont chacune est un point de vue sur les opérations qu'il fournit. Ceci est pris en charge
directement dans Java, où les interfaces sont déclarées séparément des objets et des interfaces
d'implémentation des objets. De même, un groupe d'objets peut être accessible via une seule interface.
La Figure suivante montre deux interfaces qui peuvent être définies pour la station météorologique.
L'interface de gauche est une interface de création de rapports qui définit les noms d'opération utilisés
pour générer les rapports de météo et d'état. Ceux-ci correspondent directement aux opérations dans
l'objet WeatherStation. L'interface de contrôle à distance fournit quatre opérations, qui sont mappées
sur une méthode unique dans l'objet WeatherStation. Dans ce cas, les opérations individuelles sont
codées dans la chaîne de commande associée à la l‟opération remoteControl, illustrée à la Figure
précédente.
Un patron de conception est un moyen de réutiliser des connaissances abstraites sur un problème et
sa solution.
Il devrait être suffisamment abstrait pour être réutilisé dans différents contextes.
Les descriptions de patrons utilisent généralement des caractéristiques orientées objet telles que
l'héritage et le polymorphisme.
“Patterns and Pattern Languages are ways to describe best practices, good designs, and capture
experience in a way that it is possible for others to reuse this experience.”
1. Nom
Un identificateur de motif valable.
2. Description du problème.
3. Description de la solution.
N‟est pas une conception concrète mais un modèle (template) pour une solution de
conception qui peut être instancié de différentes manières.
4. Conséquences
Les résultats et les compromis de l'application du modèle.
1. Nom
154
Chapitre 7: Conception et Implémentation des Logiciels
Observateur.
2. Description
Sépare l'affichage d'état de l'objet de l'objet lui-même.
3. Description du problème
Utilisé lorsque plusieurs affichages d„états sont nécessaires.
4. Description de la solution
Voir la description UML suivante.
5. Conséquences
Les optimisations pour améliorer les performances d'affichage sont impraticables.
Le modèle Observateur
155
Chapitre 7: Conception et Implémentation des Logiciels
Pour utiliser des patrons dans votre conception, vous devez reconnaître que tout problème de
conception vous rencontrez peut avoir un patron associé qui peut être appliqué.
Dire à plusieurs objets que l'état d'un autre objet a changé (patron Observateur).
Ranger les interfaces vers un certain nombre d'objets connexes qui ont souvent été
développés de manière incrémentale (patron Façade).
Fournir un moyen standard d'accéder aux éléments d'une collection, quelle que soit la
manière dont cette collection est implémentée (patron Iterator).
Permettre la possibilité d'étendre la fonctionnalité d'une classe existante au moment de
156
Chapitre 7: Conception et Implémentation des Logiciels
GoF ont explicité trois grandes classes de patrons dans leur livre, chacune spécialisée dans :
23 patrons ont été définis dans ces classes (le détail sera donné dans le 2S, Module: Spécification et
Conception des logiciels)
4. Issues de l’Implémentation
Problèmes de l’Implémentation
La focalisation ici n‟est pas sur la programmation, même si c‟est évidemment important, mais sur
d'autres issues d‟implémentation qui sont souvent non couverts dans les textes de programmation:
Réutilisation: la plupart des logiciels modernes est construit en réutilisant des composants
ou des systèmes existants. Lorsque vous développez des logiciels, vous devez utiliser autant
que possible de code existant.
Gestion de la configuration: Au cours du processus de développement, vous devez garder
la trace des nombreuses versions différentes de chaque composant logiciel dans un système
157
Chapitre 7: Conception et Implémentation des Logiciels
de gestion de configuration.
Développement hôte-cible: Logiciel de production n‟exécute pas habituellement sur le
même ordinateur de développement de logiciel. Plutôt, vous développez sur un ordinateur (le
système hôte) et de l'exécuter sur un ordinateur séparé (le système cible).
Réutilisation (reuse)
Des années 1960 aux années 1990, la plupart des nouveaux logiciels ont été développé à partir de
zéro, en écrivant tout le code dans un langage de programmation de haut niveau.
La seule réutilisation importante des logiciels était la réutilisation des fonctions et des objets
dans les bibliothèques des langages de programmation.
Les coûts et la pression du calendrier signifient que cette approche devient de plus en plus non
viable, en particulier pour les systèmes commerciaux et basés sur Internet.
Une approche du développement fondée autour de la réutilisation des logiciels existants a émergé et
est maintenant généralement utilisé pour les entreprises et logiciels scientifiques.
Niveaux de réutilisation
Réutilisation de logiciels
158
Chapitre 7: Conception et Implémentation des Logiciels
Coûts de réutilisation
Les coûts du temps passé à chercher des logiciels à réutiliser et à évaluer s'ils répondent ou non à vos
besoins.
Le cas échéant, les coûts d'achat du logiciel réutilisable. Pour les grands systèmes prêts à l'emploi,
ces coûts peuvent être très élevés.
Les coûts d'adaptation et de configuration des composants ou des systèmes logiciels réutilisables
pour refléter les exigences du système que vous développez.
Les coûts d'intégration des éléments logiciels réutilisables entre eux (si vous utilisez des logiciels de
différentes sources) et avec le nouveau code que vous avez développé.
Gestion de la configuration
La gestion de la configuration est le nom donné au processus général de gestion d'un système logiciel
en évolution.
Le but de la gestion de la configuration est de soutenir le processus d'intégration du système afin que
tous les développeurs puissent accéder au code et aux documents du projet de manière contrôlée,
découvrir les modifications apportées, et compiler et lier les composants pour créer un système.
Gestion des versions, où un support est fourni pour suivre les différentes versions des composants
logiciels. Les systèmes de gestion de versions incluent des fonctionnalités permettant de coordonner le
développement de plusieurs programmeurs.
Intégration du système, où la prise en charge est fournie pour aider les développeurs à définir les
versions de composants utilisées pour créer chaque version d'un système. Cette description est ensuite
utilisée pour construire automatiquement un système en compilant et reliant les composants requis.
Suivi des problèmes, où le soutien est fourni pour permettre aux utilisateurs de signaler les bugs et
autres problèmes, et de permettre à tous les développeurs de voir qui travaille sur ces problèmes et
quand ils sont fixés.
159
Chapitre 7: Conception et Implémentation des Logiciels
Développement Hôte-Cible
La plupart des logiciels sont développés sur un ordinateur (l'hôte),< mais fonctionnent sur une
machine séparée (la cible).
Un compilateur intégré et un système d'édition orienté vers la syntaxe qui vous permet de créer,
d'éditer et de compiler du code.
Des outils d'édition graphiques, tels que des outils pour éditer des modèles UML.
Des outils de test, tels que Junit, qui peuvent exécuter automatiquement un ensemble de tests sur une
nouvelle version d'un programme.
Des outils de support de projet qui vous aident à organiser le code pour différents projets de
développement.
Les outils de développement logiciel sont souvent regroupés pour créer un environnement de
développement intégré (IDE).
Un IDE est un ensemble d'outils logiciels qui prennent en charge différents aspects du
développement logiciel, dans un cadre commun et une interface utilisateur.
Les IDE sont créés pour prendre en charge le développement dans un langage de programmation
160
Chapitre 7: Conception et Implémentation des Logiciels
spécifique tel que Java. L‟IDE du langage peut être développé spécialement, ou peut être une
instanciation d'un IDE à usage général, avec des outils de support de langage spécifiques.
Si un composant est conçu pour une architecture matérielle spécifique ou repose sur un autre système
logiciel, il doit évidemment être déployé sur une plate-forme fournissant le support matériel et logiciel
requis.
Les systèmes à haute disponibilité peuvent nécessiter le déploiement de composants sur plusieurs
plates-formes. Cela signifie que, en cas de défaillance de la plate-forme, une implémentation alternative
du composant est disponible.
Si le trafic de communication entre les composants est important, il est généralement judicieux de les
déployer sur la même plate-forme ou sur des plates-formes physiquement proches les unes des autres.
Cela réduit le délai entre l'envoi d'un message par un composant et sa réception par un autre.
Le développement open source est une approche du développement de logiciels dans laquelle le code
source d'un système logiciel est publié et les volontaires sont invités à participer au processus de
développement.
Ses racines sont dans la Free Software Foundation (www.fsf.org), qui préconise que le code source
ne devrait pas être propriétaire mais plutôt être toujours disponible pour les utilisateurs à examiner et
modifier comme ils le souhaitent.
Les logiciels libres ont étendu cette idée en utilisant Internet pour recruter une plus grande population
de développeurs bénévoles. Beaucoup d'entre eux sont aussi des utilisateurs du code.
Le produit open source le plus connu est, bien sûr, le système d'exploitation Linux qui est largement
utilisé comme système serveur et, de plus en plus, comme environnement de bureau.
D'autres produits open source importants sont Java, le serveur web Apache et le système de gestion
de base de données mySQL.
Le produit en cours de développement doit-il utiliser des composants open source?
Une approche open source devrait-elle être utilisée pour le développement du logiciel?
De plus en plus de sociétés de produits utilisent une approche open source pour le développement.
Leur modèle métier ne repose pas sur la vente d'un produit logiciel, mais sur la vente de support pour
ce produit.
161
Chapitre 7: Conception et Implémentation des Logiciels
Ils croient que l'implication de la communauté open source permettra de développer des logiciels à
moindre coût, plus rapidement et créera une communauté d'utilisateurs pour le logiciel.
Un principe fondamental du développement open-source est que le code source doit être disponible
gratuitement, cela ne signifie pas que n'importe qui peut faire ce qu'il veut avec ce code.
Légalement, le développeur du code (soit une entreprise ou un individu) possède toujours le
code. Ils peuvent imposer des restrictions sur la façon dont il est utilisé en incluant des
conditions juridiquement contraignantes dans une licence logicielle open source.
Certains développeurs open source pensent que si un composant open source est utilisé pour
développer un nouveau système, alors ce système devrait également être open source.
D'autres sont prêts à autoriser l'utilisation de leur code sans cette restriction. Les systèmes
développés peuvent être propriétaires et vendus comme des systèmes à source fermée.
Modèles de License
La licence publique générale GNU (GPL). Il s'agit d'une licence dite «réciproque» qui signifie que si
vous utilisez un logiciel open source sous licence GPL, vous devez rendre ce logiciel open source.
La licence publique générale limitée (LGPL) de GNU est une variante de la licence GPL dans
laquelle vous pouvez écrire des composants liés au code source libre sans avoir à publier la source de
ces composants.
La licence Berkley Standard Distribution (BSD). Il s'agit d'une licence non réciproque, ce qui signifie
que vous n'êtes pas obligé de republier les modifications ou modifications apportées au code source
ouvert. Vous pouvez inclure le code dans les systèmes propriétaires vendus.
Établir un système de gestion des informations sur les composants open-source téléchargés et
utilisés.
Tenez-vous au courant des différents types de licences et comprenez comment un composant est sous
licence avant d'être utilisé.
6. Points clés
La conception et la mise en œuvre de logiciels sont des activités entrelacées. Le niveau de détail de
la conception dépend du type de système et si vous utilisez une approche planifiée ou agile.
Le processus de conception orientée objet comprend des activités permettant de concevoir
l'architecture du système, d'identifier les objets dans le système, de décrire la conception à l'aide de
différents modèles d'objets et de documenter les interfaces des composants.
162
Chapitre 7: Conception et Implémentation des Logiciels
Une gamme de modèles différents peut être produite au cours d'un processus de conception orienté
objet. Ceux-ci incluent des modèles statiques (modèles de classe, modèles de généralisation,
modèles d'association) et des modèles dynamiques (modèles de séquence, modèles de machine
d'état).
Les interfaces de composants doivent être définies précisément pour que d'autres objets puissent les
utiliser. Un stéréotype d'interface UML peut être utilisé pour définir des interfaces.
Lorsque vous développez un logiciel, vous devez toujours envisager la possibilité de réutiliser les
logiciels existants, que ce soit en tant que composants, services ou systèmes complets.
La gestion de la configuration est le processus de gestion des modifications apportées à un système
logiciel en évolution. Il est essentiel lorsqu'une équipe de personnes coopère pour développer des
logiciels.
La plupart des développements de logiciels sont des développements de cibles d'hôtes. Vous utilisez
un IDE sur une machine hôte pour développer le logiciel, qui est transféré à une machine cible pour
exécution.
Le développement Open Source consiste à rendre le code source d'un système accessible au public.
Cela signifie que de nombreuses personnes peuvent proposer des modifications et des améliorations
au logiciel.
7. Exercices
I) Quiz :
3. Lequel des mécanismes suivants permet à plusieurs objets d'une hiérarchie de classes d'avoir
des méthodes différentes portant le même nom?
a) Agrégation
b) Polymorphisme
c) Héritage
d) Tous les mentionnés
163
Chapitre 7: Conception et Implémentation des Logiciels
5. Lequel des points suivants liés au développement orienté objet (OOD) est vrai?
a) OOA est concerné par le développement d'un modèle objet du domaine d'application
b) OOD est concerné par le développement d'un modèle de système orienté objet pour
mettre en œuvre les exigences.
c) a et b
d) Aucun des mentionnés
6. Comment la généralisation est-elle implémentée dans les langages de programmation orientés
objet?
a) Héritage
b) Polymorphisme
c) Encapsulation
d) Les classes abstraites
8. L‟objet qui recueille des données sur la demande plutôt que de manière autonome est connu
comme :
a) Objet actif
b) Objet passif
c) Plusieurs instances
d) Aucun des mentionnés
10. Laquelle des méthodes OOD suivantes incorpore à la fois un «processus de développement
micro» et un «processus de développement macro»?
a) Méthode Booch
b) Méthode de Rumbaugh
c) Méthode de Wirfs-Brock
d) Méthode Coad et Yourdon
11. Grady Booch, James Rumbaugh et Ivar Jacobson ont combiné les meilleures caractéristiques
de leur analyse orientée objet individuelle dans une nouvelle méthode pour la conception
orientée objet connue sous le nom de
a) HTML
164
Chapitre 7: Conception et Implémentation des Logiciels
b) XML
c) UML
d) SGML
12. Lequel des modèles suivants est un modèle dynamique qui montre comment le système
interagit avec son environnement tel qu'il est utilisé?
a) le modèle de contexte du système
b) le modèle d'interaction
c) modèle environnemental
d) à la fois le contexte du système et l'interaction
13. Lequel des modèles suivants est un modèle structurel qui illustre les autres systèmes dans
l'environnement du système en cours de développement?
a) le modèle de contexte du système
b) le modèle d'interaction
c) modèle environnemental
d) à la fois le contexte du système et l'interaction
15. In chapter 7, if the system state is Shutdown then it can respond to which of the following
message?
a) restart()
b) reconfigure()
c) powerSave()
d) all of the mentioned
16. In chapter 7, which message is received so that the system moves to the Testing state, then the
Transmitting state, before returning to the Running state?
a) signalStatus()
b) remoteControl()
c) reconfigure()
d) reportStatus()
165
Chapitre 7: Conception et Implémentation des Logiciels
a) True
b) False
19. Le développement open source consiste à rendre le code source d'un système accessible au
public.
a) Vrai
b) Faux
II) Exercices: Conception avec UML
Exercice 1 :
a) À l'aide de la notation structurée illustrée dans le chapitre 7 (slide #18), spécifiez les cas
d'utilisation de la station météo « Report Status » et « Reconfigure ». Vous devez faire
des hypothèses raisonnables sur la fonctionnalité requise ici.
b) Supposons que le système Mentcare soit développé en utilisant une approche orientée
objet. Dessinez un diagramme de cas d'utilisation indiquant au moins six cas d'utilisation
possibles pour ce système.
Exercice 2 :
En utilisant la notation graphique UML pour les classes d'objets, concevoir les classes d'objets
suivantes, identifier les attributs et les opérations. Utilisez votre propre expérience pour
décider sur les attributs et les opérations qui doivent être associés à ces classes d‟objets.
Un système de messagerie sur un téléphone mobile ou une tablette
Une imprimante pour un ordinateur personnel
Un système stéréo personnel
Un compte bancaire
Un catalogue de bibliothèque
Exercice 3 :
En vue de développer une conception orientée objet pour le système suivant:
« Une station de remplissage (station d'essence, gas station) doit être mise en place pour un
fonctionnement entièrement automatisé. Les conducteurs glissent leur carte de crédit via un lecteur
connecté à la pompe; la carte est contrôlée par la communication avec un ordinateur de société de crédit
(par exemple, une banque), et une limite de carburant est établie. Le conducteur peut alors prendre le
carburant nécessaire. Lorsque la livraison de carburant est terminée et le tuyau de la pompe est retourné
à son étui, la carte de crédit sur le compte du conducteur est débitée du coût du carburant pris. La carte
de crédit est retournée après le débit. Si la carte est invalide, la pompe la retourne sans distribuer le
carburant».
Exercice 4 :
Soit le système suivant :
166
Chapitre 7: Conception et Implémentation des Logiciels
« Un système d‟agenda de groupe et de gestion du temps (group diary and time management system)
est destiné à soutenir le calendrier des réunions et des rendez-vous dans un groupe de collègues.
Lorsque un rendez-vous doit être fait et qui implique un certain nombre de personnes, le système
trouve un emplacement commun dans chacun de leurs agendas et organise le rendez-vous pour ce
moment. Si aucun emplacement commun n‟est disponible, il interagit avec l'utilisateur pour
réorganiser son agenda personnel pour faire place au rendez-vous.»
1. Donner un diagramme de séquence montrant les interactions d'objets dans ce système
d'agenda de groupe quand un groupe de personnes se sont planifiés pour une rencontre.
2. Proposer un diagramme UML d‟état montrant les changements d'état possibles pour
l‟agenda de groupe.
8. Solutions
I) Quiz :
167
Chapitre 7: Conception et Implémentation des Logiciels
19 : a, Cela signifie que de nombreuses personnes peuvent proposer des modifications et des améliorations au
logiciel.
II) Exercices
Exercice 1 :
a) System: Weather station
Use case: Report status
Actors: Weather information system
Data: The weather station sends a status update to the weather information system giving
information about the status of its instruments, computers and power supply.
Stimulus: The weather information system establishes a satellite link with the weather
station and requests status information.
Response: A status summary is uploaded to the weather information system.
Comments: System status is usually requested at the same time as the weather report.
Exercice 2 :
Il existe de nombreux modèles possibles ici et beaucoup de complexité peuvent être ajoutés aux
objets. Cependant, on présente ci-dessous que des objets simples qui encapsulent les principales
exigences de ces artefacts. Les conceptions possibles de ces objets sont indiquées dans le
diagramme suivant :
168
Chapitre 7: Conception et Implémentation des Logiciels
Exercice 3 :
1. Généralement ce type de systèmes n'a qu'une seule exigence fonctionnelle à faire : Distribuer le
carburant dont le concepteur de ce système devrait assurer la sécurité des cartes de crédit par
l‟exigence d‟introduire le code PIN.
Cas d’utilisation : Distribuer de carburant
Acteurs: Conducteur, Pompe, Société de crédit (par exemple, une banque)
Fonctionnement normal:
Le conducteur glisse sa carte de crédit via un lecteur connecté à la pompe en introduisant un code
PIN par un clavier sur la pompe; la carte est contrôlée premièrement pour vérifier sa validité.
Ensuite, le conducteur est invité à saisir la quantité voulue du carburant, et la carte est contrôlée
encore une fois, par la communication avec un ordinateur de société de crédit (par exemple, une
banque), pour vérifie s’il y a assez de solde sur la compte bancaire du conducteur. Le conducteur
peut alors prendre le carburant demandé. Lorsque la livraison de carburant est terminée et le
conducteur retourne le tuyau de la pompe à son étui et la carte de crédit sur le compte du
conducteur est débitée du coût du carburant pris. La carte de crédit est retournée par la pompe
après le débit au conducteur avec un reçu.
Exception:
169
Chapitre 7: Conception et Implémentation des Logiciels
PIN incorrect : Le conducteur est demandé à recomposer la clé PIN. S’il est incorrect
après trois tentatives, la carte est conservée par la pompe et le conducteur est invité à
demander conseils.
Carte invalide : Carte est retournée par la pompe avec un message d’invalidité.
Solde insuffisant-Transaction terminée. Carte retournée au conducteur
2. Les classes d’objets possibles sont:
170
Chapitre 7: Conception et Implémentation des Logiciels
Le diagramme ci-dessus suppose qu‟il y a trois participants à la réunion, dont l'un est l'organisateur de la
réunion. L'organisateur suggère un «créneau» (window en anglais) où la réunion doit avoir lieu et les
participants seront impliqués. L‟agenda de groupe communique avec les agendas des participants, à leur
tour, de modifier en conséquence le créneau selon la disponibilité. Donc, si l'organisateur suggère un
créneau du 18-19 Juin, l‟agenda du groupe consulte l‟agenda de l'organisateur (D1) pour trouver une
disponibilité sur ces jours. D2 est ensuite mis en contact avec une telle disponibilité.
S‟il n'y a pas de dates mutuellement disponibles pour ce créneau, le système signale cela à l'organisateur.
Sinon, une date est sélectionné, entrée dans tous les agendas et confirmée à l'organisateur.
171
Chapitre
VIII
Test du Logiciel
Objectifs
• comprendre les étapes du test depuis les tests pendant le développement
jusqu'aux tests d'acceptation par les clients du système;
• ont été introduites à des techniques qui vous aident à choisir les cas de
test visant à détecter les défauts du programme;
• comprendre le développement test-first, où vous concevez des tests avant
d'écrire du code et exécutez ces tests automatiquement;
• connaître les différences importantes entre les tests de composants, de
systèmes et de versions, et être au courant des processus et des
techniques de test des utilisateurs.
Themes couverts
• Test de développement
• Développement piloté par les tests
• Test de sortie «Release »
• Test d’utilisateur
172
Chapitre 8: Test du Logiciel
Chapitre 8:
Test du Logiciel
1. Introduction
Le test est une activité importante dont le but est d‟arriver à un produit « zéro défaut ».
173
Chapitre 8: Test du Logiciel
Définition du test
« Program testing can be used to show the presence of bugs, but never to show their absence! »
Edsger Wybe Dijkstra
Selon l‟IEEE: « Le test est l‟exécution ou l‟évaluation d‟un système ou d‟un composant, par des
moyens automatiques ou manuels, pour vérifier qu‟il répond à ses spécifications ou identifier les
différences entre les résultats attendus et les résultats obtenus »
Le test est une recherche d'anomalie dans le comportement de logiciel. C‟est une activité paradoxale:
il vaut mieux que ce ne soit pas la même personne qui développe et qui teste le soft. D‟où le fait qu‟un
bon test est celui qui met à jour une erreur (non encore rencontrée).
Il faut arriver à gérer une suite de test la plus complète possible à un coup minimal.
« Un test réussi n‟est pas un test qui n‟a pas trouvé de défauts, mais un test qui a effectivement
trouvé un défaut (ou une anomalie) » G.J. Myers
Une anomalie (ou défaillance) est un comportement observé différent du comportement attendu ou
spécifié. Exemple. Le 4 juin1996, on a constaté…
On constate une anomalie
Due à un défaut du logiciel
Le défaut est causé généralement par une faute ou erreur (ex. erreur de programmation :
confusion d‟un « I » avec un « 1 »)
Chaîne de causalité : erreur => défaut => anomalie
Nature de l‟erreur: spécification, conception, programmation
174
Chapitre 8: Test du Logiciel
Tests de programme
Les tests visent à montrer qu'un programme fait ce qu'il est censé faire et à découvrir les défauts du
programme avant qu'il ne soit mis en service.
Lorsque vous testez un logiciel, vous exécutez un programme en utilisant des données artificielles.
Vous vérifiez les résultats de l'analyse pour déceler des erreurs, des anomalies ou des informations
sur les attributs non fonctionnels du programme.
Les tests font partie d'un processus de vérification et de validation plus général, qui comprend
également des techniques de validation statique.
Découvrir des situations dans lesquelles le comportement du logiciel est incorrect, indésirable ou non
conforme à sa spécification.
Le test des défauts vise à éliminer les comportements indésirables du système tels que les
pannes système, les interactions indésirables avec d'autres systèmes, les calculs incorrects et
la corruption de données.
Tests de validation
Démontrer au développeur et au client du système que le logiciel répond à ses exigences
Un test réussi montre que le système fonctionne comme prévu.
Tests de défauts
Découvrir les fautes ou les défauts du logiciel lorsque son comportement est incorrect ou non
conforme à sa spécification
Un test réussi est un test qui rend le système incorrect et expose donc un défaut du système.
175
Chapitre 8: Test du Logiciel
Vérification vs Validation
Vérification:
assurer que le système fonctionne correctement selon la spécification du système.
"Are we building the product right” (le bon produit).
Validation:
Assurer que le système fonctionne selon les besoins de l'utilisateur (ce que l'utilisateur
vraiment attend)
"Are we building the right product”. (le produit approprié)
La validation est le moyen de confirmer le respect d‟exigences déterminées pour une
utilisation spécifique prévue.
Validation : Faisons-nous le travail attendu ?
Phase de V&V est souvent plus longue que les phases de spécification, conception et implémentation
réunies
La confiance de V & V
L‟objectif de V & V est d'établir la confiance que le système doit être assez bon pour l'usage prévu.
Ceci dépend du but de système, des attentes des utilisateurs et de l'environnement de marketing
But du logiciel
• Le niveau de confiance dépend de l'importance du logiciel pour une organisation.
Les attentes des utilisateurs
• Les utilisateurs peuvent avoir de faibles attentes vis-à-vis de certains types de
logiciels.
Environnement de marketing
• Mettre un produit sur le marché tôt peut être plus important que de trouver des
défauts dans le programme.
176
Chapitre 8: Test du Logiciel
Inspections et tests
Les inspections se concentrent principalement sur le code source d'un système, mais toute
représentation lisible du logiciel, telle que ses exigences ou un modèle de conception, peut être
inspectée.
Lorsque vous inspectez un système, vous utilisez la connaissance du système, de son domaine
d'application et du langage de programmation ou de modélisation pour détecter les erreurs.
Inspections et tests
Inspections et tests
Inspections de logiciels
Celles-ci impliquent des personnes examinant la représentation du système dans le but de découvrir
des anomalies et des défauts.
Les inspections ne nécessitent pas l'exécution d'un système, elles peuvent donc être utilisées avant
l‟implémentation.
Elles peuvent être appliquées à toute représentation du système (exigences, conception, données de
configuration, données de test, etc.).
Elles ont été montrées pour être une technique efficace pour découvrir des erreurs de programme.
177
Chapitre 8: Test du Logiciel
ultérieures sont dues à une nouvelle erreur ou sont des effets secondaires de l'erreur
d'origine. Parce que l'inspection est un processus statique, vous n'avez pas à vous soucier
des interactions entre les erreurs. Par conséquent, une seule session d'inspection peut
détecter de nombreuses erreurs dans un système.
2. Les versions incomplètes d'un système peuvent être inspectées sans coûts supplémentaires.
Si un programme est incomplet, vous devez développer des tests spécialisés pour tester les
pièces disponibles.
3. Outre la recherche de défauts de programme, une inspection peut également prendre en
compte des attributs de qualité plus larges d'un programme, tels que le respect des normes,
la portabilité et la maintenabilité. Vous pouvez rechercher des inefficacités, des algorithmes
inappropriés et un style de programmation médiocre qui pourraient rendre le système
difficile à maintenir et à mettre à jour.
Les inspections et les tests sont des techniques de vérification complémentaires et non opposées.
Les inspections peuvent vérifier la conformité à une spécification mais ne sont pas conformes aux
exigences réelles du client.
Les inspections ne peuvent pas vérifier certaines caractéristiques non fonctionnelles telles que la
performance, la facilité d'utilisation, etc.
Tests de sortie (Release testing), où une équipe de test distincte teste une version complète du
système avant de la distribuer aux utilisateurs.
Tests d‟utilisateur (User testing), où les utilisateurs potentiels d'un système testent le système dans
leur propre environnement.
2. Tests de Développement
Les tests de développement incluent toutes les activités de test réalisées par l'équipe développant le
système.
178
Chapitre 8: Test du Logiciel
Tests unitaires, où des unités de programme individuelles ou des classes d'objets sont testées.
Les tests unitaires doivent se concentrer sur le test de la fonctionnalité des classes d‟objets ou
des méthodes.
Tests de composants, où plusieurs unités individuelles sont intégrées pour créer des
composants composites. Les tests de composants doivent se concentrer sur le test des
interfaces de composants.
Test du système, où certains ou tous les composants d'un système sont intégrés et le système
est testé dans son ensemble. Les tests du système doivent être axés sur le test des interactions
entre composants.
Tests unitaires
L'héritage rend plus difficile la conception de tests de classes d'objets car les informations à tester ne
sont pas localisées.
Nécessité de définir des cas de test pour « reportWeather », examiner, tester, démarrer et arrêter.
179
Chapitre 8: Test du Logiciel
En utilisant un modèle d'état, identifier les séquences de transitions d'état à tester et les séquences
d'événements à l'origine de ces transitions
Par exemple:
Shutdown -> Running-> Shutdown
Configuring-> Running-> Testing -> Transmitting -> Running
Running-> Collecting-> Running-> Summarizing -> Transmitting -> Running
Tests automatisés
Dans la mesure du possible, les tests unitaires doivent être automatisés pour que les tests soient
exécutés et vérifiés sans intervention manuelle.
Dans les tests unitaires automatisés, vous utilisez un framework d'automatisation de test (tel que
JUnit) pour écrire et exécuter vos tests de programme.
Les frameworks de tests unitaires fournissent des classes de test génériques que vous étendez pour
créer des cas de test spécifiques. Ils peuvent ensuite exécuter tous les tests que vous avez implémentés
et signaler, souvent via une interface graphique, le succès des tests.
Une partie de configuration, dans laquelle vous initialisez le système avec le scénario de test, à savoir
les entrées et les sorties attendues.
Une partie d'assertion, où vous comparez le résultat de l'appel avec le résultat attendu. Si l'assertion
est évaluée à Vraie, le test a été un succès, si elle est fausse, il a échoué.
Les cas de test doivent montrer que, lorsqu'ils sont utilisés comme prévu, le composant que vous
testez fait ce qu'il est censé faire.
S'il y a des défauts dans le composant, ceux-ci devraient être révélés par des cas de test.
Stratégies de test
Tests de partition, dans lesquels vous identifiez des groupes des entrées ayant des caractéristiques
communes et devant être traités de la même manière.
Vous devriez choisir des tests à l'intérieur de chacun de ces groupes.
Test basé sur des lignes directrices, dans lequel vous utilisez des directives de test pour choisir les cas
180
Chapitre 8: Test du Logiciel
de test.
Ces directives reflètent l'expérience antérieure des types d'erreurs que les programmeurs font
souvent lors du développement de composants.
Tests de partition
Les données d'entrée et les résultats de sortie tombent souvent dans différentes classes où tous les
membres d'une classe sont liés.
Chacune de ces classes est une partition d'équivalence ou un domaine dans lequel le programme se
comporte de manière équivalente pour chaque membre de la classe.
Partitionnement d'équivalence
Partitions d'équivalence
Choisissez des entrées qui forcent le système à générer tous les messages d'erreur
181
Chapitre 8: Test du Logiciel
Tester un logiciel avec des séquences qui n'ont qu'une seule valeur.
Dérivez les tests de façon à accéder aux premier, deuxième et dernier éléments de la séquence.
Tests de composants
Les composants logiciels sont souvent des composants composites constitués de plusieurs objets
interagissant.
Par exemple, dans le système de station météorologique, le composant de reconfiguration
inclut des objets qui traitent chaque aspect de la reconfiguration.
Vous accédez aux fonctionnalités de ces objets via l'interface de composant définie.
Le test des composants composites doit donc se concentrer sur la démonstration que l'interface du
composant se comporte conformément à ses spécifications.
Vous pouvez supposer que les tests unitaires sur les objets individuels dans le composant ont
été terminés.
Tests d'interface
Les objectifs sont pour détecter les défauts dus à des erreurs d'interface ou à des hypothèses invalides
sur les interfaces.
Types d'interface
Interfaces de paramètres : Les données transmises d'une méthode ou d'une procédure à une
autre.
Interfaces de mémoire partagée: Le bloc de mémoire est partagé entre les procédures ou les
fonctions.
Interfaces procédurales: Le sous-système encapsule un ensemble de procédures à appeler par
d'autres sous-systèmes.
Interfaces de transmission de messages: Les sous-systèmes demandent des services à partir
d'autres sous-systèmes
182
Chapitre 8: Test du Logiciel
Tests d'interface
Erreurs d'interface
Interface malentendu
Un composant appelant incorpore des hypothèses sur le comportement du composant appelé
qui sont incorrectes.
Erreurs de synchronisation
Le composant appelé et le composant appelant fonctionnent à des vitesses différentes et des
informations obsolètes sont accessibles.
Concevoir des tests pour que les paramètres d'une procédure appelée se trouvent aux extrémités de
leurs plages.
Dans les systèmes de mémoire partagée, modifiez l'ordre dans lequel les composants sont activés.
Test du système
Le test du système pendant le développement implique l'intégration de composants pour créer une
version du système, puis tester le système intégré.
L'objectif du test du système est de tester les interactions entre les composants.
183
Chapitre 8: Test du Logiciel
Les tests du système vérifient que les composants sont compatibles, interagissent correctement et
transfèrent les bonnes données au bon moment sur leurs interfaces.
Au cours des tests du système, les composants réutilisables qui ont été développés séparément et les
systèmes prêts à l'emploi peuvent être intégrés avec des composants nouvellement développés. Le
système complet est ensuite testé.
Les composants développés par différents membres de l'équipe ou sous-équipes peuvent être intégrés
à ce stade. Les tests de système sont un processus collectif plutôt qu'un processus individuel.
Dans certaines entreprises, les tests de système peuvent impliquer une équipe de test
distincte sans implication des concepteurs et des programmeurs.
Les cas d'utilisation développés pour identifier les interactions du système peuvent être utilisés
comme base pour les tests du système.
Chaque cas d'utilisation implique généralement plusieurs composants du système, donc tester le cas
d'utilisation force ces interactions à se produire.
Les diagrammes de séquence associés au cas d'utilisation documentent les composants et les
interactions en cours de test.
Une entrée d'une demande de rapport doit avoir un accusé de réception associé. Un rapport devrait
finalement être renvoyé de la demande.
Vous devez créer des données récapitulatives qui peuvent être utilisées pour vérifier que le
rapport est correctement organisé.
Une requête d'entrée pour un rapport à WeatherStation entraîne la génération d'un rapport
184
Chapitre 8: Test du Logiciel
récapitulatif.
Peut être testé en créant des données brutes correspondant au résumé que vous avez préparé
pour le test de SatComms et en vérifiant que l'objet WeatherStation produit correctement ce
résumé. Ces données brutes sont également utilisées pour tester l'objet WeatherData.
Politiques de test
Un test exhaustif du système est impossible, et donc des politiques de test définissant la couverture
de test système requise peuvent être développées.
Le développement piloté par les tests (TDD, Test-Driven Development) est une approche du
développement de programmes dans laquelle vous entrelacez le test et le développement de code.
Les tests sont écrits avant le code et "passer" les tests est le pilote critique du développement.
Vous développez le code de manière incrémentale, avec un test pour chaque incrément. Vous ne
passez pas à l'incrément suivant tant que le code que vous avez développé n'a pas passé son test.
TDD a été introduit dans le cadre de méthodes agiles telles que Extreme Programming. Cependant, il
peut également être utilisé dans les processus de développement planifiés.
Commencez par identifier l'incrément de fonctionnalité requise. Cela devrait normalement être petit
et facile à implémenter en quelques lignes de code.
Rédigez un test pour cette fonctionnalité et implémenter le en tant que test automatisé.
185
Chapitre 8: Test du Logiciel
Exécutez le test, avec tous les autres tests qui ont été mis en œuvre. Au départ, vous n'avez pas
implémenté la fonctionnalité, donc le nouveau test échouera.
Une fois tous les tests exécutés avec succès, vous passez à l'implémentation du prochain segment de
fonctionnalité.
Couverture de code
Chaque segment de code que vous écrivez a au moins un test associé de sorte que tout le
code écrit a au moins un test.
Débogage simplifié
Quand un test échoue, il devrait être évident où le problème réside. Le code nouvellement
écrit doit être vérifié et modifié.
Documentation système
Les tests eux-mêmes sont une forme de documentation qui décrit ce que le code devrait faire.
Les tests de régression testent le système pour vérifier que les modifications n'ont pas «brisé» le code
de travail précédent.
Dans un processus de test manuel, les tests de régression sont coûteux mais, avec des tests
automatisés, ils sont simples et directs. Tous les tests sont réexécutés chaque fois qu'une modification
est apportée au programme.
Les tests doivent être exécutés avec succès avant que la modification ne soit validée.
Test de sortie
Le test de sortie (ou de version) est le processus de test d'une version particulière d'un système
destiné à être utilisé en dehors de l'équipe de développement.
L'objectif principal du processus de test de version est de convaincre le fournisseur du système qu'il
est assez bon pour l'utilisation.
Les tests de version doivent donc montrer que le système fournit ses fonctionnalités, ses
performances et sa fiabilité, et qu'il ne tombe pas en panne lors d'une utilisation normale.
Les tests de version sont généralement un processus de test en boîte noire dans lequel les tests sont
uniquement dérivés de la spécification du système.
186
Chapitre 8: Test du Logiciel
Différences importantes:
Une équipe distincte qui n'a pas été impliquée dans le développement du système devrait être
responsable des tests de version.
Les tests du système par l'équipe de développement doivent se concentrer sur la détection
des bogues dans le système (test de défauts). L'objectif des tests de validation est de vérifier
que le système répond à ses exigences et qu'il est suffisant pour une utilisation externe (test
de validation).
Le test basé sur les exigences implique l'examen de chaque exigence et le développement d'un test ou
des tests pour cela.
Tests d'exigences
Mettre en place un enregistrement patient sans allergies connues. Prescrire des médicaments pour les
allergies qui existent. Vérifiez qu'un message d'avertissement n'est pas émis par le système.
Mettre en place un enregistrement patient avec une allergie connue. Prescrire le médicament auquel
le patient est allergique et vérifier que l'avertissement est émis par le système.
Mettre en place un enregistrement patient dans lequel les allergies à deux médicaments ou plus sont
enregistrées. Prescrire ces deux médicaments séparément et vérifier que l'avertissement correct pour
chaque médicament est délivré.
Prescrire deux médicaments auxquels le patient est allergique. Vérifiez que deux avertissements sont
correctement émis.
Prescrire un médicament qui émet un avertissement et annuler cet avertissement. Vérifiez que le
système exige que l'utilisateur fournisse des informations expliquant pourquoi l'avertissement a été
annulé.
“George is a nurse who specializes in mental healthcare. One of his responsibilities is to visit patients at
home to check that their treatment is effective and that they are not suffering from medication side
effects.
On a day for home visits, George logs into the Mentcare system and uses it to print his schedule of
home visits for that day, along with summary information about the patients to be visited. He requests
187
Chapitre 8: Test du Logiciel
that the records for these patients be downloaded to his laptop. He is prompted for his key phrase to
encrypt the records on the laptop.
One of the patients that he visits is Jim, who is being treated with medication for depression. Jim feels
that the medication is helping him but believes that it has the side effect of keeping him awake at night.
George looks up Jim‟s record and is prompted for his key phrase to decrypt the record. He checks the
drug prescribed and queries its side effects. Sleeplessness is a known side effect so he notes the
problem in Jim‟s record and suggests that he visits the clinic to have his medication changed. Jim
agrees so George enters a prompt to call him when he gets back to the clinic to make an appointment
with a physician. George ends the consultation and the system re-encrypts Jim‟s record.
After, finishing his consultations, George returns to the clinic and uploads the records of patients
visited to the database. The system generates a call list for George of those patients who He has to
contact for follow-up information and make clinic appointments”.
Liens avec la base de données sur les médicaments qui conservent des informations sur les effets
secondaires.
Test de performance
Une partie des tests de validation peut impliquer de tester les propriétés émergentes d'un système,
telles que les performances et la fiabilité.
Les tests de performance impliquent généralement la planification d'une série de tests où la charge
est progressivement augmentée jusqu'à ce que les performances du système deviennent inacceptables.
Le test de résistance est une forme de test de performance où le système est délibérément surchargé
pour tester son comportement en cas de défaillance.
5. Test d’utilisateur
Le test des utilisateurs ou des clients est une étape du processus de test dans lequel les utilisateurs ou
les clients fournissent des entrées et des avis sur les tests du système.
188
Chapitre 8: Test du Logiciel
Les tests utilisateur sont essentiels, même lorsque des tests complets du système et des versions ont
été effectués.
La raison en est que les influences de l'environnement de travail de l'utilisateur ont un effet
majeur sur la fiabilité, la performance, la facilité d'utilisation et la robustesse d'un système.
Ceux-ci ne peuvent pas être répliqués dans un environnement de test.
Test alpha
Les utilisateurs du logiciel travaillent avec l'équipe de développement pour tester le logiciel
sur le site du développeur.
Tests bêta
Une version du logiciel est mise à la disposition des utilisateurs pour leur permettre
d'expérimenter et de soulever des problèmes qu'ils découvrent avec les développeurs du
système.
Tests d'acceptation
Les clients testent un système pour décider s'il est prêt ou non à être accepté des
développeurs du système et déployé dans l'environnement client. Principalement pour les
systèmes personnalisés.
6. Rejeter/accepter le système
Dans les méthodes agiles, l'utilisateur/client fait partie de l'équipe de développement et est
responsable de prendre des décisions sur l'acceptabilité du système.
Les tests sont définis par l'utilisateur/client et sont intégrés à d'autres tests dans la mesure où ils sont
exécutés automatiquement lors des modifications.
189
Chapitre 8: Test du Logiciel
Le principal problème ici est de savoir si l'utilisateur intégré est «typique» et peut représenter les
intérêts de toutes les parties prenantes du système.
6. Points clés
Les tests peuvent seulement montrer la présence d'erreurs dans un programme. Il ne peut pas
démontrer qu'il n'y a pas de failles restantes.
Les tests de développement sont la responsabilité de l'équipe de développement logiciel. Une
équipe distincte devrait être chargée de tester un système avant qu'il ne soit distribué aux clients.
Les tests de développement incluent les tests unitaires, dans lesquels vous testez des objets
individuels, et des tests de composants dans lesquels vous testez des groupes d'objets liés et des
tests système, dans lesquels vous testez des systèmes partiels ou complets.
Lorsque vous testez un logiciel, vous devez essayer de «casser» le logiciel en utilisant l'expérience
et les directives pour choisir les types de cas de test qui ont été efficaces pour détecter les défauts
dans d'autres systèmes.
Autant que possible, vous devriez écrire des tests automatisés. Les tests sont intégrés dans un
programme qui peut être exécuté chaque fois qu'une modification est apportée à un système.
“Test-first development” est une approche du développement où les tests sont écrits avant le code à
tester.
Le test de scénario consiste à inventer un scénario d'utilisation typique et à l'utiliser pour dériver
des cas de test.
Le test d'acceptation est un processus de test d'utilisateur dont le but est de décider si le logiciel est
suffisamment bon pour être déployé et utilisé dans son environnement opérationnel.
7. Exercices
2. Expliquez pourquoi il n'est pas nécessaire qu'un programme soit complètement exempt de défauts
avant d'être livré à ses clients.
3. Expliquez pourquoi les tests ne peuvent détecter que la présence d'erreurs et non leur absence.
4. Certaines personnes soutiennent que les développeurs ne devraient pas être impliqués dans le test de
leur propre code, mais que tous les tests devraient être la responsabilité d'une équipe distincte.
Donner des arguments pour et contre les tests par les développeurs eux-mêmes.
5. Vous avez été invité à tester une méthode appelée 'catWhiteSpace' dans un objet 'Paragraph' qui,
dans le paragraphe, remplace les séquences de caractères vides par un seul caractère vide. Identifiez
les partitions de test pour cet exemple et dérivez un ensemble de tests pour la méthode
'catWhiteSpace'.
190
Chapitre 8: Test du Logiciel
6. Qu'est-ce qu'un test de régression? Expliquer comment l'utilisation de tests automatisés et d'un
framework de test tel que JUnit simplifie les tests de régression.
7. Le système Mentcare est construit en adaptant un système d'information sur étagère (COTS). Selon
vous, quelles sont les différences entre tester un tel système et tester un logiciel développé en
utilisant un langage orienté objet tel que Java?
8. Rédiger un scénario qui pourrait être utilisé pour aider à concevoir des tests pour le système de
stations météorologiques en zone sauvage.
9. Que comprenez-vous par le terme «stress testing»? Suggérez comment vous pourriez « stress
tester » le système Mentcare.
10. Quels sont les avantages d'impliquer les utilisateurs dans les tests de version (sortie) à un stade
précoce du processus de test? Y a-t-il des désavantages dans la participation des utilisateurs?
11. Une approche courante pour tester les systèmes consiste à tester le système jusqu'à ce que le
budget de test soit épuisé, puis livrer le système aux clients. Discutez de l'éthique de cette approche
pour les systèmes livrés à des clients externes.
8. Solutions
1. b, les tests d'intégration sont la phase des tests logiciels dans lesquels les modules logiciels
individuels sont combinés et testés en tant que groupe.
3. Supposons qu'un test exhaustif d'un programme, où toutes les entrées valides possibles sont
vérifiées, est impossible (vrai pour tous les programmes, sauf triviaux). Les cas de test ne révèlent
pas une erreur dans le programme ou révèlent une erreur de programme. Si elles révèlent une erreur
de programme, elles démontrent la présence d'une erreur. Cependant, s'ils ne révèlent pas un
défaut, cela signifie simplement qu'ils ont exécuté une séquence de code qui, pour les entrées
choisies, n'est pas défectueuse. Le prochain test de la même séquence de code - avec des entrées
différentes - pourrait révéler un défaut.
5. Les partitions de test sont:
Exemples de tests:
Le renard brun rapide a sauté sur le chien paresseux (seulement des blancs simples)
Le renard brun rapide a sauté sur le chien paresseux (différents nombres de
des blancs dans la séquence)
Le renard brun rapide a sauté sur le chien paresseux (1er vide est une séquence)
Le renard brun rapide a sauté sur le chien paresseux (Dernier blanc est une séquence)
Le renard brun rapide a sauté par-dessus le chien paresseux (2 blancs au début)
Le renard brun rapide a sauté sur le chien paresseux (plusieurs blancs au début)
191
Chapitre 8: Test du Logiciel
6. Le test de régression consiste à exécuter des tests pour les fonctionnalités qui ont déjà été
implémentées lors de l'élaboration de nouvelles fonctionnalités ou du changement de système.
Les tests de régression vérifient que les modifications du système n'ont pas introduit de problèmes
dans le code précédemment implémenté.
Des tests automatisés et un framework de test, tel que JUnit, simplifient radicalement les tests de
régression car l'ensemble du test peut être exécuté automatiquement chaque fois qu'une
modification est effectuée. Les tests automatisés comprennent leurs propres vérifications que le
test a réussi ou non, de sorte que les coûts de vérification du succès ou non des tests de régression
sont faibles.
8. Un scénario possible pour les tests de haut niveau du système de stations météorologiques est:
John est un météorologue responsable de la production de cartes météorologiques pour l'état
du Minnesota.
Ces cartes sont produites à partir de données recueillies automatiquement à l'aide d'un système
de cartographie météorologique et ils montrent des données différentes sur la météo au
Minnesota. John sélectionne la zone pour laquelle la carte doit être produite, la période de
temps de la carte et demande que la carte soit générée. Pendant la création de la carte, John
effectue une vérification de la station météorologique qui examine toutes les données des
stations météorologiques collectées à distance et recherche les lacunes dans ces données - ce
qui impliquerait un problème avec la station météo distante.
Il existe de nombreux scénarios alternatifs possibles ici. Ils devraient identifier le rôle des
acteurs impliqués et discuter d'une tâche typique qui pourrait être accomplie par ce rôle.
9. Le test Stress (de résistance) est l'endroit où vous augmentez délibérément la charge sur un
système au-delà de sa limite de conception pour voir comment il fait face à des charges élevées.
Le système devrait se dégrader avec élégance plutôt que s'effondrer.
Le système Mentcare a été conçu comme un système client-serveur avec la possibilité de
télécharger vers un client. Pour tester le système, vous devez faire en sorte que (a) de
nombreuses cliniques différentes essayent d'accéder au système en même temps et (b) qu'un
grand nombre d'enregistrements soient ajoutés au système. Cela peut impliquer l'utilisation
d'un système de simulation pour simuler plusieurs utilisateurs.
192
Chapitre
IX Evolution du
Logiciel
Objectifs
• comprendre que le changement est inévitable si les systèmes logiciels
doivent rester utiles et que le développement et l'évolution des logiciels
peuvent être intégrés dans un modèle en spirale;
• comprendre les processus d'évolution des logiciels et leurs influences sur
ces processus;
• avoir pris connaissance des différents types de maintenance logicielle et
des facteurs qui influent sur les coûts de maintenance; et
• comprendre comment les systèmes existants peuvent être évalués pour
décider s'ils doivent être mis au rebut, conservés, reconfigurés ou
remplacés.
Themes couverts
• Processus d'évolution
• Systèmes hérités (Legacy systems)
• Maintenance logicielle
193
Chapitre 9: Evolution du Logiciel
Chapitre 9:
Evolution du Logiciel
1. Introduction
Changement de logiciel
Un problème clé pour toutes les organisations est l‟implémentation et la gestion du changement de
leurs systèmes logiciels existants.
Importance de l'évolution
Les organisations investissent énormément dans leurs systèmes logiciels - ce sont des biens
commerciaux critiques.
Pour maintenir la valeur de ces biens pour l'entreprise, ils doivent être modifiés et mis à jour.
La majeure partie du budget logiciel des grandes entreprises est consacrée au changement et à
l'évolution des logiciels existants plutôt qu'au développement de nouveaux logiciels.
194
Chapitre 9: Evolution du Logiciel
Evolution et service
Évolution
L'étape du cycle de vie d'un système logiciel où il est opérationnel et évolue à mesure que de
nouvelles exigences sont proposées et implémentées dans le système.
Entretien
A ce stade, le logiciel reste utile mais les seuls changements effectués sont ceux requis pour
le rendre opérationnel, c'est-à-dire des corrections de bogues et des changements pour
refléter les changements dans l'environnement du logiciel. Aucune nouvelle fonctionnalité
n'est ajoutée.
Élimination progressive
Le logiciel peut toujours être utilisé mais aucun autre changement ne lui est apporté.
2. Processus d'évolution
Processus d'évolution
195
Chapitre 9: Evolution du Logiciel
l'impact du changement.
Implémentation du changement
Implémentation du changement
Itération du processus de développement où les révisions du système sont conçues, mises en œuvre et
testées.
Une différence essentielle est que la première étape de la mise en œuvre du changement peut
impliquer la compréhension du programme, en particulier si les développeurs du système d'origine ne
sont pas responsables de la mise en œuvre du changement.
196
Chapitre 9: Evolution du Logiciel
Des changements urgents peuvent devoir être mis en œuvre sans passer par toutes les étapes du
processus d'ingénierie logicielle
Si un défaut sérieux du système doit être réparé pour permettre le fonctionnement normal de
continuer;
Si des modifications de l'environnement du système (par exemple une mise à niveau du
système d'exploitation) ont des effets inattendus;
S'il existe des modifications métier (business) nécessitant une réponse très rapide (par
exemple, la publication d'un produit concurrent).
Les méthodes agiles sont basées sur un développement incrémental, de sorte que la transition du
développement à l'évolution est transparente.
L'évolution est simplement une continuation du processus de développement basé sur des
versions fréquentes du système.
Les tests de régression automatisés sont particulièrement utiles lorsque des modifications sont
apportées à un système.
Les modifications peuvent être exprimées en tant qu'histoires (stories) utilisateur supplémentaires.
Problèmes de livraison
Lorsque l'équipe de développement a utilisé une approche agile, l'équipe d'évolution ne connaît pas
les méthodes agiles et préfère une approche basée sur les plans.
L'équipe d'évolution peut s'attendre à une documentation détaillée pour prendre en charge
l'évolution, ce qui n'est pas le cas dans les processus agiles.
Lorsqu'une approche basée sur un plan a été utilisée pour le développement, l'équipe d'évolution
préfère utiliser des méthodes agiles.
Il se peut que l'équipe d'évolution doive partir de zéro pour développer des tests automatisés
et que le code du système n'ait pas été refaçonné et simplifié comme cela est prévu dans le
développement agile.
Les systèmes hérités sont des systèmes plus anciens qui reposent sur des langages et des technologies
qui ne sont plus utilisés pour le développement de nouveaux systèmes.
197
Chapitre 9: Evolution du Logiciel
Les logiciels hérités peuvent dépendre d'équipements plus anciens, tels que les ordinateurs centraux,
et peuvent avoir des processus et des procédures hérités associés.
Les systèmes hérités ne sont pas seulement des systèmes logiciels mais sont des systèmes
socio-techniques plus larges qui comprennent du matériel, des logiciels, des bibliothèques et d'autres
logiciels et processus opérationnels.
Matériel du système: Les systèmes hérités ont peut-être été écrits pour du matériel qui n'est plus
disponible.
Logiciel de support: Le système existant peut s'appuyer sur une gamme de logiciels de support, qui
peuvent être obsolètes ou non pris en charge.
Logiciel d'application: Le système d'application qui fournit les services métier est généralement
composé d'un certain nombre de programmes d'application.
Données d'application: Il s'agit de données traitées par le système d'application. Ils peuvent être
incohérents, dupliqués ou conservés dans des bases de données différentes.
Processus métier (d‟affaires): Ce sont des processus qui sont utilisés dans l'entreprise pour atteindre
certains objectifs d'affaires.
Les processus métier peuvent être conçus autour d'un système hérité et limités par la fonctionnalité
qu'il fournit.
Politiques et règles métier: Ce sont des définitions de la manière dont l'activité doit être réalisée et
des contraintes imposées à l'entreprise. L'utilisation du système d'application hérité peut être intégrée
dans ces stratégies et règles.
198
Chapitre 9: Evolution du Logiciel
Le remplacement du système existant est risqué et coûteux, les entreprises continuent donc d'utiliser
ces systèmes
Les systèmes hérités sont coûteux à changer pour un certain nombre de raisons:
Pas de style de programmation cohérent
Utilisation de langages de programmation obsolètes avec peu de personnes disponibles avec
ces compétences linguistiques
Documentation système inadéquate
Dégradation de la structure du système
Les optimisations de programme peuvent les rendre difficiles à comprendre
Erreurs de données, duplication et incohérence
Les organisations qui s'appuient sur les systèmes hérités doivent choisir une stratégie pour faire
évoluer ces systèmes
Abandonner complètement le système et modifier les processus métier pour qu'ils ne soient
plus nécessaires;
Continuez à entretenir le système.
Transformer le système en le réorganisant pour améliorer sa maintenabilité;
Remplacez le système par un nouveau système.
199
Chapitre 9: Evolution du Logiciel
L'utilisation du système
Si les systèmes ne sont utilisés que de temps en temps ou par un petit nombre de personnes,
ils peuvent avoir une faible valeur commerciale.
200
Chapitre 9: Evolution du Logiciel
Évaluation de l'environnement
Quelle est l'efficacité de l'environnement du système et à quel point est-il coûteux de le
maintenir?
Évaluation de l'application
Quelle est la qualité du système de logiciel d'application?
Utiliser une approche orientée point de vue (viewpoint-oriented approach) et chercher des réponses
auprès des parties prenantes du système
Existe-t-il un modèle de processus défini et est-il suivi?
Est-ce que différentes parties de l'organisation utilisent des processus différents pour la
même fonction?
Comment le processus a-t-il été adapté?
Quelles sont les relations avec les autres processus métiers et sont-elles nécessaires?
Le processus est-il efficacement pris en charge par le logiciel d'application hérité?
Exemple - un système de commande de voyages peut avoir une faible valeur commerciale en raison
de l'utilisation généralisée de la commande sur le Web.
Factor Questions
Supplier stability Is the supplier still in existence? Is the supplier financially stable and likely to continue in
existence? If the supplier is no longer in business, does someone else maintain the systems?
Failure rate Does the hardware have a high rate of reported failures? Does the support software crash
and force system restarts?
Age How old is the hardware and software? The older the hardware and support software, the
more obsolete it will be. It may still function correctly but there could be significant
economic and business benefits to moving to a more modern system.
Performance Is the performance of the system adequate? Do performance problems have a significant
effect on system users?
Support What local support is required by the hardware and software? If there are high costs
201
Chapitre 9: Evolution du Logiciel
requirements associated with this support, it may be worth considering system replacement.
Maintenance What are the costs of hardware maintenance and support software licences? Older hardware
costs may have higher maintenance costs than modern systems. Support software may have high
annual licensing costs.
Interoperability Are there problems interfacing the system to other systems? Can compilers, for example, be
used with current versions of the operating system? Is hardware emulation required?
Understandability How difficult is it to understand the source code of the current system? How complex are
the control structures that are used? Do variables have meaningful names that reflect their
function?
Documentation What system documentation is available? Is the documentation complete, consistent, and
current?
Data Is there an explicit data model for the system? To what extent is data duplicated across files?
Is the data used by the system up to date and consistent?
Performance Is the performance of the application adequate? Do performance problems have a
significant effect on system users?
Programming Are modern compilers available for the programming language used to develop the system?
language Is the programming language still used for new system development?
Configuration Are all versions of all parts of the system managed by a configuration management system?
management Is there an explicit description of the versions of components that are used in the current
system?
Test data Does test data for the system exist? Is there a record of regression tests carried out when
new features have been added to the system?
Personnel skills Are there people available who have the skills to maintain the application? Are there people
available who have experience with the system?
Mesure du système
Vous pouvez collecter des données quantitatives pour évaluer la qualité du système d'application
Le nombre de demandes de changement de système; Plus cette valeur cumulée est élevée, plus la
qualité du système est faible.
Le nombre d'interfaces utilisateur différentes utilisées par le système; Plus il y a d'interfaces, plus il
est probable qu'il y aura des incohérences et des redondances dans ces interfaces.
Le volume de données utilisé par le système; Comme le volume de données (nombre de fichiers,
taille de la base de données, etc.) traité par le système augmente, de même que les incohérences et les
erreurs dans ces données.
Le nettoyage des anciennes données est un processus très coûteux et fastidieux
4. Maintenance logicielle
Le terme est principalement utilisé pour changer de logiciel personnalisé. Les produits logiciels
202
Chapitre 9: Evolution du Logiciel
La maintenance n'implique normalement pas de changements majeurs dans l'architecture du système.
Types de maintenance
Adaptation environnementale
Maintenance pour adapter le logiciel à un environnement d'exploitation différent
Changer un système pour qu'il fonctionne dans un environnement différent (ordinateur,
système d'exploitation, etc.) depuis son implémentation initiale.
Coûts de maintenance
Augmente à mesure que le logiciel est maintenu. La maintenance corrompt la structure du logiciel,
rendant ainsi la maintenance plus difficile.
Le logiciel vieillissant peut avoir des coûts de support élevés (par exemple, les anciennes langues, les
compilateurs, etc.).
Il est généralement plus coûteux d'ajouter de nouvelles fonctionnalités à un système pendant la
203
Chapitre 9: Evolution du Logiciel
Prédiction de maintenance
La prédiction de maintenance concerne l'évaluation des parties du système qui peuvent causer des
problèmes et engendrer des coûts de maintenance élevés
L'acceptation du changement dépend de la maintenabilité des composants affectés par le
changement;
La mise en œuvre de changements dégrade le système et réduit sa maintenabilité;
Les coûts de maintenance dépendent du nombre de changements et les coûts de changement
dépendent de la maintenabilité.
Prédiction de maintenance
Prédiction du changement
Prédire le nombre de changements nécessite et comprend les relations entre un système et son
environnement.
Les systèmes couplés étroitement nécessitent des changements chaque fois que l'environnement est
modifié.
Métriques de complexité
Les prédictions de maintenabilité peuvent être faites en évaluant la complexité des composants du
204
Chapitre 9: Evolution du Logiciel
système.
Des études ont montré que la plupart des efforts de maintenance sont consacrés à un nombre
relativement faible de composants du système.
Mesures de processus
Si tout ou partie de ceux-ci augmente, cela peut indiquer une baisse de la maintenabilité.
Réingénierie logicielle
Restructurer ou réécrire tout ou partie d'un système existant sans changer sa fonctionnalité.
Applicable lorsque certains mais pas tous les sous-systèmes d'un système plus important nécessitent
une maintenance fréquente.
La réingénierie consiste à ajouter des efforts pour les rendre plus faciles à entretenir. Le système peut
être restructuré et re-documenté.
Avantages de la réingénierie
Risque réduit
Il y a un risque élevé dans le développement de nouveaux logiciels. Il peut y avoir des
problèmes de développement, des problèmes de personnel et des problèmes de spécification.
Coût réduit
Le coût de la réingénierie est souvent nettement inférieur au coût de développement d'un
nouveau logiciel.
205
Chapitre 9: Evolution du Logiciel
Le processus de réingénierie
Ingénierie inverse
Analyser le programme pour le comprendre
Programme de modularisation
Réorganiser la structure du programme
Approches de réingénierie
206
Chapitre 9: Evolution du Logiciel
Refactoring
Le refactoring est le processus d'amélioration d'un programme pour ralentir la dégradation par le
changement.
Vous pouvez penser à refactoring comme «maintenance préventive» qui réduit les problèmes de
changement futur.
Le refactoring consiste à modifier un programme pour améliorer sa structure, réduire sa complexité
ou le rendre plus facile à comprendre.
Lorsque vous refactorisez un programme, vous ne devez pas ajouter de fonctionnalité mais plutôt
vous concentrer sur l'amélioration du programme.
Refactoring et réingénierie
La réingénierie a lieu après la maintenance d'un système pendant un certain temps et les coûts de
maintenance augmentent. Vous utilisez des outils automatisés pour traiter et réorganiser un système
existant afin de créer un nouveau système plus facile à gérer.
Le refactoring est un processus continu d'amélioration tout au long du processus de développement et
d'évolution. Il est destiné à éviter la dégradation de la structure et du code qui augmente les coûts et les
difficultés de maintenance d'un système.
Dupliquer le code
Le même code ou un code très similaire peut être inclus à différents endroits d'un
programme. Cela peut être supprimé et implémenté comme une seule méthode ou fonction
appelée comme requis.
Longues méthodes
Si une méthode est trop longue, elle devrait être reconçue en plusieurs méthodes plus
courtes.
207
Chapitre 9: Evolution du Logiciel
Généralité spéculative
Cela se produit lorsque les développeurs incluent la généralité dans un programme au cas où
cela serait nécessaire dans le futur. Cela peut souvent être simplement supprimé.
5. Points clés
Le développement et l'évolution des logiciels peuvent être considérés comme un processus intégré
et itératif qui peut être représenté à l'aide d'un modèle en spirale.
Pour les systèmes personnalisés, les coûts de maintenance du logiciel dépassent généralement les
coûts de développement du logiciel.
Le processus d'évolution du logiciel est piloté par des demandes de changements et inclut l'analyse
de l'impact du changement, la planification des versions et la mise en œuvre du changement.
Les anciens systèmes sont des systèmes logiciels plus anciens, développés à l'aide de technologies
matérielles et logicielles obsolètes, qui restent utiles pour une entreprise.
Il est souvent moins coûteux et moins risqué de maintenir un système existant que de développer un
système de remplacement utilisant la technologie moderne.
La valeur commerciale d'un système existant et la qualité de l'application doivent être évaluées pour
aider à décider si un système doit être remplacé, transformé ou maintenu.
Il existe trois types de logiciels de maintenance, à savoir la correction de bogues, la modification de
logiciels pour travailler dans un nouvel environnement et la mise en œuvre de nouvelles exigences
ou de modifications.
La réingénierie logicielle consiste à restructurer et à re-documenter les logiciels pour les rendre plus
faciles à comprendre et à modifier.
Le refactoring, en apportant des changements de programme qui préservent la fonctionnalité, est
une forme de maintenance préventive.
6. Exercices
I) Quiz :
208
Chapitre 9: Evolution du Logiciel
1. Expliquez pourquoi un système logiciel utilisé dans un environnement réel doit changer ou
devenir progressivement moins utile.
2. À partir de la Figure 4 (Chapitre 9), vous pouvez voir que l'analyse d'impact est un
sous-processus important dans le processus d'évolution du logiciel. À l'aide d'un diagramme,
suggérez quelles activités pourraient être impliquées dans l'analyse de l'impact du
changement.
3. En tant que chef de projet logiciel dans une entreprise spécialisée dans le développement de
logiciels pour l'industrie pétrolière offshore, vous avez été chargé de découvrir les facteurs qui
affectent la maintenabilité des systèmes développés par votre entreprise. Suggérez comment
vous pourriez configurer un programme pour analyser le processus de maintenance et
découvrir les mesures de maintenabilité appropriées pour votre entreprise.
4. Décrivez brièvement les trois principaux types de maintenance logicielle. Pourquoi est-il
parfois difficile de les distinguer?
5. Quels sont les principaux facteurs qui influent sur les coûts de la réingénierie du système?
6. Dans quelles circonstances une organisation peut-elle décider de mettre au rebut un système
lorsque l'évaluation du système indique qu'elle est de haute qualité et qu'elle a une grande
valeur commerciale?
7. Quelles sont les options stratégiques pour l'évolution du système existant? Quand
remplaceriez-vous normalement tout ou partie d'un système plutôt que de continuer la
maintenance du logiciel?
8. Expliquez pourquoi les problèmes avec les logiciels de support peuvent signifier qu'une
organisation doit remplacer ses systèmes existants.
9. Les ingénieurs en logiciel ont-ils la responsabilité professionnelle de produire un code qui peut
être maintenu et modifié même si cela n'est pas explicitement demandé par leur employeur?
209
Chapitre 9: Evolution du Logiciel
7. Solutions
I) Quiz:
1 : b, L'évolution des logiciels fait référence à l'étude et à la gestion du processus de modification des
logiciels au fil du temps. Ainsi, il comprend les trois autres options données
2. d, Les processus utilisés pour l'évolution du logiciel dépendent de tous ces facteurs.
3. d, Les processus utilisés pour l'évolution du logiciel dépendent de ces deux techniques.
4. c, Réingénierie est l'examen et la modification d'un système pour le reconstituer sous une nouvelle
forme et la mise en œuvre ultérieure de la nouvelle forme.
5. b, L'ingénierie inverse est souvent l'activité initiale d'un projet de réingénierie.
6. a, Il y a un risque élevé dans le développement de nouveaux logiciels. Il peut y avoir des problèmes
de développement, des problèmes de personnel et des problèmes de spécification, ce qui augmente le
coût.
II) Exercices
1. Les systèmes doivent changer ou devenir progressivement moins utiles pour un certain nombre de
raisons:
1. La présence du système modifie les façons de travailler dans son environnement et cela
génère de nouvelles exigences. Si celles-ci ne sont pas satisfaites, l'utilité du système diminue.
2. L'activité dans laquelle le système est utilisé change en réponse aux forces du marché, ce qui
génère également de nouvelles exigences du système.
3. L'environnement juridique et politique externe du système change et génère de nouvelles
exigences.
4. De nouvelles technologies deviennent disponibles offrant des avantages significatifs et le
système doit changer pour en tirer parti.
210
Chapitre 9: Evolution du Logiciel
Il existe d'autres raisons pour lesquelles le logiciel peut être mis au rebut, en fonction des
circonstances.
211
Bibliograhie
212
Bibliographie
Références
213