Lập Trình Với AI Và TDD: Từ Mớ Hỗn Độn Đến Mã Nguồn Sáng Sủa!
Lê Lân
0
Hỗ Trợ AI Coding Agents Với Phương Pháp Phát Triển Dựa Trên Kiểm Thử (TDD)
Mở Đầu
Trong thời đại AI đang bùng nổ, AI coding agents trở thành công cụ hứa hẹn giúp tăng tốc quá trình phát triển phần mềm. Tuy nhiên, nhiều nhà phát triển lại bỏ qua vai trò quan trọng của phát triển dựa trên kiểm thử (TDD) khi làm việc với những công cụ này.
Sự phát triển nhanh chóng của AI coding agents đem lại một phương thức làm việc mới nhưng cũng tạo ra một khoảng trống về quy trình thực thi. Nhiều nhà phát triển, đặc biệt là những người mới sử dụng AI, thường bị cuốn theo việc đưa ra các yêu cầu liên tục cho AI mà quên mất việc thiết lập hệ thống kiểm thử rõ ràng. Kết quả là code được tạo ra nhanh chóng nhưng dễ mắc lỗi, dẫn đến mất thời gian hiệu chỉnh và sửa chữa. Bài viết sẽ phân tích cách thức kết hợp AI coding agents với TDD như một giải pháp giúp nâng cao chất lượng và tính ổn định của sản phẩm phần mềm.
Thử Thách Khi Sử Dụng AI Coding Agents
Vòng Lặp Giao Tiếp Tiếp Tục (Iterative Prompting Trap)
Trong trải nghiệm phổ biến của nhà phát triển với AI coding agents, họ thường xuyên gặp phải:
Yêu cầu: "Tạo giỏ hàng quản lý kho"
AI: tạo ra phần code cơ bản
Yêu cầu bổ sung: "Phải kiểm tra số lượng hàng tồn trước khi thêm"
AI: viết lại code nhưng có thể làm mất logic trước đó
Yêu cầu tiếp: "Sửa lỗi khi thanh toán bị hỏng"
AI: logic kiểm tra trước đó biến mất, gây lỗi mới
Tình trạng này khiến code trở nên chắp vá, khó kiểm soát, đồng thời gây mất tập trung cho người phát triển do phải liên tục tương tác và chờ đợi phản hồi từ AI.
Mất Ngữ Cảnh Và Tăng Độ Phức Tạp
Khi dự án phát triển lớn hơn, AI coding agents thường xuyên mất bối cảnh, dẫn đến việc đưa ra các thay đổi không nhất quán. Điều này làm giảm hiệu quả sử dụng AI và phá vỡ nhịp công việc của đội ngũ phát triển, khiến họ quay lại tự viết code thủ công.
TDD - Giải Pháp Cốt Lõi Để Hỗ Trợ AI Coding Agents
Khái Niệm Về Phát Triển Dựa Trên Kiểm Thử (TDD)
Phát triển dựa trên kiểm thử (Test-Driven Development - TDD) là phương pháp phát triển phần mềm dựa trên nguyên tắc viết trước các bài kiểm thử, sau đó viết code để vượt qua kiểm thử đó.
TDD yêu cầu mô hình hóa các yêu cầu và logic nghiệp vụ dưới dạng các bài test, trở thành bản hợp đồng rõ ràng giữa người phát triển và hệ thống.
TDD tạo điều kiện cho việc phát triển có cấu trúc, giảm thiểu lỗi và giúp những người đóng góp tiếp theo dễ dàng hiểu được mục tiêu của code.
Lợi Ích Khi Áp Dụng TDD Cùng AI Coding Agents
Cung cấp khung tham chiếu rõ ràng cho AI trong việc tạo ra code đúng yêu cầu
Giảm thiểu tình trạng AI mất ngữ cảnh trong quá trình chỉnh sửa lặp lại
Tập trung vào logic nghiệp vụ thay vì phải sửa chữa lỗi không mong muốn
Tăng khả năng duy trì và mở rộng dự án khi có đội nhóm lớn, nhiều người tham gia
Áp dụng TDD giúp loại bỏ "vòng lặp giao tiếp tiếp tục" và đưa AI coding agents vào một quy trình phát triển hiệu quả, kết quả hơn.
Hướng Dẫn Sử Dụng Luật, Hướng Dẫn Và Giới Hạn Với AI Coding Agents
Khi Tests Không Đủ Để Diễn Tả Quy Ước Dự Án
Có những quy ước và quy định trong dự án rất khó thể hiện qua các bài test, ví dụ:
Quy tắc thiết kế theo Domain Driven Design (DDD)
Quy định đặt tên biến và đối tượng (entity naming conventions)
Quy tắc cấu trúc dự án và phân tách module
Các giới hạn không cho phép AI sửa đổi file kiểm thử end-to-end
Các Công Cụ Hỗ Trợ Quy Định
Hiện nay, các IDE có tích hợp AI như VSCode vớiGitHub Copilot hay Cursor đều cho phép định nghĩa:
Rules (Quy tắc): Định nghĩa tập hợp các quy ước code và quy tắc làm việc cho AI.
Instructions (Hướng dẫn): Cung cấp các chỉ dẫn cụ thể khi viết code như độ sâu kiểm thử mong muốn, môi trường dev, v.v.
Ví Dụ Các Bộ Quy Tắc Tiêu Chuẩn
Quy Tắc
Mô Tả
Constants
Nơi và cách sử dụng các biến môi trường và hằng số
Testing Instructions
Mức độ kiểm thử yêu cầu (unit test, integration test)
Design Patterns
Kiến trúc và mẫu thiết kế áp dụng (ví dụ DDD)
Dev Environment
Thông tin về môi trường phát triển (Docker, devcontainer)
Entity Naming
Quy ước đặt tên biến theo camelCase, snake_case, ...
Project Info
Thông tin dự án, link tickets, GitHub issues
Project Structure
Cấu trúc thư mục dự án để AI hiểu cách tổ chức code
Test Protection
Cấm sửa file kiểm thử quan trọng bởi AI
Việc áp dụng các quy tắc này giúp AI coding agents hoạt động trong khuôn khổ mong muốn, tăng cường sự nhất quán và giảm thiểu lỗi không chủ ý.
Hiểu Về Ảo Giác Về Tốc Độ Khi Sử Dụng AI Không Kèm TDD
Lòng Tin Vào “Move Fast and Break Things”
Tốc độ phát triển ban đầu có thể rất nhanh khi dùng AI đồng hành.
Việc nhanh chóng tạo prototype, demo ý tưởng giúp đánh giá nhanh giá trị.
Nhưng Khi Dự Án Lớn Lên
Các đoạn code lỗi, chưa được quản lý tích lũy ngày càng nhiều.
Tình trạng "vòng lặp giao tiếp tiếp tục" với AI làm mất thời gian hơn dự kiến.
Thiếu khuôn khổ kiểm thử và quy định dẫn đến sản phẩm dễ sụp đổ hoặc khó mở rộng.
Ai coding agents không phải là công cụ thần kỳ để bỏ qua các quy ước và quy trình phát triển nghiêm ngặt, đặc biệt khi dự án dần trưởng thành.
Ưu Điểm Của Việc Đảm Bảo Tính Tiếp Cận Qua Kiểm Thử
Thách Thức Với Nhà Phát Triển Cá Nhân và Nhóm Nhỏ
Khi làm việc với dự án riêng, nhà phát triển dựa nhiều vào mô hình tinh thần cá nhân.
Thiếu kiểm thử đồng nghĩa người đó có thể không phát hiện được lỗi nằm ngoài phạm vi họ quan tâm.
Tác Động Khi Có Thành Viên Mới Tham Gia
Không có bộ kiểm thử toàn diện thì việc onboarding các thành viên mới mất rất nhiều thời gian.
Một bộ kiểm thử tốt cung cấp sự bảo vệ cho các tính năng hiện có khi code được chỉnh sửa.
Vai Trò Của AI Coding Agents
AI có thể gây ra các thay đổi không lường trước nếu không có kiểm thử.
Vì vậy, test suite giúp phát hiện kịp thời những lỗi phát sinh, giảm thiểu rủi ro sản phẩm.
Kết Luận: Vượt Qua Vibe Coding Với TDD Và Quy Tắc
Mặc dù vibe coding — tức cảm hứng giao tiếp tự do với AI — có thể hợp lý trong giai đoạn đầu hoặc dự án nhỏ, nhưng hiệu quả sẽ giảm dần khi dự án phức tạp và mở rộng.
Việc tích hợp chặt chẽ TDD, luật lệ và quy tắc vào quy trình phát triển cùng AI coding agents giúp:
Tạo ra codebase ổn định, dễ bảo trì và mở rộng
Giảm thiểu vòng lặp mất tập trung, làm việc hiệu quả hơn
Nâng cao chất lượng sản phẩm cuối cùng và nâng cao trải nghiệm nhà phát triển
Hãy biến các bài test không phải là “gánh nặng” mà là “chân vịt” giúp con tàu phần mềm của bạn vươn ra khơi xa.
Tham Khảo
Alon Oparag. "Building with AI Coding Agents in Tandem with TDD: A Case Study." dev.to, December 5, 2023.
Kent Beck. Test Driven Development: By Example. Addison-Wesley, 2003.
Martin Fowler. "Test-Driven Development (TDD)." martinfowler.com, January 20, 2024.
GitHub Copilot Documentation. "Customizing AI Behaviors with Instructions and Rules." github.com, 2024.