Académique Documents
Professionnel Documents
Culture Documents
Vous pouvez stéréotyper les acteurs afin de fournir des icônes particulières plus
évocatrices pour le lecteur.
B. Les pièges
A. Les conseils
Par opposition, nous qualifions d'acteurs secondaires ceux qui sont seulement
sollicités par le système lors du cas d'utilisation, OQ qui en retirent un résultat
secondaire.
Chaque cas d'utilisation doit faire l'objet d'une définition a priori qui décrit l'intention
de l'acteur lorsqu'il utilise le système et quelques séquences d'actions qu'il est
susceptible d'effectuer. Ces définitions servent à fixer les idées lors de
l'identification des cas d'utilisation et n'ont aucun caractère exhaustif.
Diagramme de cas d'utilisation: détaillez les rôles (principal ou secondaire) et le
sens des associations. Par défaut, le rôle d'un acteur est principal, si ce n'est pas
le cas, précisez explicitement que le rôle est secondaire sur l'association, du côté
de l'acteur. Si un acteur ne fait que recevoir des informations du système, sans
rien fournir en retour, ni demander, représentez cette particularité en ajoutant une
flèche vers l'acteur sur l'association avec le cas d'utilisation.
Limitez à 20 le nombre de vos cas d'utilisation: cette limite arbitraire oblige à ne
pas se poser trop de questions philosophiques et à rester synthétique.
Cas d'utilisation: utilisez le style de description adapté. N'oubliez pas qu'un cas
d'utilisation a pour but d'exposer comment un acteur particulier utilise le système.
La façon dont vous allez décrire cette utilisation dépend de la raison pour laquelle
vous la présentez.
Cas d'utilisation: vous pouvez compléter les descriptions textuelles avec des
diagrammes dynamiques simples.
Vous pouvez généraliser les acteurs. Si un ensemble d'acteurs communiquent de
la même façon avec certains cas d'utilisations, on peut créer un acteur généralisé
(souvent abstrait), qui permettra de factoriser ce rôle commun.
Regroupez vos cas d'utilisation en packages. Les stratégies principales sont les
suivantes: par domaine d'expertise métier, par acteur ou par lot de livraison.
Pour trouver les premières classes candidates: cherchez les noms communs
importants dans les descriptions textuelles des cas d'utilisation ; vérifiez les
propriétés « objet ~~ de chaque concept (identité, propriétés, comportement), puis
définissez ses responsabilités. Une classe qui comporte plus de cinq
responsabilités doit être subdivisée en plusieurs.
B. Les pièges
Un cas d'utilisation n'est pas une fonction atomique. Une erreur fréquente
concernant les cas d'utilisation consiste à vouloir descendre trop bas en termes de
granularité. Un cas d'utilisation représente bien un ensemble de séquences
d'actions réalisées par le système. Il ne doit en aucun cas se réduire à une seule
séquence (on parlera alors de scénario), et encore moins à une simple action.
Réinventer les méthodes fonctionnelles. Paradoxalement, malgré l'apparente
simplicité du concept de cas d'utilisation, il existe des risques importants de
mauvaise utilisation liés à leur nature fonctionnelle (et non objet), la difficulté de
savoir à quel niveau s'arrêter. N'oubliez pas: les cas d'utilisation ne doivent pas
être une fin en soi, mais simplement servir (et ce n'est déjà pas si maIl) à dialoguer
avec le client et à démarrer l'analyse orientée objet, en identifiant les classes
candidates.
Mélanger l'IHM et le fonctionnel. Une erreur fréquente concernant les cas
d'utilisation consiste à les rendre dépendants d'un choix prématuré d'interface
homme-machine. Elle conduit alors à les re-documenter complètement à chaque
évolution d'interface, alors qu'il s'agit en fait du même cas d'utilisation fonctionnel.
III.Capture des besoins techniques
A. Les conseils
B. Les pièges
La classe est une entité de structuration trop petite dès qu'on entreprend un projet
réel. Au-delà d'une douzaine de classes, regroupez les classes fortement reliées
(par des associations, généralisations, etc.) en unités plus grandes. Booch a
introduit le concept de catégorie, pour nommer ce regroupement de classes, qui
constitue la brique de base de l'architecture logique.
Pour le découpage en catégories, fondez-vous sur l'ensemble des classes
candidates identifiées durant la phase précédente, ainsi que sur deux principes
fondamentaux: l'homogénéité et l'indépendance. Le premier principe consiste à
regrouper les classes sémantiquement proches. À cet égard, il faut chercher
l'homogénéité au niveau des critères suivants : finalité, évolution et cycle de vie. Le
deuxième principe a pour but de renforcer ce découpage initial en s'efforçant de
minimiser les dépendances entre catégories.
Une catégorie d'analyse contient moins de 10 classes
Minimisez les dépendances entre catégories. Aidez-vous des dépendances
souhaitées entre catégories pour prendre des décisions sur le sens des relations
entre classes: associations, généralisations, et par la suite en conception:
dépendances et réalisations.
V. Analyse: Développement du modèle statique
A. Les conseils
Parmi les classes candidates, éliminez: les classes redondantes ou vagues, les
attributs, les rôles, les acteurs non gérés, les classes de conception ou
représentant des groupes d'objets.
Parmi les associations candidates, éliminez les associations non structurelles (ou
dynamiques) et les associations redondantes.
Soyez très précis avec les multiplicités des associations. Elles doivent être
vérifiées à tous les moments du cycle de vie des instances.
Dans un modèle d'analyse, gardez uniquement comme attributs les propriétés
simples des classes que le système doit mémoriser et manipuler.
Nommez de préférence les associations avec des noms de rôle.
Distinguez les attributs dérivés. En analyse, un attribut dérivé indique seulement
une contrainte entre deux propriétés, un invariant, et pas encore ce qui doit être
calculé par rapport à ce qui doit être stocké.
Distinguez les attributs de classe.
Identifiez les classes d'association.
Utilisez les qualificatifs, sans oublier la modification de la multiplicité de
l'autre côté de l'association.
Vos généralisations doivent respecter le principe de substitution. Répartissez bien
les responsabilités. Vérifiez en particulier si elles sont
cohérentes et homogènes. Identifiez à bon escient les métaclasses Type XXX.
Ajoutez les contraintes entre associations.
B. Les pièges
B. Les pièges
Chercher l'exhaustivité des scénarios. Il est clair que la combinatoire des
enchaînements entraîne un nombre illimité de scénarios potentiels! On ne peut pas
tous les décrire. Il faudra faire des choix et essayer de trouver le meilleur rapport «
qualité/prix ».
Perdre du temps à dessiner des diagrammes d'états contenant seulement deux
états (de type « on/off » ), voire un seul. Cela signifie que la dynamique de la
classe est simple et peut être appréhendée directement. En suivant cette règle, il
est habituel que seulement 10 à 20% des classes aient besoin d'une description
détaillée sous forme de diagramme d'états
Confondre action et activité: Les actions sont associées aux transitions et sont
considérées comme atomiques ou ininterruptibles par rapport à l'échelle de temps
considérée; les activités, au contraire, ont une certaine durée, sont interruptibles et
sont donc associées aux états
Se contraindre à utiliser toutes les subtilités des diagrammes d'états. Le
formalisme du diagramme d'ét.:\ts UML (avec son dérivé, le diagramme d'activités)
est très puissant, mais aussi très complexe. Néanmoins, le lecteur qui ncen
maîtrise pas toutes les arcanes risque de s'en trouver désorienté.
VII. Conception d'architecture: conception
générique
A. Les conseils
Organisez les services techniques en frameworks techniques. Les frameworks
techniques sont concrets s'ils se suffisent à eux-mêmes et peuvent donner lieu à
des composants d'exploitation à part entière. Ils sont abstraits lorsqu'ils nécessitent
la connaissance d'un contenu fonctionnel pour être réalisés.
Utilisez UML comme langage de communication entre concepteurs. En dehors du
modèle, UML devient un vecteur d'échanges très utile pour les concepteurs, et ce
en toutes circonstances.
Déterminez les mécanismes récurrents avec des valeurs étiquetées. Les
diagrammes s'en trouvent allégés et il est de la sorte plus aisé de factoriser les
mêmes savoir-fajre dans le projet.
Utilisez les design patterns pour la conception. Vous bénéficierez de la sorte des
meilleures pratiques de conception objet, et pourrez les diffuser,
Réutilisez pour concevoir et concevez pour réutiliser. Cette directive vous
permettra d'améliorer la documentation, la robustesse et l'organisation du système
développé.
Identifiez les composants d'exploitation qui prennent en charge les services
génériques d'après les frameworks techniques concrets. Ces composants peuvent
faire l'objet d'un développement pour le prototype d'architecture.
Définissez l'influence des frameworks techniques dans le modèle de configuration
logicielle. C'est un outil qui permet d'étudier l'intégration de l'architecture technique
et d'organiser la réutilisation de code.
Utilisez un générateur de code à bon escient. Le générateur est intéressant pour
créer des squelettes de code. Il est rentable à partir de 150 à 200 classes
frameworks .
Développez un prototype comme preuve de concept de la conception générique.
La conception d'architecture constitue l'épine dorsale du système en
développement. Le prototype permet de vérifier la réponse aux besoins techniques
et de tester la robustesse des composants génériques.
B. Les pièges
A. Les conseils
B. Les pièges
Démarrer la conception du modèle logique sans définir au préalable le
déploiement et les composants d'exploitation. Le modèle logique doit être
orienté vers les cibles du développement. Dans le cas inverse, les développeurs
risquent d'en faire trop ou pas assez, et se limiteront difficilement dans le cadre de
l'incrément défini.
Ne pas organiser le modèle logique. Dans ce cas, des dépendances inextricables
réduiront inévitablement les capacités d'évolution, de maintenance et de
robustesse du code produit.
Ignorer le modèle de configuration logicielle peut être fortement préjudiciable à un
projet, en l'absence de règles précises de fabrication et de compatibilité entre
versions.