← Quay lại mục lục

Bài 6 — Nhập mã PIN ATM

Mô phỏng cây ATM: 3 lần thử PIN, sai lần 3 sẽ chặn tài khoản. Bài tập kinh điển về State Transition Testing.

Trung bình #state-transition #atm #pin #counter #boundary

🏧 Bài 6: Nhập mã PIN ở cây ATM

Mô tả nghiệp vụ: Một ví dụ về nhập mã PIN ở cây ATM. Nếu người dùng nhập mật khẩu không hợp lệ trong lần thử đầu tiên hoặc lần thứ hai, người dùng sẽ được yêu cầu nhập lại mật khẩu. Nếu người dùng nhập mật khẩu không đúng lần thứ 3, tài khoản sẽ bị chặn. Trong bất kỳ thời điểm nào nếu nhập đúng thì sẽ hiển thị số dư tài khoản.

📌 Test data

  • PIN đúng: 1234
  • Số dư tài khoản: 5,500,000 VND
  • Số lần thử tối đa: 3

🔄 State Transition Diagram

Trạng thái hiện tại Sự kiện Trạng thái kế tiếp Output mong đợi
S0 — Khởi tạo (chưa thử) Nhập PIN đúng SUCCESS Hiển thị số dư 5,500,000 VND
S0 — Khởi tạo Nhập PIN sai (lần 1) S1 — Đã sai 1 lần Wrong PIN. 2 attempts remaining
S1 — Đã sai 1 lần Nhập PIN đúng SUCCESS Hiển thị số dư
S1 — Đã sai 1 lần Nhập PIN sai (lần 2) S2 — Đã sai 2 lần Wrong PIN. 1 attempt remaining
S2 — Đã sai 2 lần Nhập PIN đúng SUCCESS Hiển thị số dư
S2 — Đã sai 2 lần Nhập PIN sai (lần 3) BLOCKED Account blocked. Please contact your bank.
BLOCKED Click submit (kể cả PIN đúng) BLOCKED (giữ nguyên) Không thể submit / form bị disable
SUCCESS Click submit lần nữa SUCCESS (giữ nguyên) Form bị lock — không thể submit lại

🎯 Yêu cầu công việc

  1. Vẽ State Transition Diagram đầy đủ (4 states: S0, S1, S2, BLOCKED + state SUCCESS).
  2. Thiết kế test case cho mỗi transition trong bảng trên (≥ 8 cases).
  3. Thiết kế thêm các test case cho edge cases:
    • PIN để trống → có tính như 1 lần thử không?
    • PIN có khoảng trắng đầu/cuối → có pass không?
    • PIN nhập ký tự không phải số → xử lý ra sao?
    • Sau khi nhập đúng và hiển thị số dư — có thể gõ tiếp PIN khác và submit không?
    • Sau khi tài khoản bị block — input và button có bị disable không?
    • Đếm ngược số attempts: 2 attempts remaining (số nhiều) vs 1 attempt remaining (số ít) — đối chiếu chính xác.
  4. Sang tab "🧪 Form thực hành" để thực hiện test.
  5. Ghi nhận các bug phát hiện được.
💡 Gợi ý kỹ thuật test cho bài này:
  • State Transition Testing: liệt kê đầy đủ các state và transitions, sau đó cover từng arrow trong diagram.
  • 0-switch coverage (mỗi transition test 1 lần) → ít nhất 8 test cases.
  • 1-switch coverage (test cặp transition liên tiếp) → mạnh hơn, phát hiện được bug về state.
  • Invalid transitions: từ state SUCCESS thử submit lần nữa, từ state BLOCKED thử submit với PIN đúng — phải bị từ chối.
  • Refresh trang sẽ reset state về S0 — đây là behavior demo, không phải bug.
  • Đối chiếu chính xác số attempts remaining: chú ý attempt vs attempts.
⚠️ Lưu ý: Form có cài cắm bug ở các vùng: counter logic, state transition, message text/grammar, và security (form không lock đúng cách). Hãy bám sát từng dòng spec.
🔐

Vui lòng đăng nhập để nộp bài.

Đăng nhập
🔐

Tab dành cho giảng viên

Tab này chứa danh sách các lỗi đã cài cắm trong form. Vui lòng nhập mã giảng viên để mở khóa. Mã sẽ ghi nhớ trong phiên làm việc — chỉ cần nhập 1 lần cho cả 3 bài.