
Introduction to UML State Machine Diagrams #
Business Analysts are frequently tasked with understanding and streamlining complex systems and processes. A valuable tool in this endeavor is the UML State Machine Diagram, also known as a State Transition Diagram.
A State Machine Diagram visually represents the possible states of an object and its transitions between those states in response to events.
This article provides a detailed exploration of UML State Machine Diagrams, examining their importance, components, creation process, real-world examples and current trends. It aims to equip Business Analysts with a comprehensive understanding of how these diagrams can facilitate their work.
Why are State Machine Diagrams Important for Business Analysts? #
State Machine Diagrams offer several key advantages for Business Analysts:
- Visualizing Complex Behavior: They provide a clear, visual representation of an object’s lifecycle, facilitating the understanding of complex, event-driven behavior.
- Clarifying Requirements: By mapping out all possible states and transitions, they enable the identification of hidden requirements and ensure a complete understanding of system behavior.
- Improving Communication: State Machine Diagrams serve as a common language for stakeholders, developers, and testers, thereby enhancing communication and collaboration.
- Supporting System Design: They offer valuable input for system design, aiding developers in accurately implementing the system’s dynamic behavior.
- Modeling Business Processes: They can model various business processes, including order processing, customer service interactions, and workflow management.
- Identifying Edge Cases: State diagrams help to find and document all possible scenarios.
Types of State Machines #
UML 2.5 defines two types of state machines:
-
Behavior State Machine: This is the most common type, used to model the behavior of an object as it reacts to events. It focuses on how an object’s state changes in response to events.
-
Protocol State Machine: This type is used to specify the legal sequences of operations for a classifier. It defines the allowed interactions between an object and its environment, focusing on the order in which operations can be called.
Key Components of a State Machine Diagram #
To effectively use State Machine Diagrams, you need to understand their basic components.
Here is an overview of all the components (notations) that can be used to construct a State Machine Diagram.

-
Region: A Region denotes a behavior fragment that may execute concurrently with its orthogonal Regions. Each Region may have an optional name and contains the nested sequential States and the Transitions between them.
-
Vertex: A Vertex is an abstraction of different kinds of nodes - States, Psuedostates and Connection Point References. It can be a source and/or target of any number of transitions.
-
State: A State models a situation in the execution of a StateMachine Behavior during which some invariant (static) condition holds. It’s a stable vertex i.e. an execution stays in a state until some event happens. There are 3 types of states.
-
Simple State: A state with no substructure. It can be represented using any one of the following notations:
-
Composite State: A state that contains other nested states (hierarchical).
When a composite state is big (constains many substates), it can be represeneted as a Hidden Composite State in the main diagram to indicate that it’s a composite state and represent the actual composiste state in a separate diagram with all nested states and transitions between them.
Here is an example of a Composite State with regions.
-
Submachine State: Represents a state whose behavior is defined by another state machine diagram. This allows for reusing state machine diagrams.
In the main state machine diagram, submachine states are shown with Connection Point References (entry/exit points) and the actual submachine state should be visualized in a separate diagram to show it’s regions, substates and transtions similar to a composite state.
-
-
Transition: Movement of an object from one state to another (directed arrow).
- In behavior state machine, a transition can be represented as a solid arrow with the trigger event, condition and behavior expression.
- In protocol state machine, a transition can be represented as a solid arrow with pre-condition, trigger event and post-condition.
- In behavior state machine, a transition can be represented as a solid arrow with the trigger event, condition and behavior expression.
-
Event: A trigger that causes a transition. It could be a user action, a system signal, or the passage of time. An event should be mentioned along with the transition arrow.
-
Guard Condition: A Boolean expression that must be true for a transition to occur. It’s shown in square brackets, e.g.,
[condition]
.- Example:
[balance > 0]
,[input is valid]
,[time > 5s]
.
- Example:
-
Action: Activity that occurs during a transition or within a state. There are 3 types of actions.
-
Entry Action: An action performed when entering a state. Denoted by “entry / action”.
- Example:
entry / start timer
.
- Example:
-
Exit Action: An action performed when exiting a state. Denoted by “exit / action”.
- Example:
exit / stop timer
.
- Example:
-
Transition Action: An action performed during a transition. Denoted by “event / action”.
- Example:
submit / record order
.
- Example:
-
-
Pseudostates: These are special states that do not represent a condition of an object but rather control the flow of transitions.
-
Initial State: Indicates the starting point of a state machine or a composite state.
-
Final State: Indicates the completion of a state machine or a composite state.
-
Choice: Represents a dynamic conditional branch, where the transition taken depends on the result of a guard condition evaluated at runtime. Only 1 outgoing transition will be selected after evaluating the guard conditions depending on the run time behavior of the prior states.
-
Example:
-
-
Fork/Join:
-
Both Fork and Join psuedostates are represented as a vertical bar.
-
Fork Represents the splitting of an incoming transition into two or more concurrent transitions. The Transitions outgoing from a Fork Pseudostate cannot have a guard or a trigger.
-
Join Represents the synchronization of two or more concurrent transitions. All incoming Transitions have to complete before execution can continue through an outgoing Transition.
-
Example:
-
-
Junction: Used to combine or split transitions. It acts as a static conditional branch.
-
A junction pseudostate is represented as a small black color circle.
-
Example:
-
-
Entry Point: Represents an entry point of a submachine or composite state. There should be at most a single transition from the entry point into a vertex of containing region. If multiple regions are involved, the entry point acts as a fork psuedostate.
- It’s denoted by an empty circle.
- It’s denoted by an empty circle.
-
Exit Point: Represents an exit point of a submachine or composite state. If multiple transitions from orthogonal regions of the same composite state or submachine are terminating to the exit point, the exit point acts as a join psuedostate.
- It’s denoted by a circle with a cross sign inside.
- It’s denoted by a circle with a cross sign inside.
-
Terminate: Indicates that the execution of a state machine is terminated immediately.
- It’s denoted by a cross sign.
- Example of Entry, Exit and Termninate Pseudostates:
- It’s denoted by a cross sign.
-
History States: Used to remember the last active state of a region in a composite state.
-
Shallow History Pseudostate: Remembers the last active direct substate of a region in a composite state. When a transition enters the shallow history pseudostate, it restores the execution from the last active substate of it’s containing region. A region in a composite state can have only 1 shallow history state.
-
It’s represented by the symbol “H”.
-
Example: In the following state machine diagram, the Shallow History pseudostate of the “Running” composite state remembers the last active substate i.e. it was in the “Rinsing” state when the “Running” state exited upon power cut. On restoring power, when it re-enters the Running state via shallow history state, it will resume the execution from the “Rinsing” state which was the most recent active substate.
-
-
Deep History Pseudostate: Remembers the most recent active substate at all levels of nesting. When a transition enters the deep history pseudostate, it restores the execution from the entire last active state configuration i.e. from the deepest nested substate or the leaf state. A region in a composite state can have only 1 shallow history state.
-
It’s represented by the symbol “H*”.
-
Example: In the following state machine diagram, the Deep History pseudostate of the “Running” composite state remembers the last active configuration i.e. it was in the “Drying” state when the “Running” State exited upon power cut. On restoring power, when it re-enters the Running State via the deep history state, it will resume the execution from the “Drying” state which was the most recent active state configuration.
-
-
-
How to Create a State Machine Diagram: A Step-by-Step Guide #
Here’s a step-by-step guide to creating a State Machine Diagram:
- Identify the Object: Determine the object or entity whose behavior you want to model (e.g., an order, a customer, a device).
- Define the Initial and Final States: Determine the starting and ending points of the object’s lifecycle.
- Identify Possible States: List all the possible states the object can be in.
- Determine Events and Transitions: Identify the events that trigger changes in the object’s state and draw the transitions between the states.
- Add Guard Conditions (if applicable): Specify any conditions that must be met for a transition to occur.
- Specify Actions (if necessary): Define any actions that should be performed during transitions or within states.
- Choose the State Machine Type: Determine whether you need a behavioral or protocol state machine based on the purpose of the diagram.
- Incorporate Pseudostates: Use pseudostates to control the flow of transitions, such as forking, joining, and making choices.
- Refine and Validate: Iteratively review and refine the diagram with stakeholders, making necessary adjustments to accurately reflect the object’s behavior.
- Use a UML Tool: Utilize a UML modeling tool (e.g., Lucidchart, Visual Paradigm, Enterprise Architect, draw.io) to create and maintain your diagrams.
Behavior State Machine Example: Modeling an Online Order’s Behavior #
Let’s consider the Online Order object of an E-commerce system like Amazon where an order transitions through various states based on different internal or external events.
This is a compreshensive UML 2.5 Behavior State Machine Diagram Example that demonstrates the most of the notations, composite state and submachine state.

“Processing Payment” is represented as a Hidden Composite state with 2 exit points. This composite state is presented in a separate diagram as shown below.

“ProcessRefundSM” is represented as a Submachinestate. This submachine state is presented in a separate diagram as shown below.

Protocol State Machine Example: Modeling a Bank’s Fixed Deposit Account’s Lifecycle #
Let’s consider the Fixed Deposit Account object of a Banking Organization where the Fixed Depoist Account object transitions through various states based on the legal sequence of events as defined by the bank’s protocols.
This is a comprehensive UML 2.5 Protocol State Machine Diagram Example that demonstrates the most of the notations.

Best Practices for Business Analysts #
Here are some best practices for Business Analysts when working with State Machine Diagrams:
- Focus on Relevant Complexity: Don’t try to model every single detail. Focus on the states and transitions that are most relevant to the business requirements.
- Keep it Simple: Use clear and concise language for state names, events, and actions. Avoid overly complex diagrams that are difficult to understand.
- Use a Consistent Notation: Adhere to the UML standard notation to ensure your diagrams are easily understood by others.
- Collaborate with Stakeholders: Regularly review and validate diagrams with stakeholders to ensure they accurately represent the system’s behavior and meet their needs.
- Use Tools Effectively: Utilize UML modeling tools to create, maintain, and share your diagrams. These tools often provide features like validation, code generation, and documentation.
- Integrate with Other Diagrams: Use State Machine Diagrams in conjunction with other UML diagrams, such as Use Case Diagrams and Activity Diagrams, to provide a comprehensive view of the system.
Latest Trends in State Machine Diagrams #
Current trends in State Machine Diagrams reflect the evolving landscape of software development and system design:
-
Integration with Agile Methodologies: State Machine Diagrams are increasingly being integrated into Agile frameworks. They are used to model user stories and acceptance criteria, providing a visual representation of the dynamic behavior of systems, which aids in iterative development and enhances communication within Agile teams.
-
Model-Driven Development (MDD): The use of State Machine Diagrams in Model-Driven Development (MDD) is growing. MDD leverages these diagrams to automatically generate code, ensuring that the implemented system accurately reflects the modeled behavior. This approach can streamline the development process and improve software quality.
OMG’s Model Driven Architecture (MDA) is a key concept in MDD, and State Machine Diagrams can be used to create platform-independent models that are then transformed into platform-specific code.
-
Behavior-Driven Development (BDD): State Machine Diagrams are finding application in Behavior-Driven Development (BDD). They help define the behavior of a system in a way that is accessible to both business stakeholders and developers, fostering a shared understanding and facilitating the creation of executable specifications.
While BDD primarily focuses on user stories and scenarios, State Machine Diagrams can provide a valuable visual supplement to illustrate the state transitions involved in those scenarios.
-
Statecharts and Complex System Modeling: Statecharts, an extension of traditional State Machine Diagrams, are gaining prominence for modeling increasingly complex systems. Statecharts introduce hierarchical states, concurrency, and other advanced features, enabling the representation of intricate behavioral patterns in domains such as embedded systems, real-time systems, and complex software applications.
- Reference: Harel, D. (1987). Statecharts: A visual formalism for complex systems. Science of computer programming, 8(3), 231-274. This seminal paper by David Harel introduced the concept of Statecharts, which significantly extends the capabilities of basic State Machine Diagrams.
-
Real-time and Embedded Systems: State Machine Diagrams remain crucial in the development of real-time and embedded systems. In these domains, precise control over state transitions and timing is paramount, and State Machine Diagrams provide a formal and visual means to specify and verify system behavior.
Conclusion #
UML State Machine Diagrams are a valuable asset for Business Analysts, enabling them to effectively model and communicate the dynamic behavior of complex systems. By understanding their components, adhering to best practices, and staying abreast of current trends, Business Analysts can leverage these diagrams to enhance analysis, improve communication, and contribute to successful project outcomes.