Cela peut prêter à controverse, mais l'idée que "les inclusions sont toujours et les extensions sont parfois" est une idée fausse très répandue qui s'est presque imposée comme la signification de facto. Voici une approche correcte (à mon avis, et vérifiée par rapport à Jacobson, Fowler, Larmen et 10 autres références).
Les relations sont des dépendances
La clé pour inclure et étendre les relations entre les cas d'utilisation est de réaliser que, comme dans le reste d'UML, la flèche en pointillé entre les cas d'utilisation est une relation de dépendance. J'utiliserai les termes "base", "inclus" et "étendre" pour désigner les rôles des cas d'utilisation.
inclure
Un cas d'utilisation de base dépend du ou des cas d'utilisation inclus ; sans lui/leur, le cas d'utilisation de base est incomplet car le ou les cas d'utilisation inclus représentent des sous-séquences de l'interaction qui peuvent se produire toujours OU parfois. (Contrairement à une idée fausse répandue à ce sujet, ce que votre cas d'utilisation suggère se produit toujours dans le scénario principal et parfois dans des flux alternatifs dépend simplement de ce que vous choisissez comme scénario principal ; les cas d'utilisation peuvent facilement être restructurés pour représenter un flux différent comme scénario principal et cela ne devrait pas avoir d'importance).
Dans la meilleure pratique de la dépendance à sens unique, le cas d'utilisation de base connaît (et fait référence à) le cas d'utilisation inclus, mais le cas d'utilisation inclus ne devrait pas "connaître" le cas d'utilisation de base. C'est pourquoi les cas d'utilisation inclus peuvent être : a) des cas d'utilisation de base à part entière et b) partagés par un certain nombre de cas d'utilisation de base.
étendre
Le cas d'utilisation d'extension est dépendant du cas d'utilisation de base ; il étend littéralement le comportement décrit par le cas d'utilisation de base. Le cas d'utilisation de base doit être un cas d'utilisation pleinement fonctionnel en soi (les "include" sont inclus bien sûr) sans la fonctionnalité supplémentaire du cas d'utilisation étendu.
L'extension des cas d'utilisation peut être utilisée dans plusieurs situations :
- Le cas d'utilisation de base représente la fonctionnalité "indispensable" d'un projet, tandis que le cas d'utilisation étendu représente le comportement facultatif (devrait/pourrait/souhaiterait). C'est là que le terme "facultatif" est pertinent - facultatif de construire/livrer plutôt que facultatif de s'exécuter parfois dans le cadre de la séquence du cas d'utilisation de base.
- Dans la phase 1, vous pouvez fournir le cas d'utilisation de base qui répond aux exigences à ce stade, et la phase 2 ajoutera des fonctionnalités supplémentaires décrites par le cas d'utilisation étendu. Celui-ci peut contenir des séquences qui sont toujours ou parfois exécutées après la livraison de la phase 2 (encore une fois, contrairement à une idée reçue).
- Il peut être utilisé pour extraire des sous-séquences du cas d'utilisation de base, en particulier lorsqu'elles représentent un comportement complexe "exceptionnel" avec ses propres flux alternatifs.
Un aspect important à prendre en compte est que le cas d'utilisation étendu peut "insérer" un comportement à plusieurs endroits dans le flux du cas d'utilisation de base, et pas seulement à un seul endroit comme le fait un cas d'utilisation inclus. Pour cette raison, il est très peu probable qu'un cas d'utilisation d'extension soit adapté pour étendre plus d'un cas d'utilisation de base.
Quant à la dépendance, le cas d'utilisation étendu dépend du cas d'utilisation de base et il s'agit là encore d'une dépendance à sens unique, c'est-à-dire que le cas d'utilisation de base n'a pas besoin de référence au cas d'utilisation étendu dans la séquence. Cela ne signifie pas que vous ne pouvez pas démontrer les points d'extension ou ajouter une x-ref au cas d'utilisation étendu ailleurs dans le modèle, mais le cas d'utilisation de base doit pouvoir fonctionner sans le cas d'utilisation étendu.
RÉSUMÉ
J'espère avoir montré que l'idée fausse et courante selon laquelle "les inclusions sont toujours, les extensions sont parfois" est soit fausse, soit au mieux simpliste. Cette version a en fait plus de sens si vous considérez toutes les questions sur la directionalité des flèches que l'idée fausse présente - dans le modèle correct, c'est juste une dépendance et cela ne change pas potentiellement si vous remaniez le contenu du cas d'utilisation.
1 votes
Je ne ferais pas mieux que Scott Ambler pour expliquer comment ils peuvent être utilisés pour la réutilisation dans les modèles de cas d'utilisation et comment ils diffèrent. Ainsi, au lieu de le paraphraser, je vous suggère de lire Réutilisation dans les modèles de cas d'utilisation : <<extend>>, <<include>>, et l'héritage .
7 votes
En effet, cette question est liée à la programmation...
38 votes
@closers : ceci es une question valable.
121 votes
Pour faire court inclure \= Madatory, étendre \= Facultatif
2 votes
@Megamind 'extend = Optional' n'est pas tout à fait vrai... Regardez cet exemple enlace
1 votes
Vous utilisez les dépendances d'inclusion chaque fois qu'un cas d'utilisation nécessite le comportement d'un autre. L'introduction d'un nouveau cas d'utilisation qui encapsule une logique similaire présente dans plusieurs cas d'utilisation est assez courante. - Pour en savoir plus, consultez le site agilemodeling.com/essays/useCaseReuse.htm#Include