# Cas d'utilisation

Un cas d'utilisation, bloc fonctionnel ou cas d'usage (« use-case » en anglais), définit en génie logiciel et en ingénierie des systèmes une manière d'utiliser un système qui a une valeur ou une utilité pour les acteurs impliqués$^,$. Le cas d'utilisation correspond à un ensemble d'actions réalisées par le système en interaction avec les acteurs en vue d'une finalité. L'ensemble des cas d'utilisation permet ainsi de décrire les exigences fonctionnelles d'un système en adoptant le point de vue et le langage de l'utilisateur final.

## Origine et évolution

En 1987, Ivar Jacobson présente le premier article sur les cas d'utilisation lors de la conférence OOPSLA '87$^,$. Il y décrit comment cette technique mise au point chez Ericson peut servir à capturer les exigences d'un système, sous une forme graphique, dans le cadre d'une méthode d'analyse et de conception « orientée objet ». En 1992, il publie OOSE, une méthode d'ingénierie des systèmes qui est orientée objet et pilotée à partir des cas d'utilisation. En 1994, il publie ensuite un ouvrage sur l'emploi des cas d'utilisation dans le contexte de la réingénierie des processus et des modèles d'affaires.
Dans le même temps, Grady Booch et James Rumbaugh travaillent à unifier leurs méthodes d'analyse et de conception orientées objets, la méthode Booch et l' Object Modeling Technique (OMT). Ils sont rejoints en 1995 par Ivar Jacobson, et donnent naissance au langage de modélisation UML, dont la normalisation confiée à un consortium, l'Object Management Group (OMG), aboutit en 1997. Au-delà du langage de modélisation graphique, Jacobson, Booch et Rumbaugh travaillent également à une méthode de développement unifiée, qui sera basée dans un premier temps sur Objectory, puis enrichie. Cette méthode devient en 1999 le Processus Unifié et perpétue le principe d'un pilotage par les cas d'utilisation, et précise comment ceux-ci sont utilisés pour capturer les exigences et servir de fil conducteur à tout le processus de développement.
À la suite de Jacobson, plusieurs auteurs ont contribué à la technique des cas d'utilisation, parmi lesquels on citera en particulier Alistair Cockburn qui a développé en 2000 une approche des cas d'utilisation axée sur leur finalités et qui a également popularisé une description narrative et tabulaire -- véritable alternative aux diagrammes de cas d'utilisation --, Geri Schneider et Jason Winters qui ont publié en 2001 des bonnes pratiques, Kurt Bittner et Ian Spence qui ont perfectionné en 2002 les pratiques d'analyse des exigences fonctionnelles, et Gunnar Overgaard qui a proposé en 2004 d'appliquer le concept des patrons de conception aux cas d'utilisation.
Dans les années 1990 les cas d'utilisation devinrent une des pratiques les plus utilisées pour travailler sur la relation fonctionnelle. Ils furent notamment populaires au sein de la communauté orienté-objet, dont est issu le concept de cas d'utilisation. Cependant leur usage ne se limite pas aux systèmes orientés-objet, les cas d'utilisation n'étant pas orientés-objet par nature.
En 2011, Ivar Jacobson, Ian Spence et Kurt Bittner, publient « Use Case 2.0 », un livre électronique, pour actualiser l'approche et faciliter l'emploi des cas d'utilisation dans le contexte de méthodes agiles, en les enrichissant de la notion de tranche (« use-case slice » en anglais).

## Principes

Le cas d'utilisation est une technique pour capturer les exigences d'un système et servir de fil conducteur à l'ensemble des activités nécessaires à sa mise en œuvre. Selon le SWEBOK, ils font partie de la famille des techniques de collecte d'exigences à base de scénarios.
Selon Bittner et Spence, « Un cas d'utilisation (...) permet de décrire une séquence d'événements qui, pris tous ensemble, définissent un système faisant quelque chose d'utile ». Le cas d'utilisation correspond donc à un ensemble d'actions réalisées par le système en interaction avec les acteurs en vue d'une finalité.
Plusieurs définitions plus précises témoignent de l'évolution du concept, partant initialement d'une compréhension comportementale, pour arriver à une vision pilotée par les objectifs :
* en 1999, « Un cas d'utilisation définit une séquence d'action, avec des variantes, que le système peut réaliser et qui produit un résultat observable qui a de la valeur pour un utilisateur particulier » ;
* en 2001, « Un cas d'utilisation capture un contrat entre les parties prenantes et un système concernant les comportements de celui-ci. Un cas d'utilisation décrit les comportements d'un système sous différentes conditions en réponse à une requête de l'une de ses parties prenantes » ;
* en 2011, « Un cas d'utilisation est l'ensemble des manières d'utiliser un système pour atteindre un but spécifique pour un utilisateur particulier. L'ensemble de tous les cas d'utilisation indique toutes les façons utiles d'utiliser un système ».
Les cas d'utilisation tentent d'éviter tout jargon technique et essayent au contraire d'adopter le langage de l'utilisateur final ou de l'expert du domaine.

### Éléments constitutifs

Un cas d'utilisation est identifié par une finalité pour un acteur du système appelé acteur primaire. Par acteur il faut entendre un utilisateur humain ou un autre système. Un cas d'utilisation peut aussi impliquer d'autres acteurs, appelés acteurs secondaires.
Chaque cas d'utilisation correspond à un ou plusieurs scénarios qui définissent l'interaction entre le système et les utilisateurs. Généralement, il y a un scénario principal et éventuellement des variantes. Celles-ci correspondent à des cas particuliers et à des exceptions. Les scénarios peuvent inclure d'autres cas d'utilisation.
Chaque cas fait l'objet d'un descriptif ou d'une spécification qui présente les différents cas de figure.
Dans l'approche des « cas d'utilisation 2.0 », la description initiale est réduite à sa plus simple expression, sans scénario. Ce cas est alors enrichi par la description de « tranches de cas d'utilisation » (« use-case slice » en anglais). Chaque tranche représente un scénario ou une variante, mais selon un découpage qui permet à chaque tranche d'être implémentée au cours d'une itération. L'ensemble des tranches doit en principe couvrir finalement tous les scénarios et variantes du cas d'utilisation.

### Types

Il existe plusieurs types de cas d'utilisation, qui correspondent à des usages différents :
* le cas d'utilisation concret est la forme la plus courante. Les scénarios en décrivent la séquence des interactions en détail, étape par étape, telles qu'elles sont vues par l'utilisateur. La conséquence est que l'enchaînement des actions est alors pris comme un fait accompli, sans que l'ergonomie qui en résulte ne soit jamais remise en question ;
* le cas d'utilisation paramétré regroupe plusieurs cas très similaires. La description est alors générique et permet la prise en compte de légères différences par le biais des paramètres ;
* le « cas d'utilisation essentiel » (en anglais « essential use case »), parfois également appelé « cas d'utilisation abstrait », est une forme épurée, qui ne se réfère qu'aux intentions de l'utilisateur et sans aucune idée préconçue sur la technologie qui sera utilisée, la chronologie des interactions, l'ergonomie adoptée, ou la mise en œuvre$^,$$^,$. Au lieu de décrire l'enchaînement des actions du scénario, le cas d'utilisation essentiel montre les différentes intentions de l'utilisateur et les responsabilités correspondantes du système. L'avantage de ce procédé est qu'il laisse une grande liberté pour concevoir des solutions innovantes susceptibles de remettre en cause les pratiques habituelles. C'est l'approche recommandée pour une démarche centrée sur l'utilisateur ;
* un « cas d'utilisation métier » (en anglais business use case) est un cas d'utilisation dans le cadre d'un modèle d'affaires. Le système considéré n'est alors pas un système informatique mais un processus métier ou une entreprise. Les cas d'utilisation du système informatique en seront déduits dans un deuxième temps.

### Niveaux d'objectif et granularité

Un cas d'utilisation élémentaire correspond à la plus petite unité activité produisant un résultat significatif pour l'utilisateur. Il s'agit en général des tâches qui lui sont attribuées. C'est par ailleurs un ensemble perçu par l'utilisateur comme cohérent, indépendant en soi, et utile.
Alistair Cockburn préconise une approche des cas d'utilisation par les objectifs (« goal-oriented behaviour » en anglais). Constatant alors qu'il y a une différence entre les objectifs décrits à l'échelle d'une organisation et ceux définis pour les tâches d'un utilisateur, il introduit la notion de niveau d'objectif:
| Niveau d'objectif | Analogie avec l'altitude | Description du niveau |
| Stratégique | Nuage | Objectif et raison d'être du système. Identifie les fonctions principales du système pour l'entreprise. |
| | Cerf-volant | Objectif métier de l'entreprise. Identifie les fonctions principales du système pour des activités métier de l'entreprise. Il correspond à des activités métier impliquant plusieurs utilisateurs. |
| Utilisateur | Niveau de la mer | Objectif poursuivi par un utilisateur lorsqu'il utilise le système. Il correspond à une tâche élémentaire de l'utilisateur (durée de 2 à 20 minutes) |
| Sous-fonction | Poisson sous la mer | Participe à la réalisation d'un objectif utilisateur auquel il est lié par une relation de type inclusion |
| Trop détaillé | Coquillage au fond de la mer | À éviter |

### Portée

Si le niveau d’objectif renseigne sur le niveau de détail du cas d’utilisation, la portée elle indique le périmètre d’action. Trois niveaux de portée sont distingués :
* la portée entreprise : en rapport avec les fonctions importantes de l’entreprise ;
* la portée système : axe sur le projet en lui-même ;
* la portée sous-système : intérêt à une partie seulement du projet.

## Documentation

Une vue d'ensemble des cas d'utilisation peut être :
* graphique, avec un ou plusieurs diagrammes de cas d'utilisation ;
* graphique, avec une cartographie des cas d'utilisation. Celle-ci est une représentation graphique d'un ensemble de cas et de leurs relations (spécialisation/généralisation, inclusion, extension, interdépendance et similarités), qui peut être utilisée à l'instar des cartes heuristiques ;
* tabulaire, avec un tableau énumérant les cas d'utilisation, les acteurs impliqués, et éventuellement d'autres informations pertinentes.
Chaque cas d'utilisation peut être documenté sous forme :
* graphique, avec un diagramme de cas d'utilisation représentant le détail ;
* graphique, avec un diagramme d'interaction représentant les échanges entre l'utilisateur et le système ;
* textuelle, avec une description des scénarios sous forme narrative continue, de liste numérotée, de liste indentée ou de pseudo-code ;
* tabulaire, avec 2 colonnes (l'une pour les intentions de l'utilisateur et l'autre pour les responsabilités du système) ;
* formulaire ou fiche (reprend également une représentation tabulaire ou textuelle comme ci-dessus) ;
* carte ou post-it, présentant de façon épurée cas d'utilisation 2.0. Celui-ci est décomposé en « tranches » (« use-case slice » en anglais) faisant chacune l'objet d'une carte ou un post-it. Chaque tranche représente un incrément à implémenter.
Les cas d'utilisation sont souvent écrits à la fois par les analystes, les utilisateurs finaux ou un expert. En UML, chaque cas d'utilisation est représenté au sein d'un diagramme de cas d'utilisation, chacun des scénarios de celui-ci pouvant être décrit lors de l'analyse par un ou plusieurs diagrammes dynamiques : diagrammes d'activités, de séquence, diagrammes de communication ou d'états-transitions.

### Description graphique

Les diagrammes de cas d'utilisation permettent de représenter une vue sur le système considéré, avec des cas d'utilisation et les acteurs impliqués. Généralement les acteurs primaires sont représentés à gauche, mais ce n'est pas une norme.

### Description textuelle

La documentation textuelle d'un cas d'utilisation se compose en général des parties suivantes :
* désignation du cas d'utilisation : devrait en principe commencer par un verbe ( « afficher une image » par exemple) ;
* description brève ;
* évènement déclencheur ;
* enchainements des événements du point de vue de l'utilisateur, sans préciser les étapes techniques sous-jacentes. On distingue :
** le scénario de base,
** les variantes (par exemple scénario d'échecs et d'exceptions),
** des séquences plus détaillés pour certains événements ;
* exigences particulières : exigences qui n'apparaissent pas ci-dessus (par exemple des exigences non-fonctionnelles ou contraintes) ;
* pré-conditions : conditions requises pour que le cas soit applicable ;
* post-conditions : conséquences du succès de l'application du système ;
* extensions : liste de tous les scénarios différents du nominal, suivis de leurs conditions de réalisations ainsi que de leurs actions et éventuellement sous-cas d'utilisation ;
* diagrammes.
On peut ajouter également :
* acteur : acteurs principaux, déclencheurs du cas ;
* parties prenantes et leurs intérêts : sous forme de liste ;
* niveau et portée ;
* questions ouvertes : permettent l'amélioration du cas en appuyant sur les zones d'ombres du projet ;
* annexes.
Alistair Cockburn suggère douze recommandations de rédaction :
* Partir des grandes fonctions et se maintenir le plus possible au niveau objectif utilisateur ;
* Centrer son attention sur le cas nominal ;
* Préciser toujours les parties prenantes et leurs intérêts ;
* Utiliser le présent de l’indicatif ;
* Utiliser la voie active pour décrire les sous-objectifs en cours de satisfaction ;
* Le sujet doit être clairement localisable ;
* Rester concis et pertinent ; éviter les longs documents ;
* Éviter le conditionnel, et placer les comportements alternatifs dans les extensions ;
* Signaler les sous-cas d’utilisation, représentés par la relation d’inclusion « include » ;
* Identifier le bon objectif ;
* Signaler la portée ;
* Laisser de côté l’interface utilisateur.

## Avantages et limites
### Avantages

Les cas d'utilisation sont efficaces pour le recueil des exigences sur la base des scénarios d'utilisation d'un système car ils se focalisent sur les interactions acteurs / système selon les choix de leurs utilisateurs. Ils permettent également de préparer les tests de recette basés sur l'utilisation du système.
Les cas d'utilisation peuvent aisément être mis en relation avec des tâches et activités métier lorsqu'ils sont structurés par niveau d'objectif. Ceci facilite d'une part la communication avec le management des utilisateurs et d'autre part la gestion des changements organisationnels, y compris dans un contexte de réingénierie de processus. Les cas d'utilisation peuvent de ce fait aussi servir de base pour des manuels et la documentation centrées sur l'utilisateur.
La structure des cas d'utilisation procure une vision cohérente d'un ensemble d'exigences étroitement liées. Ils sont ainsi plus faciles à lire qu'une présentation linéaire d'exigences faiblement structurées. Ceci permet en outre à toutes les étapes d'un projet de bénéficier du contexte des fonctionnalités à développer.

### Limites et risques

Selon certains auteurs, les cas d'utilisation ne peuvent à eux-seuls piloter les processus de développement car ils ne tiennent pas compte des règles métier transverses. Lorsque celles-ci peuvent être prise en compte et intégrées aux cas d'utilisation, elles risquent d'être masquées par les interactions entre acteurs et système. Les deux cas de figure peuvent alors causer des problèmes ultérieurement lorsque les règles métier doivent être adaptées. Toutefois ces risques sont à relativiser, car de nombreux modèles de description proposent d'identifier les règles métiers à part, et de faire explicitement référence à ces règles dans les cas d'utilisation lorsque c'est opportun$^,$$^,$.
Le mélange des interactions acteurs / système et des règles métier au sein des cas d'utilisation cause par ailleurs un handicap dans le cadre de l'évolution d'une architecture orientée service (SOA) dont les services sont basés sur les cas d'utilisation. Une alternative basée sur la séparation des règles métier et des cas d'utilisation et permettant respectivement aux services SOA d'encapsuler les règles métier et aux cas d'utilisation de se focaliser seulement sur les choix de navigation des utilisateurs est proposée dans la démarche 'Goal-driven SOA.
Les cas d'utilisation risquent par une description trop détaillée d'influencer l'ergonomie du système sur la bases d'idées préconçues sur la séquence des actions et le mode d'interaction entre l'utilisateur et le système. Ce risque peut être éliminé par le recours aux cas d'utilisation essentiels$^,$.
Selon certains auteurs, les cas d'utilisation ne seraient pas adaptés aux approches agiles en raison de la nécessité de documenter intégralement tous leurs scénarios avant de pouvoir les incorporer dans la planification d'une itération. Toutefois cette critique est très discutable, car Cockburn, l'un des co-auteur du manifeste agile, affirme une préférence marquée pour les cas d'utilisation. De plus la technique des « cas d'utilisation 2.0 », publiée en 2011, a été développée spécifiquement pour une intégration aisée avec les pratiques agiles. Cette approche est comparable à la technique des cartographies de récits utilisateurs (« user story mapping » en anglais) qui lui est postérieure, souvent utilisée dans un contexte agile.

## Variantes et concepts voisins

Les « cas d'abus » et les « cas de détournement d'utilisation » (respectivement abuse case et misuse case en anglais, jouant sur la proximité des mots avec use case) sont des adaptations des cas d'utilisation pour l'analyse des menaces pouvant porter atteinte à la sécurité des systèmes. Les utilisateurs de ces cas sont alors des acteurs malveillants.
Le diagramme de cas d'utilisation est une représentation graphique d'un système et d'un ou plusieurs cas d'utilisation avec les acteurs impliqués. Il s'agit d'une représentation particulière de cas d'utilisation définie par UML, et non le cas d'utilisation en lui-même.
Une « réalisation de cas d'utilisation » correspond à une manière de mettre en œuvre un cas d'utilisation.
Une « instance de cas d'utilisation » est une exécution d'un cas d'utilisation par le système pour un utilisateur donné lors d'une interaction à un instant précis (par exemple pour enregistrer une transaction commerciale).
Un récit utilisateur ( « user story » en anglais ) est la description d'une fonctionnalité souhaitée décrite du point de vue d'un utilisateur. Tout comme le cas d'utilisation, le récit est centré sur l'utilisateur (un rôle, un acteur), doit apporter de la valeur, et permet de piloter le développement et les tests. Une première différence concerne le sujet traité : les cas d'utilisation correspondent à un ensemble d'actions alors que les récits se veulent plus flexibles et peuvent ainsi décrire aussi bien un cas d'utilisation complexe, qu'une fonctionnalité élémentaire. Une seconde différence concerne les acteurs : le récit ne traite que le point de vue d'un seul utilisateur, alors que le cas d'utilisation fait ressortir la pluralité des acteurs impliqués et des points de vue.
Un cas d'utilisation correspond à une exigence fonctionnelle mais ne définit pas l'interface utilisateur qui le met en œuvre. Le processus unifié recommande ainsi de recourir à des esquisses et des prototypes plutôt qu'à des cas d'utilisation pour représenter la logique de l'interface utilisateur et l’enchaînement des écrans.