Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Support de Cours
Ingénierie
Ingénierie des Systèmes
Logiciels
mnkenlif@hotmail.com
1.1 Définition
« Le logiciel est l'ensemble des programmes, procédés et règles, et éventuellement de la documentation, relatifs au
fonctionnement d'un ensemble de traitements de l'information' » (arrêté du 22 déc. 1981)
En d’autres termes, un logiciel pourra donc être considéré comme un ensemble de programmes informatiques (codes
sources, éditables, exécutables) mais également les données qu’ils utilisent et les différents documents se rapportant à
ces programmes et nécessaires à leur installation, utilisation, développement et maintenance : spécifications
(fonctionalités, contraintes, facteur de qualité, interface), schémas conceptuels, jeux de tests, mode d'emploi, etc.
1.3 Crises
• Malgré les évolutions citées plus haut, on note que au fur et à mesure que les coûts du matériel diminuent, les
coûts des programmes informatiques (curieusement) augmentent !
La diminution des coûts du matériel (hardware) a conduit à associer l’ordinateur à de plus en plus de produits. Les
coûts des logiciels connaissent une très forte croissance, dominant maintenant le coût du matériel et peuvent
représenter plus de 80 % du coût total d’un système informatique (ex coût de la mémoire économisée).
• A la fin des années 70, on ne sait pas « faire » des logiciels (plusieurs tentatives de logiciels vont échouer)
- Les besoins et contraintes de l’utilisateur ne sont pas respectés (pas de facilité d’emploi, interfaces
homme/machine inexistantes)
- Les coûts ne sont pas maîtrisés
- On relève régulièrement des retards dans la livraison des produits (non maîtrise du temps)
- On note une grande rigidité dans les solutions mises en place
- Quelques fois on arrive à des incohérences pendant l’utilisation
- On est aussi confronté au manque de performance et de robustesse (fiabilité)
- Les codes sont difficiles à maintenir
- On arrive parfois à des logiciels non utilisables
Le génie logiciel est basé sur des méthodologies et des outils qui permettent de formaliser et même d'automatiser
partiellement la production de logiciels, mais il est également basé sur des concepts plus informels, et demande des
capacités de communication, d'interprétation et d'anticipation. De fait, la « crise du logiciel » n'est pas complètement
résolue aujourd’hui. Le génie logiciel reste un « art »' qui demande de la part de l'informaticien une bonne formation
aux différentes techniques (le savoir), mais également un certain entrainement et de l'expérience (le savoir faire).
Codage
Test
Mise au point
Faisabilité
Analyse des -> spécification / cahier des charges
besoins
Conception du -> plan de tests
produit
Conception
Détaillée
documents de fonctionnement -> Codage
Intégration
Exploitation et
maintenance
Analyse Installation
des besoins et test du
de
Faisabilité ----------------------------------------------------------------------------------> système
Conformité/complétion/Correction
Spécifications --------------------------------------------------------> Qualification
Conception ------------------------------> Intégration
architecturale et tests
Conception --------> Tests
détaillé unitaires
Programmation
Codage
Figure 3. Modèle en V
Dans le modèle en V, chaque spécification faite aux étapes de gauche doit correspondre à une procédure de test (jeu
de test à décrire pour s’assurer que le composant correspond à la description faite) aux étapes de droite.
Analyse des
Collecte des besoins Planification Analyse des risques risques basée sur
et Planification du la réaction des
projet usagers
Analyse des
risques basée sur
Planification basée les besoins
sur les
commentaires des Décision oui / non
usagers Prototype Initial
Prototype n-ième
Vers un Système
complété
Evaluations
Evaluation de l'usager Ingénierie
Système
Ingéniérisé
Identification
des incréments
Spécification
-----------
des incréments
| Codage des
| incréments
| Evaluation des
| incréments
| |
-------------------------------------------------
1.8 La Spécification
La phase la plus délicate dans le processus de développement du logiciel, c’est celle des spécifications. Il s’agit de
spécifier ce qui doit être fait. Bertrand Meyer [Meyer 90] a défini les 7 pièges qui nous guettent lors d’un procéssus de
spécification, mais également les 7 mots clés de réussite.
1.8.1 Les 7 péchés :
- Bruit : élément qui n’apporte aucune information (!) / redondance (!)
- Silence : caractéristique d’un problème auquel ne correspond aucune partie du texte
- Surspécification : lorsqu’on se lance dans un développement qui donne des détails inutiles (par exemple
anticiper sur les tables de la BD quand cela n’est pas nécéssaire …)
- Contradiction : dans les séquences de spécification (sens opposés)
- Ambiguités : une phrase peut avoir 2 ou plusieurs sens
- Référence en avant : étant à une page, vous faites allusion à un concept qui sera présenté plus loin
- Vœu pieux : attention à des éléments non vérifiables (!)
1.8.2 Les 7 caractéristiques d’une bonne spécification :
- Conforme (conformité aux besoins réels et non aux besoins supposés exprimés, souvent limités)
- Communicable
- Faisable
- Modifiable
- Validable
- Complète
- Cohérente
1.8.3 Les méthodes
Lors de la phase de spécification, nous avons besoin au départ d’interviews bien faites, pouvant déboucher sur une
bonne documentation.
Les méthodes de spécification de logiciels seront de trois catégories :
- Informelle (structurée)
- Semi-formelle
- Formelle (mathématique)
Les méthodes de spécification intègrent :
- Modèle
- Démarche
- Langage
- Outils
On pourrait leur associer des environnements textuels, graphiques ou mixtes facilitant la compréhension et l’expression.
Dans tous les cas, lors de votre démarche éssayez toujours de prendre en compte :
- Un maximum de modèles de besoins
- Des modèles d’analyse suffisants
- Une représentation des processus (fonctions + données)
- Des modèles de contrôle suffisants
- Une lisibilité claire du dictionnaire de données
- Une bonne illustration des entrées et sorties (éventuellement les temps de réponse)
1.9.2 Réalisation
Le cycle de vie du projet logiciel doit intégrer les tests, avec notamment les documents suivants [wwwTestLog11] :
• Plan Projet: il s’agit du plan global du projet, servant de référence pour l’ensemble
• Spécification / Conception: il s’agit des documents permettant l’élaboration du code et des tests associé
• Plan de tests: il s’agit d’un document qui décrit :
– L’organisation du test (équipes, environnement)
– Les stratégies (en fonction deséléments d’objectifs du projet, despécifications, d’architectures, différentes
stratégies de tests sont à envisager.
Ex WEB: test de l’interface, test de la logique “business” (authen-tification, transaction,...), test de la base,
test de performances, destress ...
– Les critères d’arrêt des tests: 100% de couverture de code n’est pas 100% des possibilités.
• Standard de test. Il assure une homogénéité d’écriture et de validation.
• Rapports de tests. Il permet de donner un état précis de ce qui aété testé, et des résultats obtenus.
En particulier, il faut pouvoir indiquer : quelles sont les exigences couvertes ? –et comment les a-t-on
couvertes (combien de tests/exigences, testsnormaux, aux limites, de robustesse).
• Traçabilité : Il s’agit d’assurer une bonne traçabilité entre les exigences et les tests. En particulier, cela permet
d’avoir une connaissance de l’impact d’une modification de spécification.
[Lonchamp03]
La construction d’un graphe de contrôle de programme permet (à l’aide de jeux de tests) de vérifier le programme en
s’assurant que des critères de couverture sont réunis.
Figure 7 Graphes de contrôle pour les exemples Algo1, Algo2 et Algo3 présentés plus haut
Preuve :
Si {output = input1 + input2 } est vrai après write(x), c’est à dire output = x,
{ x = input1 + input2 } doit être vrai après x := a + b.
Donc {a + b = input1 + input2} doit être vrai après read(a), c’est à dire a := input1.
Donc {input1 + b = input1 + input2} doit être vrai après read(b), c’est à dire b := input2.
Donc {input1 + input2 = input1 + input2} doit être vrai initialement.
Comme cela est toujours vrai on prouve bien que la pré-condition du programme {true} implique la
post-condition. Le programme est correct.
* Voici la règle générale de preuve pour les structures de contrôle :
I est une assertion donnée, appelée « invariant de boucle », qui est conservée « vraie » à chaque itération
quand cond est vraie. Alors, quel que soit le nombre d’itérations, I sera vrai à la sortie du while ainsi que
not cond. Cet invariant de boucle, qui « traverse » la boucle, n’est pas toujours facile à trouver.
Remarque : L’exercice de « preuve formelle de programmes » n’est pas très courant dans la pratique, car
jugé trop abstrait et parfois complexe. Toutefois, il est recommandé d’en tenir compte pour pouvoir mieux
concevoir et même documenter les programmes écrits. Il est possible d’insérer des assertions, pré, post et
invariants de boucle, dans le code du programme (Java, …) pour aider lors du déboguage de programmes
• Dans une approche dynamique, il est important d’élaborer un « plan de tests » et un « dossier de
justification » de ceux-ci (choix des tests, résultats attendus, résultats obtenus, tests exclus pour certaines
raisons telles que le coût ou l’impossibilité physique…). Elle correspond également à ce que l’on appelle
l’expérimentation (test) du comportement de l’application avec un ensemble bien choisi de exp à la place de x.
• Dans une approche orientée objet par exemple, il est préférable de décrire les méthodes de test en même
temps que les autres méthodes de la classe, et les encapsuler directement, en indiquant les valeurs attendues à
chaque fois.
• Autres Recommandations :
• Les méthodes de test ne doivent pas être longues et doivent être au mieux simplifiées et bien commentées.
• Les jeux de tests doivent être définis clairement et justifiés
• N’hésitez pas à effectuer certains tests au fur et à mesure de la mise en œuvre
• Certaines méthodes doivent illustrer clairement les modes d’utilisation des autres méthodes jugées importantes
• En cas de nécessité, faire appel à des générateurs (aléatoires…) de tests et contrôle de tests automatiques
(exemple : JTests, assert etc.)
1.9.6.1 Problématique :
Beaucoup de langages, à l’instar de PHP sont flexibles, permissifs et faciles à appréhender. Malheureusement,
certains principes qui font la force de certains langages ne sont pas implémentés dans d’autres langages. Par exemple, la
rigeur et les contraintes de conception généralement imposées dans les langages à vocation industrielle (C++, Java, etc.)
ne s'appliquent pas nécessairement avec des langages d’accès comme PHP.
Finalement, le programmeur est seul maître à bord, il choisit la précision avec laquelle il souhaite intégrer un
paradigme, que ce soit impératif, fonctionnel ou orienté objet, tout comme il décide de structurer ou non son
développement par rapport à des processus éprouvés. Cette grande liberté est à l'origine du succès du langage, mais c'est
également son plus grand défaut.
Beaucoup de développeurs (PHP…) qui n'ont pas de formation spécifique en programmation ou qui sont peu
expérimentés ne perçoivent pas l'importance d'un processus de développement, et de test en particulier.
L'abscence d'une forme structurée de tests engendre notamment les problématiques suivantes :
Le code source n'est pas testé en profondeur : cela a pour conséquence des aléas de « post-publication », plus ou
moins critiques. Le plus souvent il s'agit d'instabilités dans l'application ou des problèmes de sécurité classiques.
Le code source n'est pas robuste : toute modification du code source (refactorisation, ajout de fonctionnalités) est
susceptible d'engendrer des régressions.
Le code source n'est pas réutilisable, pas transmissible : si un autre développeur doit vous assister ou reprendre votre
travail, il sera confronté d'une part à votre code source et d'autre part à l'absence d'un protocole de test uniformisé.
Le code source n'est pas évolutif : il va sans dire, plus votre application aura une structure complexe, plus vous
peinerez à déceler des erreurs et problèmes de conception de manière empirique. Vous serez contraint à moyen terme,
de reprogrammer entièrement votre application.
[Grossglauser07]
Le processus qui vous est proposé ci-dessus fait abstraction des contraintes liées à la gestion de projet (cahier des
charges, organisation interne, etc.) ainsi que de la phase d'analyse. Il est basé sur le développement piloté par les tests
(TDD) et s'adresse particulièrement aux développeurs (PHP) autonomes.
Si vous développez en équipe, la base restera sensiblement la même mais vous devrez fournir des précisions au niveau
de l'organisation et du partage des tâches, notamment.
Le développement piloté par les tests (Test-Driven Development, ou TDD) est une méthode de développement mettant
les tests unitaires au premier plan, on peut résumer son processus en cinq étapes :
1 Ajouter un test,
2 Vérifier qu'il ne passe pas,
3 Implémenter la fonctionnalité,
4 exécuter les tests unitaires - déboguer en cas d'échec,
5 refactoriser le code source - exécuter à nouveau les tests unitaires, passer à l'objectif suivant...
En reprenant le processus ci-dessus, vous observerez que l'approche TDD débute dès la phase de conception.
Dans l'idéal, la structure de votre application devrait être modélisée dans un éditeur (UML…) puis son squelette généré
directement dans des fichiers (PHP).
2.1 Introduction
Des méthodologies développées permettent de modéliser des systèmes à risques, pour contribuer à l'intégration de la
Sécurité Opérationnelle dans la phase d'analyse et de spécification des « systèmes automatisés ». Il s’agit de SADT et
Réseaux de Petri (RdP).
• L'approche systémique, hiérarchique et structurée du SADT, est généralement bien adaptée pour représenter au
mieux les connaissances structurelles et fonctionnelles du système étudié.
• Le formalisme des RdP, adapté à la prise en compte des problèmes de concurrence, de synchronisme et de
parallélisme, constitue un excellent outil de spécification fonctionnelle d'un problème et de mise en évidence
des contraintes. Les propriétés mathématiques qui découlent de l'analyse des RdP permettent une étude
comportementale et structurelle essentielle à la validation d'une spécification.
2.2.1 Description
Le Réseau de Pétri (RDP) décrit « mathématiquement » des systèmes grâce une représentation graphique dont les arcs
et les nœuds sont valués avec des marquages.
Il offre la possibilité de parallélisme, synchronisation, concurrence, exclusion, etc.
Un RdP a des propriétés intrinsèques (dépendant ou non du marquage de départ) comme les branches mortes
(inaccessibles), cycles, etc.
Les places Pi et les transitions Ti d'un réseau de Petri, en nombre fini et non nul, sont reliées par des arcs orientés. Un
réseau de Petri est dit graphe biparti alterné, c'est à dire qu'il y a alternance des types de noeuds : tout arc, qui doit
obligatoirement avoir un noeud à chacune de ses extrémités, relie soit une place à une transition soit une transition à une
place.
Pour définir l'état d'un système modélisé par un réseau de Petri, il est nécessaire de compléter le réseau de Petri par un
marquage. Ce marquage consiste à disposer un nombre entier (positif ou nul) de marques ou jetons dans chaque place
du réseau de Petri. Le nombre de jetons contenus dans une place Pi sera noté mi. Le marquage du réseau sera alors
défini par le vecteur M = {mi}.
[KaiserCottet01]
[KaiserCottet01]
P1 P2 U- Consommation
T1 T2 T3 T4 T5
P1 2
P2 1
2 P3 1 2
T1 T2 P4 1
3 P5 1
P3
U+ Production
T1 T2 T3 T4 T5
P1 2
T3 T4
P2 1
P4 P5 P3 1 3
P4 1
P5 1
T5
2
Un RdP peut être décrit entièrement avec les matrices d’incidences (ou caractéristiques) U-, U+ et un « marquage ».
Les “jetons” ont généralement une interprétation semantique qui designe un changement d’état dû au franchissement
de la transition.
Les interfaces avec l’extérieur se matérialisent par des transitions sans place.
Il existe de nombreux développements et alternatives : les réseaux temporisés, colorés, continus, hybrides, etc.
NB : Plusieurs formalismes tels que « Grafcet » et « MERISE » (MCT) se sont à la base inspirés des réseaux de Petri.
NB : si une transition est validée, cela n'implique pas qu'elle sera immédiatement franchie. Ces règles introduisent en
effet un certain indéterminisme dans l'évolution des réseaux de Petri, puisque ceux-ci peuvent passer par différents états
dont l'apparition est conditionnée par le choix des transitions tirées. Ce fonctionnement représente assez bien les
situations réelles où il n'y a pas de priorité dans la succession des événements.
P1 P3
T3 Avec M0 : (1, 0, 1,0)
M2 M1 : (0, 1, 0, 1)
T1 M2 : (1, 0, 0, 1)
T2 M3 : (0, 1, 1, 0)
T1 T2 T3 Mo M1
T3
M3
T1
P2 P4
[KaiserCottet01]
Remarque : cette représentation permet de déterminer certaines propriétés d'un graphe. Par exemple si le graphe
présente une zone non bouclée, cette partie du marquage une fois atteinte constitue un arrêt de l'évolution du RdP et
celui-ci sera déclaré avec blocage.
• L’appoche a par la suite évolué en termes de définition de spécifications (les détails d’implémentation étant
progressifs) :
- IDEF6 : Design rationale capture
- IDEF7 : Information system auditing
- IDEF8 : User interface modeling
- IDEF9 : Business constraint discovery
- IDEF10 : Implementation architecture modeling
- IDEF11 : Information artifact modeling
- IDEF12 : Organization modeling
- IDEF13 : Three schema mapping design
- IDEF14 : Network design
Comme outil logiciel d'aide à la réalisation des diagrammes IDEF de différents niveaux nous avons :
http://www.idef.com/idef-software/
Un modèle SADT est une suite hiérarchisée de diagrammes (datagrammes et actigrammes), obtenue par raffinements
successifs.
Au niveau général se trouve le diagramme de contexte (niveau –1), montrant les sources, les destinations.
Par la suite, chaque diagramme est :
• soit un diagramme fils analysant une partie du diagramme père,
• soit un diagramme père synthétisant les diagrammes enfants,
Kit SADT :
• diagrammes d'activités
• conditions d'activités
• diagrammes de données
• diagrammes explicatifs (ou textes uniquement)
• liste hiérarchique des diagrammes
• glossaire
Un modèle est un ensemble de kits établis suivant différents points de vue, ou buts ou contextes (Point de vue de
l'utilisateur, du gestionnaire, de la maintenance de la production …)
2.3.3 SADT/IDEF0
Les diagrammes
Le diagramme de contexte représente le système avec ses entrées et ses sorties
commande
entrée 1
sortie
entrée 2
SYSTEME
(e3)
mecanisme
c1
commande
entrée 2
fonction 1
e2
entrée 1
e1 e1a fonction 2
sortie
e1b fonction 3 s1
mecanisme
m1
Fonctions principales
A0
Les fonctions 1, 2, 3 peuvent faire l'objet d'une décomposition dans les diagrammes A1, A2, A3. Le diagramme A1
pouvant être décomposé en A11, A12, etc.
La fonction
e1
s
e2
Verbe
+ complément
Axx
m
Une fonction ou une sous-fonction du système à spécifier est représentée par une boîte. La fonction doit être nommée
par un verbe d'action et un complément d'objet.
Si une fonction est décomposée, le nom du diagramme fils est noté en bas à droite de la boîte (Axx).
Les flots
Les flots de données sont échangés entre les fonctions.
commandes
sorties
entrées
Fonction
Axx
mécanismes
Suivant le coté de connexion avec la boîte, ils ont un des quatre rôles suivants :
• Entrées : Ce sont les « entités » nécessaires à la fonction, transformées par elle en « sorties ».
• Commandes : Ce sont les entités qui commandent le déroulement interne de la fonction (au moins une
commande est obligatoire)
• Sorties : Ce sont les « entités » produites par la « fonction ».
• Mécanismes : Ce sont les « entités » nécessaires à la réalisation mécanique de la « fonction » (machines,
personnels, etc.)
Plusieurs flèches peuvent être connectées. Les flots peuvent être décomposés ou composés.
Une flèche en provenance de l'extérieur du diagramme comprend en plus de son nom un code (e/s/c/m) suivi de son
numéro d'ordre par rapport à la boîte.
Un nom de flot entouré de parenthèses (e3) n'est pas retrouvé dans le diagramme enfant (IDEF0).
commandes
écriture lecture
Donnée
Les datagrammes utilisent le même formalisme que les actigrammes. Simplement, chaque boîte symbolise une donnée
du système ou un fichier.
Le datagramme est construit indépendamment de l'actigramme, il n'est pas la traduction inversée (de l’actigramme), ce
qui semble poser un problème de traçabilité. Les données en sont plus détaillées.
De même le processus de collection des informations, d'interview, de conduite de réunion est décrit.
2.3.4 LES EXTENSIONS IDEF1/IDEF2
Dans les extensions, l'ICAM n'a pas complètement retenu les datagrammes de SADT. Deux autres modèles ont été
définis pour ajouter les aspects informationnels et dynamiques à celui fonctionnel des actigrammes de SADT/IDEF0.
1:M
M:N 1:1
ATTRIBUTS ATTRIBUTS
ATTRIBUTS
NOM CLASSE ENTITE
NOM CLASSE ENTITE NOM CLASSE ENTITE
M:1
ATTRIBUTS
« Facility Diagrams »
Cet outil est un éditeur graphique doté d'un ensemble de symboles permettant de réaliser des diagrammes explicatifs
non liés directement à la méthode.
3.1 Introduction
Deux types de motivations orientent actuellement les concepteurs dans le choix des méthodes de conception: la
possibilité de prendre en compte des applications et des systèmes de plus en plus complexes
[Gardarin97][Leray92][Zoller97] et le soucis de diminuer les coûts de réalisation et de maintenance. Avec l’ère des
nouvelles technologies, des réseaux informatiques et systèmes répartis, les applications ont atteint elles aussi un niveau
de complexité croissant et de ce fait, elles nécessitent à l’heure actuelle, des outils de programmation sophistiqués. On
constate que les applications dites technique, telles que la CAO, la cartographie, les systèmes de contrôle temps réel, le
CoDesign… représentent une activité croissante et nécessitent une plus grande participation des personnes aussi bien
pour l'effort de conception et validation que de maintenance et d'évolution.
Ces constats ont mis en évidence la nécessité de promouvoir l’abstraction de données, la modularité et la réutilisabilité
[Manhes98] des composants fabriqués.
Ainsi, beaucoup de méthodes ont vu le jour, chacune tentant à sa manière d’apporter une solution satisfaisante, parmi
elles, les méthodes objets (orientées objets) et leurs techniques d’analyse et de conception appropriées.
Exemple:
Objet (instance)
. Classe VOITURE .
-immatriculation
Démarrer () - marque
Rouler () - puissance
Stopper () - couleur
-…
Les principes énoncés plus haut offrent des qualités pour mettre en œuvre des méthodes rigoureuses. Ainsi, on doit
retrouver dans une approche objet au moins 4 principes obligatoires : abstraction, encapsulation, modularité, hiérarchie ;
auxquels on peut ajouter 3 principes complémentaires : typage, simultanéité, persistance.
Identification classes
et objets
Généalogie d’UML
UML
(Rumbaugh, Booch,
Jacobson)
Use-Case Fusion
(I. (HP-
ClASSE-
OOA OOA-OODLE OMT OOA- RELATION
(P. (Schlaer & (J. Rumbaugh et OOD (P. Desfray)
al.) (G.Booch) CRC
(R. Wirf-Brooks)
JSD
(M. Jackson)
Data-Flow Diagrammes Entite-Relation
SADT/SA-SD Etat-Transition Merise
( De Marco) (HAREL) (chen)
Le formalisme UML (depuis la version 2.2) est composé de 14 types de diagrammes (9 en UML 1.3). UML n'étant pas
une méthode, leur utilisation est laissée à l'appréciation de chacun, même si le diagramme de classes est généralement
considéré comme l'élément central d'UML. De même, on peut se contenter de modéliser seulement partiellement un
système, par exemple certaines parties critiques. Les différents éléments d'un diagramme UML sont liés de manière
logique grâce aux composants (représentations) suivants [wwwUMLdesign09] :
[wwwUMLdesign09]
UML peut fournir une perception à pluseurs niveaux hiérarchiques d’abstraction, ou sous plusieurs angles
(sous-ensembles) :
• Les vues : Les vues sont les « observables » du système. Elles décrivent le système d'un point de vue donné,
qui peut être organisationnel, dynamique, temporel, architectural, géographique, logique, etc. En combinant
toutes ces vues, il est possible de définir (ou retrouver) le système complet.
• Les diagrammes : Les diagrammes sont des éléments graphiques. Ceux-ci décrivent le contenu des vues, qui
sont des notions abstraites. Les diagrammes peuvent faire partie de plusieurs vues.
• Les modèles d'éléments : Les modèles d'éléments sont les briques des diagrammes UML. Ils sont utilisés dans
plusieurs types de diagrammes. Exemple d'éléments : cas d'utilisation (CU ou "cadut"), classe, association, etc.
3.5.3.3 Les vues
Les vues peuvent se superposer pour collaborer à la définition du système.
• Vue des cas d'utilisation : C'est la description du système "vue" par ses acteurs. Elle correspond aux besoins
attendus par chaque acteur (c'est le QUOI et le QUI).
• Vue logique : C'est la définition du système vue de l'intérieur. Elle explique comment peuvent être satisfaits les
besoins des acteurs (c'est le COMMENT).
• Vue d'implémentation : Cette vue définit les dépendances entre les modules.
• Vue des processus : C'est la vue temporelle et technique, qui met en œuvre les notions de tâches concurrentes,
stimuli, contrôle, synchronisation, etc.
• Vue de déploiement : Cette vue décrit la position géographique et l'architecture physique de chaque élément du
système (c'est le OÙ).
Aux différents états d'élaboration du projet correspond l'utilisation de certains diagrammes. Par contre, les diagrammes
des cas d'utilisation pourront être mis à contribution à différents stades du projet (comme élément de validation).
Nom de l'association
de communication
La façon de décrire le contenu d’un cas d’utilisation varie énormément et UML ne souhaite pas imposer une norme.
Vous pouvez par exemple ajouter une ligne de précondition (ce qui doit être VRAI au début du cas d’utilisation).
Un format simple pour capturer un cas d’utilisation consiste à décrire le scénario de base sous forme d’étapes
numérotées et les variantes de cette séquence, comme ci-dessous (une application de commerce électronique).
ACHAT :
1. Le client parcourt le catalogue et sélectionne les produits qu’il souhaite acheter
2. Le client valide ses choix
3. Le client fournit les informations concernant la livraison (adresse, livraison en 24 heures ou 3 jours)
4. Le système affiche les éléments de facturation et les informations concernant la livraison
5. Le client fournit les informations concernant sa carte de crédit
6. Le système valide la transaction
7. Le système confirme la transaction immédiatement
8. Le système expédie un Email de confirmation au client
Alternative : Echec de l’autorisation
A l’étape 6, la transaction n’est pas validée par le système
Autoriser le client à saisir à nouveau les informations concernant sa carte de crédit et réessayer
Alternative : Client régulier
3a. Le système affiche les informations associées à ce client concernant la livraison, les critères de tarification, et les
quatre derniers chiffres de son numéro de carte de crédit
3b. Le client peut accepter ou modifier les valeurs affichées
Retourner au scénario principal de l’étape 6
La quantité de détails dont vous avez besoin dépend du risque que présente le cas d’utilisation. Plus le risque est
important, plus vous devez détailler.
Un acteur est un rôle que l’utilisateur joue par rapport au système. Les acteurs réalisent les cas d’utilisation. Un seul
acteur peut réaliser plusieurs cas et, inversement, un cas peut avoir plusieurs acteurs.
Simuler
Convertir Fonction
Vitesse
Include
Use
Stabilité Include
Use Afficher
Résoudre équations Include solutions
Précision
Include
Use
Include
Erreur
Figure 23 Diagramme
ActVenSys de cas d’utilisation de la simulation des systèmes continus
TranDirSys Include
Tracer courbes
Enoi /
Reception
Système externe
(séquentiel)
[Nkenlif04]
Figure 24. Exemple de Diagramme de cas d’utilisation (modélisant la simulation d’un système continu)
Achat
Client Régulier
« Extend » Point d’extension
(infos tarifaires, infos livraisons) Infos Tarifaire
Infos Livraison
opérations d’une classe et les contraintes qui s’appliquent à la façon dont les objets sont connectés. Il existe
principalement deux sortes de relations statiques :
- Les associations : un client peut par exemple louer un certain nombre de cassettes vidéo ;
- Les sous-types : une infirmière est une sorte de personne.
Les diagrammes de classes représentent également les attributs et les opérations d’une classe et les contraintes qui
s’appliquent à la façon dont les objets sont connectés.
Commande
Multiplicité : obligatoire
Client
Date de réception * 1
Est prépayé
nombre : Chaine Nom
prix : Monnaie Adresse
Solvabilité ( ) : Chaine
Expédier ( ) Association
Fermer ( )
1 Généralisation
Classe
(Si la commande.client.solvabilité est "douteuse"
alors commande. estPrépayée doit être vrai)
[Fowler03]
SYSTEM
SEQUENTIEL
0 .. *
Est décrit par
1
(package)
RECVENSYS
GRAFCET
RECEPTIVITE LOGIQUE
RECEPTIVITE TEMPORELLE
Appartient à
RECEPTIVITE
GRAFCET
Conditionne
ACTDIRSYS
LIEN SELECTIF
ACTION DETAILLEE
LIEN PARALLELE
[Nkenlif04]
Figure 27. Un exemple de Diagramme de classes : cas des systèmes séquentiels automatiques et interactions
Associations
Les associations représentent les liens unissant les instances des classes (Ex. une personne travaille dans une entreprise ;
une entreprise a un certain nombre de succursales, etc.).
Chaque association a également deux extrémités ou rôles, chacune d’elle étant reliée à l’une des classes de
l’association. Un rôle peut être nommé explicitement au moyen d’une étiquette, que l’on appelle « nom de rôle ».
Chaque association a également une multiplicité (« cardinalité ») qui indique le nombre d’objets susceptibles de
participer à une association donnée.
Attributs
Les attributs sont assez « semblables » aux associations du point de vue conceptuel.
Selon que le diagramme est détaillé ou nom, la notation d’un attribut peut présenter son NOM, son TYPE et sa
VALEUR par défaut.
Opérations
Les opérations sont les processus qu’une classe sait mener à bien et elles correspondent aux méthodes d’une classe.
Généralisation
Un exemple de généralisation est celui des clients particuliers et professionnels d’une entreprise. Ils présentent des
différences, mais également de nombreuses similitudes. On peut placer ces dernières dans une classe générique
« Client » (le supertype), dont « ClientParticulier » et « Professionnel » sont des sous-types. La généralisation est
associée à l’héritage.
Stéréotypes
Ils constituent le principal mécanisme d’extension d’UML. Si vous avez besoin d’une construction de modélisation qui
ne fait pas partie d’UML mais qui présente des similarités avec une construction qui en fait partie, vous pouvez la traiter
comme un stéréotype UML.
Les stéréotypes permettent d'apposer une sémantique particulière aux éléments UML. On peut alors spécialiser le
langage UML afin qu'il s'adapte mieux au domaine dans lequel le langage est utilisé.
Exemple : Le concept d’"interface UML", représente une classe n’ayant que des opérations publiques, sans définition
de corps pour les méthodes, ni les attributs. En fait, elle correspond aux interfaces Java, CORBA (OMG) et COM
(Microsoft). Comme c’est un type de classe spécial, elle est définie comme stéréotype de classe.
Généralement, les stéréotypes sont représentés par un texte entre guillemets (ex : « interface »), mais vous
pouvez également définir une icône. On peut citer par exemple l'utilisation de stéréotype "<<Table>>" sur des classes
dans les diagrammes de classes dans le cadre d'une modélisation de base de données.
Discriminateur
Chirurgien
rôle Médecin
Femme
Médecin de
famille
Personne Infirmier
patient
Homme sexe
Kinési-
thérapeute
Patient
Agrégation et composition
L’agrégation est la relation « est une partie de », comme le moteur et les roues sont des parties d’une voiture.
Cependant, UML offre une variété d’agrégation plus forte, nommée composition. Dans la composition, l’objet
« partie » ne peut appartenir qu’à un seul « tout ». De plus, on suppose généralement que les parties sont créées et
meurent avec le tout (la destruction du tout se propage en cascade à ses parties).
3..* 1..*
Polygone Cercle
rayon
Style
couleur Agrégation
estPlein
1 1
Fenêtre
activer ( )
(abstract) désactiver ( )
Editeur de
texte
activer 0
désactiver 0
Fenêtre X11
dépendance activer ( )
désactiver ( )
Fenêtre Mac
activer ( )
désactiver ( )
Immuabilité : « frozen »
UML définit la contrainte frozen (gelé) comme applicable à un attribut ou à une extrémité d’association, mais elle est
également utile pour les classes.
Sur un attribut ou une association, frozen indique que la valeur de cet attirbut ou de cette association est immuable
pendant toute la durée de vie de l’objet. Elle doit être définie à la création de l’objet et ne peut jamais être modifiée (tout
au long de la vie de l’objet). La valeur initiale peut être « null ». Cela implique que le constructeur contient
généralement un argument fixant cette valeur et qu’aucune opération ne la mette à jour.
On peut appliquer frozen à une classe pour indiquer que toutes les terminaisons d’association et tous les attributs
associés à cette classe sont gelés.
NB : gelé ne signifie pas « lecture seule ». Les valeurs en lecture seule seront généralement indiquées avec la contrainte
{read-only}, qui n’est pas une contrainte UML standard au sens strict.
Société
Matricule
1
Employé
Du point de vue des spécifications, cette association qualifiée impliquerait une interface telle que la suivante :
class Societe
{
public Employe getEmploye (Matricule unMatricule) ;
public void ajouterEmploye (String nome, Matricule unMatricule) ;
…
}
Ainsi, tout accès à un enregistrement donné nécessite un Matricule comme argument. Une multiplicité de 1 indiquerait
qu’il doit y avoir un Employé pour chaque Matricule.
Dans l’exemple donné plus bas, une multiplicité de * indiquerait plutôt que l’on peut avoir plusieurs Emplois dans
l’Entreprise par Personnel.
Du point de vue implémentation, cela suggère l’emploi du tableau associatif ou d’une structure de données similaire
class Entreprise
{
private Map _Emplois ;
…
}
Classes association
Lorsqu’on veut ajouter des attributs, des opérations et d’autres fonctionnalités aux associations, on fait appel à la notion
de classe-association d’UML.
* Employeur
Personnel Entreprise
0..1
Emploi
Période : IntervalleDate
Opération ( )
Une autre façon de représenter cette information consiste à faire de « Emploi » une classe à part entière. Dans ce cas, les
multiplicités doivent être modifiées en conséquence.
A chacune des classes de l’association d’origine a un rôle monovalué par rapport à la classe Emploi. Le rôle
« employeur » est maintenant dérivé, bien qu’il ne soit pas indispensable de le représenter.
[Fowler03]
Classes paramétrables
Ce concept permet de définir des comportements pour des ensembles, en général en créant une classe patron Set.
Plusieurs langages de programmation, particulièrement C++, utilisent la notion de classe paramétrable (« template »)
ou de patron (« pattern »).
class Set <T>
{
void inserer (T nouvelElemnt) ;
void supprimer (T unElement) ;
…
}
Cela fait, vous pouvez utiliser la définition de la classe paramétrable Set pour créer des classes dérivées afin de
mémoriser des éléments spécifiques.
Set <Employe> employeSet ;
Set T
Paramètre de
Classe
Période : IntervalleDate Paramétrable
Inserer ( )
Supprimer ( )
Le T du diagramme est un paramètre substituable qui représente le type (vous pouvez avoir plusieurs paramètres).
NB : Ce concept est inutile dans des langages à typage faible comme Smaltalk, puisque la question ne se pose pas.
visibilité
Il est possible d’étiqueter tout attribut ou opération par un indicateur de visibilité. Vous employez n’importe quel
marqueur, sa signification dépendant du langage. Mais UML fournit trois abréviations : + (public), - (private) et #
(protected).
Diagramme d’état-transition
• Les diagrammes d'état-transition permettent de décrire les changements d'états d'un objet ou d'un composant,
en réponse aux interactions avec d'autres objets/composants ou avec des acteurs.
• Un état se caractérise par sa durée et sa stabilité, il représente une conjonction instantanée des valeurs des
attributs d'un objet.
• Une transition représente le passage instantané d'un état vers un autre.
• Une transition est déclenchée par un événement. En d'autres termes : c'est l'arrivée d'un événement qui
conditionne la transition.
• Les transitions peuvent aussi être automatiques, lorsqu'on ne spécifie pas l'événement qui les déclenche.
• En plus de spécifier un événement précis, il est aussi possible de conditionner une transition, à l'aide de
"gardes" : il s'agit d'expressions booléennes, en langage naturel (et encadrées de crochets).
Produit
envisagé
QtéDispo == 0
QtéVendue == MaxQtéVendable
Acquisition
Approvisionnement QtéVendue ==
MaxQtéVendable
Promotion
Produit disponible Produit en promotion
(en vente)
Arrêt de la
promotion
Produit retiré
du marché
Figure 37. Exemple de Diagramme d’états – transitions (classe PRODUIT dans un site de gestion des ventes)
Annulation
Attente
Vérification Expédition
Livré
fin
Examination Autorisé
Rejeté
Activité 1
Débranchement
Jonction
Fusion
Activité 6
Ecrire
[Nkenlif04]
Figure 40 Séquencement d’opérations entre les macro-objets d’un système hybride (l’ascenseur)
simuler
1. paramètres
Polynôme
Equation différentielle
3.Résolution()
2. résoudre
2. paramètres
8. solutions
solutions
Fonction de transfert
Perform
Rep_lib
1. convertir ()
Consigne
4. matrice ()
5. fonction()
9.
10
6. réponsef ()
[Nkenlif04]
Figure 41. Un Diagramme de communication/collaboration : simulation des systèmes continus
Communication d’opérations
Com piloter
1 démarrer
unPilote : PiloteAutomatique uneVoiture : Voiture
2 allumer
leMoteur : Moteur
Couche de présentation
Action beans
Sous-système
Dépendance
Couche d’affaires
Composants
Couche de persistance
SGBD
JDBC
Interface
Connexion
: Domaine soins
: Configure
Application serveur Connaissance
Unité Pathologie Médicales
Configuration
TCP/IP : Configure
Interface utilisateur
Objet Contenu
Application Nœud
Nœud
: un PC sous Windows
IU
: IU Unité Hépatologie
[Fowler03]
Nom de parquetage 1
OCL définit plusieurs types de collections d’objets, ainsi que de nombreuses opérations de manipulation de ces
collections.
« Set » est un ensemble au sens mathématique. L’expression « Colis.anomalieColis » retourne l’ensemble des objets
AnomalieColis liés à l’objet Colis concerné. L’opération prédéfinie permet de tester si l’ensemble est vide.
En résumé :
OCL est un langage formel d’expression de contraintes adapté aux diagrammes d’UML (depuis la version 1.1
d’UML), et en particulier au diagramme de classes. Il permet de spécifier des contraintes sur l’état d’un objet ou d’un
ensemble d’objets, avec une grammaire élémentaire et accessible (OCL peut être interprété par des outils tels que
« USE »). OCL limite les ambiguités du langage naturel (bien que lui étant proche), et se rapproche bien du langage
technique (langage mathématique, informatique…).
Formulation des contraintes :
– invariants sur des classes ;
– préconditions et des postconditions à l’exécution d’opérations :
– préconditions doivent être vérifiées avant l’exécution,
– postconditions doivent être vérifiées après l’exécution ;
– gardes sur des transitions de diagrammes d’états-transitions ou des messages de diagrammes d’interaction ;
– ensembles d’objets destinataires pour un envoi de message ;
– attributs dérivés, etc.
Ces facteurs sont en quelque sorte intrinsèque aux projets et participent d'une "manière fixe" à la complexité perçue. Pourtant,
cette dernière est aussi d'essence subjective dépendant directement du "savoir" et de la compétence du modélisateur. Du fait
de la densification des moyens et des outils mis à disposition, la maîtrise d'un projet informatique peut nécessiter un savoir de
plus en plus vaste dans différents domaines (logiciels, langages, code, APIs, ...).
En réponse à un malaise et aux insuffisances et difficultés liées aux méthodes de développement traditionnelles, des
nouvelles méthodes ont été mises au point, parmi lesquelles les méthodes agiles.
Veronique Messager Rota, dans [Gestion de projet : Vers les méthodes agiles] propose la définition suivante :
“Une méthode agile est une approche itérative et incrémentale, qui est menée dans un esprit collaboratif avec juste ce
qu’il faut de formalisme. Elle génère un produit de haute qualité tout en prenant en compte l’évolution des besoins des
clients”.
Dès 1994 Jennifer STAPLETON, en Grande-Bretagne, présentait DSDM, une solution équivalente au RAD2.
DSDM est souvent considérée comme la première méthode Agile et, dans la seconde moitié des années quatre-vingt-
dix, une vague d’une dizaine de méthodes (dont « Extreme programming » et « Scrum » sont les principales
représentantes), développa encore les techniques adaptatives d’estimation, de planification et de pilotage de projet.
Les méthodes agiles sont constituées d’un ensemble de méthodes qui ont un seul objectif : satisfaire le client. C’est dans
cette optique qu’en 2001 aux Etats-Unis 17 grands noms du développement logiciel se sont réunis.
Parmi eux on peut citer Ward CUNNINGHAM l'inventeur du Wiki, Kent BECK, père de l'Extreme Programming et
coauteur de l’outil de test « JUnit », Ken SCHWABER et Jeff SUTHERLAND, fondateurs de Scrum, Martin Fowler
avec la société « Thought Works » et le serveur d’intégration continue Cruise Control.
Ces 17 personnalités qui viennent toutes d'horizons différents ont réussi à extraire de leurs concepts respectifs des
critères pour définir une nouvelle façon de développer des logiciels.
L’idée de base est de faire face efficacement aux multiples problèmes de lourdeur et parfois d’imprécision dans la
gestion des projets ; ou encore un cahier des charges figé dont les exigences ont évolué au cours de l'élaboration du
projet. Les méthodes agiles impliquent au maximum le client dans le projet de manière à lui livrer un produit très vite
qui sera sans cesse remis à jour et amélioré.
L’objectif principal ici est de satisfaire le client, et non un contrat établi préalablement. Pour réduire ce risque de fossé
au strict minimum, les méthodes agiles prônent l'incrément et l'itération.
Les méthodes agiles se déclinent sous forme de valeurs, de principes et de meilleures pratiques de développement, tel
par exemple XP (Extreme Programming).
Nous citons ici les quatre principes fondateurs d’agile : [Scott02] [ROQUES07]
• 1- Priorité aux personnes et aux interactions par rapport aux procédures et aux outils …
• L’accent est mis sur les individus, leur expertise, l’esprit d’équipe plutôt que sur les processus et les outils
Ce sont les individus qui font la valeur du travail accompli, ce sont donc eux que l’on doit privilégier. Sans
l’artisan, les meilleurs outils ne servent à rien. Les processus qui définissent ce que doit faire chaque personne
brident le potentiel caché derrière chacun : faire interagir les gens au maximum est bien plus prolifique et
permet d'améliorer grandement l'efficacité et la qualité du travail fourni, en rassemblant des visions différentes
d'un même problème.
• 2- Priorité aux applications fonctionnelles opérationnelles par rapport à une documentation pléthorique
• On privilégie le code testé
Les processus lourds génèrent une documentation exhaustive avec tous ses inconvénients : ambiguïté du
langage, coût de la rédaction, coût du maintien en accord avec la réalité, etc. Ces documents ne sont qu'une
illusion d'avancement du projet.
Dans les méthodes Agiles, un seul critère permet de mesurer l'avancement d'un projet : le logiciel qui
fonctionne. La documentation n'est qu'un support concret qui aide à produire le logiciel.
• 3- Priorité à la collaboration avec le client par rapport à la négociation de contrats
• Le client devient un partenaire qui participe au projet pour donner régulièrement son feedback
Le but d’un projet est de gagner de l’argent aussi bien pour le client que pour le fournisseur. En négociant un
contrat chaque partie se protège plus ou moins des risques financiers, mais les projets peuvent échouer à tout
moment si les délais sont non respectés ou bien les budgets insuffisants. La conséquence n’est pas compliquée.
Le client et le fournisseur se retrouvent alors devant un procès où finalement tout le monde est perdant puisque
le client ne peut avoir son logiciel et le fournisseur risque tout simplement de faire faillite selon l’importance
que le projet avait.
Il faut sortir de la guerre client/fournisseur et penser en équipe qui veut atteindre un but commun pour réussir le
projet, c’est une relation gagnant / gagnant
• 4- Priorité à l’acceptation et la réactivité au changement par rapport à la planification
• Le planning est flexible pour accepter les modifications nécessaires
Comme on l’a vu dans les chapitres précédents, lorsqu’un plan est défini, l’équipe essaie de s’y tenir et ne fait
pas attention aux évènements extérieurs qui peuvent arriver à tout moment du projet. Il est en plus à l'origine
des conflits client/fournisseur classiques sur les délais de livraison. Pour le client, pouvoir adapter les besoins
en cours de projet est un atout concurrentiel : il est réactif aux changements des marchés et s'assure en plus que
le logiciel développé est parfaitement conforme à ses véritables besoins.
Nous présentons ci-dessous, les champs de valeurs des méthodes agiles par rapport aux autres méthodes
(classiques).
2- Applications Planification
fonctionnelles rigide
3- Collaboration
étroite avec Négociation
le client de contrat
4- Accueil
réactivité au changement Documentation
Processus
et outils
Crystal clear Equipe = 6 (Mise sur les pratiques les moins contraignantes -> Méthode très peu formalisée)
FDD Equipe = 20
DSDM Extensible grâce aux rôles et aux responsabilités bien définis -> (facilitateur, etc.)
ASD Extensible, mais reste très générale -> Nécessite une adaptation au cas par cas
RUP Importance des parcours bien définis -> Support de gros projets
RAD Présence d’un groupe de coordination et de rapport -> Encadre et formalise la communication
Taille du Project
Source : Business Interactif
Figure 48. Histogramme de mise en perspective des méthodes agiles, RUP et RAD
[Schwaber04]
Faisabilité
Etude
métier
Modèle Mises-en
Fonctionnel Œuvre
Conception et
Construction
Le principal inconvenient de DSDM c’est la contractualisation (difficile). Car les notions de délai et de coût sont des
critères fondamentaux par rapport aux fonctionnalités du produit, contrairement aux approches traditionnelles qui
privillégient plutôt les fonctionnalités. L’autre difficulté qui pourrait apparaître, c’est la gestion de la relation avec le
client/utilisateur.
4.6.6 SAFE
La méthode Scaled Agile Framework (SAFE) apporte plus de souplesse et de flexibilité dans la gestion de projets. Elle
SAFe permet surtout d'adapter la méthode agile à l'échelle de l'entreprise. Elle permet d’instaurer au sein d’une même
entreprise un langage commun et fluide entre les différentes équipes concernées par le développement d’un produit.
Plus le développement au sein d’une entreprise occupe une place importante, plus les équipes qui s’y rapportent sont
nombreuses. La méthode SAFe intervient donc pour apporter davantage de cohérence et de flexibilité entre les
différents acteurs. Il s’agit précisément de proposer au client un produit final à la hauteur de son cahier des charges.
4.6.6.1 Comment utiliser SAFe (Scaled Agile Framework) ?
Le concept SAFe s’adresse essentiellement aux équipes de développement constituées de 50 à 150 personnes
[SAFE19]. En deçà, le déploiement de cette méthode agile ne possède pas véritablement d’intérêt. Pour fonctionner,
SAFe s’articule autour de trois degrés distincts de gouvernance : la gestion d’équipes, la gestion de programmes et la
gestion de portefeuilles projets. Ces différents niveaux sont centralisés au niveau de l’Agile Release Train. À l’occasion
d’un séminaire appelé « Program Implement Planning », l’ensemble des personnes impliquées sera informé des
objectifs à atteindre et des cycles de développement prévus (sprint) pour y parvenir.
4.6.6.2 Concept de « back log » sur la stratégie d'entreprise
Le backlog le backlog regroupe une liste des fonctionnalités du futur produit. Sselon [SAFE19], il est Placé sous la
responsabilité du « Product Owner » (Chef de produit/client). Même si le backlog d’un produit ne contient pas toutes les
spécificités du produit, celui-ci fera l’objet d’un affinement progressif au fil des différents cycles de développement.
Les fonctions essentielles mentionnées, elles, doivent toutefois être priorisées de manière à déterminer leur ordre de
réalisation. Le backlog pourra évoluer régulièrement en fonction de la stratégie visée par l’entreprise et, surtout, pour
répondre aux besoins du client.
Les méthodes agiles privilégient le développement à itération courte (XP, Scrum, Lean, ASD ...)
Les clés d’une modélisation réussie consistent à promouvoir une communication efficace entre tous les participants du
projet, de s’efforcer à développer la solution la plus simple possible qui satisfasse tous les besoins, à obtenir des retours
rapides et fréquents, à avoir le courage de prendre des décisions et s’y tenir, et avoir l’humilité de reconnaître qu’on ne
sait pas tout et que les autres ont une valeur à apporter à ses propres efforts.
Les méthodes Agiles sont conçues pour s’adapter au changement. A partir des valeurs fondamentales décrites au
paragraphe précédent, ont été déterminés treize principes fondamentaux décrits dans le « Manifeste Agile ». Nous les
listons ci-dessous :
• Notre priorité est de satisfaire le client en lui livrant très tôt et régulièrement des versions opérationnelles de
l’application, source de valeur.
• Accepter le changement des exigences, même tard dans le cycle de vie, pour garantir la compétitivité du client.
• Livrer le plus fréquemment possible des versions opérationnelles, avec des itérations allant de deux semaines à
deux mois, avec une tendance pour la période la plus courte.
• Clients et développeurs doivent coopérer quotidiennement tout au long du projet.
• Bâtir des projets autour d’individus motivés. Leur donner l’environnement et le support dont ils ont besoin et leur
faire confiance pour remplir leur capacité à réaliser le travail.
• La méthode la plus efficace de transmission de l'information est une conversation en face à face.
• Un logiciel fonctionnel est la meilleure unité de mesure de la progression du projet. Les méthodes agiles
recommandent que le projet avance à un rythme soutenable
• Sponsors, développeurs et utilisateurs devraient pouvoir maintenir un rythme constant indéfiniment.
• Une attention continue à l'excellence technique et à la qualité de la conception améliore l'agilité.
• La simplicité - l'art de maximiser la quantité de travail à ne pas faire est essentielle.
• Les meilleures architectures, spécifications et conceptions sont issues d'équipes qui s'auto-organisent.
• À intervalles réguliers, l’ensemble de l’équipe s’interroge sur la manière de devenir encore plus efficace, puis
ajuste sont comportement en conséquence.
*) Les principes de la modélisation agile sont issus des principes XP. Ils sont repris dans la figure ci-dessous :
Core Principles: Supplementary Principles:
[Scott02]
[Craig03]
[WWWOpenTDD99]
Figure 54 Les étapes de la technique TDD par Xavier Pigeon
[MANTEL07]
Le processus schématisé à droite illustre une organisation lean, dans laquelle le client « tire » les fonctionnalités de la
première cellule, plutôt que de les pousser dans la chaîne de production et d’attendre qu’elles soient réalisées. Le TDR
est donc l’aboutissement d’une démarche de changement de ses pratiques vers un processus lean.
4.8.3.3 Eliminer les gâchis avec le MBT (Model Based Testing) et ATDD
[MBTWWW]
Le Model-Based Testing propose une alternative aux outils comme FIT et ses dérivés. Le principe est d’élaborer un
modèle à partir duquel on dérive automatiquement les actifs nécessaires aux activités de tests. Par exemple, on peut
générer des cahiers de recette, ou des scripts de tests.
De la précision du modèle dépend la profondeur des tests que l’on peut générer. L’approche impose donc un fort
investissement dans les activités de modélisation. Elle a du sens pour les organisations déjà matures sur cet aspect pour
qui l’apprentissage sera modéré.
Il s’agit donc d’assurer le pilotage de la production et la maintenance de tests fonctionnels et d’acceptation, en se
référant à une modélisation qui spécifie bien les besoins exprimés. Cette approche a prouvé son efficacité.
* Les techniques de l’ « Acceptance Test Driven Development » (ATDD) font partie des méthodes agiles. Elles
permettent aussi (comme MBT), de formaliser l’expression de besoins métier dans des scénarii utilisateurs, pouvant être
[FDDWWW2]
Domain Walkthrough Design Design Inspection Code Code Inspection Promote To Build
1% 40% 3% 45% 10% 1%
[WWWOpenTDD99]
Le langage commun et les interactions directes entre les acteurs du projet résolvent des problèmes rencontrés par de
nombreuses équipes agiles. C’est aussi faire le lien entre les tests unitaires du code et les tests fonctionnels des
utilisateurs !
La technique BDD vous vous permet de rendre le dialogue avec les experts plus clair et moins contraignant.
Appliquez notamment le principe des cinq pourquoi à chacune de vos user stories. Vous rendrez aussi vos
documentations (fonctionnelles et techniques) plus lisibles avec Cucumber (par exemple).
4.9 Conclusion :
Les méthodes agiles ont désormais fait leurs preuves, aussi bien sur des projets aux délais très serrés que sur des projets
d'enjeux stratégiques. Ces méthodologies ont fait l'objet de différentes formalisations, adaptées à différents concepts,
l'un des plus répandus étant certainement SCRUM. Même les méthodologies visant les grands projets, comme RUP
(Rational Unified Process), y ont puisé largement.
Avec la grande percée de l’Intélligence Artificielle (IA), l’agilioté va davantage grandir et ouvrir d’autres perspectives.
La maîtrise d'un projet informatique peut nécessiter un savoir de plus en plus vaste dans différents domaines
(logiciels, langage(s), codes, Automates Programmables Industriels (API) …
Nous allons présenter le Développement Orienté Modèle (MDD - Model Driven Development), tel qu’il est spécifié par
l’OMG (Object Management Group). Ces spécifications sont regroupées sous le concept de MDA (Model Driven
Archtecture), et mettent à disposition de nombreux outils conceptuels.
5.1.1 Évolutions
L’OMG (Object Management Group) est un consortium développant et promouvant la théorie et la pratique des
« systèmes ouverts » (objets répartis…). Il est constitué de plus de 1000 structures membres. Il a proposé dès le début
des années 90, l’architecture OMA (Object Management Architecture), qui comprend des produit et
standards/documents qui définissent les mécanismes d’interopérabilité, de distribution et de communication dans un
réseau. Par la suite, les standards de réalisation ont suivi : CORBA (Common Object Request Brokers Architecture),
UML (Unified Modeling Language), MOF (Meta Object Facilities) et XMI (XML Metadata Interchange).
MDA (Model Driven Architecture) est une extension de OMA pour faire évoluer et généraliser cette interopérabilité le
long de tout le cycle (conception, déploiement, maintenance).
L’idée principale ici est d’arriver à la séparation entre les « spécifications des fonctionnalités » et la « caractérisation
de ces fonctionnalités » pour une plateforme spécifique.
Abstraction : représente le fait de supprimer les détails non pertinents d’un modèle. Le rafinement consiste à
introduire dans un modèle abstrait quelques éléments de réalisation de cette abstraction. Un modèle est toujours
construit selon une vue particulière du systèeme.
Plateforme : elle est constituée des détails technologiques non pertinents pour les fonctionnalités d’un composant
logiciel.
Figure 59. Evolution des approches du Génie Logiciel sur le plan historique
Analyse
Recette
Conception
Globale Tests
D’intégration
Conception
Unitaire Tests
Unitaire
Développement
● Au niveau de la modélisation
- Diagrammes de classes
- Abstraction
- Fonctionnalités, systèmes, etc.
- Classes du programme final
- Intégration des « design patterns »
L’idée de MDE c’est de concevoir un paradigme palliant aux insuffisances du paradigme Objet, qui s’est imposé en
génie logiciel depuis les années 1980. Ce paradigme n’est pas amené à remplacer l’approche Objet, mais à la compléter.
• L’approche UML et le développement Objet considèrent que « Tout est Objet ». Les relations
fondamentales qui y sont mises en oeuvre sont : l’héritage (d’une super-classe par une classe simple) et
l’instanciation (d’une classe par un objet).
- Modélisation
- Représentation des classes, etc.
- Possibilité de génération de code
- Vision statique
• L’approche MDE considère elle que « Tout est modèle ». Les relations fondamentales sont la représentation
(du système par le modèle), et la conformité (du modèle à un méta-modèle). Ses principes sont les suivants :
Programme de base
Implémentation
Meta-interface
Finance
E-commerce
Manufacturing
UML
Model Driven
Space Telecom
Architecture
Figure 51 : Eléments de MDA
Transportation Healthcare
More….
• Les Chalenges :
- Définition précise de la frontière entre PIM et PSM
- Méthodologie MDA (stratégique)
- Explicitation des transformations (UML vers EJB, UML vers WS, …)
On retrouve deux types de transformations : « modèle à modèle », et « modèles à code »
- Outillage
• XMI
XMI est un format standard de représentation de modèles (UML). Il est basé sur XML. Ce format est utilisé
par les éditeurs UML pour réaliser les imports / exports de modèles d'un outil vers un autre outil.
L'OMG n'a pas jugé utile de standardiser un processus associé à ces outils. Leur rôle est de répondre aux besoins des
utilisateurs de manière générique, et non de proposer de solutions définitives pour certains types d'applications précises.
Un processus de génie logiciel exploitant les possibilités de MDA a cependant été proposé : le « Model-Driven
Software Development » - MDSD ([wwwMDA06]).
En termes de produits, MDA est implémenté dans un outil qui intègre la modélisation et le développement. Il gère des
classes servant les objets métiers, leur présentation et leur persistance.
Modélisation : Modélisation :
Spécifications Description de
PIM
Domaine et Plate-forme
Scenarii
PIM PM
PSM
PSM
CODE
Programme
[Parrend07]
Modélisation
Intégration Stockage
Accès
MOF
[Parrend07]
● Plateforme Eclipse: incluant Eclipse, EMF (Eclipse Modeling Framework), SDO (Service Data Objects) et
XSD (XML Schema infoset model Data).
SDO permet d'unifier l'accès à des données hétérogènes, par exemple stockés sous forme XML, en Base de
Données Relationnelles, dans des Services Web, par les applications. XSD est une librairie qui permet de
manipuler, créer et modifier des schémas XML.
Pour créer un modèle EMF (au format « Ecore »), plusieurs formats de fichiers sont supportés :
1 Java Annoté,
2 XML Schéma,
3 Format Rational Rose.
● Plateforme Poseidon
Nous listons ci-dessous les différentes transformations réalisées dans un processus intégrant l’outil Poseidon :
UMl
Modélisation :
Java Annoté
EMF
EMF
ECORE Modèle EMF
E
Programme
ATL
XMI Modèle
JMI
Poséidon
MDR
MOF
Modélisation
Graphique
UMl Poséidon
Spécifications Génération
CIM PM
De code
Intégration Programme
PSM
M
Description de
PM Stockage
plate-forme
Accès
MOF
Nous présentons ci-dessous, une méthode de développement d'applications correspondante. Elle a pour vocation
d'améliorer la productivité, c'est à dire le temps de création de la première version de l'application, de même que
l'évolutivité, c'est à dire la possibilité d'améliorer et d'étendre cette application.
* Prototype
Réalisation d'une architecture comportant les fonctionnalités minimales (IHM et fonctionnalités clés) selon la
méthode linéaire.
* Architecture complète
Intégration des différents principes de fonctionnement : type de client (lourd/léger), support de mobilité, etc., selon
la méthode linéaire.
On obtient un squelette d'application, comportant tous les éléments, mais sans implémentation.
* Mise en place des fonctionnalités
Compléter chaque fonctionnalité l'une après l'autre, selon la méthode linéaire.
* Récursivité
Les étapes 2, 3 peuvent être réalisées par suite d'affinements successifs. Chaque affinement doit permettre de
nouveaux types d'usage (extension des fonctionnalités), les version intermédiaires doivent être exploitables.
* Validation de la version finale
* Evolutions
Elles peuvent se faire selon le même principe que les affinements succesifs ayant conduit à la version complète du
produit.
La capitalisation des modèles, et leur exploitation performante suppose une vision macroscopique des éléments
disponibles. L’approche Méga-modèle semble très prometteuse, mais aucune implémentation n’est disponible librement
actuellement.
Comme intérêt, on peut noter la capitalisation des modèles et de leurs liens avec les autres éléments mis en oeuvre dans
le processus de développement.
Figure 72 Schématisation des interactions entre des phases d’une modélisation Arcadia [ArcadiaCapella18]
5.2.2.1 Analyse Opérationnelle (besoins utilisateurs)
Définit les acteurs et leurs activités opérationnelles (ce qu’ils doivent accomplir comme activités, leurs interactions
avec le système et entre eux).
Nous avons déjà vu au chapitre 1 que dans l’Ingénierie des systèmes logiciels, on retrouve des méthodes et surtout
plusieurs outils servant tout au long du processus de développement.
• La couche de présentation contient les composants qui doivent interagir avec l'utilisateur de l'application, comme
les pages Web, les formulaires, ainsi que tout ce qui régit le comportement de l'interface utilisateur.
• La couche métier intègre les fonctionnalités et les traitements propres à l'application. Les fonctionnalités simples
peuvent être implémentées avec des composants sans états, alors que les transactions complexes et longues peuvent
utiliser des composants d'ordonnancement avec états. Les composants métiers sont généralement dissimulés derrière
une sous-couche d'interface de service qui agit comme une façade afin de dissimuler la complexité de
l'implémentation. Cela participe de ce que l'on appelle communément une architecture orientée par les services (SOA
= « Service-Oriented Architecture »).
• La couche d'accès aux données fournit une interface simple pour accéder aux données et les manipuler. Les
composants de cette couche abstraient la sémantique de la couche de données sous-jacente, permettant ainsi à la
couche métier de se concentrer sur la logique applicative. Chaque composant fournit typiquement des méthodes pour
créer, lire, mettre à jour et effacer (CRUD = « Create, Read, Update, Delete ») des entités de données.
Il est important de noter que ces couches ne sont que des regroupements logiques de composants qui constituent une
application. La façon dont ces couches sont matérialisées dans un environnement matériel et logiciel réel peut varier de
façon importante en fonction de plusieurs facteurs. Dans un scénario très simple, toutes ces couches peuvent résider sur
une seule et même machine. Dans un autre un peu plus complexe (mais assez commun), la couche de présentation peut
se trouver par exemple sur la station de travail de l'utilisateur final, les couches métier et d'accès aux données sur un
serveur d'applications, et les bases de données sur un serveur dédié à cet usage.
Suivant l’approche de réalisation de logiciels MDA (Model Driven Architecture), les objectifs des outils sont de
permettre de modéliser un système dans un modèle PIM (Platform Independent Model) en utilisant un langage de
spécifications approprié, puis de pouvoir traduire dans un ou plusieurs PSM (Platform Specific Model) réalisant ainsi
l’implémentation concrète du système. Quand le domaine d’implémentation se cantonne aux bases de données, UML
peut être utilisé comme modèle PIM, alors que SQL le sera au niveau du PSM.
Depuis plusieurs dizaines d’années, la conception des BD était réalisée à l’aide du modèle entité-association. La
notation UML qui s’impose dans bien des domaines de l’informatique s’adapte de mieux en mieux aux bases de
données. Le premier pas a été réalisé par Rational Rose avec son profil UML (UML profile for Data Modeling). Ce
profil permet de décrire des bases de données notamment à l’aide de stéréotypes prédéfinis (Table, RelationalTable,
View, etc.).
Note 1: on fait souvent face à des compromis car ces facteurs sont souvent contradictoires (e.g. Java est de haut-
niveau, de haute puissance expressive, sécuritaire et portable, mais pas très performant).
Note 2: parfois il est possible d'écrire un programme en utilisant plus qu'un langage, ce qui permet d'utiliser le
langage le plus approprié pour chaque partie. (Exemple : intégration C->Pascal, Assembleur-> C …)
Les AGL apportent une réelle solution à certains problèmes du génie logiciel et contribuent nettement à l'amélioration
de la productivité et de la qualité du logiciel, notamment en faisant le suivi des différentes phases du processus logiciel
et en offrant un cadre cohérent et uniforme de production. Néanmoins, cet enthousiasme doit être modéré: le processus
logiciel est encore loin d'être maîtrisé et les différentes formalisations qui en sont proposées font encore l'objet de
controverses.
Ces différents outils interviennent lors d'une ou plusieurs phases du cycle de vie du logiciel : conception (éditeurs de
texte, de diagrammes, ...), programmation (éditeurs de texte, compilateurs, pretty printers, générateurs d'interfaces
homme/machine...), mise au point (debuggers, outils de génération de tests, ...), etc.
Certains outils, concernant notamment la gestion de configurations, la gestion de projet, interviennent durant la totalité
du processus logiciel.
On distingue essentiellement deux types d'AGL selon la nature des outils intégrés:
1. Les environnements de conception (upper-case) : ces ateliers s'intéressent plus particulièrement aux phases
d'analyse et de conception du processus logiciel. Ils intègrent généralement des outils pour l'édition de
diagrammes (avec vérification syntaxique), des dictionnaires de données, des outils pour l'édition de rapports,
des générateurs de (squelettes de) code, des outils pour le prototypage, ... Ces ateliers sont généralement basés
sur une méthode ou un langage d'analyse et de conception (JSD, SADT, Yourdon, Merise, UML ...) et utilisés
pour l'analyse et la conception des systèmes d'information.
TRAMIS est un environnement de conception qui intègre notamment un éditeur de diagrammes (TRAMIS View), un
générateur de prototypes (TRAMIS Dialog), ...
2. Les environnements de développement (lower-case) : ces ateliers s'intéressent plus particulièrement aux phases
d'implémentation et de test du processus logiciel. Ils intègrent généralement des éditeurs (éventuellement dirigés
par la syntaxe), des générateurs d'interfaces homme/machine, des SGBD, des compilateurs, optimiseurs, pretty-
printers, debuggers, ...
Exemple : WinDev est un environnement de développement.
D’autres environnements de développement existent sous Unix/Linux, qui intègrent différents outils pour la
programmation et le test. L'intégration des données est faite par l'intermédiaire des fichiers Unix, la gestion (limitée) de
configurations est faite par make...
Certains environnements plus évolués sont dédiés à un langage particulier. Il existe par exemple des environnements
dédiés à InterLisp, Smalltalk, Loops (l'environnement Loops fonctionne sur une machine dédiée à Loops), Oz... Ces
différents environnements proposent des bibliothèques de composants, une interface graphique, des éditeurs dédiés au
langage, des interprètes, debuggers ... Ces environnements permettent un développement rapide et convivial. En
revanche, l'application développée est intégrée dans (et généralement inséparable de) l'environnement, ce qui peut poser
des problèmes de portabilité et de coût. Enfin, il existe des générateurs d'environnements de programmation : Mentor,
Gandalf, Synthesizer Generator, ... A partir de la description formelle d'un langage (à l'aide de grammaires attribuées,
de la logique), ces différents systèmes génèrent un environnement de programmation dédié au langage, contenant un
éditeur dédié au langage, un pretty-printer, un debugger, un interpréteur, ...
Base de données
SE (Système d’Exploitation)
Outils
Concept.
Outils Outils
Program. Gestion d’objet spécifiques
BD
Noyau Outils
Outils
d’édition gestion
auto.
Outils Interface
d’accès publique
Note : Un logiciel est évalué selon des critères relatifs à la qualité de traduction d’éléments d’un diagramme de classes :
associations, classes-associations, agrégations, contraintes inter-relations, héritage, rétro-conception de BD.
6.7 Intérêt de gérer la qualité d'un logiciel, et de son contrôle à l’aide des outils appropriés
[Linsolas09]
Plusieurs solutions performantes existent pour le contrôle de la qualité du logiciel.
Mais rappelons ce que c’est que la qualité d'un logiciel, et en quoi est-il important de la contrôler !
En paraphrasant Wikipédia, la gestion de la qualité est l'ensemble des activités qui concourent à l'obtention de la
qualité dans un cadre de production de biens ou de services (dans notre cas, d'un logiciel informatique). Plus
largement, c'est aussi un moyen que se donnent certaines organisations, dans des buts tels que la mise en conformité
par rapport aux standards du marché.
Dans le monde informatique en général, la qualité d'une application va être directement liée à la qualité du code (ceci
est particulièrement vrai dans des langages comme Java). De nombreux outils s'affairent à contrôler certains aspects de
cette qualité du code : exécution de tests unitaires, analyse de la couverture du code par ces tests, vérifications du
respect des règles de codage, etc. Il est donc possible de contrôler la qualité de son code grâce à ces outils, et d'avoir une
confiance accrue en son application !
Le contrôle de la qualité va donc pousser l'équipe de développement à adopter et à respecter certains standards de
développement. Le but de tout cela étant bien entendu de rendre le code plus sûr, mais de permettre d'y déceler les
erreurs le plus rapidement possible... et donc de les corriger !
Le "Toyota Way" correspond à une méthodologie extrêmement appréciée aujourd'hui, aussi appelée le "Lean". Celle-ci
est basée sur 14 principes dont l'un d'eux est le "Build a culture of stopping to fix problems, to get quality right the
first time". Ce principe est là pour nous rappeler qu'il est impossible d'accélérer et de soutenir une fréquence de
production sans que la qualité soit au coeur de toutes les actions. Autrement dit, il n'est pas possible d'aller vite en
sacrifieant la qualité, mais qu'il n'est pas possible non plus de faire de la qualité en sacrifiant la vitesse. C'est aussi pour
cela qu'il est aujourd'hui primordial de disposer d'une intégration continue et d'un processus itératif et incrémental.
Chez Toyota, on demande deux choses à un ouvrier, chaque jour : livrer des pièces et trouver de meilleures façons de
le faire. Le second point étant bien plus important que le premier. Cela garde l'ouvrier éveillé, fier qu'on lui demande
de se servir de sa tête et de sa créativité.
Demandez aux développeurs de livrer du code, mais plus important encore... d'améliorer tout les jours, leurs façons
de faire. À la longue, on réduit les défauts et on augmente la productivité. Mieux, on leur demande de demeurer des
humains, pas de devenir des machines.
[Linsolas09]
Figure 75. Le coût de correction d’une erreur croit exponentiellement avec le temps
Comme le rappelle Tom DeMarco, "You can't control what you can't measure", "On ne peut contrôler ce que l'on ne
mesure pas"... D'où l'importance d'utiliser un outil de qualité tels que « Sonar » (voir plus loin dans le chpitre).
6.8 Les « processwares »
Les processware ou Intergiciel, sont des progiciels d’interconnexion entre applications.
Un processware est une application qui fournit les traitements de gestion entre différents progiciels.
6.9 Outils de Développement MBSE (Model based System Engineering)
6.9.1 PolarSys Solutions
6.9.1.1 Capella
APPLICATION
Couche de Présentation
Composants d’interface Utilisateur JSP, Struts and
JSF
Composants de comportement
Couche Métier
Interfaces de services Web services / AXIS
[Arbogast06]
Principales fonctionnalités
Nous listons ici les principales fonctionnalités de l'outil Sonar.
• Tableau de bord complet des différents projets suivis.
• Détection rapide du code à risque.
• Mesures quantitatives : nombre de classes, duplication de code, etc.
• Mesures qualitatives : couverture et taux de réussite des tests, complexité du code, respect des règles de codage...
• Historiques des statistiques, pour en voir l'évolution au cours du temps.
• Support de plus de 600 règles de qualité (suivant la norme ISO 9126-3).
• Gestion de profils pour les règles de codage.
• Visualisation du code source, surlignant les violations des règles de codage qui s'y trouvent.
• Fonction "Time machine" permettant de comparer plusieurs versions d'une même application.
• Identification des points faibles d'un projet.
• Support des plugins.
Le Framework « JUnit »
Ce framework a été créé par Kent Beck et Erich Gamma, et s’avère aujourd’hui être l’un des outils de la série des
xUnit connaissant le plus de succès. Deux types de fichiers de tests sont utilisés ici :
- des TestCase : classes contenant des méthodes pour tester le bon fonctionnement d'une classe
- une TestSuite : exécute un certain nombre de TestCase déjà définis.
• L'utilitaire de ligne de commande : phpunit est le principal outil dédié à la configuration et à l'exécution des
tests unitaires. Cet utilitaire est optimisé pour les systèmes Unix/Linux. Mais, il peut également fonctionner
sous Windows. La liste des commandes est disponible en tapant :
phpunit --help
• Indicateur de résultat : Un indicateur de résultat est fourni pour chaque méthode de test exécutée :
Tiré de [Grossglauser07]
Indicateur Description
. Le test passe.
F Le test a échoué (Failure).
E Le test a généré une erreur PHP.
S Le test est ignoré (Skipped).
I Le test est marqué comme incomplet (Incomplete).
6.10.3 Outils utilisables pour la méthode agile FDD (Feature Driven Development)
* CASE Spec : outil professionnel pour les développements FDD.
* TechExcel DevSuite : outils commercial adapté à FDD.
* FDD Project Manager Application (FDDPMA) : produit de gestion des applications développées dans un processus
FDD itératif. Son interface est de type Web, permettant la generation de rapports et graphiques.
* FDD Tools : plateforme Opensource supportant tout le processus de développement FDD.
* FDD Tracker : solution pour gérer et suivre l’évolution de projets de type FDD.
* FDD Viewer : outil de visualisation FDD.
• Fitnesse ([FitnesWWW10]) est un outil libre qui utilise une version modifiée de FIT comme moteur de tests et
permet de décrire ses tests dans un wiki. Il nécessite par contre de déployer le code source sur un serveur pour
pouvoir exécuter ses tests. C’est un bon outil pour l’étape TDR et tests de recette, mais n’est pas suffisant pour
supporter une approche compréhensive du TDR jusqu’au code.
• Greenpepper ([GreenWWW10]) est un outil plus puissant combinant un moteur de tests open-source et une
série d’extensions payantes. Les extensions permettent l’utilisation du wiki Confluence et l’intégration à une
« usine logiciel » par des scripts Maven. Une extension permet également d’intégrer JIRA, un moteur de
workflow. Les tests peuvent être exécutés indépendamment depuis un serveur ou depuis le poste du
développeur. Il est également possible de choisir différents contextes d’exécution. On peut ainsi gérer plusieurs
environnements de tests selon les phases de tests à effectuer (développement, homologation, recette,
préproduction) ou selon la version des spécifications.
Lors d’une bonne mise en œuvre de Greenpepper, l’équipe de travail peut être répartie sur plusieurs sites avec
des développements effectués dans plusieurs villes comportant plusieurs développeurs. Le délai moyen entre la
fin de l’écriture du code pour une livraison donnée et la mise en production de cette nouvelle version peut être
ramené à juste quelques heures. Ce délai inclut les phases de tests d’homologation et de pré-production (tests
d’intégration avec les systèmes environnants). La seule activité manuelle effectuée après l’écriture de la
dernière ligne de code consiste à vérifier le bon fonctionnement de l’interface graphique, en attendant que cette
couche soit testable avec des outils comme Greenpepper ou FIT.
• L’outil Leirios Test Designer ([LeiriosWWW10]) permet d’utiliser un modèle comportemental formalisé avec
un sous-ensemble d’UML, appelé modèle de test, pour générer les actifs de tests. Ce modèle est parcouru par
un moteur calculant le nombre de tests et les vérifications à effectuer pour en déduire les cas de tests. Ces cas
de test peuvent ensuite être traduits en scripts de tests avec un adaptateur adéquat.
O.S.
Logiciels libres
• ATL open source : transformations de modèles vers ou depuis UML (etc.) ; ATL est un langage de type QVT
(le standard QVT définit un ensemble de langages permettant d exprimer des transformations de modèles à
modèles).
• Dia
• Umbrello un modeleur UML sous GPL.
• ArgoUml un modeleur UML sous Licence BSD - http://argouml.tigris.org
• Gaphor un modeleur UML sous GPL la version actuelle est 0.7.1 ;;
• BOUML, un modeleur UML sous GPL pour Windows, Linux, MacOS X et Solaris;
• Eclipse GMT-XUML
• Eclipse UML2, Méta modèle UML2, sans interface graphique.
• Netbeans
• Staruml, en version libre.
• Acceleo, générateur de code source à partir de modèles UML.
Logiciels propriétaires
• Rational Rose : Un des outil les plus important du marché - http://www.rational.com / Racheté par IBM
• Together (rachété par Borland/Inprise) : Outil fortement couplé avec Java : - http://www.togethersoft.com;
• Visio : Outil non complet de microsoft ; - http://www.microsoft.com/office/visio
• Together, de Borland ;
• Poseidon, basé sur ArgoUml (version commerciale) ;
• Tuleap : est une « forge logicielle » (libre) éditée par la société Enalean permettant le pilotage des projets,
l’amélioration de la qualité des développements et facilite la collaboration. La forge favorise la productivité, la
traçabilité et la qualité des processus pendant le cycle de vie des projets. Ce logiciel libre est utilisé par plusieurs
milliers d'utilisateurs dans le monde pour leurs développements professionnels. La suite Tuleap intègre les outils
suivants :
Développer et livrer:
- Gestionnaire de versions: Subversion, Git
- Intégration continue: Hudson, Jenkins
Planifier et organiser:
- Tracker hautement configurable avec Workflow
- Tracker de bugs
- Gestion des tâches et des backlog Scrum
- Gestion des demandes de supports
- Tableaux de bords avec widgets
- Reporting : statistiques, graphiques, Gantt
- Recherche dans les trackers
Collaborer et échanger:
- Gestionnaire de documents avec circuits d'approbation
- Wiki
- Forums, messagerie instantanée, listes de distribution
- Flux RSS, annonces
Intéropérabilité:
- LDAP
- Web services : SOAP
- architecture en plugins
- Url API
- Command Line Interface
Contrôle et sécurité:
- Gestion fine des permissions
- Totale traçabilité
- Notification et suivi des changements
6.12 Les questions que l’on doit se poser face à un système ou un gros projet d’entreprise (par
exemple de type client-serveur)
Caractéristiques de l’Outil de Développement
Client / Interface graphique
Sous quels systèmes d’exploitation ou système de multifenêtrage l’outil fonctionne-t-il ?
utilisateur
Où réside l’outil – sur le serveur, sur le client ou sur les deux ?
Outil
Plusieurs développeurs peuvent-ils l’utiliser simultanément ?
Middleware / Système d’exploitation Si l’outil est réparti. Quels réseaux supporte-t-il ?
/ Protocoles Les liaisons sont-elles propriétaires ou utilisent-elle du middleware pour passer les données ?
Middleware / Accès à distance aux Si ces données sont utilisées pendant le développement. Comment y accède-t-on ?
bases de données Les chaînages multiples en parallèle sont-ils permis ?
L’outil peut-il être connecté à d’autres applications ?
Middleware / RPC / ORB Comment ?
Peut-il accéder aux bibliothèques de classes ? Comment ?
Si l’outil (ou les données qu’il utilise) est archivé sur un serveur, pour quelles plates-formes
Serveur / SGBD / Référentiel
matérielles est-il disponible ?
Un logiciel doit présenter les six caractéristiques qualité définies par la norme ISO 9126 qui est issue des approches
de B.BOEHM et Mc CALL. Il s’agit de (voir l’ouvrage [Schach 92]) :
- Capacité fonctionnelle : accueillir un ensemble de fonctions et de propriétés bien définies pour l’exécution de tâches
dans le respect de l’application des normes, des prescriptions, et fournir des résultats avec une certaine précision.
- Fiabilité : maintenir son niveau de service dans des conditions précises et pendant une longue période.
- Facilité d’utilisation : L’utilisation ne demande pas trop d’efforts, tout au contraire, on note une facilité de
compréhension, d’apprentissage, d’exploitation, de complétude et de sécurité.
A titre d’exemple, le tableau ci-dessous récapitule certaines métriques de qualité effectuées pour le cas du logiciel
SAHY (voir [Nkenlif04]).
2- Formulation du 4-Réception du
message message
1- Concept 5- Concept
3- Mode de
transmission du
message
[Morlais 01]
En regardant la figure ci-dessus, dans toute communication, ce qui importe, ce n’est pas l’étape 1 mais bien finalement
l’étape 5 ! Les outils que l’on vous a donné lors des précédentes interventions permettent de passer de l’étape 2 à l’étape
3. Nous allons maintenant approfondir le passage de l’étape 3 à 4.
Dans certaines entreprises multinationales les taches sont séparées mais c’est loin d’être le cas de toutes les structures.
Vous aurez donc à faire l’étape 2 et 3 en prenant en compte les étapes 4 et 5.
7.1.3 Présentation
L’objectif est de vous sensibiliser à l’importance de l’ergonomie et de vous donner quelques points de repère vous
permettant d’être rapidement opérationnel, lors de vos prochaines expériences professionnelles.
Certaines personnes passent plus de 4 ans à étudier l’ergonomie, nous n’avons évidemment pas la prétention d’être
exhaustif, c’est la raison pour laquelle nous avons choisi de vous présenter des résultats sous forme de « règles », que
l’on pourrait classer sous la rubrique « trucs et astuces » dans un magasine informatique, mais qui résulte d’une
synthèse d’études sérieuses.
Pour vous permettre d’appréhender cela, nous allons d’abord nous intéresser à l’Ergonomie en rentrant un peu dans les
« détails conceptuels ». Nous établirons ensuite une grille de critères à observer et nous terminerons par l’étude de sites
Internet pour voir concrètement la mise en application de ces principes.
Le rôle de l’ergonomie des interfaces utilisateurs est d’établir la communication entre l’outil et l’opérateur.
L’ergonomie conditionne ainsi l’acceptabilité du système par l’utilisateur, la facilité et l’efficacité d’utilisation, la
facilité d’apprentissage (ces différents points ne sont pas toujours compatibles).
Il est illusoire de croire à la possibilité de faire « une bonne interface » ou « un logiciel ergonomique » en faisant
l’impasse sur la connaissance des futurs utilisateurs et sur leur manière de travailler. Toute conception d’interface doit
donc placer l’utilisateur au centre de l’étude. Et il est capital de bien comprendre le mode de fonctionnement de
l’utilisateur, c’est la raison pour laquelle nous allons maintenant aborder un groupe de sciences sans lequel l’ergonomie
ne saurait exister : les sciences cognitives (la cognitique est d’abord reservée aux cigiticiens).
Gardez donc en mémoire les préalables à l’ergonomie et n’oubliez pas que la question de fond reste « comment
l’utilisateur va-t-il appréhender/comprendre l’outil ? » et non comment faire quelque chose de beau !
7.3 L’ergonomie dans le développement d’IHM, en particulier dans les applications Web
7.3.1 L’« ergonomie de fond », un préalable à la mise à disposition de l’information
7.3.1.1 Importance et réalisation de l’organisation générale de l’application
Le challenge d’une application Web est de rendre accessible via un petit écran, des informations ou des produits qui
étaient parfois disposés dans des entrepôts de plusieurs centaines de mètres carrés. Il faut donc pouvoir retranscrire
l’appréhension visuelle qu’avait l’utilisateur en arrivant dans son entrepôt ou sa pièce. Pour cela, il est important de
rendre lisible la structure de votre site. Comment le faire ?
- avec un plan du site si la structure n’est pas suffisamment lisible, ou si le site est trop grand pour que
l’utilisateur ne puisse sans effort avoir une vue d’ensemble,
- avec une signalétique cohérente tout au long de l’application
Remarques :
- Notez que la structure « visuelle » que vous donnez à votre utilisateur n’est pas forcément calquée sur
l’architecture technique que vous avez déterminée au préalable.
- Dans le cas d’un site commercial ou vous cherchez à vendre quelque chose, des études ont montré que
vous avez le droit à 3 cliques et moins d’une minute pour « conquérir » le client !
Quand on veut rendre un site accessible sur le Web, il est bien sur capital d’être bien référencé si on veut être visité. Les
termes que l’on choisit dans la définition de ses mots clefs sont déterminants.
Pour se faire référencer auprès des moteurs de recherche qui utilisent des petits robots fournisseurs, ils
utilisent les mots clefs suivants qui se trouve dans la balise du titre :
Ce texte est repris en totalité ou en partie par le moteur de recherche, mais il arrive aussi que ces derniers
utilisent l’intitulé noté dans les balises « title » de la page c’est à dire ici :
<TITLE>c-mescourses.com : Finies les commissions, faire mes courses de chez moi, se faire livrer €
domicile les produits alimentaires de consommation, packs d'eau, lait, conserves, couches.</TITLE>
Notons que la balise destinée aux robots précise la langue utilisée. Cela peut limiter le trafic généré puisque
le site ne répond pas à toutes les demandes dont la langue cible est précisée et n’est pas « français », mais
cela permet de mieux cibler l’internaute et de ne pas générer du trafic « non susceptible d’être client » qui
coûte chère en tuyau et en matériel le serveur devant pouvoir répondre à tout le monde en même temps.
(préciser si besoin). Notons que les accents ne sont pas utilisés dans les mots clés. (voir pour les autres sites)
Remarque : si le travail de l’utilisateur s’appuie sur un formulaire papier, et si ce formulaire est bien construit, faire en
sorte que la disposition des champs dans la fenêtre soit proche de la structure du formulaire.
Aligner verticalement les champs de saisie et/ou d’affichage avec leurs libellés ; la justification peut se faire de
trois manières :
- 1 : si les « libellés » sont de dimension sensiblement identique, justifier les champs et les libellés à gauche ;
- 2 : si les libellés sont de dimensions très variables, justifier ces libellés à droite et les champs à gauche ;
- 3 : il est également possible de disposer les libellés au-dessus des « champs de saisie » ; il faut alors les justifier à
gauche.
Prénom : Ancienneté :
Age :
Nom : Profession :
Prénom : Profession du
conjoint :
Prénom : Profession :
[Morlais 01]
[Morlais 01]
Placer l’en-tête de groupe au-dessus de la boîte de groupe, et en incrustation dans le cadre s’il y en a un.
Ne pas utiliser de boîte de groupe pour les boutons de commande.
Ne pas utiliser systématiquement des boîtes de groupe quand il y a un en-tête : trop de cadres peuvent gêner la
lisibilité globale de la fenêtre. Utiliser alors des en-têtes de groupe sans représenter une boîte de groupe.
Les colonnes doivent être séparées par un double espace (1 caractère blanc x 2). Si cela ne peut pas être fait
(par manque de place), séparer les colonnes par des traits (lignes verticales).
Comment organiser les éléments à l’intérieur d’un tableau/d’une liste (c’est-à-dire sur quoi se baser pour
établir la chronologie des données) ?
- adopter l’ordre respectant les habitudes de travail de l’utilisateur ;
- le cas échéant, utiliser l’ordre alphabétique ou numérique.
Lors de la création de listes d’éléments, on peut être confronté à des éléments de texte trop longs pour contenir
dans l’espace d’une ligne de la liste. Dans ce cas, supprimer des parties de texte dans le milieu du libellé et y
insérer des points de suspension, conservant ainsi le début et la fin du libellé de l’élément. Attention toutefois :
dans certains cas, il sera plus judicieux de conserver le début du libellé et de faire suivre ce dernier par des
points de suspension.
Repérer chaque champ, liste, tableau, colonne ou groupe de données par un libellé. On distingue trois grands
types de libellés :
- le libellé de champ, à utiliser pour identifier une donnée affichée ou à saisir ;
- l’en-tête de colonne, à utiliser pour identifier la colonne d’un tableau ou d’une liste ;
- l’en-tête de groupe, à utiliser pour identifier un ensemble de données rassemblées sous la forme d’un
groupe.
7.3.2.5 La typographie
Concernant la taille des caractères :
Taille minimum : 8 points ; des caractères de plus petite taille sont quasiment illisibles ;
Taille maximum : 16 points ; l’utilisation de caractères de plus grande taille gêne la lisibilité.
Choisir la police de caractères en fonction de critères de lisibilité (éviter l’italique).
Eviter d’utiliser plus de trois polices de caractères différentes dans une même fenêtre ou sur plusieurs fenêtres
affichées simultanément.
De manière générale, utiliser une seule police de caractères dans un champ. Toutefois, il est possible d’utiliser
des codages particuliers (police différente, couleur, italique, gras, souligné...) pour différencier certains textes
tels que des mots clés, des liens, des libellés de champs de saisie obligatoire, etc.
Pour tous les libellés (champs de saisie et champs d’affichage, option de menu, boutons d’option, titre, etc.)
utiliser une majuscule à l’initiale. Ne mettre donc en majuscule que la première lettre du premier mot du libellé
et aucun autre mot de ce libellé.
7.3.2.6 La couleur
La couleur peut être employée pour coder visuellement l’information : différenciation et identification des informations
affichées.
La couleur ne doit pas être le seul moyen utilisé pour communiquer de l’information et ne devrait pas être le
seul élément qui distingue deux objets ; il doit y avoir d’autres indicateurs (libellés, forme, disposition) ;
Quand le principe des onglets est utilisé, si ces derniers sont liés (dépendants), les boutons <OK> et <Annuler> doivent
être placés en dehors de l’onglet. Si les onglets sont indépendants, ces boutons doivent être placés sur chacun des
onglets : le bouton <Annuler> devient <Fermer> et la demande de confirmation devient facultative (<OK> facultatif).
Centrer les libellés des onglets et les afficher sur une seule ligne.
Aligner les languettes des onglets à gauche et les accoler les unes aux autres.
Note : Les techniques présentées pourraient tout aussi s’appliquer à un projet de SIG.
Pour obtenir une certaine qualité, il est indispensable de toujours travailler en équipe. Toutes les compétences ne seront
jamais cumulées par la même personne. On pourra dans un projet 3D retrouver par exemple, au moins un graphiste
2D/3D, un programmeur, un architecte/designer, etc.
Normalement, le chef de projet qui aura comme tâche d'organiser le développement et d'affecter les tâches, sera choisi
parmi les plus expérimentés. Il devra fire en sorte que les différents intervenants du projet travaillent ensemble de
manière coordonnée et sans gaspiller trop d'énergie ; soit en faisant la même chose que l’autre, soit en recommençant ce
que l’autre a déjà fait, même si intéressant.
Une conséquence supplémentaire de cette mesure c’est le fait de pouvoir créer des composants indépendants et donc
réutilisables (pouvant être réutilisés dans un autre projet pour gagner en temps).
Comme nous avons pu le constater ensemble, la bonne ergonomie de ses applications ne tient pas à grand-chose, il
suffit de faire attention à un certain nombre de critères.
Notez tout de même que, la prise en compte de ces recommandations ne se substitue pas à la connaissance des
utilisateurs ni à la connaissance de leur travail ; elle ne remplace pas une analyse du travail, elle est simplement
complémentaire à un travail d’analyse de la cible. Ces recommandations sont particulièrement applicables pour les sites
Internet qui ne ciblent pas de public particulier.
Quand on élabore un Intranet ou une application spécifique, l’analyse du fonctionnement et du comportement des
utilisateurs peut amener à ne pas prendre en compte certaines recommandations, voir à faire autrement !
http://www.silverrun.com/modelsphere.html
- MyEclipse http://myeclipseide.com
- Objecteering http://www.objecteering.com/
- Poseidon http://gentleware.com/index.php?id=30
- PowerAMC http://www.sybase.com/products/developmentintegration/poweramc
- Rational Rose Data Modeler http://www-306.ibm.com/software/awdtools/developer/datamodeler/
- Together http://www.borland.com
- Visio http://www.microsoft.com/france/office/visio
- Visual Paradigm http://www.visualparadigm.com/product/vpuml/productinfovpumlse.jsp
- Visual UML http://www.visualuml.com/Products.htm
- Win’Design http://www.win-design.com/fr/
Communautés agiles
• agilemanifesto.org : Manifeste des méthodes agiles
• www.agilealliance.com : Agile Alliance
• pmdoi.org : Declaration of Interdependence
• xp-france.net : Communauté eXtreme Programing Francaise
• www.featuredrivendevelopment.com : Communauté Feature Driven Development
• www.sigmat.fr : Association sigmaT pour la Généralisation des Méthodes Agiles à Toulouse.
• www.agile-suiss.org : Communauté Agile Suisse
• www.agilequebec.ca : Communauté Agile de Québec
• www.agilemontreal.ca : Communauté Agile de Montréal
• www.extremeprogramming.org : Site de la méthode xp
• [www.adeli.org] : Association pour la maîtrise des systèmes d'informations
• www.rad.fr : Site historique de la méthode RAD
• www.embarcadero.com : Site de RAD Studio XE
• www.cui.unige.ch/ScDep/Cours/GenieLogiciel/index.html
• www.gpa.etsmtl.ca/cours/gpa77
• cui.unige.ch/ScDep/Cours/GenieLogiciel/
• www.cours.polymtl.ca/inf2300
• www.adeli.org
- Just-in-time : notion de produire la bonne pièce à la bonne quantité et au bon moment. Sous cette appellation, on retrouve un
ensemble de méthodes tournées vers l’organisation de sa production selon un mode « pull », c’est-à-dire organiser sa chaîne de
production de manière à ce qu’une étape ne produise pas un élément tant qu’il n’est pas demandé par l’étape suivante. Cela revient à
piloter sa chaîne de production en fonction de son carnet de commande et plus en fonction d’une estimation de la demande et de la
capacité de production de sa chaîne. Cette organisation permet également de diminuer ses stocks au maximum, voire de les réduire à
zéro.
- Jidoka : notion d’empêcher un maillon de la chaîne de passer une pièce défectueuse au maillon suivant. Si un défaut est identifié sur
un élément dans la chaine de production, on arrête immédiatement la chaîne, on répare le défaut, et on s’assure qu’il ne se reproduira
plus, on redémarre ensuite la chaîne de production. Les défauts peuvent provenir des machines, des matières premières, de la
formation du personnel, etc.
Pour plus de détails, le lecteur pourra consulter l’ouvrage référence en la matière : The Machine That Changed the
World : The Story of Lean Production, de Womack, Jones, et Roos.