Diagramme d’états-transitions

Page 7 sur 8. Définir le cycle de vie d’un devis, ses événements et ses transitions autorisées.

1. Décrire le comportement d’un objet

Un diagramme d’états-transitions décrit les situations durables d’un objet et les événements qui permettent de passer de l’une à l’autre. Il convient lorsque la réponse à une opération dépend de l’état courant. Accepter un devis envoyé est possible ; accepter le même devis après expiration doit être refusé dans nos règles.

Un état se nomme selon une situation : Brouillon, Envoyé, Accepté. Une action se nomme selon un travail : calculer le total, enregistrer l’accord. Mélanger les deux conduit à dessiner une suite d’opérations au lieu du cycle de vie d’un objet.

Notre machine concerne une version de Devis. Elle ne représente ni toute l’entreprise ni le cycle complet de la demande. Une nouvelle version peut repartir en Brouillon tandis qu’une ancienne version reste Refusée dans l’historique.

Le diagramme concerne une version de devis. Les états Accepté, Refusé et Expiré restent conservés dans l’historique ; les branches ne conduisent pas à un nouveau devis implicite.
Le diagramme concerne une version de devis. Les états Accepté, Refusé et Expiré restent conservés dans l’historique ; les branches ne conduisent pas à un nouveau devis implicite. Cliquer pour agrandir.

2. Événements, gardes et effets

Une transition peut porter la forme déclencheur [garde] / effet. Le déclencheur est l’événement reçu ; la garde est une condition booléenne ; l’effet est le comportement exécuté lorsque la transition est franchie. Par exemple : accepter [encoreValable] / daterAccord.

L’événement n’est pas une condition évaluée en permanence. Le devis ne s’accepte pas tout seul parce qu’il est valable : il faut recevoir accepter. Si la garde est fausse, cette transition ne peut pas être franchie. Il faut préciser la réponse attendue lorsqu’une commande métier est rejetée.

Le disque noir représente un pseudo-état initial ; il désigne le point d’entrée par défaut. La cible finale, avec disque entouré, termine la région concernée. Un état métier terminal, comme Accepté, peut être conservé sans dessiner immédiatement une fin si le comportement de l’objet doit encore traiter d’autres événements.

3. Le cycle de vie retenu pour NKILItech

État sourceÉvénement et conditionÉtat cible
Brouillonsoumettre [total > 1 000 000]En validation
Brouillonenvoyer [total <= 1 000 000]Envoyé
En validationapprouverEtEnvoyerEnvoyé
En validationdemanderCorrectionBrouillon
Envoyéaccepter [valable et aucune autre version acceptée]Accepté
EnvoyérefuserRefusé
Envoyééchéance atteinteExpiré

Dans ce modèle pédagogique, approuverEtEnvoyer est une commande qui réunit l’accord du PDG et l’envoi réussi au portail client. Une réalisation plus détaillée pourrait introduire un état Approuvé si l’approbation et l’envoi doivent être séparés. Le schéma annonce le niveau choisi.

Le montant exactement égal au seuil suit la branche sans approbation supplémentaire, puisque R4 utilise « supérieur à ». Ce cas de frontière doit figurer dans les tests.

4. Entry, do, exit et transitions internes

Un état peut préciser un comportement d’entrée entry, un comportement continu pendant l’état do et un comportement de sortie exit. Dans Envoyé, l’entrée peut dater l’envoi ; une activité en cours peut attendre une réponse selon la conception retenue.

Une transition externe qui revient au même état provoque sa sortie puis sa réentrée. Une transition interne peut traiter un événement sans ces sorties et entrées. Pour « consulter le devis », on ne souhaite pas nécessairement réinitialiser la date d’envoi à chaque consultation.

Une transition de complétion est déclenchée lorsque le comportement concerné s’achève, sans événement métier explicitement écrit. Une temporisation relative, comme after(15 jours), doit avoir un point de départ défini. Pour notre devis, une dateExpiration explicite permet également de contrôler la validité au moment de l’acceptation.

5. États composites, régions et historique

Un état composite contient des sous-états. On pourrait regrouper Envoyé et En relance dans un état « En attente de réponse ». Une transition sortant du composite peut alors s’appliquer à ses sous-états si la sémantique retenue le permet.

Des régions orthogonales décrivent des aspects qui évoluent en parallèle dans un état composite. Elles ne sont pas une simple manière de gagner de la place. Le pseudo-état d’historique permet de reprendre un sous-état antérieur lors d’une réentrée ; l’historique superficiel reprend le niveau direct, l’historique profond peut reprendre une configuration imbriquée.

Ces mécanismes avancés ne sont utiles que si le domaine les exige. Le cycle du devis présenté ici reste volontairement plat : ses règles principales sont déjà lisibles sans ajouter une hiérarchie artificielle.

6. Transformer les transitions en tests

Une couverture des états vérifie que chaque état peut être atteint. Une couverture des transitions vérifie chaque passage autorisé. Aucune ne remplace l’essai des commandes interdites : accepter depuis Brouillon, accepter après expiration ou approuver avec un rôle non autorisé.

Tester aussi deux événements proches : accepter et expiration, ou deux acceptations de versions différentes. Le système doit appliquer une règle cohérente sur la date de référence et l’ordre de validation. La machine définit les transitions possibles ; les transactions et les contrôles d’accès assurent leur application dans le logiciel.

Contrôle croisé. Le message accepter() de la séquence doit correspondre à une transition du devis. L’activité peut appeler cette opération, mais elle ne doit pas créer un passage interdit par la machine d’états.

Scénarios illustrés : comparer les situations

Revenir au brouillon après une demande de correction

Le PDG peut demander un complément ou une correction de prix. La version retourne en Brouillon ; l’auteur la prépare à nouveau. La commande approuverEtEnvoyer garde ici le sens retenu dans le cours : accord et envoi au portail sont regroupés au niveau de détail choisi.

Une demande de correction ramène la version en Brouillon. Le montant est réévalué avant soumission ; ce zoom montre uniquement le parcours qui exige l’accord du PDG.
Une demande de correction ramène la version en Brouillon. Le montant est réévalué avant soumission ; ce zoom montre uniquement le parcours qui exige l’accord du PDG. Cliquer pour agrandir.

Exercices corrigés

Exercice 1 - Distinguer les éléments

Dans accepter [valable] / daterAccord, identifier l’événement, la garde et l’effet.

Voir le corrigé détaillé

accepter est le déclencheur ; valable est la condition booléenne ; daterAccord est l’effet exécuté lorsque la transition est franchie. Une garde vraie sans événement accepter ne déclenche pas cette transition.

Exercice 2 - Tester le seuil

Déterminer le parcours de devis à 1 000 000 et à 1 000 001 FCFA.

Voir le corrigé détaillé

Le premier peut passer de Brouillon à Envoyé avec la commande envoyer. Le second passe par En validation et exige l’accord du PDG avant l’envoi. Vérifier aussi les rôles autorisés et un montant juste inférieur au seuil.

Exercice 3 - Consultation répétée

Pourquoi une consultation ne doit-elle pas réinitialiser la date d’envoi ?

Voir le corrigé détaillé

Si une consultation est modélisée comme une transition externe vers Envoyé avec une action d’entrée qui date l’envoi, cette action serait rejouée. Utiliser un traitement interne approprié ou une opération sans sortie/réentrée lorsque le domaine n’attend pas cette réinitialisation.

Cours et schémas originaux, étude pédagogique NKILItech. Référence de lecture : Benoît Charroux, Aomar Osmani et Yann Thierry-Mieg, UML 2 : pratique de la modélisation, 2e édition, Pearson, 2009. Les explications, exemples et figures ont été rédigés pour ce parcours. Référence de notation : spécification UML de l’OMG.