← Quay lại mục lục

Bài 4 — Đổi mật khẩu (cần password hiện tại)

Form đổi mật khẩu khi đã đăng nhập. Yêu cầu password hiện tại + 4 quy tắc strength + lịch sử 3 password gần nhất. Bài có nhiều validation rules nhất.

Khó #form #password #strength #history #validation #decision-table

🔐 Bài 4: Form đổi mật khẩu (yêu cầu password hiện tại)

Form đổi mật khẩu cho người dùng đã đăng nhập. Khác với bài 3 (đổi từ link email), ở đây hệ thống yêu cầu user nhập password hiện tại để xác thực, kèm các quy tắc strength khắt khe hơn.

📌 Test data có sẵn

  • Current password (mật khẩu hiện tại): Current123!
  • 3 mật khẩu đã dùng gần nhất (không được dùng lại):
    • Pass123!
    • Pass456@
    • Pass789#

📋 Bảng đặc tả (Specification)

# Tên Loại Control Chỉnh Sửa Bắt Buộc Mặc Định Mô Tả
1 Current password Password Yes Yes Blank
  • Người dùng nhập password hiện tại.
  • Password hiện tại trống → message: Please input password
  • Password không đúng → message: Current password is incorrect
2 New password Password Yes Yes Blank
  • Người dùng nhập password mới.
  • Không nhập → Please input new password
  • Password nằm ngoài khoảng 6–32 ký tựNew password should have 6 to 32 characters
  • Mật khẩu phải khác với 3 mật khẩu gần nhất. Nếu trùng → Your password should not be the same with used password
  • Mật khẩu phải chứa ít nhất 1 ký tự in hoa, 1 in thường, 1 đặc biệt, 1 số. Nếu không đủ → Your password is not strong enough
3 Confirm password Password Yes Yes Blank
  • Người dùng nhập lại mật khẩu mới.
  • Không nhập → Please input confirm password
  • Repeat password không đúng → New password and repeat password should be the same
4 Change password Button N/a N/a N/a
  • Kiểm tra dữ liệu nhập và thực hiện đổi sang mật khẩu mới.
  • Nếu tất cả dữ liệu thỏa mãn → Change password successfully

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

  1. Đọc kỹ bảng Specification ở trên — đặc biệt chú ý 4 quy tắc strength và quy tắc password history.
  2. Thiết kế bộ test case bao trùm:
    • Current password: rỗng / sai / đúng.
    • New password — length: 5, 6, 7 (cận biên dưới); 31, 32, 33 (cận biên trên).
    • New password — strength: chỉ 1 trong 4 yếu tố / 2 / 3 / đầy đủ 4. Test combinations.
    • New password — history: trùng với 1 trong 3 password đã dùng.
    • Confirm password: rỗng / khác / trùng / có khoảng trắng đầu/cuối.
    • Tổ hợp các trường hợp lỗi cùng lúc — quan sát thứ tự ưu tiên hiển thị message.
  3. Sang tab "🧪 Form thực hành" để thực hiện test.
  4. Ghi nhận các bug phát hiện được.
💡 Gợi ý kỹ thuật test cho bài này:
  • Decision Table: bài này thích hợp dùng decision table với 4 input (current OK/sai, new length OK/lỗi, new strength OK/lỗi, confirm OK/lỗi) → 16 cases.
  • Boundary Value Analysis cho length 6–32: test 5/6/7 và 31/32/33.
  • Password strength combinations: thử password chỉ thiếu 1 yếu tố mỗi lần (chỉ thiếu hoa, chỉ thiếu thường, chỉ thiếu số, chỉ thiếu đặc biệt) — kiểm tra xem code có check đầy đủ cả 4 không.
  • Password history: nhập đúng 1 trong 3 password đã dùng — check có báo lỗi không.
  • Case-sensitivity của password history: nhập PASS123! (chữ hoa) trong khi history có Pass123! — phải coi là khác hay giống?
  • Đối chiếu chính xác message với spec — đặc biệt giữa các trường: current dùng Please input password (KHÔNG có "current"), nhưng new và confirm thì có.
⚠️ Lưu ý: Form có nhiều bug được cài cắm tại các điểm: validation logic (boundary, strength rules), message text, và behavior sau success. Đây là bài có nhiều quy tắc nhất — đọc kỹ spec từng dòng.
🔐

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.