Refactor là thay đổi cấu trúc mà giữ nguyên hành vi. Nếu chưa có test, câu “đừng làm hỏng chức năng” chỉ là mong muốn. Claude Code giúp đọc mã lặp và tạo test nhanh, nhưng người dùng phải xác định hành vi nào cần khóa và chia thay đổi thành các chặng có thể hoàn tác.
Kết quả sau bài học: Bạn sẽ tách hàm calculateTotal dài thành các hàm nhỏ mà đầu ra, quy tắc giảm giá và làm tròn tiền không đổi.
Tư duy quan trọng trước khi bắt đầu
AI coding agent là cộng sự có khả năng thao tác, không phải nguồn chân lý. Bạn vẫn chịu trách nhiệm về mã được đưa vào dự án. Hãy giữ nhiệm vụ nhỏ, cung cấp bối cảnh vừa đủ, yêu cầu bằng chứng và không phê duyệt điều mình chưa hiểu.
Hướng dẫn từng bước
Bước 1: Định nghĩa hành vi bất biến
Liệt kê input/output, lỗi, side effect và các quy tắc nghiệp vụ. Lấy ví dụ thật đã ẩn dữ liệu. Không refactor cùng lúc với thay đổi yêu cầu sản phẩm.
Bước 2: Viết characterization test
Nếu code chưa có test, ghi lại hành vi hiện tại — kể cả hành vi kỳ lạ cần duy trì tạm thời. Bao phủ giá trị rỗng, biên giảm giá, làm tròn và lỗi. Chạy suite trước refactor để tạo baseline.
Bước 3: Yêu cầu kế hoạch chia chặng
Claude phải chỉ ra code smell có bằng chứng và đề xuất các bước độc lập: đổi tên, tách hàm thuần, loại lặp. Mỗi bước có test và không thay public API.
Bước 4: Thực hiện từng diff nhỏ
Sau mỗi bước, xem diff và chạy test. Tránh “tiện thể” nâng thư viện hoặc đổi format. Khi test đỏ, hoàn tác bước gần nhất dễ hơn điều tra một diff hàng trăm dòng.
Bước 5: Review kết quả chứ không chỉ độ đẹp
So sánh API, kết quả và hiệu năng cơ bản. Kiểm tra test có khẳng định hành vi chứ không sao chép implementation. Chỉ xóa code cũ khi không còn đường gọi và test đầy đủ.
Bài thực hành có đầu ra rõ ràng
Bài tập: tách calculateTotal thành normalizeItems, subtotal và applyDiscount. Giữ nguyên chữ ký export; thêm test cho giỏ rỗng, số lượng âm, ngưỡng giảm giá và số thập phân.
Tiêu chuẩn nộp bài: lưu prompt đã dùng, ảnh hoặc log kết quả trước/sau, diff cuối cùng, lệnh kiểm tra và ba điều bạn tự học được từ mã. Nếu test không chạy được, ghi lý do thay vì coi như đã đạt.
Prompt mẫu có thể sao chép
Chỉ phân tích hàm này. Liệt kê hành vi quan sát được, side effects và test characterization cần có; chưa refactor.
Đề xuất kế hoạch refactor theo các commit nhỏ. Không đổi public API, nghiệp vụ, dependency hoặc format tệp ngoài phạm vi.
Sau mỗi bước, chạy test liên quan và so sánh hành vi trước/sau. Dừng nếu có khác biệt chưa giải thích.
Lỗi người mới thường gặp
- Viết lại toàn bộ module vì code “xấu”
- Test chi tiết nội bộ nên vỡ ngay khi refactor
- Trộn sửa bug với refactor
- Không giữ baseline hiệu năng cho đoạn nóng
Checklist hoàn thành
- Bất biến được ghi rõ
- Test baseline xanh
- Kế hoạch chia nhỏ
- Public API không đổi
- Review và test sau từng chặng
Cách tự học để không phụ thuộc AI
- Trước khi hỏi, tự dự đoán tệp và nguyên nhân trong năm phút.
- Sau câu trả lời, yêu cầu giải thích một khái niệm bạn chưa hiểu bằng ví dụ nhỏ.
- Tự viết lại phần cốt lõi hoặc test mà không nhìn câu trả lời.
- Lưu lỗi và bài học vào ghi chú dự án, không lưu bí mật.
- Một tuần sau, làm lại bài tập với yêu cầu hơi khác.
Kết luận: dùng tác nhân AI tốt không nằm ở việc tạo nhiều code, mà ở khả năng đặt mục tiêu rõ, kiểm soát phạm vi và chứng minh kết quả. Nếu giữ được vòng lặp đọc → kế hoạch → thay đổi nhỏ → test → review, người mới vừa đi nhanh hơn vừa thực sự tiến bộ.
Nguồn tham khảo chính thức: tài liệu sản phẩm dành cho nhà phát triển. Giao diện và tính năng có thể thay đổi; hãy đối chiếu tài liệu hiện hành khi cài đặt.

