© 2026 Laravel

Characterization Testing: Đóng băng hành vi trước khi Refactor

2 phút đọc
#testing #legacy-code #refactoring

Mục lục bài viết

Sử dụng các mục để điều hướng nhanh

#1. Bài toán

Bạn cần refactor một hàm tính giá cực kỳ phức tạp (300 dòng, không test). Bạn sửa một chỗ, tính năng khác lại lỗi.

#2. Giải pháp: Characterization Test

Đừng cố test xem hàm đó chạy “đúng” hay không (vì bạn còn chưa biết đúng là gì). Hãy viết test để ghi lại xem hiện tại nó chạy “thế nào” (Input gì -> Output đó).

  • Quy trình:
    1. Chạy hàm với các bộ Input đa dạng.
    2. Lưu kết quả Output vào file JSON.
    3. Viết test so sánh kết quả refactor với file JSON đó.

#3. Lợi ích

  • Đóng băng hành vi: Đảm bảo sau khi refactor, kết quả vẫn y hệt như cũ.
  • Tự tin: Bạn có thể đổi cấu trúc code hoàn toàn mà không sợ sai lệch nghiệp vụ.

#4. Câu hỏi nhanh

Q: Khi nào nên xóa các test này? A: Sau khi bạn đã hiểu hoàn toàn logic nghiệp vụ và viết lại bộ test mới (Unit Test) dựa trên logic thực tế (thay vì dựa trên hành vi cũ).

Bài viết liên quan