Kolyang
Introduction au génie logiciel
Analyse des validation
besoins
conception intégration
implémentation
S
c
i
e
n
c
Ka arang
e
Introduction au génie logiciel
de
Kolyang
Université de Ngaoundéré, Cameroun
2
Table des matières
4
Chapitre 1 : Introduction générale
7
1.2 Facteurs de production
Il existe deux grands facteurs dans le développement du logiciel : les facteurs
de grandeur liés au développement du logiciel, et ceux liés à la qualité et la
productivité. Pour toutes ces grandeurs, l’on a l’effort total dédié au produit
et les catégories de grandeur d’un produit. Le logiciel prend de plus en plus
de place dans les investissements.
La vie typique d’un logiciel est de 1 à 3 ans dans le développement et 5 à
15 ans dans l’utilisation. Le partage de l’effort entre le développement et la
maintenance est souvent présenté comme 40/40, 30/70 et parfois même
10/90. Ceci ne surprend pas si l’on comprend que la maintenance concerne
toutes les activités à partir de la publication initiale du produit.
La maintenance inclut trois aspects importants : l’augmentation des
fonctionnalités du produit, l’adaptation du produit à son environnement et la
correction des bogues.
8
Les projets très grands. Ils utilisent 100 à 1000 programmeurs pour une
période allant de 4 à 5 ans. Le résultat est un système de plus d’un million
d’instructions. Par exemple, le système d’exploitation IBM OS/360 a été
développé par 5000 programmeurs.
2000 à 5000 programmeurs travaillent dans les projets extrêmement
grands pour une période allant jusqu’à 10 ans pour produire 1 à 10 millions
de lines of code (LOC).
9
que dans des cas éventuels, le système ne livre des résultats catastrophiques.
Il devrait finir correctement sa tâche et passer à un état « d’exception ».
Extensibilité : L’extensibilité décrit la facilité avec laquelle le logiciel peut se
laisser adapter à des changements de spécification. Le logiciel est considéré
comme mou. Et effectivement, rien n’est plus facile que de changer un
programme. Le problème de l’extensibilité se trouve dans l’échelle. Les
changements dans de petits programmes ne constituent en général pas de
sérieux problèmes mais, dans le cas de la programmation in-the-large, ces
modifications peuvent être une vraie entorse au développement du logiciel.
Quand le programme est grand, il est aussi difficile à changer. Deux
principes pour l’amélioration de l’extensibilité consistent en la simplicité de
la conception, car une architecture simple est toujours plus faciler à changer
qu’une architecture compliquée. Aussi la décentralisation où chaque module
du logiciel doit être autonome est une technique importante.
Ré-utilisation : La ré-utilisation des logiciels est la propriété d’utiliser des
composantes pour de nouvelles applications. Le besoin de ré-utilisation apparaît
par l’observation selon laquelle plusieurs éléments des logiciels obéissent aux
mêmes motifs. Il est donc nécessaire de trouver ces similitudes et d’utiliser
ces méthodes au lieu de réinventer de nouvelles solutions. La ré-utilisation
est très importante parce qu’elle permet de réduire les coûts totaux de
développement de logiciels et de se concentrer ainsi sur les aspects tels la
robustesse, la correction etc. Une bonne réutilisation signifie qu’il existe des
bibliothèques.
Compatibilité : Elle est la mesure de la simplicité avec laquelle les produits
logiciels peuvent se laisser combiner avec d’autres. La compatibilité est
importante, car les produits logiciels ne sont pas développés dans un
vacuum : ils doivent interagir avec d’autres.
Il existe d’autres qualités telles l’efficience, la portabilité, la vérifiabilité,
l’intégrité et l’ergonomie.
10
Plusieurs critères servent à l’évaluation des méthodes de conception en
rapport avec la modularité : la divisibilité modulaire, la combinaison
modulaire, la compréhensibilité modulaire, la continuité modulaire et enfin
la protection modulaire.
Divisibilité modulaire : Le critère de division modulaire est rempli quand la
méthode de conception permet la division d’un problème en sous-tâches de
manière que la solution à celles-ci soit recherchée d’une manière individuelle.
Par cette méthode, la complexité originale est subdivisée en complexité plus
réduite, puisque le système est subdivisé en sous-systèmes reliés entre eux
par des structures plus simples. Ce critère est absolument nécessaire pour le
développement de logiciels non triviaux. Cette division existe aussi sous la
méthode top-down. Avec cette hiérarchie, l’on commence avec une
description abstraite de la fonctionnalité du système, avant de le raffiner
étape par étape. Chaque sous-système se raffine ensuite en d’autres sous-
systèmes plus petits de manière que les derniers soient directement
programmables parce qu’ils sont à un niveau d’abstraction plus faible.
Combinaison modulaire : Une méthode de développement remplit le critère de
combinaison si elle permet la production des éléments de logiciels qui
peuvent se laisser combiner pour obtenir de nouveaux systèmes plus grands.
Pendant que la division modulaire s’occupe de la dérivation des produits à
partir de la spécification, la combinaison, elle, s’occupe du processus inverse,
avec l’exigence que les éléments de logiciel existants soient utilisés dans la
construction du logiciel en question.
La combinaison se veut réaliser un vieux rêve à savoir rendre le processus
de développement du logiciel comme une activité de construction en
morceaux, de manière que les programmes naissent à partir de la
combinaison des éléments standards par exemple d’une bibliothèque.
Compréhensibilité modulaire : Une méthode favorise la compréhension
modulaire quand elle soutient la construction des modules compréhensibles
par un lecteur humain. Dans le pire des cas, le lecteur ne devrait pouvoir voir
que quelques modules voisins. Ce critère est important pour la maintenance.
Continuité modulaire : Une méthode de conception remplit le critère de
continuité modulaire si une petite altération dans la spécification du
problème ne cause de changement que dans un ou peu de modules qui
peuvent être dérivés à l’aide de cette méthode à partir de la spécification. Un
tel changement ne doit pas modifier l’architecture du système, c’est-à-dire les
relations entre les modules.
Protection de module : Une méthode remplit le critère de protection
modulaire si elle conduit à des architectures dans lesquelles des erreurs
11
pendant l’exécution ne se limitent qu’à ce module ou à des modules
limitrophes.
Les cinq critères sus-discutés conduisent à cinq principes importants pour
la réalisation d’une modularité adéquate. Ils concernent entre autres les
entités modulaires en rapport avec le langage, le nombre réduit d’interfaces,
les interfaces minces (couplage faible), les interfaces explicites et le principe
secret.
Les entités modulaires du langage : Les modules doivent respecter les entités
syntaxiques du langage utilisé. Le formalisme utilisé pour la conception des
programmes doit concourir au principe de la modularité.
Nombre limité d’interfaces : Ce principe limite le nombre total de voies de
communication entre les modules dans une architecture de logiciel. Chaque
module devrait communiquer avec le moins de modules possible. Ici, la
communication peut-être issue d’un appel de procédures pour le partage des
structures de données. Par exemple, si un programme a n modules, alors le
nombre de communication inter modulaires devrait se retrouver autour du
minimum n-1 que du maximum n(n-1)/2.
Interfaces minces (couplage faible) : Ce principe se rapporte à la grandeur des
liaisons inter modulaires et non leur nombre. Quand deux modules
communiquent entre eux, ils doivent échanger le moins d’information possible.
Interfaces explicites : Avec ce quatrième principe, l’on veut établir un
régime totalitaire sur la société des modules. L’on requiert non seulement
que chacun parle avec très peu d’autres modules et que cette conversation se
limite à très peu de mots, mais nous ordonnons encore que cela se passe
publiquement. Quand deux modules A et B communiquent, cette interaction doit
transparaître du texte de A ou de B.
Principe secret (Information hiding) : Chaque information sur un module
doit être interne quand elle n’a pas été déclarée explicitement comme
publique. L’application de ce principe requiert que chaque module est connu
par le reste du monde par une description officielle, appelée interface.
Tous ces principes et facteurs de qualité sont décrits en détail dans Bertrand
Meyer.
1.4.3 Facteurs de qualité et de productivité
Le développement et la maintenance du logiciel sont très complexes. Pour
ceux qui n’ont écrit jusqu’ici que de petits programmes et des devoirs à la
maison, ce constat peut être surprenant. Plusieurs facteurs qui influent sur la
qualité du logiciel doivent être bien maîtrisés. Ils sont la capacité individuelle
(individual ability), la communication d’équipe (team communication), la
complexité du produit (product complexity), une notation appropriée
12
(appropriate notation), une approche systématique (systematic approaches),
le contrôle des changements (change control), le niveau technologique (level
of technology), la confiance requise (required reliability), le temps disponible
(available time), la compréhension du problème (problem understanding), la
stabilité des exigences (stability of requirements), les qualités exigées
(required skills), les moyens et ressources (facilities and ressources), une
formation adéquate (adequacy of training), des qualités de gestion
(management skills), des objectifs appropriés (appropriate goals). Toutes ces
qualités doivent répondre des attentes croissantes (raising expectations)
portées au logiciel.
13
Chapitre 2 : Historique sur le développement du logiciel
14
tournée vers des applications spécifiques dans le mode de traitement de lots
(batch modus) c’est-à-dire un ordinateur, un programme.
Dans cette décade, le logiciel était orienté au traitement de lots (batch) sur
les cartes perforées. La mémoire vive était très petite. La complexité du
système était très simple. La programmation se faisant dans les langages
proches de la machine. Les représentants de ces langages sont : COBOL
(Common Business Oriented Langages), FORTRAN (FORmula
TRANsformation), ALGOL (Algorithmic Language). La mauvaise expérience
réalisée dans le développement des grands systèmes a conduit à l’éveil d’un
intérêt pour les questions de sémantique et de conception. Pendant cette
décade naît la recherche sur les types des données structurées. Elle conduit
aux langages tels ALGO 68, C, Pascal, ADA.
La deuxième période de la décennie 1960 au milieu des années 1970 est
marquée par une augmentation rapide dans l’utilisation du logiciel. Les
raisons se trouvent dans un développement rapide du matériel aussi bien
dans la capacité que dans la vitesse. Une nécessité du développement des
logiciels de base se fait sentir, afin de gérer les ressources « chères » telles la
mémoire et le temps de calcul. L’on aboutit alors à des systèmes de
multiprogrammation et multi-utilisateur. Les données immenses peuvent
être sauvegardées (bases de données) et l’on aboutit à une sorte d’interaction
avec l’ordinateur. Le logiciel devient alors un produit auquel des maisons de
logiciel peuvent se consacrer.
La troisième période, dans la décade du milieu des années 70 au milieu des
années 80, est marquée par l’interconnexion des systèmes matériels, dans des
réseaux locaux et ensuite mondiaux. Poussée par le développement du
Hardware, l’on aboutit à une énorme complexité des solutions logicielles. La
sécurité et l’accessibilité deviennent alors des aspects importants de la qualité
du logiciel. Les ordinateurs individuels révolutionnent le travail de bureau.
La technologie permet de traiter des projets de plus en plus grands. Ces
exigences de l’ingénierie conduisent à de nouveaux problèmes ; entre autres
la programmation en équipe conduisant à la division de la conception, le
partage de l’analyse ainsi que celle de la spécification et de la codification, les
méthodes de programmation structurée n’étant pas scalables, elles ne se
laissent pas utiliser pour des cas larges. Les limites se trouvent dans
l’utilisation des données globales, la construction monolithique et sans
modules, les interfaces mal définies. Les chercheurs acquièrent lentement la
connaissance que le développement du génie logiciel exige une technologie
plus profonde. Cette connaissance soutient les notions telles le Software
Engineering (génie logiciel), la programmation structurée, le Stepwise
refinement (raffinement par étape), la modularisation et les Abstract Data
15
types (ADT). Les résultats de ces recherches sont réalisés dans les logiciels
tels Pascal, Modula-2, ML, C++, JAVA.
Aujourd’hui l’on est en présence d’une complexité ardue. Les micro-
systèmes sont moins chers et massivement distribués. Par exemple, un
véhicule compte aujourd’hui des centaines de micropocesseurs. Ces derniers
sont de plus en plus utilisés dans des situations à sécurité critique : contrôle
des avions, trains, réacteurs nucléaires…
Ici, le fonctionnement correct est exigé. Dans cette armada d’exigences,
quel est le rôle ou quelles sont les possibilités du Génie Logiciel ? De prime
abord il est important de rappeler qu’il n’existe pas dans la programmation
de potion magique ou de panacée. Dans ce sens, le génie logiciel diffère
grandement de l’informatique pratique. Il existe, cependant, des techniques,
des méthodes et des outils qui réduisent la complexité de la construction des
programmes. Il est néanmoins difficile de présenter tous les contenus de ces
techniques car le climat industriel diffère de l’académie et différents problèmes
exigent différentes techniques.
16
« l’application créative des pricinipes sicentifiques à la conception et le
développement des structures, des machines, des appareils ou des processus de
production […] en rapport avec une fonction souhaitée, une économie d’action et de
sécurité de la vie et de la propriété »
On peut maintenant définir le Génie Logiciel selon MEYER :
« On appelle Génie Logiciel l’application des méthodes scientifiques au
développement de théories, méthodes, techniques, langages et outils favorisant la
production de logiciel de qualité ».
Le Génie Logiciel n’est donc pas seulement limité aux outils, il comprend
les méthodes, les théories des langages et les techniques. La particularité de
ces méthodes, outils et techniques… est de s’appliquer à la production du
logiciel.
19
Chapitre 3 : Les modèles du développement des logiciels
21
transformée en un programme. Le modèle de construction de composantes
réutilisables concerne une réutilisation des composantes déjà existantes.
Requirements
définition
System and
Software Design
Implantation
And Unit Testing
Integration and
System testing
Axe de temps
Operation and
Maintenance
22
La conception architecturale la spécification architecturale et un plan de test du système.
La conception des interfaces La spécification des interfaces et le plan de texte d’intégration
La conception détaillée La spécification et plan de texte des unités fonctionnelles
Le test des unités Un rapport
Le test des modules Un rapport
Le test d’intégration Un rapport
Le test du système Un rapport et une documentation finale pour les utilisateurs
Le Test d’acceptance Un rapport
La programmation Le programme
Requirements
definition
System and
Software Design
Implantation
And Unit Testing
Integration and
System testing
Operation and
Axe de temps Maintenance
Construction du prototype
oui
Nouveau
prototype Modification de la
nécessair définition du produit
24
non
maintenance
Livraison +implantation
D’une manière pratique, l’applicabilité est restreinte aux petits systèmes
avec une durée de vie limitée. Un exemple typique est l’intelligence
artificielle où il est difficile de spécifier les capacités et les activités humaines.
Puisque le développement d’un logiciel est en règle normale un service, il
est nécessaire d’assurer un minimum de communication entre les usagers et
les prestataires de service. Ceci ne peut se faire que dans une coopération
étroite entre les développeurs et les utilisateurs futurs du logiciel. C’est
pourquoi le thème du développement participatif de logiciel n’est pas à
séparer des questions de coopération (des développeurs entre eux et des
développeurs avec les utilisateurs). (Dahme et Hesse, 1997).
Le modèle en spirale, une idée de Barry W. Boehm en 1988, met l'accent sur
l'analyse des risques. Il est beaucoup plus général que les précédents et peut
même les inclure. La première des quatres étapes que comporte chaque cycle
est la détermination des objectifs, des alternatives et des contraintes à partir des
résultats du cycle précédent et pour le premier à partir d'une analyse
préliminaire des besoins ; la deuxième concerne l’analyse des risques,
l’évaluation des alternatives, et éventuellement un prototypage; la troisième est
le développement et la vérification de la solution retenue ; la quatrième est la
revue des résultats et la planification du cycle suivant. Le modèle en spirale
utilise systématiquement des prototypes exploratoires afin de guider la
conception. Il est plus adapté aux projets innovants, à risques et dont les
enjeux sont importants. Il est à noter que l'analyse des risques peut également
être introduite dans les modèles classiques, en cascade ou en V.
25
Détermination des buts, Evaluation des alternatives
des alternatives et des conditions Identifier et réduire les risques
du niveau cycle de spirale
Fin de cycle
revues et consensus
de planification
26
3.2.4 Modèles spécifiques
Certains États (gouvernements) imposent pour le développement des
logiciels de qualité des méthodes ou méthodologies spécifiques. En France,
l’on a MERISE, en Allemagne le modèle V, en Angleterre Z, etc.
Le modèle V :
Il est introduit en 1997. La version actuelle est designée de V-Modell XT
(depuis février 2005). L’administration fédérale de l’Allemagne et les projets
de défense utilisent le Modèle V comme procédure standard de
développement de logiciel. Cette méthode consiste en un modèle pour la
planification et le développement de logiciel. Le modèle V répond à quatre
requêtes importantes de développement : Who? What? When? How?
L’on peut poser la question comme suit: Who has to do what, when, and how
within a project? Qui doit faire quoi, quand et comment dans un projet?
Dans le modèle V, le fond réalise l’implémentation. La branche gauche
définit les différentes spécifications (requirements specification, system
design and software design). La branche droite crée des correlations avec la
partie gauche à savoir la validation du système, la vérification du système et
du logiciel.
L’accent est mis sur la réduction des erreurs. La branche droite permet en
général la détection rapide des erreurs et des anomalies présentes dans la
partie gauche et entreprend des mesures adéquates pour les corriger.
27
Le modèle V qui est devenu un standard ISO est utilisé aujourd’hui chez
les militaires et dans d’autres grands projets. Il régule toutes les activités et
les projets ainsi que les états du produit et les interactions pendant le
développement et la maintenance. Il se compose de plusieurs sous modèles
qui décrivent le développement du système, l’administration de la
configuration, l’administration du projet (acquisition, planification …).
Au début, le modèle V correspondait à une variante du modèle en cascade.
La branche gauche du V correspond au développement du projet jusqu’à
l’implémentation. La branche droite correspond aux activités d’évaluation et
de test.
Le modèle de la cascade est séduisant de par sa simplicité, mais, souvent, il
lui est préféré celui en V plus récent et plus proche de la réalité de
l'articulation entre les activités de spécification et de conception, avec celles
de validation et vérification. En effet, contrairement au modèle de la cascade,
ce modèle fait apparaître le fait que le début du processus de développement
conditionne ses dernières étapes.
Source: http://www.the-software-experts.de/e_dta-sw-process.htm
28
importants. Cette phase durant environ 15 pourcents du temps total du cycle
de vie se termine par la production d'un code source.
Les tests unitaires ont pour objectif de vérifier individuellement la
conformité de chaque élément du logiciel (fonctions et variables) par rapport
aux documents de conception détaillée. Toutes les fonctionnalités internes et
externes de chaque sous-programme sont contrôlées méthodiquement. En
outre, un contrôle des performances globales et locales est également
entrepris. Cette phase consomme aux alentours de 5 pourcents du temps total
du cycle de vie et se finalise par la rédaction des résultats des tests.
La phase d'intégration permet de vérifier l'assemblage des différentes
parties du logiciel. Les différents modules du logiciel sont successivement
intégrés jusqu'à aboutir à la construction complète, en respectant
rigoureusement les spécifications des tests d'intégration. Chaque module doit
parfaitement être assimilé sans que le fonctionnement des modules
précédemment intégrés n'en soit affecté. Les résultats de cette phase sont
consignés dans un document des tests d'intégration. Une présentation du
logiciel est également réalisée. Les tests d'intégration représentent en
moyenne 20 pourcents du temps total du cycle de développement.
La dernière phase a pour vocation de valider le logiciel dans son
environnement. Le produit applicatif est mis en situation d'utilisation finale
afin de vérifier s'il répond parfaitement aux besoins énoncés dans les
spécifications textuelles (première phase). Un document appelé résultat de la
recette est produit au terme de la phase de validation qui dure 10 pourcents
du temps total du cycle de vie du développement du logiciel.
La finalité du cycle de vie en V consiste à parvenir sans incident à livrer un
logiciel totalement conforme au cahier des charges. Lors de la phase de
spécification textuelle, une négociation avec le client permet d'affiner ou
d'enrichir les besoins à propos de certains points techniques omis ou obscurs
dans le cahier des charges. Lorsque la spécification est validée, la suite du
processus de développement doit être parfaitement encadré, contrôlé et
approuvé de telle sorte, qu'à aucun moment, il ne soit possible de diverger
des règles énoncées lors de la première phase.
30
Chapitre 4 : Analyse et définition des besoins
31
Les différentes parties résultantes d’une analyse de besoins sont donc
l’ébauche du produit, un plan des besoins et la spécification logicielle. La
spécification ou analyse des besoins a pour but de dégager du cahier des
charges toutes les contraintes nécessaires à l'élaboration du logiciel. Trois
sortes de contraintes logicielles sont à prendre en considération :
32
La phase de conception détaillée (ou analyse organique détaillée) en
s'appuyant sur le document de conception générale, énumère l'architecture
approfondie du logiciel jusqu'à parvenir à une description externe de chaque
sous-ensemble et information utilisable dans le futur logiciel. A partir de
cette étape, seront connues toutes les données (variables, constantes,
attributs, champs, etc.) et fonctions (procédures, méthodes, etc.) de
l'application vue de l'extérieur. Le logiciel peut être entièrement écrit en
algorithme. Un langage de programmation est en général validé lors de cette
phase. Un document de conception détaillée ainsi qu'un manuel
d'utilisation sont édités afin respectivement de décrire l'architecture
détaillée et la mise en oeuvre du logiciel. Les phases de conception doivent
prendre environ 25 pourcents du temps total du cycle de développement.
NASA-STANDARD SMAP-DID-P200-SW
I- Introduction
II- Documentation relative au sujet
III-Ebauche préliminaires et discussion des choix
IV- Exigences aux interfaces externes
V- Spécification des besoins
processus de données
comportement en exécution et qualité requise
sécurité
sécurité et protection des données
33
limitation d’implémentation
exigences d’installation
buts conceptuels
VI- Répartition pour une liaison étape par étape
VII-Abréviations acronymes et grossière
VIII-Notes
IX-Annexes
34
d. aspects critiques du système
e. interface externe
f. description de la fonctionnalité
g. exigences de qualité
Chap 6 : Conditions Contextuelles
a. contexte technique
b. contexte organisationnel
c. autres contextes
35
Conception d’un système d’information pour une clinique privée en
utilisant les Data Flow Diagrams (DFD) symptoms
Physical diagnostics
examination
Physician
Légende : prescription
entité
Services performed
Trip to
r
medica
drugstore
List of tests
fonctions
Patient
mémoire
bill
Connect to
Disconnect Detect End of call Hand set
36
4.3 Exemple de cahier de charges
La Firme Teachware organise des séminaires publics et internes avec des formateurs
externes. La firme se compose d’un directeur, qui s’occupe de la planification et de
l’administration des séminaires, une attachée de direction et d’une secrétaire. Depuis peu
l’on a implanté dans la firme le logiciel SEMORG. Le directeur planifie et administre les
séminaires et les formateurs à partir de son PC. L’attaché de direction administre les
clients et les enregistrements à travers un PC. La secrétaire ne travaille pas avec le PC,
mais s’occupe des participants dans les salles du séminaire. Elle s’occupe de surcroît de la
multiplication des documents relatifs au séminaire. A côté de deux PC interconnectés,
l’entreprise possède un téléphone, un appareil de télécopie conventionnelle et une
connexion de fax par PC ainsi qu’une liaison e-mail. L’on veut gérer l’organisation des
séminaires d’une manière efficace.
Donner un cahier de charges pour la gestion de l’organisation des séminaires.
2. Utilisation du produit
Le produit sert à l’administration des séminaires et des clients dans la firme Teachware.
Aussi plusieurs requêtes doivent être possibles.
2.1 Domaines d’utilisation
Administration des séminaires et des clients. Utilisation commerciale
37
2.2 Groupes cibles
Les collaborateurs de la firme Teachware se subdivisent en deux groupes :
Le traitement des clients et le traitement des séminaires
2.3. Conditions d’exploitation
Environnement de bureau
3 Environnement du produit
Le produit fonctionne sur un poste de travail
3.1 Software
Système d’Exploitation : Windows 95
3.2 Hardware
PC
3.3 Orgware
Liaison de réseau avec l’ordinateur qui gère la comptabilité
3.4 Les interfaces du produit
Une copie des factures établies est enregistrée dans un fichier auquel a accès une fonction
spécifiée dans la comptabilité. Les virements sont enregistrées à travers une fonction
spécifique définie à cette fin.
4. La fonctionnalité du produit
4.1 Administration des clients
/F10/ Première saisie, changement et suppression de clients (participants et intéressés)
/F15/ Première saisie, changement et suppression de firmes, qui envoient leurs employés
au séminaire
/F20/ Enregistrement d’un client avec l’examen
/F30/ - s’il est déjà enregistré
/F40/ - si le séminaire souhaité est possible
/F50/ - si le séminaire est encore libre
/F55/ - quel est la morale de paiement
/F60/ Envoi d’une lettre de confirmation
/F70/ Suppression d’un client avec examen
/F80/ - s’il est même enregistré
/F90/ - si l’enregistrement a été fait 4 semaines avant le séminaire ( 40.000 FCFA de frais
de suppression ou proposition d’un autre candidat)
/F100/ - si l’enregistrement a été fait plus tard que 4 semaines avant le séminaire (100%
de frais ou un remplaçant)
38
/F110/ - si Teachware a annulé le séminaire (pas de facture)
/F115/ Information des candidats, au cas où Teachware annule le séminaire
/F120/ Première saisie, changement et suppression des enregistrements des séminaires
/F125/ Une firme peut commander une formation interne
/F130/ Création des autocollants d’adresse pour la publicité pour tous les clients et les
firmes
/F135/ Envoi d’un courrier en série à tous les clients et les firmes
/F140/ La comptabilité introduit les paiements dans une fonction spécifiée
4.2 Administration des séminaires
/F150/ Première saisie, changement et suppression de séminaires et de types de
séminaires
/F160/ Suppression des calendriers
/F170/ Enregistrement d’un séminaire exécuté
/F180/ Première saisie, changement et suppression des formateurs et leur attribution à
des séminaires et des types de séminaires
/F185/ Tous les formateurs peuvent recevoir une lettre en série pour les informer
/F190/ Etablir une liste de participants à un séminaire X (titre du séminaire, date de ___,
date à ___, Lieu du séminaire, Formateur(s), prénom, Nom, Firme, Lieu)
/F200/ Créer un certificat de participation (Titre, Prénom, Nom, de telle date, à telle date,
Titre du séminaire, Lieu du séminaire, Table de matières, directeur du séminaire).
4.3 Création des factures
/F210/ Dans la règle, une facture est créée et envoyée avec l’enregistrement
/F220/ Les copies des factures sont gardées dans un fichier sur lequel une fonction
spécialisée de la comptabilité a accès.
4.4 Requêtes
/F230/ Quand aura lieu le prochain séminaire X ?
/F240/ Quels collaborateurs de la firme X ont participé au séminaire Y ?
/F250/ D’autres requêtes doivent être possibles : Par exemple : Quelles sont les 10 firmes
avec lesquelles ont a réalisé le plus grand chiffre d’affaires ? Quel est le type de séminaire
qui a eu le plus grand nombre de participants dans l’année écoulée ?
5. Données du produit
5.1 Données des clients
/D10/ Les données suivantes des clients ou des intéressés sont à enregistrer : Numéro de
CNI, Nom (Titre, prénom, nom de famille), Adresse (Lieu, Téléphone), date de naissance,
fonction, chiffre d’affaire, Matériel d’information, client depuis
/D11/ Si le client appartient à une firme, alors les données suivantes sont à enregistrer sur
la firme : L’abréviation de la firme, la désignation de la firme, adresse, téléphone, fax, nom,
39
adresse, département, date de naissance, fonction de la personne de contact, notes, chiffre
d’Affaires, client depuis
/D30/ Un client ou une firme ne peut-il pas payer alors les données suivantes sont à
enregistrer : Date de la facture qui n’est pas encore payée, ainsi que le montant
5.2 Données sur le séminaire
/D40/ Les données suivantes sont à enregistrer sur chaque séminaire : Numéro du
Séminaire, Durée (en jours), De, A, Le début par journée, la fin par journée, début du
premier jour, Fin de la dernière journée, Lieu du séminaire (Hôtel/Firme, Adresse, Salle),
partenaire de coopération, Public(Oui/Non), Prix net, Frais d’annulation, Nombre
minimal de participants, nombre maximum, nombre actuel de participants, Exécuté
(Oui/Non)
/D50/ Les données suivantes sont à enregistrer sur chaque type de séminaire :
Abréviation du séminaire, titre du séminaire, but, méthodologie, table des matières,
présentation de la journée, Durée, Notes, groupe-cibles, pré requis, frais sans TVA,
Nombre minimal de participants, Nombre maximal de participants
/D60/ Les données suivantes sont à enregistrer sur chaque formateur : CNI, nom, adresse,
téléphone, Fax, date de naissance, biographie, honoraire par jour, brève description, notes,
formateur depuis
/D65/ Un séminaire est-il dirigé par un formateur, alors il faut enregistrer ce fait.
5.3 Données de réservation
/D70/ Pour chaque réservation par un client ou une firme, les données suivantes sont à
enregistrer : Enregistré le , Confirmé le , Facture le, supprimé le, Message le
6. Performance du produit
/L10/ Les fonctions /F180/ et /F190/ ne doivent pas durée plus de 15 secondes
d’interaction, toutes les autres doivent être en dessous de 2 secondes
/L20/ Au maximum 50.000 participants/intéressés et au maximum 10.000 séminaires
doivent être gérés
/L30/ 5% de tous les clients sont en difficulté de paiement
7 L’interface d’utilisation
/I10/ Pour un standard, il faut prévoir une interface orientée menu
/I20/ L’interface est à orienter sur l’utilisation de la souris, mais une utilisation sans souris
doit être aussi possible
/I30/ La norme DIN 66324, Partie 8 est à respecter
/I40/ Deux vues sur l’organisation des séminaires sont à distinguer : la vue de celui qui
traite les clients et celle de celui qui traite les séminaires
/I50/ Celui qui traite les clients traite les fonctions /F10/ à /F130/ ainsi que /F230/ à /
F250/. Il ne doit accéder qu’aux données nécessaires à ce traitement. Les droit d’accès
doivent être définis de manière correspondante
40
/I60/Celui qui traite les séminaires traite les fonctions /F150/ à /F200/ ainsi que /F250/
à /F250/. Il ne doit accéder qu’aux données nécessaires à ce traitement. Les droit d’accès
doivent être définis de manière correspondante
8. Définition de la qualité
Qualité du produit Très bien Bien Normal Sans importance
Fonctionnalité
Approprié x
Véracité x
Interopérabilité x
Ordre x
Sécurité x
Fiabilité
Maturité x
Tolérance x
Restaurabilité x
Utilisabilité
Compréhensibilité x
Facilité d’apprendre x
Facilité d’utilisation x
Efficience
Comportement temporel x
Temps de consommation x
Changeabilité
Facilité d’analyse x
Modifiabilité x
Stabilité x
Examinabilité x
Portabilité
Adaptabilité x
Facilité d’installation x
Conformité x
Echangeabilité x
41
/T60/ Un séminaire ne peut exister que s’il y a un type de séminaire correspondant.
42
Chapitre 5 : Gestions des versions et des configurations
conception intégration
implantation
D'après cette loi, il n'est donc pas conseillé de modifier à outrance les
fonctionnalités du système en une seule fois. En effet, cela risquerait
d'introduire un nombre conséquent de fautes. Une stratégie appropriée
44
consisterait à alterner les évolutions qui corrigent des fautes et celles qui
modifient les fonctionnalités ou le comportement du système.
45
5.2 Identification des versions
L'identification des versions d'un système semble immédiate. On appelle
simplement la première version l.0, puis les versions suivantes deviennent
1.1, 1.2, etc... A un moment donné, on décide de passer à 2.0, et on
recommence : 2.1, 2.2, etc... Les versions de base (1.0, 2.0, ...) représentent des
évolutions du système. Cette convention est linéaire, elle est basée sur
l'hypothèse que les versions sont créées en séquence. Les outils de gestion de
version comme RCS (W.F. Tichy, P. Eggert 1985), CVS (D. Grune, B. Berliner
1989) ou SCCS (Rochkind, 1975) supportent cette approche.
Dans la figure précédente, la version 1.0 est à l'origine de deux versions: 1.1
et 1.1a. La version 1.1 est elle aussi à l'origine de deux versions: 1.2 et 1.1b. La
version 2.0 n'est pas obtenue à partir de 1.2, mais de 1.1a. La version 2.2 n'est
pas issue de 2.0, mais de 1.2. Les nouvelles versions d'un système peuvent
avoir de nouvelles fonctionnalités, ou de meilleures performances, ou elles
peuvent corriger certaines fautes. On peut aussi obtenir une nouvelle version
fonctionnellement équivalente, mais qui est adaptée pour s'exécuter sur
46
différentes configurations matérielles et logicielles. C'est ce qu'on appelle
parfois des variantes du système. Chacune de ces versions peut elle aussi
servir de base à de futurs développements, elle peut donc avoir son propre
ensemble de versions et de variantes.
GL adm
teaching
research teaching
com
mit
updat
com
mit
e
update
GL GL
utilisateur A utilisateur B
47
À côté de l’interaction entre le repository et l’utilisateur, il existe une
structure interne d’organisation des versions de fichiers appelée branche de
développement .
Plus que la gestion des fichiers isolés, il est nécessaire de constituer des
versions de tous les fichiers constituant un ensemble d’un produit logiciel.
L’on peut aussi avoir un tampon (tag) pour une série de fichiers en
différentes versions.
Un tag (tampon) est un nom symbolique pour un ensemble de révisions.
48
5.4. La gestion de la configuration
Une configuration est un ensemble cohérent de composants permettant, à
un instant donné, d’éditer une version fonctionnelle complète du système. La
gestion de la configuration est une garantie de l'intégrité du système. La
granularité de la configuration est un paramètre économique.
C'est une forme de contrat d'assurance dont le montant est fonction des
risques afférents à un projet bien déterminé.
La gestion de la configuration concerne le suivi et le contrôle des produits
constituant le logiciel pendant le développement du produit, les différentes
revues résultent dans l’acceptance formelle des produits intermédiaires tels le
plan du projet, la spécification des besoins, le plan des tests, le manuel
d’utilisateur, le document de la conception et le code source. Quand un
produit traverse un point crucial de revue, il est placé sous le contrôle de la
gestion de la configuration et chaque changement ne peut se produire
qu’avec l’accord formel du client et du développeur. La gestion de la
configuration administrative et la dépendance des données assurent ainsi la
propagation des changements. Aussi assure t-elle une meilleure construction.
La gestion effective de plusieurs configurations devient aussi possible. La
structure du système de fichiers peut-être aussi soumise à la gestion de la
configuration qui prend en compte la renommination et le déplacement des
dossiers. Puisque la dépendance des données est ainsi versionnée, son
utilisation devient possible.
50
5.5.1 Les cas classiques
Les modifications d’un logiciel peut provenir de plusieurs situations parmi
lesquelles les plus fréquentes sont le problème de double maintenance, le
partage des données communes et utilisées dans des développements différents
et enfin les mises à jour simultanées à travers le travail de plusieurs
développeurs.
SYSTÈME A
Modifications
Copie #1 de
1. La double maintenance : Il faut C à T1
de C dans A à
T3
minimiser les duplications car,
inévitablement, les copies multiples C
SYSTÈME B
2. Le partage des données : Les programmeurs
Programmeur#1 et Programmeur#2 travaillent
tous deux sur le même constituant C. Il existe un Programmeur #1
réel danger : les erreurs de Programmeur#1 Danger
Le "secrétaire" doit garder trace des copies multiples et synchroniser les mises à
jour. Pour cela, il a besoin de discipline et rigueur dans le développement.
Pour donner du confort au Programmeur #1 et au Programmeur #2, et éviter
le problème du partage des données, C a été dupliqué, ce qui nous ramène au
problème de la double maintenance. On est ici en présence d’un dilemme.
51
5.5.2 Cas des progiciels
Les éditeurs cherchent à faire fonctionner le même progiciel (c’est-à-dire le
même code source) sur une variété de plates-formes aussi grande que
possible. Dans ce contexte, il est nécessaire de gérer les dépendances
hardware, celles du système d'exploitation et les évolutions de l’ensemble.
Les difficultés de la gestion de configuration concernent en général le
nombre d'objets à gérer qui dépend quant à lui de la granularité et du type de
nomenclature utilisée dans le développement, la variété des objets (code,
documentation, module, classe, etc), la variété des supports d'archivage et de
stockage (disque durs, CD, disquettes, cassettes, bandes etc.), les
caractéristiques "molles" du logiciel qui résultent en des dépendances
fonctionnelles, canaux cachés, etc., la durée de vie des équipements, des
outils, l’organisation du développement (plus ou moins normalisé) et les
acquisitions en logiciel et matériel. Toutes ces exigences constituent parfois
des boîtes noires dont il est souvent difficile de cerner les contours.
La gestion de configuration est un travail tridimensionnel qui concerne
le processus de gestion. Les trois axes de la gestion de configuration sont
résumés dans le graphe ci-après :
Processus GC
Identification
Contrôle
Administration
Audit
Nature du produit
Hardware
Firmware
Software
Documentation
52
Les quatre (4) fonctions principales de la gestion de la configuration sont
l’identification, le contrôle des modifications, l’administration et l’audit.
Le processus gestion de configuration se traduit par un ensemble de
procédures à suivre (workflow de la gestion de configuration). Il existe des
procédures automatiques qui s'appuient sur des outils. Par exemple, au
niveau du système d'exploitation, il existe des systèmes de gestion de fichiers
et un bibliothécaire, des systèmes de gestion des bases de données (SGBD),
les éditeurs de texte, les compilateurs, les traducteurs de langages, les
éditeurs de liens qui tous d’une manière ou d’une autre gèrent des versions.
Sous Unix ou Windows , il existe des logiciels de gestion des versions telles
SCCS, MAKE, RCS. Certains progiciels ont la faculté de gérer des versions
par exemple l’ outil ClearCase de RATIONAL. Cependant des procédures
manuelles de gestion exigent la formation des équipes, la discipline et la
rigueur individuelle où chacun doit nourrir le sens de l'équipe et le sens du
projet.
La bonne mise en oeuvre d'une gestion de configuration nécessite un
bon niveau de maturité de l'organisation de développement. Il s’agit d’un jeu
collectif qui implique la coopération de nombreux acteurs.
53
Chapitre 6 : Modélisation avec les méthodes semi-
formelles
6.1. Définition
Un modèle est une construction ou un objet mathématique qui décrit un système. Il
peut aussi représenter une théorie. En physique, l’on modélise la distance par
la formule distance = vitesse * temps. En génie civil, un ingénieur modélise
un bâtiment en utilisant le modèle de charge et de poids. En informatique,
nous modélisons les systèmes et leur environnement d’utilisation pour
comprendre leur comportement et analyser leurs propriétés.
La construction de bons modèles est la raison d’être des phases de
planification. Ceci justifie la présence des langages de modélisation et les
méthodes y afférentes. La devise étant : Engineers built models, so should
software engineers. Cependant, il existe une pléthore des langages de
modélisation. Les différences concernent la vue du système qui peut être
statique, dynamique, fonctionnelle ou orientée objet ; le niveau d’abstraction
en ayant par exemple les besoins versus les modules ou structures de classe ;
le degré de formalisme utilisé (informel, semi formel, formel) et enfin la
religion adoptée. Ici, on a l’école orientée objet (OO/OOD, OMT, UML), les
algébristes (ADT : signature, fonction), les sectes de Oxford avec Z et CSP
(Communicating Sequential Processes), le groupe de ASM (Abstract State
Machine), l’église de logique d’ordre élevé HOL (Higher Order Logic), la
congrégation de MERISE, etc…
Il existe plusieurs concepts dans la modélisation. Entre autres, l’on a les
arbres de fonction, les diagrammes de flux des données, les diagrammes E/R,
les diagrammes de syntaxe, le dictionnaire des données, le pseudo code, le
structogramme, les règles et les tables de décision, les variantes d’automates,
les réseaux de Petri, les diagrammes de classe, les cartes CRC (Class –
Responsability - Collaboration), les message-sequent-charts, …
54
Dans les méthodologies, les langages sont souvent intermixés. Dans
Z/CSP, l’on retrouve deux modèles et deux langages basés sur le fonctionnel
et le modèle dynamique événementiel. Dans la technique Object Modelling
Technique (OMT), l’on retrouve trois modèles, et trois langages (objet,
dynamique et fonctionnel). L’on peut modéliser les diagrammes de classe, les
diagrammes d’état et le flux de données. Dans UML, l’on retrouve neuf
langages (class, objet, uses cases, séquences, collaboration, statecharts,
activités, composant, déploiement). Nous étudierons quelques modèles
simples : le diagramme E/R, le diagramme de flux de données, le modèle de
classes, l’orientation objet, UML, etc.
Exemple : L’on veut modéliser le fait qu’un étudiant est inscrit dans une
unité de valeur(UV). L’on a deux entités : Etudiant et UV. Un étudiant a un
nom, un âge et un numéro matricule. Une UV a un titre et un code.
Dans les langages de programmation, les attributs matricu âg no
correspondent aux types de base alors que les le
désignatio Code
n
Les relations sont représentées d’une manière graphique
dans le modèle ER par un losange. Etudiant suit UV sera
représenté par le graphique ci-dessus.
55
La méthode E/R présente des avantages et des inconvénients. Ces
avantages proviennent de sa simplicité. Les images et les trois concepts sont
faciles à comprendre. Plusieurs outils ont été développés pour supporter la
philosophie E/R et elle a beaucoup de succès dans la pratique. Les
inconvénients proviennent de son caractère non standarisé. En effet, les
relations sont elles binaires ou n-aire, les extensions orientées d’objets ont-
elles un fondement, par exemple la relation is-a ? Ensuite, il existe des
propriétés impossibles à spécifier d’une manière visuelle. Enfin chaque
fonction avec un argument correspond à une relation n+1 arguments.
Get a
book
book reception Book reception
List of authors
anthor
title
List of titles book title, user name
title
List of borrowed books
List of topic Search
by
topi
list of titles
Display of titles
topi
Source : Ian Sommerville, Software
Engineering. Topic request by user
56
Ceci constitue une première approche. Il n’existe encore aucune information
sur la manière de trouver un livre. Un raffinement s’impose et est présenté
partiellement comme suit
shelves book
Get a
book
book reception Book reception
List of authors
Author title
Book
B
<shelf # , book # >
57
6.4 Les modèles de classe
Les modèles de classe soulignent les objets et leurs relations. Le but palpable
étant la compréhensibilité et la réutilisation. Le système est décrit à l’aide des
objets qui par leurs attributs et leurs fonctions soit collectés dans des classes.
Maison familiale Maison familiale Maison familiale
Type: maison de campagne Type : Bungalow Type : maison de ville
Propriètaire : Dr Fam Propriétaire : Kengso Propriétaire : yamlague
Adrees : Idole Adresse : Bamyanga Adresse :calmette
Surface : 400m2 Surface : 250m2 Surface : 200m2
Nbre douches : 3 Douche :2 Douche :2
Piscine : oui Piscine :non Piscine :non
Jardin : 2000m2 Jardin :1500m2 Jardin :400m2
Année : 1970 Année :1986 Année :1990
Prix : 60m Prix :40 Prix 30m
Demander prix Demander prix Demander prix
Immobilier
Propriétaire
Adresse
Année :
Prix
Demander prix
Type de maison
Surface Nombre de bureaux
Douche Nombre d’étages
Piscine garage
Jardin
Demander nombre de
pièces
58
6.5 Modélisation Orientée Objet
Il existe pour l’orientation objet plusieurs méthodologies : Object
Modelling Technique (OMT), Object Oriented Analysis Technique/Object
Oriented Design (OOAT/OOD), Unified Modelling Language (UML), …
L’OMT couvre par exemple un modèle objet avec la hiérarchie de classes et
les associations entre les classes (par exemple le modèle ER), un modèle
fonctionnel : la description comment les objets agissent globalement ensemble
(par exemple le flux de données) et un modèle dynamique, avec le modèle
orienté événement (par exemple les automates ou les statecharts). Les
avantages sont la bonne modularité et la réutilisation. Cette technique se
rapproche aussi des objets réels. Ses inconvénients proviennent de son
opacité sémantique.
Les langages de modélisation comportent une longue histoire avec deux
branches essentielles : les méthodes formelles et celles semi-formelles.
Les méthodes formelles sont étudiées dans la recherche depuis les années
1960. L’on a les méthodes et langages telles VDM (Vienna Development
Method), Z, la spécification algébrique, les algèbres de processus, … Les
méthodes semi-formelles quant à elles sont issues des années 1970 et
couvrent les diagrammes ER, les flux de données, etc…
Entre les années 1970 et 1990, il y a eu une grande prolifération de
modélisation orientée objet (OOA/OOD, OMT, OOSE…). Il existe une guerre
ouverte entre les langages proposés et leur méthode. L’UML résulte en une
standardisation depuis 1995.
UML 1.3
2000
...
UML 1.0
CreerUnCompte
Client
ConsulterUnCompte
Guichetier
RetirerDeLArgentD
uDistributeur
DeposerDeLArgentSurUn
Compte
RetirerDeLArgentD
UnCompte GererLesCredits Directeur
61
Guichetier : Un guichetier est un employé de la banque chargé de faire l’interface entre
le système informatique et les clients qu’il reçoit au comptoir. Le guichetier peut
réaliser les opérations courantes : création d’un compte, dépôt et retrait d’argent, etc.
La définition d’acteurs permet surtout de trouver les cas d’utilisation par
exemple en posant des questions du genre : que peut faire un guichetier ? un
client ? le directeur ? Cependant cette définition des acteurs peut aussi être
utilisée pour définir différents points de vues sur le système, déterminer des
droits d’accès par type d’acteurs, fixer des ordres de priorités entre acteurs, ...
Pour chaque cas d’utilisation, le développeur doit choisir un
identificateur représentatif, donner une description textuelle simple de
manière que la fonction réalisée doit être comprise de tous. Il est absolument
nécessaire d’abstraire des détails encombrants. De ce fait, il est indispensable
de préciser ce que fait le système et ce que fait l’acteur. Pour assurer la
consistance, le dévéloppeur doit éviter que les cas d’utilisation se
chevauchent.
Exemple : RetirerDeLArgentAuDistributeur
Lorsqu’un client a besoin de retirer du liquide il peut en utilisant un distributeur retirer
de l’argent de son compte. Pour cela
- le client insère sa carte bancaire dans le distributeur
- le système demande le code pour l’identifier
- le client choisit le montant du retrait
- le système vérifie qu’il y a suffisamment d ’argent
- si c’est le cas, le système distribue les billets et retire l’argent du compte du client
- le client prend les billets et retire sa carte
62
RetirerDeLArgentAuDistributeur
Précondition : Le distributeur contient des billets, il est en attente d’une opération, il
n’est ni en panne, ni en maintenance
Début : lorsqu’un client introduit sa carte bancaire dans le distributeur.
Fin : lorsque la carte bancaire et les billets sont sortis.
Postcondition : Si de l’argent a pu être retire, la somme d’argent sur le compte est égale
à la somme d’argent qu’il y avait avant moins le montant du retrait. Sinon la somme
d’argent sur le compte est la même qu’avant.
RetirerDeLArgentAuDistributeur
Déroulement normal :
(1) le client introduit sa carte bancaire
(2) le système lit la carte et vérifie si la carte est valide
(3) le système demande au client de taper son code
(4) le client tape son code confidentiel
(5) le système vérifie que le code correspond à la carte
(6) le client choisit une opération de retrait
(7) le système demande le montant à retirer
…
Variantes :
(A) Carte invalide : au cours de l ’étape (2) si la carte est jugée invalide, le système
affiche un message d ’erreur, rejette la carte et le cas d ’utilisation se termine.
(B) Code erroné: au cours de l ’étape (5) ...
63
• Le système affiche un message et propose de recommencer
• Nawal tape ‘6622’
• Le système affiche que le code est correct
• Le système demande le montant du retrait
• Nawal tape 50000 frs CFA
• Le système vérifie s’il y a assez d ’argent sur le compte
•...
Demander code
Appeler
Dadda Entrer code 6622
64
Chapitre 7 : La modélisation des classes
65
Order Multplicity Costumer
Date received is prepaid Name
Number : string Address
Price : money
* 1
Dispatch ( ) class CreditRating ( )
Closed ( ) association
1 { if order. Costumer. generalization
creditrating is « poor »
then order is prepaid
must be true }
*
Order line Constraints Cooperate costumer Personal castumer
quantity : integer ContactName
price : money CreditRating
isStatisfied : attributes CreditLimit CreditCard#
boolean Remind ( )
operations BillForMonth (integer)
* * {creditRating( ) = = « poor »}
sales rep 0..9
employee
product
Les diagrammes de classes sont utilisés dans leur fondement conceptuel sans
rapport direct avec l’implantation. Dans la spécification, ils désignent les
interfaces et les parties de la sémantique. Dans l’implémentation, ils
décrivent ce qui doit être programmé.
En général, UML ne fait pas de distinction formelle. Dans la pratique, il
mélange la notion de spécification et d’implémentation. Les seules
différences se trouvent dans le degré d’abstraction. Dans la phase des
besoins, plusieurs détails sont omis. Les décisions concernant par exemple la
localisation des états, la navigation entre les objets et la division
comportement / implémentation ne sont prises en compte que plus tard.
66
7.2 Les classes
Une classe décrit un ensemble d’objets avec des rôles équivalents dans un
système. Les classes peuvent décrire les choses palpables du monde réel (avion,
tableau, bœufs, …), des rôles (abonnés d’une bibliothèque, étudiants,
enseignants, etc…), des transactions (commandes, compte bancaire, etc.), des
choses d’un ordinateur (des listes, des tableaux de hashing, etc.), des
comportements, des applications , etc.
Dans sa forme visuelle, une classe est représentée par un carré avec ou
sans attributs et des opérations.
Book
Title : String
Book
Copy on self ( ) : integer
BorrowCC : copy
Les attributs définissent les données (états des objets). Les opérations
(méthodes) définissent comment les objets interagissent. L’on peut aussi
nommer les responsabilités.
Model View Control
Responsabilities
--renders the model on the screen
Responsabilities --manages movement and resizing Responsabilities
--Manages the state of the model of the view --synchronize changes in
--intercepts user events the models and views
67
identifier : choisir tous les substantifs et les phrases principales ; il faut
utiliser le singulier pour la désignation de ces entités identifiées comme
des noms possibles de classe.
consolider : éliminer les candidats non appropriés, c’est-à-dire là où le
nom est redondant (plusieurs noms équivalents), non clair (préciser ou
éliminer), un évènement ou une opération (sans états, comportement ou
identité), un attribut simple ou en dehors du système.
L’expérience, la fantaisie créative et la patience sont des atouts.
Méthode 2 : Les cartes CRC : L’idée des CRC a été inventée par
Beck/Cunningham en 1989. Pour chaque classe, l’on note sur une carte le
nom de la classe (Class), ses responsabilités (Responsabilities) et la liste des
classes en collaboration (Collaboration).
Quand il existe plusieurs responsabilités ou collaborations, l’on crée une
nouvelle classe. L’on distribue ensuite les cartes à l’équipe de développement
et l’on choisit un scénario use case. L’on joue alors le scénario et remplace si
possible les collaborateurs. Ainsi on peut découvrir d’autres responsabilités
et des collaborations. Ensuite, l’on y ajoute les attributs et les méthodes. C’est
le brainstorming .
Library member Copy Book
Responsabilities Collaboration Responsabilities Collaboration Responsabilities Collaboration
- Maintain data about -Maintain data about a - Maintain data about
copies currently particular book book
borrowed ; -Inform corresponding - Know wheither
- Meet request to COPY book when borrowed BOOK there are borrowable
borrow and return copy and return copies
68
7.2.2 Les associations
Les associations décrivent des liens sémantiques entre les objets dans une
classe. Elles illustrent les rapports entre les objets ou les autres instances dans
un système. La sémantique des associations est celle des relations dans le
modèle E/R.
is_copy_of
COPY BOOK
PERSON COMPANY
Employee Employer
69
Direction nomminelle : elle décrit dans quelle direction quel nom doit être
lu.
works_for
PERSON COMPANY
chairperson
0..1
School has Department
member
1..* 1..*
assigne
1
dTo
1
Student attends 1..* Course teaches Instructor
1..*
70
Chapitre 8 : Modélisation formelle avec Z
8.1. Z
Le langage Z proposé par Jean Raymond Abrial dans les années 50 possède
une grande force d’expression. Elle est basée sur la logique prédicative de
premier ordre avec égalité (PL1=, first order logic with equality), et la théorie
des ensembles typés. Il possède un outillage de mathématique appelé
mathematical toolkit qui est une bibliothèque de définitions standard de
types abstraits (sets, lists, bags). Ce langage permet la modélisation d’un
système aussi bien statique que dynamique par la modélisation/spécification
des données du système et leur description fonctionnelle (transition d’états).
Z est supporté par différents outils et systèmes et entretient de bons rapports
avec d’autres méthodes formelles basées sur PL1= et la théorie des ensembles
entre autres VDM (Vienna Development Method), B aussi développé par
Jean Raymond Abrial et très utilisé en France.
Il existe d’autres méthodes formelles basées sur d’autres fondements.
D’abord la logique d’égalité (Horn logic) utilisée dans les spécifications
71
algébriques, la logique des prédicats avec égalité (PL1=), la logique de
premier ordre (FOL) et la logique d’ordre élevé (HOL).
Z est utilisé d’une manière très efficace depuis les années 1989 au Oxford
University Computing Laboratory où il est né. Une exigence du
gouvernement britannique impose que tous les systèmes à sécurité critique
doivent se faire avec Z.
Un modèle mathématique qui représente le comportement d’un
programme peut être utilisé comme une spécification formelle. Mais à quoi
sert une spécification si on peut écrire facilement un programme pour ne pas
l’implémenter directement ? La réponse est qu’un programme peut être
crypté. Aussi l’on a besoin d’une spécification qui représente le niveau
d’abstraction appropriée. Par exemple, que fait le programme suivant ?
fun int_root a= (* integer square root*)
let val i =ref(0) ;
val k=ref(1) ;
val sum = ref(1) ;
in while ( ! sum <= a) do
(k : = ! k+2 ;
sum : = !sum+ ! k ;
i : = !i+1) ;
in_root : ∠ déclaration
72
Le dernier prédicat couvre les cas des nombres négatifs en fixant le résultat à
0.
8.2 Un exemple introductif : The Birthday Book
Le birthday book est une petite base de données dans laquelle des noms des
personnes et leurs dates de naissance sont mémorisés. Un modèle essentiel
mais simple est présenté comme suit :
Addbirthday
Remind
Init Birhdaybook
Findbirthday
Name of schema
BirthdayBook declaration of typed variables (represent
known : Name observations of the states)
known est l’ensemble des noms avec des anniversaires mémorisés. birthday
est une fonction partielle qui lie certains noms à des anniversaires. La relation
entre known et birthday constitue l’invariante du système. L’ensemble known
correspond au domaine (dom) de la fonction birthday. Un exemple
d’ensemble d’états est donné comme suit :
known = Susy, Mike, John
birthday = John 25 March ; Susy 20 décembre, Mike 20 décembre}
Invariante : known = dom Birthday
73
Il est à noter qu’il n’y a pas de limitation pour les anniversaires mémorisés et
qu’il n y’a pas d’ordre particulier pour les entrées. Chaque personne n’a
qu’un seul anniversaire (Birthday est une fonction ). Deux personnes peuvent
avoir leur anniversaire le même jour.
Etape 3 : Définir les opérations du système basées sur les relations de l’espace
d’états.
Il existe des opérations qui changent l’état du système et d’autres le laissent
inchangé. Certaines opérations ont des entrées et /ou des sorties.
FindBirthday
Ce schéma laisse l’état du système inchangé ( : le
symbole d’importation). En effet, rechercher un nom BirthdayBook
n’ajoute rien et n’enlève rien aux noms mémorisés.name ? :NAME
Le schéma précédent est équivalent à celui-ci-contre :date ! : DATE
known’ = known
Opération 2 : Retrouver la liste de toutes les personnes
birthday’= birthday
! est known
qui ont leur anniversaire à une date donnée. cardsname ?
date ! = birthday (name ?)
l’ensemble des noms auxquels les cartes de voeux sont
envoyées.
Remind
BirthdayBook
today ? : DATE
cards ! : − NAME
cards ! = {n known |
birthday (n) = today ?}
BirthdayBook
Ici le prédicat known=
known = birthday =.
En résumé, que dit la spécification sur l’implantation ? Elle décrit ce que fait
le système sans préciser comment. Par exemple la spécification Z décrite ci-
dessus identifie les opérations et les données légales et illégales. Les
opérations sont, par exemple, l’insertion simultanée des anniversaires de
deux personnes, l’insertion de l’anniversaire d’une personne connue du système
(c’est-à-dire quand name? known). L’opération ChangeBirthday n’est
75
pas spécifiée et pourrait être ajoutée ou réalisée seulement dans
l’implantation.
Il existe plusieurs outils et systèmes supportant Z. Pour de plus amples
informations, on peut se référer à : http ://archive.comlab.ox.ac.uk/z.html.
Quelques uns des outils sont :
ZETA : environnement ouvert incluant un véritable analyseur de type.
HOL-Z : intégration de Z dans un système de preuve et de théorème
Object-Z : une extension orienté-objet de Z.
Department
EMPLOYEE Employee
name : NAME
[NAME] Income
Dept ! : DEPARTMENT
DEPARTMENT : := A|B|C Income : 100.000 .. 800.000
1
1
Dates Room
Meeting
n n
contain contai 76
1
1
MeetingSeries ==seq (Date) x seq(Room)
ou
MeetingSeries == (Room) x (Date)
Form
name
1 Employee
Les relations Addres company n
Dep
s emplo
t
SalesPartne
r Incom
e
Cette relation peut être implémentée par la relation partielle suivante dans Z.
Un employé est relié à une entreprise. Les attributs des entités ont disparu.
employs == Employee company
Cette transformation montre que la relation entre les deux entités est une
injection partielle. C’est pourquoi on peut écrire dans Z
has == company >-+-> companyId
BirthdayBook BirthdayBook
... …
ab
(a b) ( c v d )
cvd
mais
... .....
... …
SchemaThree
SchemaOne
c:Z
a : Z
a:Z
c : Z
a c c a c c
c {0,1}
a. : c : Z , c : Z| SchemaOne SchemaThree
a. :Z, c : Z| ( a c ) (c ) ( a c ) (c ) ( c { 0,1 } )
les parties déclaratives sont omises. En d’autres termes, toute variable qui
satisfait à SchemaOne doit satisfaire à SchemaThree.
SchemaOne SchemaOne
a:Z
c:Z a:Z
s:Z
SchemaOne [ a/a, s/c]
a c c
a s s
79
Schémas géneriques : L’on peut renommer les composantes mais pas changer
leurs types. Pour utiliser un même motif pour plusieurs types, les schémas
génériques avec des paramètres formels sont utilisés.
SchemaOne[X]
a:X SchemaOne
c: X Si X = Z alors on a
a c c a : Z
s : Z
a s s
rel ? totord x
R : X X, : seq X ( nondecreasing (R) out ! nondecreasing [X] ( rel ? )
i , j : dom |i<j ((j), (j) ) R items (out ! ) = items (in ? )
Les types des variables déclarées simultanément doivent être les mêmes.
P
P
Sur ce schéma une opération est décrite par deux copies une avant et une
après (avec prime).
Disjonction des schémas : Elle décrit les alternatives dans le comportement du
système
S T a :A
a :A b:B b:B
b:B c :C S \/ T = c :C
A
P Q PQ
BirthdayBook
name ? :NAME
date ? : DATE
name ? known
birthday’ =birthday U name ? date ?
81
result ! =ok
quand l’entrée est correcte, l’on a alors
Addbirthday /\ Success.
Quand l’entrée est incorrecte, nous introduisons un
autre Schéma
AlreadyKnown
Birthday Book
name ? :Name
result ! : Report
name ? known
date ! = already_known
name ? : Name
date ! : Date
name ? known
date ! = birthday (name)
NotKnown
Birthday Book
name ? :NAME
result ! : REPORT
name? known
date! = not_known
82
8.5 Queens Problem (Problème des reines)
Huit reines doivent être placées de telle sorte qu’aucune ne menace l’autre
(même ligne, colonne ou diagonale)
Q
Q
Q
Q
Q Q
Q
Q Q
Q
Une menace une solution
Définition de base :
SIZE = = 8, ROWS = = 1 . . SIZE, COLS = = 1 . . SIZE, POS = = ROWS COLS
Les positions des figures sont définies par Queens = = POS
1er essai : les reines ne doivent pas être sur la même ligne ni colonne.
Queens. IP POS
# queens = SIZE
q1, q2 : Queens q1 q2
first ( q1) first (q2 )
second (q1 ) second (q2 )
En d’autres termes, chaque figure q dans une ligne x possède une colonne
individuelle. Nous sommes en présence d’une bijection.
queens : Rows >-->> cols.
Il ne reste plus qu’à résoudre le problème des diagonales. Chaque champs
(POS ) repose sur deux diagonales et chaque diagonale est décrite par une
valeur sur l’axe y.
DIAG == ( 1-SIZE) .. ( 2* SIZE)
83
x : ROWS, y : COLS up(x,y) = y-x
x : ROWS, y : COLS down(x,y) = y+x
x
up et down ne sont pas injectifs. Plusieurs champs sur une diagonale sont
attribués à la même valeur y.
En fin de compte, l’on peut remarquer que Queens
l’ensemble des liaisons queens contient toutes les
queens : ROWS >-->> COLS
solutions c’est-à-dire la description de tous les faits
nécessaires pour l’implémentation et que la solution
n’est pas liée à une stratégie d’implémentation. queens up POS >--> DIAG
queens down POS >--> DIAG
84
Chapitre 9 : Des modèles aux codes
Le principe secret est réalisé ici par les mots clé import qui spécifie une
classe (LinkedList) dans un paquet (java.util ) et public/private/protected
qui sont des mécanismes de contrôle.
9.3.3 L’héritage
Il existe deux sortes d’héritage : l’héritage de l’implémentation où la
déclaration des sous-classes permet la réutilisation des implémentations
(programmes) et l’héritage des interfaces. Java permet l’héritage simple des
programmes et l’héritage multiple des interfaces.
Exemple : Définissons un objet géométrique
public abstract class Shape {
public double area ( ) { return 0.0 ; }
public double volume ( ) { return 0.0 ; }
public abstract string getName ( ) ;
}
public class Point extends Shape {
protected double x ; y ;
public Point (int a, int b) { x = a, y= b; }
. . .
87
public string getName ( ) { return « point », }
}
public class Circle extends Point {
protected double radius ;
public circle (double r, int a , int b)
…
public string getName ( ) { return « circle », }
}
88
Ici nous optons pour une conception générale consistante à savoir
l’utilisation de get et set .
L’expression x’ =x+1 réalise le cas concret pendant que l’inégalité x’>x est
le cas abstrait. Il existe des méthodes pratiques pour générer des programmes
à partir des spécifications Z. Elles dépendent surtout du langage vers lequel
on veut extraire le code ( HASKELL, C, C++, Java ). L’idée fondamentale est
la suivante : les types en Z sont donnés en définition des types de données.
Les définitions axiomatiques correspondent aux constantes ou des données
non changeables. Les schémas quant à eux représentent des données
changeables.
90
9.5.2 les relations
On a à faire ici à une relation entre les naturels et les entiers.
C int u[maxVal]
phone : Name ---> Z Haskell : type Name = string,
type phone = (Name, int)
phones :: phone
domaine = subscribes
Exemple
PS
Implémentation en C
contractor : switch Type def int SIGNAL ;
preset, setpoint, output: SIGNAL Type def enum open, closed Switch ;
Type def struct powerSupply
{switch contactor ;
contractor = open setpoint= 0
signal preset, setpoint , outpoint ;
contractor = open output < 2 int faults ’N_faults’ ;
} PS
91
public void op ( ) {x =x + y ; }
known.add(name ) ;
name ? known
}
birthday’ =birthday name ? date ?
public string findBirthday (string name )
name ? Known birthday = birthday {name ? ↦ date ? } If ( ! known.contains (name))
⊑ if (name ? known) birthday =birthday { name ?↦ date ? { string date=string birthday.get(name ) ;
⊏ if ( !known.contains (name) birthday.put (name , date )
return date ;
92
Chapitre 10 : les interfaces graphiques
93
6. un feedback informatif et un traitement simplifié des erreurs.
7. Un retour simple sur les actions passées
8. Les dialogues.
Il est nécessaire de se demander si développer une interface graphique
(Graphical User Interface, GUI) est un art ou du génie logiciel. En effet, les
solutions graphiques présentées sur le web et certains programmes font
croire que le GUI est une solution artistique. Cependant la plupart des GUI
sont des tâches d’ingénieurie contrôlées par des guides de styles et de
réaction à la technologie. Les principes de la conception des GUI sont :
- les affichages graphiques avec couleur
- la présence d’un matériel spécial pour le réallumage.
Souvent la technique utilisée est le WIMP c’est-à-dire le Windows Icons
Menue Pointers ou Windows Icons Mice Pulldown Menues.
Le noyau de cette technologie est bien la notion de Widget (Tk) ou des
composantes graphiques (awt/swing) organisées en arbres. Les GUI sont des
systèmes réactifs qui lient des évènements à des actions avec les interfaces
graphiques l’on retrouve tous les problèmes de la programmation
concurrentielle tels la synchronisation, les call-backs, les notificateurs, le
blocage des ressources et le interleaving. Le développement des GUI est
souvent sous-estimé. Leur modélisation se fait à travers les statecharts.
94
test, il est nécessaire qu’un outil soit utilisé qui permette d’automatiser les
enchaînements, même partiellement. Il est nécessaire que ce soit les
utilisateurs réels ou potentiellement réels qui valident l’interface en utilisant
des métriques comme, par exemple, le calcul des temps moyens pour
accomplir une tâche (par grandes familles de tâches), les fréquences d’erreurs
par profil utilisateur et par type de tâches, la fréquence d’utilisation de l’aide
en ligne et/ou de la documentation utilisateur, la fréquence d’utilisation de
la fonction «undo». Cette phase très importante décide de l’acceptabilité du
produit final. Ici les développeurs peuvent adapter le produit aux besoins des
utilisateurs en jaugeant fonctionnalité et ergonomie.
En ce qui concerne la phase de test unitaire, le développeur doit vérifier la
conformité du comportement de tous les objets graphiques par rapport au
système graphique hôte et à son guide de style (Windows, Macintosh, X-
Window/Motif). Chaque développeur doit respecter l’esthétique de son
produit en termes de couleurs, de l’alignement des groupes de boutons
(radio, case à cocher, etc.) et des polices de caractères (labels, boutons, menus,
etc.). Les aspects généraux telles que les conditions de validation des données
doivent être minutieusement étudiées. Ils concernent surtout les valeurs par
défauts des options, des champs, …, la longueur maximum des chaînes de
caractères, les dates, les valeurs numériques, les messages d’erreurs etc.
Un aspect souvent negligé et qui conduit à la longue à une monotonie
d’utilisation ou des cas de rejet est le confort de navigation. L’utilisateur doit
pouvoir accéder aisément aux fenêtres à partir des menus, de la barre d’outil,
…. Peut-on avoir plusieurs instances d’une même fenêtre (est-ce normal ?).
Les fenêtres sont-elles modales ou non modales?
Il faut tenir compte de la sémantique des données dans les fenêtres de
communication. Quand les données sont-elles prises en compte?
Il est nécessaire ici de vérifier les confirmations (fermeture de la fenêtre,
boîte de dialogue, annulation), de s’assurer des transactions et du «feed-
back» à l’utilisateur.
En terme général, il faut que les champs «read-only» soient grisés. Il faut
de surcroît s’assurer que les boutons «OK» et «annuler » sont groupés et
séparés des autres boutons. Il faut faire la chasse aux abréviations (labels,
boutons, …) et enfin s’assurer que le «focus» est positionné sur le bon objet à
l’ouverture d’une fenêtre ou d’une boîte de dialogue.
95
10.3 Technologies concrètes : Java /swing
Le Java/Swing est une technologie populaire puissante créée par Netscape
et Sun depuis 1996. La conception est basée sur une bibliothèque orientée
objet. Les opérations parallèles se font à travers la Java threads (programmes
qui traitent le parallélisme). Il soutient aussi l’adaptation de l’utilisateur à
travers le look and feel tel Windows, Motif, Metal. Il incorpore des
composantes d’ordre élèvés telles les listes, les tables, les arbres, etc. Il existe
sous deux variantes :
- Java/awt qui est une approche simple mais ayant des problèmes de
portabilité
- Java/swing qui est une approche de painture mais avec des problèmes de
vitesse d’exécution. Les composantes des fenêtres sont organisées dans
une hiérarchie de classe.
Object
Compoment
Container
JComponent
Window
Frame
JPanel JLabel JText Abstractbutt Jlist …
on
JFrame
96
Class MyPanel extends JPanel
West {setLayout (new Borderlayout ( ) ;
…
North add (yellowButton,’south’ )
}
East
Center
South
10.4 Conclusion
La conception et l’analyse des GUI peuvent être extrêmement complexes. Il
existe plusieurs problèmes concernant leur analyse et validation même si les
fondements théoriques sont simples et clairs. Le modèle des données est
réglé par les widgets à travers l’héritage : cependant la technologie des motifs
d’observateur est incommode.
Un exemple d’interface.
98
Chapitre 11 : La validation et le test des logiciels
99
given : specification S
Procedure : - apply (highly interactive) transformation
rules like Divide and conquer
- produce sequence of specifications such that Si+1
refines Si for some refinement relation refines
Examples of Systems : TAS, KIDS, CIP, TKwinHOL, …
La méthode de transformation et de vérification a des avantages et des
inconvénients. L’avantage principal repose sur son applicabilité principielle
aux algorithmes, à l’intégration logicielle et architecturale. Elle peut produire
des logiciels de qualité très élevée.
Ses inconvénients son nombreux. En effet, elle est trop chère du moins
intellectuellement. L’aide automatique en logique est encore embryonnaire.
Enfin, il est aujourd’hui difficile d’intégrer des vérifications automatiques
dans tous les processus du développement de logiciel. En conséquence, elle
est parfois réservée à une application à sécurité assez critique.
100
11.3 Le test
Le problème fondamental du génie logiciel est le problème de l'erreur.
Comment construire des logiciels qui soient ergonomiques, fiables, évolutifs,
économiques, satisfaisant aux critères Coût/Qualité/Fonctionnalités/Délais
de réalisation (CQFD), garantissant le contrat de service requis par les
usagers ?
Tout logiciel compte des bogues. Les bogues viennent du mot anglais
"bug" qui signifie insecte, parasite. L'utilisation de ce mot pour désigner une
anomalie vient de l'époque des premiers ordinateurs à tubes à vide. En effet,
des cafards, attirés par la chaleur dégagée par ces tubes, venaient se réfugier
dans ces machines et y mouraient cuits. Leurs cadavres provoquaient des
court-circuits, d'ou des pannes qui ont donc été appelées des "bug".
L'Académie Française a proposé d'utiliser le mot bogue qui désigne
l'enveloppe épineuse de la châtaigne, et par comparaison, des problèmes
épineux.
Sous le mot bogue, l’on retrouve diverses notions à savoir l’erreur, le
défaut, la défaillance et la panne. Tous ces termes ont été normés par ISO.
ERROR (Erreur) : Human action that results in software containing a fault.
For instance omission or misinterpretation of user requirements in a software
specification, and incorrect translation or omission of a requirement in the
design specification.
DEFECT (Défaut) : A product anomaly; e.g. (1) omissions and
imperfections found during early life cycle phases and (2) faults contained in
software sufficiently mature for test or operation.
FAULT (Défaillance) : 1) An accidental condition that causes a functionnal
unit to fail to perform its required function. (2) A manifestation of an error in
software. A fault if encountered may cause a failure.
FAILURE (Panne) : The termination of the ability of a functionnal unit to
perform its required function. A failure may be produced when a fault is
encountered.
L'erreur humaine est fréquente dans l'activité logico-mathématique, la
généralisation et la construction des abstractions, la modélisation et la
dynamique des systèmes, la communication (comprendre et être compris au
sein d’un groupe : la sémantique), la traduction (changement de code) sont
ces activités au coeur de la problématique informatique.
L’informatique doit assumer cette responsabilité car les bogues et les
intrusions diminuent la confiance dans l'informatique. Leurs effets coûtent
très cher. Leur réparation est coûteuse.
101
Les problèmes rencontrés lors de l'utilisation d'un logiciel peuvent avoir
deux sources à savoir des erreurs résiduelles de développement ou
introduites lors des corrections précédentes ou l'utilisation du logiciel dans
un contexte non prévu. Il est impossible de prévoir tous les modes possibles
d'utilisation d'un logiciel, (mais celui-ci devrait "se défendre" contre les
utilisations dangereuses pour lui).
Le coût d'un bogue est très dépendant du moment où il a été détecté. Si
pendant la phase de conception il a un coût 1, pendant la phase d'intégration,
il coûte déjà 10 fois plus et pendant la phase de recette, son coût vaut 100 fois.
Une détection tardive nécessite souvent des retours en arrière dans le projet.
Maurice Rozenberg affirme que "le test n'est pas une science exacte. Il fait
appel au bon sens autant qu'à la haute technologie". Son succès dépend
beaucoup plus de l'attitude psychologique des développeurs et des testeurs
que des techniques mises en œuvre.
Cependant, le test reste la technique la plus usitée pour assurer la qualité
d’un logiciel, malgré qu’il soit parfois utilisé d’une manière non
systématique. Aussi devrait-il être potentiellement complémentaire aux
spécifications formelles. Le test est très cher, couvrant 50 % de coût et 50 %
du temps de développement. Le test ne remplace pas réellement la
vérification.
Program testing can be used to show the presence of bugs and not to
show their absencedit Dijkstra. Le test est admis comme une voie pour
augmenter la véracité d’une spécification et est basé parfois sur les
heuristiques non totalement comprises. Tout au long du processus de
développement, on distingue le test d’acceptance, le test d’intégration, le test
d’unité.
Le test d’acceptance concerne la version préliminaire d’un logiciel appelé
-test, -test, …
Le test d’intégration procède par des tests le long des interfaces et aussi
l’interaction entre les différentes composantes. Le but étant de découvrir si
les préconditions et les sous-composantes sont respectées. Une entrée
(normale) d’un système ne doit pas produire une violation de résultat dans
un comportement (exceptionnel).
Le test d’unité consiste en des tests d’une fonction ou d’un module. Ce but
primordial étant la fixation des cas pour le comportement normal ou
exceptionnel du système.
102
Bien évidemment, il serait aberrant de vouloir réaliser des tests exhaustifs
de toutes les fonctions et méthodes écrites pour une application : on ne va
pas tester une méthode de calcul avec toutes les possibilités connues.
L'attention va surtout se porter sur l'interaction entre les différentes
fonctions, entre les fonctions et l'interface graphique, entre le logiciel et le
système d'exploitation.
Dans tous les cas, le but avoué du test est de découvrir des défauts. Un
test qui n'en trouve pas n'est pas forcément un test réussi.
Parce qu'il est impossible de créer un test qui puisse effectivement vérifier le
bon fonctionnement de l'ensemble d'une application, le test est divisé en une
série de tests plus spécifiques, chacun faisant appel à une logique
particulière, ou se portant sur un niveau précis de la conception ou de
l'utilisation. Nous allons survoler ici quelques-unes des méthodes les plus
couramment utilisées, en sachant que la description complète de chacun
prendrait plusieurs pages...
Méthodes boîte noire/blanche : Pour la boîte noire, les essais tournent autour
du fonctionnement externe du système : les détails d'implémentation des
composants ne sont pas connus (ou sciemment ignorés), et seul le
comportement extérieur est testé. Pour la boîte blanche, à l'inverse, les détails
d'implémentation des composants sont ici tous connus, et le test teste
spécifiquement ces implémentations.
Le test unitaire: Ce test contrôle chaque unité logicielle (le plus petit
composant compilable) : savoir si elle correspond à ses spécifications, s'il y a
des erreurs de logique. Ce test est généralement fait directement par le
développeur de l'unité, qui conçoit lui-même le test en question. Ce test doit
être fait de manière isolée en premier lieu (pour savoir si l’unité fonctionne
comme on le souhaite, tant dans les entrées que dans les sorties), puis en
103
combinaison avec les unités qui travaillent avec elle. C'est typiquement une
technique boîte blanche qui est utilisée ici.
Le test d'intégration: Premier d'une série de tests (il est généralement suivi
par le test système, puis le test d'intégration système), ce test cherche à tester
la stabilité et la cohérence des interfaces et interactions de l'application. Il est
lui aussi réalisé par l'équipe de développement plutôt qu'une équipe
indépendante. Il s'agit ici d'un test de type boîte noire.
Les outils de tests les plus connus sont JUnit (Java, porté pour .NET, Python,
Perl, Delphi...), JTest (Java), TeamTest et SilkTest.
104
11.4 Couverture de code
L’analyse de couverture de code est un processus pour retrouver des domaines
de programmes non couverts par des cas de tests, pour créer des cas de test
additionnels pour augmenter la couverture et pour déterminer la mesure
quantitative de couverture qui est une mesure de qualité.
Un aspect optionnel de l’analyse de couverture de code est l’identification
des cas de tests qui n’augmente pas la couverture. Un analyseur de
couverture automatise ce processus. Il faut bien comprendre, la couverture
de code augmente la qualité des cas de test mais pas la qualité du produit.
L’analyse de la couverture de code est une technique de test structurel
(glass box testing and white box testing) qui compare le comportement du
programme en situation du test avec l’intention apparente du code. Ceci est
en opposition au test fonctionnel (black-box testing) qui compare le
comportement du programme à une spécification. Le test structurel examine
comment le programme « marche » en tenant compte des erreurs dans la
structure et la logique, alors que le test fonctionnel s’intérresse à ce que le
programme accomplit sans savoir comment il le fait à l’intérieur.
Le test structurel est aussi appelé test de chemin puisque l’on choisit des
cas de tests qui font suivre différents chemins. Le test structurel ne peut pas
trouver des erreurs d’omission.
Il existe plusieurs mesures de couverture. La première est la mesure de
couverture d’instructions qui répond à la question de savoir si chaque
instruction exécutable a été rencontrée une fois. La couverture des décisions
s’interroge si les expressions booléennes testées dans les structures de
contrôle conduisent à vrai et faux. L’expression booléenne entière est
considérée comme un prédicat livrant true ou false sans savoir s’il contient
des opérateurs or ou and. En plus, cette mesure inclut les instructions de
switch, les exception handlers, and interrupt handlers. La couverture des
conditions tient compte des résultats false ou true de chaque sous-expression
booléenne. Elle est similaire à la couverture des décisions mais est plus
sensible au contrôle de flux.
105
Chaque projet choisit un certain pourcentage minimum de couverture
avant la première publication pour prévenir les défaillances post-publication.
Les objectifs généraux avant publication sont fixés comme suit :
Appeler au moins une fonction dans 90% des fichiers sources (ou classes).
Appeler 90% des fonctions
Atteindre 90% de couvetrure de condition/décision dans chaque fonction
Atteindre 100% de couverture de décision/condition.
106
Exercices d’application
107
Questions de cours
109
Exercice 35 : En quoi le développement des prototypes est-il important dans le génie
logiciel ?
Exercice 36 : Définir le versionnage
Exercice 37 : Donner des exemples concrets pour les notions de bases de branches, copies
de travail, repository, résolution de conflit, en rapport avec le versionnage
Exercice 38 : Donner les avantages de la gestion de la configuration (configuration
management) par rapport à la gestion des versions (version management).
Exercice 39 : Traduire les expressions mathématiques suivantes en anglais (français) de
telle manière qu’elles soient les plus naturelles possibles.
p. person
n :person n is a neighbour of p p never speaks to n
p:person
p. person
t:person n = t n lives with t p knows t
co:country
ci:city ci in co
the population of ci is greater than that of the capital of co
Exercice 40 : Evaluer {i :N ; j :N| (j = 2*i) i+j}
Exercice 41 : Assume the definition of two relations involving the sets People, Instruments
and Actions as follows :
plays == {Ashkenay piano, Williams guitar, David violin, Huw trumpet,
Alice flute, Alice piano, Kate piano}
worksby =={piano hammering, guitar plucking, harpsichord plucking, trumpet
bowing, flute blowing, violin bowing, violin scraping}
What are the domain and range of plays and worksby?
What are the types of the domain and range of plays and of worksby?
Exercice 42 : The relation pairsum relates pairs of integers to their sum. What is the type
of pairsum? Give a definition for pairsum
Exercice 43 : Définir validation. Donner les différentes méthodes pour la validation d’un
logiciel. Faire une étude comparative.
Donner la différence entre le test structurel, le test basé sur les fautes et celui basé sur les
erreurs. Donner une définition du test d’acceptance, le test d’intégration et le test d’unité.
Exercice 44 : Quels sont les critères de qualité pour un logiciel ? Qu’appelle-t-on mesures
de qualité ?
Exercice 45 : Faire la différence entre mesures constructives et mesures analytiques pour
l’assurance qualité du logiciel. Citer quelques exemples de chacune de ces mesures.
Exercice 46 : Quelles sont les tâches essentielles de la gestion d’un projet ? Quand dit-on
qu’un projet de développement d’un logiciel est initialisé ?
Exercice 47 : Qui est l’inventeur de la modélisation E/R ? Quels sont les éléments
cardinaux du E/R ? Donner leur syntaxe et leur sémantique. Quel est le but ultime de cette
technique ?
Exercice 48 : Donner la signification des abréviations suivantes : E/A, DFD, OOA, OOD,
UML, CASE, VDM, SA, SD, OMT
Exercice 49 : Qu’est-ce que c’est que le diagramme des flux de données ? A quoi cela sert-
il ? Qui en est l’inventeur ? Quels sont ses éléments primordiaux ? Donner leur syntaxe et
leur sémantique.
Exercice 50 : Comment les DFD peuvent-ils être utilisés dans l’architecture d’un système.
110
Exercice 51 : Ressortir les similitudes et les différences entre la modélisation E/R, la
modélisation orientée objet, les DFD.
Exercice 52 : Qu’est-ce qu’une classe ? Qu’est-ce qu’un CRC ?
Exercice 53 : Enoncer la méthode de substantifs pour identifier les classes. L’appliquer à
un système concret , par exemple la gestion d’une bibliothèque.
Exercice 54 : Donner la syntaxe et la sémantique des notions suivantes : association,
généralisation, dépendance, réalisation, utilisation
Exercice 55 : Quelles sont les différentes annotations que peuvent comporter les
associations ? Les nommer et donner leur sémantique.
Exercice 56 : Quel est l’avantage principal des langages de modélisation formels sur ceux
semi-formels ? Quels sont leurs inconvénients ?
Exercice 57 : Pourquoi l’abstraction est-elle importante dans le génie logiciel?
Exercice 58a : Quels sont les fondements théoriques du langage de spécification Z ?
Exercice 58b : Combien de langages existe-t-il dans UML ? A quoi servent-ils ?
Exercice 59 : Quelles sont les trois étapes selon lesquelles les spécifications sont
construites ?
Exercice 60 : Quelles sont les techniques de structuration présentes dans Z ?
Exercice 61 : Quels concepts de structuration sont supportés par les langages suivants
Basic, Fortran, Pascal, C/C++, Java ?
Exercice 62 : Pourquoi dit-on que la modélisation OO est aussi bien une Weltanschauung
qu’une propriété linguistique ?
Exercice 63 : Donner par des exemples concrets comment l’on peut passer des concepts de
modèle suivants au code : les classes simples ; les classes avec attributs ; les classes avec les
opérations ; la généralisation ; les associations ; les associations avec direction et rôle.
Exercice 64 : Donner l’idée fondamentale sous-jacente pour la génération automatique de
code à partir de Z
111
Sujets d’examen
Examen 1
Exercice 1 : Définir quelques mots
Ressortir les similitudes et les différences entre la modélisation E/R, la modélisation orientée objet,
les DFD.
Exercice 2 : La firme Teachware teaches software
Dans le scénario ci-dessous, relier les notions techniques telles produit logiciel, logiciel
d’application, Unité de traitement de données, utilisateurs, équipement technique, système
d’information, système d’application aux expressions décrites dans le texte.
La Firme Teachware organise des séminaires publics et internes avec des formateurs externes.
La Firme se compose d’un directeur, qui s’occupe de la planification et de l’administration des
séminaires, une attachée de direction et d’une secrétaire. Depuis peu, l’on a implanté dans la firme
le logiciel SEMORG. Le directeur planifie et administre les séminaires et les formateurs à partir de
son PC. L’attaché de direction administre les clients et les enregistrements à travers un PC. La
secrétaire ne travaille pas avec le PC, mais s’occupe des participants dans les salles du séminaire.
Elle s’occupe de surcroît de la multiplication des documents relatifs au séminaire. A côté de deux
PC interconnectés, l’entreprise possède un téléphone, un appareil de télécopie conventionnelle et
une connexion de fax par PC ainsi qu’une liaison e-mail. L’on veut gérer l’organisation des
séminaires d’une manière efficace.
Donner les différentes fonctions que doit remplir le produit final.
Donner les données à enregistrer par rapport aux séminaires et aux clients.
Ressortir un diagramme de flux données (DFD) pour ce logiciel.
Examen 2
Exercice 1 :Trouver des points dispersés en route
Définir et expliquer : cycle de vie , modèle en cascade, crise du logiciel, prototypage
Donner sous forme de schéma le développement évolutif du logiciel
Assume the definition of two relations involving the sets People, Instruments and Actions as
follows :
plays == {Ashkenay piano, Williams guitar, David violin, Huw trumpet, Alice
flute, Alice piano, Kate piano}
worksby == {piano hammering, guitar plucking, harpsichord plucking, trumpet
blowing, flute blowing, violin blowing, violin scraping}
1. What are the domain and range of plays and worksby?
2. What are the types of the domain and range of plays and of worksby?
Exercice 2 : Un dictionnaire dans Z
Un dictionnaire bilingue est constitué de deux listes alphabétiques : une pour les mots d’origine et
l’autre pour les mots étrangers. Le vocabulaire est présenté sous forme de paires.
Anglais Espagnol
action acción
final final
possibilit possibilita
y d
death muerte
L’on suppose qu’il existe deux ensembles Native et Foreign pour désigner les deux alphabets. Tous
les mots respectant les règles orthographiques appartiennent à deux ensembles OrthoNative et
OrthoForeign.
Donner la définition exacte des 2 ensembles OrthoNative et OrthoForeign
112
Donner un schéma WellFormedVocabs pour un vocabulaire bien formé.
Donner le schéma AddPair pour ajouter un nouveau vocabulaire, ToForeign pour rechercher
un mot étranger et ToNative pour retrouver la signification d’un mot étranger.
Examen 3
Exercice 1 : Avoir deux faces pour sauver sa face
Avec les nouveaux blocs pédagogiques qui se construisent, l’Université de Ngaoundéré ne veut plus
tomber dans les pièges des planifications hasardeuses. L’on requiert de vous un système de
planification des enseignements.
1 Vous êtes celui qui donne le marché. Ecrire un document de description du problème. Prendre en
compte particulièrement les situations suivantes : Quelles sont les personnes qui vont utiliser le
système ? Quelles sont les personnes qui devront faire la maintenance du système ? Quelles
fonctionnalités (entrée, sortie) le système devrait avoir ? Dans quel environnement de traitement de
données le système devrait-il être intégré ? Quelles sont les personnes ressources (« experts ») qui
livreraient des informations supplémentaires? Quels sont les critères de réception (les sortes de
tests) le système doit-il remplir ?
2 Vous changez de face et êtes maintenant adjudicataire (celui qui a gagné le marché). Sur la base
du document présenté ci-haut, vous devez produire une ébauche pour la phase de définition et
d’analyse. Le document doit être subdivisé en sections.
3 Donner une modélisation en flux de données pour le système.
Exercice 2 : Sans bibliothèque la licence n’a pas de valeur réelle
The University Library needs a system to better manage its collection. You are known to be the
expert required to solve the problem. The following requirements have been handed over to you.
Give Z schemas to solve the problem. Informally the system is described as follows :
The library comprises a stock of books and a community of registered readers
Each copy of a book is assigned a unique copy identifier
At any time a certain number of copies of books are on loan to readers; the remainder of the
stock is on the shelves of the library and ready for loan
There is a maximum number of books which any reader may have on loan at any one time
The operations to be defined include the following
Issue a copy of a book to a registered reader
A reader returns a book to the library
Add a copy of a book to a stock
113
Remove a copy of a book from the stock
Enquire which books are on loan to a given reader
Register a new reader
Cancel a reader’s registration
Exercice 3 :Gérer les innombrables versions des têtes bantous
La crise du logiciel a conduit à plusieurs propositions de solutions, entre autres l’emprunt du mot
génie aux sciences de l’ingénieur, l’invention de la gestion des versions et de la configuration.
Qu’est-ce que la crise du logiciel ? Définir versionnage. Donner les avantages de la gestion de la
configuration (configuration management) par rapport à la gestion des versions (version
management).
Examen 4
Exercice 1 : Se jeter à l’eau pour glaner quelques points
Cet exercice s’occupe du modèle water Fall.
Expliquer les faiblesses d’un modèle water fall pur (sans liaison retour) ?
Discuter de l’intégration du modèle water fall dans le modèle V
Exercice 2 : Reconnaître ses faiblesses quand on évolue
Cet exercice s’occupe du modèle évolutif.
Expliquer les faiblesses d’un modèle évolutif.
Discuter de l’intégration du modèle évolutif dans le modèle V
Exercice 3 : Milestones and Deliverables
Discuter pour les points de repère (milestones ou deliverables) sont importants dans les projets de
logiciel. Esquisser les scenarii dans lesquels un projet échoue.
Exercice 4 : Se documenter pour obtenir sa licence
Discuter pourquoi la documentation est absolument importante dans les projets de logiciels. Estimer
la grandeur de la documentation à produire pour les grands projets de logiciel. Esquisser des
scenarii, dans lequel un projet échoue à cause de la documentation ou des manuels d’utilisation non
appropriés. Comment les outils doivent-ils soutenir la documentation ?
Exercice 5 : Code-Fix
Donner une évaluation succincte du processus « Code-and-Fix » et du modèle water fall à l’aide des
attributs suivants : compréhensibilité, visibilité, robustesse et maintenabilité
114
Bibliographie
ABELSON, H.; SUSSMAN, G. J.; SUSSMAN, J.: Structure and interpretation of computer programs, Berlin: Springer,
2. Aufl., 1997
BALZERT, H : Algorithmik und Software-Technik. Anwendungen, Heidelberg: Spektrum Akademischer Verlag, 1999
BALZERT, H., Lehrbuch der Software-Technik, Software-entwicklung, Spektrum, Akademischer Verlag, 1996
BALZERT, H.: Software-Entwicklung, Bd. 1, 1. Aufl., 1996
BALZERT, H: Lehrbuch der Software-Technik, Heidelberg: Spektrum Akademischer Verlag, 1. Aufl., 1996-1998.
BALZERT, H: Lehrbuch Grundlagen der Informatik – Konzepte und Notationen in UML, Java und C++.
BALZERT, H: Software-Management, Software-Qualitätssicherung, Unternehmensmodellierung, Bd. 2
BASIN, D.: Softwaretechnik, Kursnotizen, Freiburg, 2000
BAUER, F. L.; GOOS, G.: Informatik 1 – Eine einführende Übersicht, Berlin: Springer, 4. Aufl., 1991
BEIZER, B., "Software Testing Techniques", 2nd edition, New York: Van Nostrand Reinhold, 1990
BOOCH, G., RUMBAUGH, J. and JACOBSON, I.: The Unified Modeling Language User Guide, Addison-Wesley,
1999.
BOOCH, G.: Object Solutions: Managing the Object-Oriented Project, Addison-Wesley, 1996.
BRES, J. : Ateliers de génie logiciel Réalisés et tendances, Dunod, 1999
BROY, M.; SPANIOL, O. (Hrsg.): VDI-Lexikon Informatik und Kommunikationstechnik, Berlin: Springer, 2. Aufl.,
1999
BUNDESMINISTERIUM DES INNERN (2006.08.02): V-Modell XT. URL http://www.v-modell-xt.de/.
CHILENSKI, J.J. and MILLER, S.P.: "Applicability of Modified Condition/Decision Coverage to Software Testing",
Software Engineering Journal, September 1994, Vol. 9, No. 5, pp.193-200.
DAHME, Ch., HESSE W.: Evolutionäre und kooperative Software-Entwicklung in Informatik-Spektrum 20: 3–4
(1997). Springer-Verlag, 1997.
DATE, C. J.: An Introduction to Database Systems I, Amsterdam: Addison Wesley, 6. Aufl., 1995
DATE, C. J.; DARWEN, H.: A guide to the SQL standard, Reading, Mass.: Addison Wesley Longman, 2. Aufl., 1998a
DAVIS, A. M., Software Requirements Analysis and Specification, Prentice-Hall, Inc., Englewood Cliffs, NJ, 1990.
DENERT, E.: Software-Engineering – Methodische Projektabwicklung, Berlin: Springer, 1992
ECO, U.: Wie man eine wissenschaftliche Abschlußarbeit schreibt – Doktor-, Diplom- und Magisterarbeit in den
Geistes- und Sozialwissenschaften, Stuttgart: Uni-Taschenbücher, 7. Aufl., 1998
ENGESSER, H. et. al (Hrsg.): Duden. Informatik – Ein Sachlexikon für Studium und Praxis, München:
Bibliographisches Institut, 2. Aufl., 1993
FAIRLEY, R., Software Engineering Concepts, McGraw Hill, Singapore, 1985
FORBRIG, P., Objekorientierte Softwareentwicklung mit UML, Fachbuchverlag Leibzig, 2001
GAMMA, E., HELM, R.; JOHNSON, R. and VLISSIDES, J.: Design Patterns. Elements of Reusable Object-Oriented
Software, Addison-Wesley, 1995.
GHEZI / ZAZZAYEI / MANDRIOLI : Fundamentals of Software Engineering , 1998
GOOS, G.: Vorlesungen über Informatik – 1. Grundlagen und funktionales Programmieren, Bd. 1, 2. Aufl., 1997a,
GOOS, G.: Vorlesungen über Informatik, Berlin: Springer, 1997-1999.
GOOS, G.: Vorlesungen über Informatik – 2. Objektorientiertes Programmieren und Algorithmen, Bd. 2, 1. Aufl., 1996,
GOOS, G.: Vorlesungen über Informatik – 2. Objektorientiertes Programmieren und Algorithmen, Bd. 2 2. Aufl., 1999
GOOS, G.: Vorlesungen über Informatik – 3. Berechenbarkeit, formale Sprachen, Spezifikationen, Bd. 3 1997b
GOOS, G.: Vorlesungen über Informatik – 4. Paralleles Rechnen und nicht-analytische Lösungsverfahren, Bd. 4, 1998
115
GUMM, H.-P.; SOMMER, M.: Einführung in die Informatik, Oldenbourg, 1998
HAYES, I. : Case Studies Specification, Prentice Hall, 1988
HOWDEN "Weak Mutation Testing and Completeness of Test Sets", IEEE Trans. Software Eng., Vol.SE-8, No.4, July
1982, pp.371-379. 1982
M. SHAW and D. GARLAN, Software Architecture: Perspectives on an emerging Discipline, Prentice-Hall, Inc.,
Englewood Cliffs, NJ, 1996.
MCCABE, T., "A Software Complexity Measure", IEEE Trans. Software Eng., Vol.2, No.6, December 1976, pp.308-
320.
MEYER, B.: Object oriented software construction, New York: Prentice-Hall, 1988,
MEYER, B.: Objektorientierte Softwareentwicklung, Prentice Hall, Hanser Verlag, 1990
MORELL, L., "A Theory of Fault-Based Testing", IEEE Trans. Software Eng., Vol.16, No.8, August 1990, pp.844-857.
NTAFOS, Simeon,"A Comparison of Some Structural Testing Strategies", IEEE Trans. Software Eng., Vol.14, No.6,
June 1988, pp.868-874.
OESTEREICH, B., Objektorientierte Software Entwicklung, Analyse und Design mit der Unified Modeling Language,
Oldenburg, 1998
PAGE, Six : Software Engeneering, 1998
PAULSON, L. :Software Engineering, Lecture Notes, Cambridge, 1999
PRESSMAN, R. S.: Software Engineering – European Edition, Maidenhead: McGraw-Hill, 3. Aufl., 1994.
PRESSMAN, R.S.: Software Engineering A Practitioner’s Approach, 4ème édition, McGraw Hill, 1997. R. Pooley, P.
Stevens, Using UML. Software Engineering with Objects and Components, Addison, Wesley, 1999.
RECHENBERG, P.: Was ist Informatik? – Eine allgemeinverständliche Einführung, München: Carl Hanser, 3. Aufl.,
2000.
RECHENBERG, P.; POMBERGER, G. (Hrsg.): Informatik-Handbuch, München, Wien: Carl Hanser, 2. Aufl., 1999.
RECHENBERG, P.; POMBERGER, G. (Hrsg.): Informatik-Handbuch, München, Wien: Carl Hanser, 1. Aufl., 1997
ROPER, M., "Software Testing", London, McGraw-Hill Book Company, 1994
SILBERSCHATZ, A.; GALVIN, P. B.: Operating System Concepts, Amsterdam: Addison Wesley, 5. Aufl., 1998.
SILBERSCHATZ, A.; GALVIN, P. B.; GAGNE, G.: Applied Operating System Concepts, Weinheim: Wiley-VCH, 1.
Aufl., 1999.
SOMMERVILLE, I.: Software Engineering, Amsterdam: Addison Wesley, 5. Aufl., 1996.
SPIVEY, J.: The Z notation, Prentice Hall, 1987
SZYPERSKI, C.: Component Software, Addison-Wesley, 1998.
TANENBAUM, A. S.: Computernetzwerke, München: Prentice Hall, 3. Aufl., 1998.
TANENBAUM, A. S.: Modern operating systems, Englewood Cliffs, NJ: Prentice Hall, 1992
TANENBAUM, A. S.: Computer networks, München: Prentice Hall, 2. Aufl., 1989
TANENBAUM, A. S.: Moderne Betriebssyteme, München: Carl Hanser, 2. Aufl., 1995
VOSSEN, G.: Datenbankmodelle, Datenbanksprachen und Datenbankmanagementsysteme, München: Oldenbourg R.,
4. Aufl., 2000.
WERNER, D. (Hrsg.): Taschenbuch der Informatik, Leipzig: Fachbuchverlag Leipzig / Hanse, 2. Aufl., 1995
WILHELM, R.: Informatik, Grundlagen, Anwendungen, Perspektiven, CH Beck, Stuttgart, 1996.
116
Index
A
Abstract Data Types 16
abstraction 18
ADA 15
ALGOL 15
analyse et définition des besoins 31
association 69
B
Birthday Book 73
BirthdayBook 81
bogue 101
bug 101
C
cahier de charges 33
carte CRC 68
cas d'utilisation 60
classe 58, 65, 86
COBOL 14
code 85
code and fix 20
code-source 7
compatibilité 10
configuration 49
correction 9
couverture de code 105
crise du logiciel 6
cycle de vie 20
D
Data Flow Diagram 36, 56
défaillance 101
défaut 101
définition des besoins 54
développement évolutif 23
développeur 7
diagramme de classe 65
documentation 7
E
erreur 101
évaluation 29
explorative prototyping 24
export 85
extensibilité 10
F
facteurs de production 8
FORTRAN 15
G
génération automatique e code 88
génie logiciel 6, 17
gestion des versions 43
GUI 93
H
héritage 87
I
import 85
inspection 100
interface 86
interface graphique 93
interface homme machine 94
L
langage formel 71
LOC 9
logiciel 7, 16
lois de Lehmann 44
M
MERISE 27
117
méthodes formelles 17
modèle 54
modèle de développement 21
modèle E/R 55
modèle en cascade 22
modèle en spirale 25
Modèle V 27
modélisation 18
modélisation des données 76
modélisation orientée objet 59, 65
module 32, 86
N
niveau de test 103
O
orienté objet 86
P
panne 101
polymorphisme 87
processus de développement 21
programmation 5
programmeur 7
Q
qualité 12
queens 83
R
raffinement 57, 81, 90
rapid prototyping 24
réutilisation 10
robustesse 9
S
schéma 77
software engineering 6, 16
structuration 18, 86
T
test 101
test d'acceptance 102
test d'intégration 102
test d'unité 102
test de recette 104
test de regression 104
test système 104
U
UML 59
uses 85
V
validation 99
validation des besoins 35
vérification 99
version 43
versionnage 43
W
WIMP 94
Z
Z 71
118