TÓM TẮT
- 1 1. Giới thiệu chung về State Diagram trong UML
- 2 2. Các thành phần cơ bản của State Diagram
- 3 3. Quy trình chuẩn bị trước khi vẽ State Diagram
- 4 4. Các bước vẽ State Diagram chi tiết
- 4.1 Bước 1: Đặt Initial Pseudostate
- 4.2 Bước 2: Vẽ các Simple State
- 4.3 Bước 3: Thêm Transition
- 4.4 Bước 4: Định nghĩa Entry / Exit / Do Actions
- 4.5 Bước 5: Thêm Final Pseudostate
- 4.6 Bước 6: Sử dụng Composite State (Nếu cần)
- 4.7 Bước 7: Áp dụng Orthogonal Regions (Parallel States)
- 4.8 Bước 8: Thêm History Pseudostate (Nếu cần)
- 4.9 Bước 9: Kiểm tra lại diagram
- 5 5. Ví dụ thực tế: Vẽ State Diagram cho một máy bán hàng tự động (Vending Machine)
- 6 6. Các kỹ thuật nâng cao trong State Diagram
- 7 7. Công cụ hỗ trợ vẽ State Diagram
- 8 8. Thực hành: Các bước kiểm thử State Diagram
- 9 9. Những lỗi thường gặp khi vẽ State Diagram và cách khắc phục
- 10 10. Kết luận
1. Giới thiệu chung về State Diagram trong UML
State Diagram (còn gọi là State Machine Diagram, Statechart Diagram) là một trong 14 loại diagram chuẩn của UML (Unified Modeling Language) dùng để mô tả hành vi của một đối tượng hoặc một hệ thống dựa trên các trạng thái (state) và các chuyển đổi (transition) giữa các trạng thái đó. Khi một hệ thống có tính chất phản ứng (reactive system) – tức là phản hồi lại các sự kiện từ môi trường – việc mô tả hành vi qua các trạng thái trở nên cực kỳ hữu ích. State Diagram giúp:
- Hiểu rõ luồng logic của một thực thể (object) từ lúc khởi tạo, qua các trạng thái trung gian, đến khi kết thúc.
- Xác định các sự kiện quan trọng (event) và hành động (action) sẽ được thực hiện khi chuyển đổi.
- Phát hiện lỗi logic như trạng thái không thể đạt tới, hoặc chuyển đổi bị thiếu.
- Tài liệu hoá cho các nhà phát triển, tester và các bên liên quan.
Trong bài viết này, chúng ta sẽ đi sâu vào cách vẽ State Diagram chuẩn UML, từ việc chuẩn bị, xác định các yếu tố cơ bản, đến các kỹ thuật nâng cao như sử dụng composite states, orthogonal regions, history pseudostates, và cách tích hợp với các diagram khác.
2. Các thành phần cơ bản của State Diagram
2.1. State (Trạng thái)
- State được biểu diễn bằng một hình chữ nhật bo góc, chứa tên trạng thái.
- Có ba loại trạng thái chính:
- Simple State: Trạng thái không chứa trạng thái con.
- Composite State: Trạng thái chứa các trạng thái con, cho phép mô tả chi tiết hơn.
- Orthogonal State (Region): Cho phép mô tả các trạng thái đồng thời (parallel states).
2.2. Transition (Chuyển đổi)
- Được biểu diễn bằng mũi tên có hướng, đi từ một state (nguồn) tới một state (đích).
- Mỗi transition có thể có event, guard condition, và action (được viết dưới dạng
event guard / action).
2.3. Event (Sự kiện)
- Là một kích hoạt (trigger) cho transition, có thể là:
- Signal (gửi tín hiệu)
- Call (gọi phương thức)
- Time event (sự kiện thời gian, ví dụ:
after(5s)) - Change event (thay đổi giá trị thuộc tính)
2.4. Guard Condition (Điều kiện bảo vệ)

Có thể bạn quan tâm: Túi Xách Vẽ Cách Điệu: Nghệ Thuật Thời Trang Độc Đáo Và Cách Tự Tạo Chiếc Túi Độc Nhất
- Là một điều kiện Boolean được viết trong dấu ngoặc vuông
. Transition chỉ xảy ra nếu guard trả vềtrue.
2.5. Action (Hành động)
- Hành động thực hiện khi transition xảy ra, viết sau dấu
/. Các action có thể là: - Entry/Exit actions (thực hiện khi vào/ra khỏi state)
- Do activity (hoạt động liên tục trong state)
- Effect (hành động sau khi transition hoàn thành)
2.6. Pseudostate (Trạng thái ảo)
- Initial pseudostate (
<<initial>>hay biểu tượng đen tròn) – điểm bắt đầu của diagram. - Final pseudostate (
<<final>>hay biểu tượng vòng tròn rỗng) – điểm kết thúc. - History pseudostate (
HhoặcH) – lưu trạng thái cuối cùng của một composite state để quay lại khi re-enter. - Junction và Choice – dùng để hợp nhất hoặc tách nhánh transition.
3. Quy trình chuẩn bị trước khi vẽ State Diagram
3.1. Xác định phạm vi (Scope) và đối tượng cần mô tả
- Đối tượng có thể là class, interface, component, hoặc use case.
- Xác định rõ ràng ranh giới: chỉ mô tả hành vi của một đối tượng duy nhất hay toàn bộ hệ thống?
3.2. Thu thập yêu cầu và kịch bản (Scenario)
- Use case và sequence diagram là nguồn thông tin quan trọng.
- Liệt kê các trạng thái mà đối tượng có thể ở, và sự kiện có thể kích hoạt chúng.
3.3. Định nghĩa các trạng thái và sự kiện
- Viết ra danh sách các trạng thái (state) dưới dạng danh từ (ví dụ:
Idle,Processing,Paused). - Viết ra danh sách các sự kiện (event) dưới dạng động từ (ví dụ:
start(),pause(),timeout).
3.4. Kiểm tra tính toàn vẹn (Consistency)

Có thể bạn quan tâm: Trái Tim Cách Điệu Vẽ: Nghệ Thuật Tình Yêu Và Sự Sáng Tạo Trong Mỗi Đường Nét
- Đảm bảo mỗi trạng thái đều có đường ra (exit) và đường vào (entry) hợp lý.
- Tránh dead state (trạng thái không có transition ra) trừ khi đó là final state.
4. Các bước vẽ State Diagram chi tiết
Bước 1: Đặt Initial Pseudostate
- Bắt đầu bằng một vòng tròn đen (filled) ở góc trên bên trái, nối tới trạng thái đầu tiên (thường là
IdlehoặcCreated).
Bước 2: Vẽ các Simple State
- Vẽ từng trạng thái dưới dạng hình chữ nhật bo góc, đặt tên bên trong.
- Sắp xếp sao cho luồng logic từ trên xuống dưới hoặc từ trái qua phải, giúp người đọc dễ theo dõi.
Bước 3: Thêm Transition
- Kẻ mũi tên từ state nguồn tới state đích.
- Ghi chú event, guard, action trên mũi tên:
- Event:
start() - Guard:
balance > 0 - Action:
/ deductAmount()
Ví dụ: start() balance > 0 / deductAmount()
Bước 4: Định nghĩa Entry / Exit / Do Actions
- Entry:
entry / initialize() - Exit:
exit / cleanup() - Do:
do / monitorProgress()
Các hành động này được ghi trong dấu chấm phẩy ; nếu có nhiều hơn một.
Bước 5: Thêm Final Pseudostate
- Khi trạng thái cuối cùng được xác định, nối một mũi tên tới vòng tròn rỗng (final pseudostate).
Bước 6: Sử dụng Composite State (Nếu cần)

Có thể bạn quan tâm: Cách Vẽ Dòng Trong Excel: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
- Khi một trạng thái có quá nhiều chi tiết, bao bọc nó trong một rectangle lớn hơn (composite state).
- Vẽ các substates bên trong, và xác định entry/exit points cho composite.
Bước 7: Áp dụng Orthogonal Regions (Parallel States)
- Khi một đối tượng có thể ở trong nhiều trạng thái đồng thời, chia composite state thành các region (khu vực) ngang hoặc dọc.
- Mỗi region có một initial pseudostate và các states riêng.
Bước 8: Thêm History Pseudostate (Nếu cần)
- Đặt một ký hiệu
H(shallow) hoặcH(deep) trong composite state để lưu lại trạng thái cuối cùng. - Khi re-enter composite, transition vào history pseudostate sẽ tự động đưa đối tượng vào trạng thái đã lưu.
Bước 9: Kiểm tra lại diagram
- Đảm bảo độ bao phủ (coverage) của các sự kiện và trạng thái.
- Kiểm tra độ duy nhất (uniqueness) của transition (không có hai transition cùng event và guard từ cùng một state).
- Đánh giá độ phức tạp – sử dụng submachine (state machine con) nếu diagram quá lớn.
5. Ví dụ thực tế: Vẽ State Diagram cho một máy bán hàng tự động (Vending Machine)
5.1. Phân tích yêu cầu
- States:
Idle,CoinInserted,SelectionMade,Dispensing,OutOfService. - Events:
insertCoin(),selectItem(),dispense(),error(),reset(). - Guards:
balance >= price,stock > 0. - Actions:
/ deductBalance(),/ releaseItem(),/ logError().
5.2. Bước vẽ
- Initial pseudostate →
Idle. Idle→ (eventinsertCoin()) →CoinInserted.CoinInserted→ (eventselectItem()balance >= price) →SelectionMade.SelectionMade→ (eventdispense()stock > 0) →Dispensing.Dispensing→ (action/ releaseItem()) →Idle(sau khi hoàn thành).- Bất kỳ state nào → (event
error()) →OutOfService. OutOfService→ (eventreset()) →Idle.
5.3. Thêm chi tiết

Có thể bạn quan tâm: Tranh Vẽ Phong Cách Xưa: Hành Trình Khám Phá Và Bảo Tồn Di Sản Văn Hóa
- Entry action cho
CoinInserted:/ updateBalance(). - Do activity cho
Dispensing:do / countdownTimer(). - History pseudostate trong composite
Operational(gồmIdle,CoinInserted,SelectionMade,Dispensing) để khi lỗi được khắc phục, máy quay lại trạng thái trước khi lỗi xảy ra.
5.4. Đồ thị cuối cùng
Initial --> Idle
Idle --insertCoin()--> CoinInserted
CoinInserted --selectItem() balance >= price / deductBalance()--> SelectionMade
SelectionMade --dispense() stock > 0 / releaseItem()--> Dispensing
Dispensing --complete--> Idle --error() / logError()--> OutOfService
OutOfService --reset()--> Idle
(Trong thực tế, diagram sẽ được vẽ bằng công cụ như Lucidchart, draw.io, hoặc Enterprise Architect.)
6. Các kỹ thuật nâng cao trong State Diagram
6.1. Submachine State (State Machine Con)
- Khi một composite state quá phức tạp, ta có thể tách ra thành một state machine độc lập, sau đó chèn vào dưới dạng submachine state.
- Lợi ích: tái sử dụng, giảm độ phức tạp, dễ bảo trì.
6.2. Orthogonal Regions (Parallelism)
- Được dùng khi một đối tượng có hai hay nhiều hành vi độc lập chạy đồng thời, ví dụ: một thiết bị có State cho
PowervàNetwork. - Mỗi region có initial và final riêng, đồng thời toàn bộ composite state chỉ kết thúc khi tất cả các region đạt final.
6.3. Deep vs Shallow History
- Shallow History (H): Khi quay lại composite, chỉ nhớ trạng thái con trực tiếp cuối cùng.
- Deep History (H): Nhớ toàn bộ cấu trúc con (các sub-states, regions) ở mức sâu nhất.
- Sử dụng tùy thuộc vào mức độ chi tiết cần lưu trữ.
6.4. Choice Pseudostate
- Dùng để định hướng transition dựa trên guard condition.
- Khi một transition tới choice pseudostate, hệ thống sẽ đánh giá các guard và chọn một trong các nhánh.
6.5. Junction Pseudostate

- Dùng để hợp nhất nhiều transition thành một điểm chung, giảm việc lặp lại guard hoặc action.
7. Công cụ hỗ trợ vẽ State Diagram
| Công cụ | Ưu điểm | Nhược điểm |
|---|---|---|
| Enterprise Architect | Hỗ trợ đầy đủ UML 2.x, tính năng submachine, history, code generation | Giá license cao |
| MagicDraw | Giao diện trực quan, tích hợp với SysML | Cũng có chi phí |
| Visual Paradigm | Có phiên bản Community, hỗ trợ team collaboration | Giao diện có thể phức tạp |
| draw.io (diagrams.net) | Miễn phí, dễ dùng, tích hợp Google Drive | Thiếu một số tính năng nâng cao (submachine) |
| PlantUML | Văn bản mô tả (textual) – dễ version control, tích hợp CI/CD | Cần học cú pháp, không trực quan như drag‑and‑drop |
Lưu ý: Khi lựa chọn công cụ, cân nhắc kích thước dự án, mức độ chi tiết và nhu cầu chia sẻ tài liệu.
8. Thực hành: Các bước kiểm thử State Diagram
- Coverage Test: Đảm bảo mọi transition và trạng thái đều được ít nhất một test case bao phủ.
- State Transition Table: Tạo bảng chuyển đổi (state, event, guard, next state, action) để kiểm tra tính toàn vẹn.
- Model Checking: Sử dụng công cụ như SPIN hoặc NuSMV để tự động kiểm tra các thuộc tính (deadlock, livelock).
- Simulation: Nhiều công cụ UML cho phép chạy mô phỏng state machine, giúp kiểm tra hành vi runtime.
9. Những lỗi thường gặp khi vẽ State Diagram và cách khắc phục
| Lỗi | Mô tả | Cách khắc phục |
|---|---|---|
| Dead state | Trạng thái không có transition ra (ngoại trừ final). | Thêm transition hoặc đánh dấu là final nếu đúng. |
| Multiple transitions with same event & guard | Hai hoặc nhiều transition từ cùng một state có cùng event và guard, gây mơ hồ. | Phân tách guard, hoặc dùng choice pseudostate. |
| Missing initial state | Không có initial pseudostate hoặc không kết nối tới state đầu tiên. | Đặt initial pseudostate và nối tới state khởi tạo. |
| Over‑complex composite | Composite state quá phức tạp, khó đọc. | Tách thành submachine hoặc sử dụng region. |
| Incorrect guard syntax | Guard không đúng cú pháp hoặc không trả về Boolean. | Kiểm tra lại ngôn ngữ biểu thức, dùng . |
| Không đồng nhất naming | Tên state, event không thống nhất, gây khó hiểu. | Đặt quy ước naming (CamelCase, PascalCase) và tuân thủ. |
10. Kết luận
State Diagram là một công cụ mạnh mẽ trong UML để mô tả hành vi theo trạng thái của hệ thống. Việc hiểu rõ các thành phần (state, transition, event, guard, action) và áp dụng đúng kỹ thuật (composite, orthogonal, history, submachine) sẽ giúp bạn tạo ra các diagram vừa đầy đủ vừa dễ bảo trì. Hãy luôn bắt đầu bằng việc phân tích yêu cầu, liệt kê trạng thái và sự kiện, sau đó vẽ và kiểm thử một cách hệ thống. Khi kết hợp với các diagram khác như Use Case, Sequence, và Activity Diagram, State Diagram sẽ trở thành một phần không thể thiếu trong việc thiết kế và phát triển phần mềm chất lượng cao.
Hy vọng bài viết này đã cung cấp cho bạn một hướng dẫn chi tiết, từ các khái niệm cơ bản đến các kỹ thuật nâng cao, giúp bạn tự tin vẽ và sử dụng State Diagram trong mọi dự án UML. Chúc bạn thành công!
