![]() |
Site Web
Thierry Cros Cas d'Utilisation ou approche fonctionnelle |
| | Accueil | Extreme Programming | UML, Objet | Formation | Consulting | Liens | Contact | |
|
Les cas d'utilisation forment aujourd'hui la
clé des développements "objet" et leur
traçabilité. Même si, à strictement
parler, ils traduisent les fonctions d'un système,
leur mise en oeuvre n'est pas une approche fonctionnelle, au
sens informatique du terme, du système. En effet, les cas
d'utilisation sont reliés à des acteurs, ce qui
n'est pas le cas d'une approche classique. De plus les
cas d'utilisation sont constitués d'interactions
entre acteurs et système, pas d'opérations
réalisées par le système. Toutefois, les
relations définies dans UML entre cas d'utilisation
(à savoir <<include>>,
<<extend>> et la généralisation)
peuvent préter à confusion. Cet essai tente de
faire le point sur ce sujet. Contenu
Quelques définitions Cas d'UtilisationUn cas d'utilisation est une façon d'utiliser le système. Le terme "cas d'utilisation" est explicite : dans quel cas tel acteur utilise-t-il le système ? Chaque réponse à cette question est donc par définition un cas d'utilisation. Cette technique d'expression de besoins a été formalisée par I.Jacobson (Objectory). Les cas d'utilisation font aujourd'hui partie intégrante de UML et constituent d'ailleurs le premier critère à prendre en compte dans le choix de la méthode associée à UML. Ils font référence aux acteurs, i.e. aux "choses" externes au système et qui communiquent avec le système. Un cas d'utilisation est constitué d'un
ensemble d' interactions entre acteur(s) et
système. Cette caractéristique est
extrèmement importante : les cas représentent des
interactions. Ainsi, l'un des pièges dans
l'écriture de la description textuelle des cas est de
rentrer dans le système plutôt que de rester
à la frontière. Les cas sont une
modélisation du système d'un point de vue
externe. Dans une vision "objet" du logiciel, le
système peut être vu comme un objet d'un
système englobant, les acteurs comme d'autres objets.
Les cas d'utilisation modélisent alors les
relations ou collaborations entre ces objets sous forme de
description d'interactions. Dans les diagrammes, les acteurs
sont les classifieurs qui représentent les
rôles au travers d'une certaine utilisation
(cas). Parmi les questions relatives aux cas, la
détection du déclencheur des interactions
(acteur, système) et le/les acteur(s)
bénéficiaire(s) du cas permettent de mieux
cerner la valeur ajoutée du cas. Ainsi, les descriptions
des interactions peuvent être modélisées sous
forme de diagramme d'interaction. La différence avec
la description textuelle réside dans la nature de la
description : un texte est plus informel, plus lisible pour un
non-informaticien. Valeur ajoutée du cas d'utilisationUn cas d'utilisation doit offrir une certaine valeur ajoutée à l'un des acteurs. Il est d'ailleurs possible d'ajouter une propriété à chaque cas, telle que le niveau de valeur ajoutée, ce qui est une déclinaison particulière de la priorité du cas.Cette technique de spécification adopte le point de vue utilisateur et, plus encore, insiste sur le bénéfice offer à l'utilisateur. C'est un bon moyen pour déterminer la pertinence, la fiabilité d'une demande du client. Au plus la valeur ajoutée est naturellement exposée, expliquée, au plus la solidité du cas. Communication entre acteurs et casUML définit une relation entre acteurs et système: l'association. Cette relation correspond plus précisement à un potentiel de communication entre acteurs et système (techniquement, la relation d'association est stéréotypée en <<communication>> . Il serait d'ailleurs possible de représenter cette relation dans un diagramme de classes. La classe Personne serait par exemple associée à la classe Compta. Dans cette association, un objet de type Personne joue le rôle de Comptable. Dans un diagramme de cas d'utilisation, l'accent est mis sur le rôle et non pas sur le type réel des objets en relation avec le système : l'acteur est défini par son rôle. De même qu'une association dans un diagramme de classes représente une relation permanente, un potentiel de liens, de même la relation de communication entre acteurs et cas. Il est quelquefois judicieux d'indiquer les informations (qui deviendront des objets dans le développement) échangées entre acteurs et système, par rapport au cas. Il est alors possible d'utiliser des mécanismes communs tels que étiquettes, contraintes ou notes. La communication étant la relation permanente entre acteur et système, un label devrait éviter toute ambiguïté avec une modélisation dynamique. En dernière analyse, les diagrammes d'interactions permettent de spécifier les échanges entre acteurs et système. Ils modélisent des scénarii et sont donc tout-à-fait adaptés à la représentation des échanges, d'un point de vue dynamique. Ils sont très complémentaires des diagrammmes de cas d'utilisation.Relations entre cas d'utilisationLes relations entre cas d'utilisation sont en fait des relations entre ensembles d'interactions et ne représentent pas une décomposition fonctionnelle. Elles permettent d'organiser les interactions, alors que les paquetages permettront d'organiser les cas - en tant que fonctionnalités - eux-mêmes par acteur ou priorité ou tout autre critère logique choisi par le modeleur.Lorsque la description textuelle fait apparaître des interactions communes à plusieurs cas, la relation <<include>> (qui remplace le stéréotype <<uses>>) permet d'éviter la réécriture. Lorsque dans un diagramme, un cas A dépend d'un cas B au travers d'une relation <<include>>, cela ne signifie donc pas que B est une fonction qui sera appelée par A. Cela indique simplement que les interactions décrites dans B sont à injecter dans les interactions décrites dans A. Plus tard, ces interactions seront de la responsabilité de plusieurs objets du système. En fait, à une interaction (par exemple : le système affiche le total H.T.), correpondra très probablement une collection d'opérations dans plusieurs objets. Chacun des objets collaborants sera peut-être impliqué dans plusieurs scénarii de plusieurs cas. La relation <<include>> est inconditionnelle. A partir du moment où elle est modélisée entre deux cas, l'inclusion des interactions est systématique. Il est aussi possible de créer ces descriptions d'interactions incluses simplement pour alléger la description de cas principaux ou secondaires particulièrement importants. La relation stéréotypée
<<extend>> permet d'étendre les
interactions et donc les fonctionnalités décrites
par les interactions. Cette relation est typique d'une
situation optionnelle dans les interactions : La relation d'héritage ou de généralisation entre cas est plus subtile. La version 1.1 de UML ne distinguait d'ailleurs pas <<extend>> et généralisation. Cette relation est à prendre au sens classique de spécialisation, inhérent à 'héritage. Ici, la généralisation peut être vue aussi comme un "polymorphisme" de cas. Autrement dit, de même qu'une opération peut être polymorphe, de même les interactions qui définissent un cas peuvent prendre plusieurs formes et devenir de plus en plus complexes par exemple. De même qu'un objet de sous-classe peut être considéré aussi comme instance de la sur-classe, de même un scénario induit par le sous-cas d'utilisation peut être accompli dans le cadre de l'utilisation décrite par le sur-cas d'utilisation. Dans un système d'agence de voyage, un acteur touriste peut participer à un cas de base qui est "Réservation", ce qui suppose par exemple des interactions graphiques au comptoir de l'agence. Une réservation peut aussi être réalisée par téléphone ou internet. Il ne s'agit pas de relation <<extend>> car la réservation par internet n'étend pas les interactions ni les fonctionnalités du cas 'Réservation". Elle les traduit différemment. Les interactions Internet ne sont pas une option des interactions Comptoir. Par contre les deux cas "Réservation" et "Réservation par Internet" sont liés: internet est un cas particulier de réservation. Pondération des cas d'utilisationLes cas d'utilisation peuvent recevoir une pondération, fonction de leur complexité: faible, moyenne, forte. A ce sujet, voir Use Case Points - An Estimation Approach de Gautam Banerjee. Les cas d'utilisation du système seront
réalisées grâce à la collaboration
d'une société d'objets qu'il reste
à analyser, concevoir, conformément à
l'architecure. C'est le coeur de l'approche
objet. Typer les acteurs et les cas d'utilisation
Dans le même temps :
Les acteurs principaux sont généralement
humains. Il reste toutefois à préciser ces types
d'acteurs car, après tout, pourquoi ne pas imaginer un
système construit pour un acteur principal qui serait un
autre système matériel ou logiciel ? Autrement dit,
quel est le critère majeur : l'importance de
l'acteur ou son humanité ? Besoins fonctionnels et non-fonctionnels
Les besoins fonctionnels sont modélisés sous forme de cas d'utilisation. Ici, fonction est à prendre au sens "fonctionnalité majeure" du système. Ce que doit faire le système est par nature fonctionnel. Comment modéliser les besoins non-fonctionnels en UML
? Qu'offre UML ? Tout d'abord les diagrammes de cas d'utilisation. Ce type de diagramme peut être annoté via le mécanisme commun de notes ; c'est informel mais cela permet d'introduire des informations dans tous les diagrammes, pour tous les éléments, donc en particulier pour les cas d'utilisation. UML permet aussi de stéréotyper des notes <<Exigences>> . Dans ce cas, la note est plus formelle : elle devient une notation de modélisation au même titre que les autres. UML offre ensuite les mécanismes d'extension tels que étiquettes et contraintes. Ces mécanismes sont pertinents pour spécifier des caractéristiques associées aux besoins telles que degré de disponibilité, temps de réponse, solutions imposées ... Ici, une étiquette peut faire référence à un document applicable. Enfin, UML offre aussi d'autres diagrammes, en particulier les diagrammes de séquence qui permettent visuellement de mettre l'accent sur le temps et - via les contraintes également - de préciser des informations telles que des contraintes temporelles. UML admet aussi des diagrammes d'état associés à des cas d'utilisation. Ce type de formalisme permet par exemple de préciser des modes dégradés dans les systèmes. Si les différents intervenants comprennent la langue UML, tous les diagrammes permettent de préciser tel ou tel point des spécifications et deviennent utiles dès la phase d'expression de besoins. Ainsi, le modèle de cas d'utilisation tel qu'il est proposé dans le Unfied Process comprend les éléments suivants.
Une remarque importante : le modèle de cas
d'utilisation n'est pas le modèle d'analyse.
Ce dernier se situe à l'intérieur du
système et décrit les objets
'idéaux' ie sans contrainte technique. Business modeling et cas d'utilisation Cas d'utilisation et traçabilité Conclusion L'assurance qualité du projet a un rôle majeur dans l'expression des besoins via les cas d'utilisation.
Les cas d'utilisation devraient être
considérés comme un outil de mise au point
des besoins des utilisateurs. A ce titre, la simplicité
dans les diagrammes, dans les descriptions textuelles devrait
être une règle d'or ... Les cas
d'utilisation sont aussi au coeur de la
traçabilité des développements basés
sur la notation UML. Retour articles UML, objet |