0

Kiểm Soát Chất Lượng AI: Quy Trình Checklist Trước Và Sau Khi Review Code Dựa Trên Kế Hoạch Ban Đầu

Khi sử dụng Claude Code hoặc các AI IDE, tốc độ sinh mã (code generation) có thể tăng gấp 10 lần. Tuy nhiên, tốc độ này đi kèm với một rủi ro chí mạng: sự sai lệch thầm lặng (silent drift). AI có thể âm thầm bỏ qua một edge case, tự ý cài thêm một thư viện không cần thiết, hoặc viết sai chuẩn đặt tên mà trình biên dịch không hề báo lỗi.

Để ngăn chặn việc đưa code "rác" vào nhánh chính, bạn không thể duyệt code bằng mắt theo cách truyền thống. Bạn cần một quy trình đối chiếu (Checklist) nghiêm ngặt, lấy Writing Plan (Kế hoạch mã hóa ban đầu) làm thước đo tuyệt đối. Dưới đây là luồng quy trình kiểm định trước và sau khi review code, ép AI phải chịu trách nhiệm cho từng dòng code nó sinh ra.

Nền Tảng Bắt Buộc: Hợp Đồng Writing Plan

Checklist không có ý nghĩa nếu bạn không có tiêu chuẩn để đối chiếu. Trước khi AI bắt đầu gõ dòng code đầu tiên, bạn và AI phải chốt được một Writing Plan chi tiết (bao gồm các task 2-5 phút, tên file, và logic cốt lõi). Bản kế hoạch này chính là "bản án" để bạn kết tội hoặc nghiệm thu công việc của AI.

Giai Đoạn 1: Pre-Review Checklist (Kiểm Định Trước Khi Duyệt)

Đừng vội tạo Pull Request (PR) hay mời đồng nghiệp vào review ngay khi Claude Code báo "Done". Giai đoạn này nhằm rà soát tính tuân thủ và độ ổn định cơ bản.

1. Đối chiếu tính tuân thủ (Plan Alignment)

  • Không thừa, không thiếu: Đối chiếu từng dấu tick trong Writing Plan. Cấm tuyệt đối việc AI "tiện tay" sửa các file không nằm trong kế hoạch ban đầu (Zero-Scope-Creep).

  • Kiểm tra Dependency: Mở file package.json hoặc go.mod. AI có tự ý cài thêm thư viện nào không? Nếu có, yêu cầu giải trình lý do. Tránh việc AI lạm dụng thư viện lodash hoặc moment chỉ để viết một hàm xử lý array/thời gian đơn giản.

2. Kiểm định Tĩnh (Static Verification)

  • Linter & Formatter: Bắt buộc phải chạy npm run lint hoặc công cụ tương đương. Mọi vi phạm về naming convention, thụt lề, hay thiếu dấu chấm phẩy đều phải được clean 100%.

  • Type Checking: Chạy lệnh kiểm tra kiểu tĩnh (ví dụ: npx tsc --noEmit với TypeScript). Code AI rất hay dùng bừa kiểu any khi gặp khó khăn. Bắt buộc AI định nghĩa Interface rõ ràng cho mọi request/response.

3. Kiểm định Động (Dynamic Verification)

  • Green Tests: Tất cả Unit Test liên quan trực tiếp đến file vừa sửa phải pass (chạy npm run test).

  • Test độ phủ (Coverage Check): Đảm bảo các logic nhánh (if/else), đặc biệt là các block try/catch xử lý lỗi, đều đã có test case đi kèm, không có code "chết" (dead code).

4. Dọn Rác (Sanity Cleanup)

  • Xóa toàn bộ các câu lệnh console.log, print(), dump() mà AI dùng để debug.

  • Giải quyết toàn bộ các TODO comments sinh ra tạm thời trong quá trình code.

Giai Đoạn 2: Post-Review Checklist (Hoàn Thiện Sau Khi Duyệt)

Sau khi code đã vượt qua vòng kiểm tra cá nhân hoặc nhận được feedback từ Reviewer (có thể là con người hoặc một Reviewer Subagent), đây là quy trình đóng gói cuối cùng trước khi merge vào nhánh chính.

1. Xử lý Feedback Triệt Để (Feedback Resolution)

  • Không được lấp liếm. Nếu Reviewer yêu cầu cấu trúc lại (refactor) một hàm quá dài, bắt buộc phải chia nhỏ hàm đó.

  • Yêu cầu Claude Code đọc file patch/diff của feedback và cập nhật lại chính xác vị trí được yêu cầu, chạy lại toàn bộ Pre-Review Checklist ở trên để đảm bảo việc sửa feedback không làm vỡ các tính năng khác.

2. Đánh Giá Hiệu Năng & Bảo Mật (Performance & Security Check)

  • Database Query: Rà soát lại các ORM call (Prisma, Eloquent, GORM). Có nguy cơ N+1 query không? Đã thiếu await hoặc quên đóng connection không?

  • Rate Limiting & Validation: Đảm bảo các API endpoint mới đều đã gắn middleware validate payload đầu vào (ngăn SQL Injection) và giới hạn request.

3. Đồng Bộ Tài Liệu (Documentation Sync)

  • Update trực tiếp file README.md nếu có thay đổi về biến môi trường (.env).

  • Yêu cầu AI sinh cú pháp chuẩn hóa (ví dụ: OpenAPI/Swagger annotations hoặc Postman JSON) cho các API vừa tạo và thêm vào tài liệu API chung của dự án.

4. Atomic Commits (Đóng Gói Giao Dịch)

  • Thay vì một cục commit khổng lồ ghi là "Update feature", hãy bắt AI chia nhỏ commit theo đúng các task trong Writing Plan.

  • Ví dụ: Commit 1: feat: Add database schema for locked users, Commit 2: feat: Implement lockUser service logic, Commit 3: test: Add unit tests for lockUser.

Tự Động Hóa Quy Trình Với Claude Code

Để không phải nhớ và làm thủ công quy trình này, bạn hãy biến nó thành một System Prompt hoặc ghi vào file .cursorrules để ép Claude Code tự động thi hành trước khi báo cáo kết quả:

"Mỗi khi bạn báo cáo hoàn thành một Writing Plan, bạn KHÔNG ĐƯỢC phép kết thúc ngay. Bạn BẮT BUỘC phải tự động kích hoạt luồng Pre-Review Checklist:

  1. Tự chạy lệnh Linter và Type Check. Nếu có lỗi, tự động fix.

  2. Tự chạy lệnh Unit Test của riêng file vừa sửa. Nếu đỏ, tự fix.

  3. Quét và xóa mọi lệnh console.log.

  4. Soạn sẵn một danh sách các file đã thay đổi, chứng minh rằng không có file nào ngoài scope của Writing Plan bị chạm tới. Sau khi tự chạy xong 4 bước trên và 100% xanh, bạn mới được thông báo: 'Sẵn sàng cho Review'."

Luồng kiểm soát chặt chẽ này biến bạn từ một người "chạy theo dọn rác" cho AI trở thành một Tech Lead thực thụ, nơi AI chỉ là nhân sự thi công, còn bạn nắm trong tay quyền sinh sát chất lượng mã nguồn.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí