🎯 Aperçu
Ce guide vous accompagne dans la conception et la modélisation d’un système de contrôle d’appels téléphoniques à l’aide des diagrammes d’état UML, en mettant l’accent sur les transitions d’état en réponse aux actions de l’utilisateur et aux événements réseau.Système de contrôle d’appels téléphoniquesà l’aide dediagrammes d’état UML. Il se concentre sur le cycle de vie des appels sortants, illustrant comment une ligne téléphonique passe d’un état à un autre en réponse aux actions de l’utilisateur et aux événements réseau.cycle de vie des appels sortantsillustrant comment une ligne téléphonique passe d’un état à un autre en réponse aux actions de l’utilisateur et aux événements réseau.
Le diagramme capture à la fois les cheminschemins heureux (établissement réussi d’un appel) et leschemins malheureux (erreurs, délais d’attente, lignes occupées), en mettant l’accent sur la robustesse, la gestion des exceptions et les transitions d’état claires, des principes fondamentaux dans les systèmes de communication en temps réel.
🧩 Concepts fondamentaux des machines à états UML
Avant de plonger dans le diagramme, comprenez ces concepts UML fondamentaux :
| Concept | Description |
|---|---|
| État | Une condition durant laquelle un objet satisfait certaines conditions ou effectue des actions. |
| Transition | Un changement d’un état à un autre, déclenché par un événement. |
| Événement | Un événement qui provoque une transition (par exemple, onHook, validNumber). |
| Transition auto | Une transition qui commence et se termine dans le même état (par exemple, chiffre(n) pendant que dans Saisie). |
| État pseudo | Points de contrôle spéciaux tels que Initial ou Final qui ne sont pas des états réels. |
| État composite | Un état contenant des sous-états (par exemple Erreur état avec Tonalité d'occupation, Tonalité d'occupation rapide, Message enregistré). |
| Condition de garde | Une expression booléenne qui doit être vraie pour qu’une transition ait lieu. |
✅ Astuce pro : Utilisez
événement [garde] / actionsyntaxe en UML pour documenter les déclencheurs, les conditions et les effets secondaires.
🔄 Cycle de vie des appels sortants : Analyse étape par étape
1. Phase d’initiation et de saisie
🔹 État pseudo initial → Inactif
- Le système démarre dans l’étatÉtat pseudo initial.
- Aucune activité pour le moment ; le téléphone est sur le support.
🔹 Inactif → Ton de composé (sur le support)
- Événement :
sur le support(l’utilisateur soulève le combiné) - Transition :
sur le support → ton de composé - Action : Générer le ton de composé ; préparer l’entrée des chiffres.
📌 Il s’agit du premier changement d’état visible dans le cycle de vie de l’appel.
🔹 Ton de composé → Composition (chiffre(n))
- Événement :
chiffre(n)(l’utilisateur entre un chiffre) - Transition :
chiffre(n) → Composition - État : Entrer
Compositionmode.
🔹 Transition auto : Composition → Composition (chiffre(n))
- Événement :
chiffre(n)(plusieurs chiffres entrés) - Condition : Aucun (toujours autorisé)
- Action : Ajouter un chiffre au numéro en cours de composition.
- Objectif : Permettre l’entrée continue de chiffres sans quitter l’état de
Compositionétat.
💡 Les transitions internes sont essentielles pour gérer les séquences d’entrée telles que les numéros de téléphone.
2. Logique de connexion et gestion des exceptions
🔹 Composition → Connexion (numéroValide)
- Événement :
numéroValide(numéro complet validé) - Transition :
numéroValide → Connexion - Action : Démarrer la mise en place de l’appel avec le réseau.
🔹 Composition → Message enregistré (numéroInvalide)
- Événement :
numéroInvalide(par exemple, longueur incorrecte, préfixe invalide) - Transition :
numéroInvalide → Message enregistré - Action : Lire le message préenregistré :« Le numéro que vous avez composé n’est pas actif. »
🔹 Connexion → Tonalité occupée (numéroOccupé)
- Événement :
numéro occupé - Transition :
numéro occupé → tonalité d'occupation - Action : Jouer la tonalité d’occupation ; informer l’utilisateur que la ligne est occupée.
🔹 Connexion → tonalité d’occupation rapide (trunkBusy)
- Événement :
trunk occupé - Transition :
trunk occupé → tonalité d'occupation rapide - Action : Jouer la tonalité d’occupation rapide ; indiquer une congestion du réseau.
⚠️ Remarque : Ce sont des états d’erreur qui interrompent le flux normal. Ils doivent être gérés correctement.
3. Mécanisme de temporisation et d’alerte
🔹 Décrochage → Avertissement (temporisation)
- Événement :
temporisationaprès 30 secondes d’inactivité - Transition :
temporisation → Avertissement - Action : Jouer une sonnerie d’alerte ; informer l’utilisateur de continuer ou de raccrocher.
🔹 Avertissement → Temporisation (temporisation)
- Événement :
temporisationà nouveau après 10 secondes - Transition :
timeout → Timeout - Action : Annuler l’appel ; retourner à
Inactif.
⏱️ La logique de délai d’attente empêche l’attente indéfinie et améliore l’expérience utilisateur.
4. Appel actif et déconnexion
🔹 Connexion → Sonnerie (routée)
- Événement :
routée(le réseau a correctement routé l’appel) - Transition :
routée → Sonnerie - Action : Envoyer le signal de sonnerie à la partie appelée.
🔹 Sonnerie → Connecté (le téléphone appelé répond)
- Événement :
le téléphone appelé répond - Transition :
le téléphone appelé répond → Connecté - Action : Établir la connexion audio ; démarrer l’enregistrement de l’appel (si activé).
🔹 Connecté → Déconnecté (décroché OU le téléphone appelé raccroche)
- Deux voies de déconnexion :
- Utilisateur raccroche :
décroché → Déconnecté - L’autre partie raccroche :
calledPhoneHangsUp → Déconnecté
- Utilisateur raccroche :
🔄 Les deux transitions mènent à
Déconnectéavant d’atteindreÉtat final.
🔹 Déconnecté → État final
- Événement : Aucun (implicite ou via une action de nettoyage)
- Transition :
Déconnecté → Final - Action : Nettoyer les ressources, enregistrer la durée de l’appel, mettre à jour les statistiques.
✅ L’état final signifie la fin du cycle de vie de l’appel.
🎨 Principes de conception visuelle pour la clarté
Pour rendre les machines d’état complexes lisibles et maintenables :
| Principe | Mise en œuvre |
|---|---|
| Chemin principal central | Garder le flux principal (Inactif → Ton de composante → Composition → Connexion → Sonnerie → Connecté) sous forme d’une ligne verticale ou horizontale nette. |
| Étendre vers l’extérieur pour les exceptions | Placer les états d’erreur (Ton de busy, Ton de busy rapide, Message enregistré) comme des branches latérales. |
| Regrouper les états connexes | Utiliser états composites pour les conditions d’erreur (voir ci-dessous). |
| Utiliser les états pseudo avec sagesse | Initial et Final doit être clairement marqué. |
| Éviter les transitions croisées | Maintenez les flèches éloignées les unes des autres ; utilisez des régions orthogonales si nécessaire. |
🔧 Techniques avancées de modélisation
✅ État composite : regroupement « Erreur »
Au lieu de lister BusyTone, FastBusyTone, et RecordedMessage en tant qu’états distincts, regroupez-les sous un état composite appelé Erreur:
[Erreur]
├── BusyTone
├── FastBusyTone
└── MessageEnregistré
- Action d’entrée : Jouer le ton d’erreur ou le message.
- Action de sortie : Retourner à
DialToneouInactifaprès la réponse de l’utilisateur.
✅ Avantage :Réduit le désordre visuel et améliore la scalabilité.
✅ Conditions de garde (améliorations facultatives)
Ajoutez des gardes pour affiner les transitions :
digit(n) [number.length < 15] → Compose
validNumber [number.isInternational] → Connexion
🛠️ Les gardes empêchent les transitions non valides et soutiennent la logique conditionnelle.
📌 Points clés : Meilleures pratiques pour les machines à états complexes
| Pratique | Pourquoi cela importe |
|---|---|
| Modéliser les chemins d’erreur | Les systèmes réels échouent. Concevoir pournuméro invalide, délai dépassé, trunk occupéassure la fiabilité. |
| Utilisez des expressions d’action | Inclure/ logCallAttempt()ou/ playTone()pour afficher les effets secondaires. |
| Gardez les événements explicites et orientés action | Utilisezraccroché, routé, le téléphone appelé répondau lieu dee1, e2. |
| Nommez clairement les états | Évitez État1, État2. Utilisez Saisie, Sonnerie, Connecté. |
| Documentez les hypothèses | Par exemple, « Délai d’attente après 30 secondes d’inactivité » doit être indiqué dans les commentaires. |
💻 Génération de code : PlantUML et Mermaid
Voici blocs de code prêts à l’emploi pour générer ce diagramme dans votre format préféré.
✅ Code PlantUML
@startuml
[*] --> Idle
Idle --> DialTone : onHook
DialTone --> Dialing : digit(n)
Dialing --> Dialing : digit(n) ' Transition auto
Dialing --> Connecting : validNumber
Dialing --> RecordedMessage : invalidNumber
Dialing --> Warning : timeout
Warning --> Timeout : timeout
Connecting --> Ringing : routed
Connecting --> BusyTone : numberBusy
Connecting --> FastBusyTone : trunkBusy
Ringing --> Connected : calledPhoneAnswers
Connected --> Disconnected : onHook
Connected --> Disconnected : calledPhoneHangsUp
Disconnected --> [*] : cleanup
state "Erreur" as ErrorState {
state "BusyTone" as BusyTone
state "FastBusyTone" as FastBusyTone
state "Message enregistré" as RecordedMessage
}
' Actions internes
Idle : entry / Attente du relâchement du combiné
DialTone : entry / Lecture du ton de composage
Dialing : entry / Collecte des chiffres
Connecting : entry / Acheminement de l'appel
Ringing : entry / Sonnerie du téléphone distant
Connected : entry / Établissement de la session d'appel
Disconnected : entry / Terminaison de la session
@enduml 📥 Comment l’utiliser : Collez dans PlantUML en direct ou votre plugin IDE.
✅ Code Mermaid

stateDiagram-v2
[*] --> Idle
Idle --> ToneLibre : onHook
ToneLibre --> Numérotation : digit(n)
Numérotation --> Numérotation : digit(n) ' Transition auto
Numérotation --> Connexion : validNumber
Numérotation --> MessageEnregistré : invalidNumber
Numérotation --> Avertissement : timeout
Avertissement --> Délai : timeout
Connexion --> Sonnerie : routed
Connexion --> ToneOccupé : numberBusy
Connexion --> ToneOccupéRapide : trunkBusy
Sonnerie --> Connecté : calledPhoneAnswers
Connecté --> Déconnecté : onHook
Connecté --> Déconnecté : calledPhoneHangsUp
Déconnecté --> [*] : cleanup
state Erreur {
ToneOccupé
ToneOccupéRapide
MessageEnregistré
}
Connexion --> ToneOccupé : numberBusy
Connexion --> ToneOccupéRapide : trunkBusy
Numérotation --> MessageEnregistré : invalidNumber
note right of ToneOccupé
Jouer le ton standard d'occupation
end note
note right of ToneOccupéRapide
Jouer le ton d'occupation rapide (congestion réseau)
end note
note right of MessageEnregistré
Jouer le message enregistré : "Numéro hors service."
end note
note right of Délai
Tentative d'appel annulée après 40 secondes
end note
📥 Comment l’utiliser : Collez dans Éditeur en direct Mermaid ou des outils Markdown pris en charge (VS Code, Obsidian, etc.).
📚 Résumé et réflexions finales
Ce Système de contrôle d’appel téléphonique machine à états est un exemple du monde réel de la manière dont UML peut modéliser des systèmes complexes et événementiels avec une haute fiabilité.
✅ Ce qui rend ce diagramme efficace :
- Clair chemin principal avec un flux logique.
- Prévention complète des erreurs.
- Utilisation des transitions auto, états composés, et gardes.
- Clarté visuelle grâce à regroupement et annotation.
🛠️ Quand utiliser ce modèle :
- Systèmes de téléphonie
- Contrôle des périphériques IoT
- Gestion des sessions utilisateur
- Moteurs de workflow
- Systèmes embarqués avec logique d’état fini
📝 Voulez-vous étendre cela ?
Pensez à ajouter :
- Enregistrement des appels état (avec
demarrerEnregistrement,arreterEnregistrementévénements) - Routage des appels logique (routage conditionnel)
- Attente d’appel prise en charge (états parallèles)
- Transfert d’appel en tant qu’état secondaire de
Connecté - Historique des états (histoire superficielle/profonde) pour la réentrée après interruption
📌 Recommandation finale
Modélisez toujours les chemins de succès et d’échec.
Une machine à états qui ne traite que les « chemins heureux » est incomplète et sujette à des bogues en production.
Utilisez ce guide comme un modèle pour modéliser tout système en temps réel où transitions d’état, événements, et résilience aux erreurs comptent.
✅ Prêt à générer, visualiser ou étendre ?
👉 Copiez le PlantUML ou Mermaid code ci-dessus et intégrez-le à votre documentation, vos diagrammes d’architecture ou vos documents de conception de système.
Faites-moi savoir si vous souhaitez un version PDF, diagramme interactif, ou intégration dans un modèle de système plus large (par exemple, avec des composants ou des diagrammes de séquence)!
📘 « Les meilleurs systèmes ne sont pas seulement corrects : ils anticipent les défaillances. »
— Conception avec des machines à états UML










