- Kết quả phân tích 470 PR mã nguồn mở cho thấy mã do AI viết chứa nhiều vấn đề hơn trung bình 1,7 lần so với mã do con người viết
- Các lỗi chính như lỗi logic, giảm khả năng đọc, lỗ hổng bảo mật xuất hiện nhiều hơn rõ rệt trong mã AI, đặc biệt vấn đề về khả năng đọc tăng hơn 3 lần
- Mã AI thường xuyên gặp thiếu xử lý lỗi, lỗi đồng thời, không nhất quán trong cách đặt tên, làm tăng gánh nặng review và rủi ro vận hành
- Nguyên nhân được phân tích là do thiếu hiểu biết về business logic, theo đuổi tính đúng đắn bề mặt, ưa chuộng các pattern kém hiệu quả
- Báo cáo nhấn mạnh sự cần thiết của việc tăng cường hệ thống quản lý chất lượng mã AI và áp dụng quy trình review mã, bảo mật và kiểm thử có nhận thức về AI
Tổng quan báo cáo AI vs Human Code Generation Report
- CodeRabbit đã thực hiện nghiên cứu nhằm phân tích thực nghiệm sự khác biệt về chất lượng giữa mã do AI và con người viết
- Khảo sát 470 GitHub PR mã nguồn mở, trong đó 320 PR có AI đồng tác giả, 150 PR do con người tự viết
- Tất cả kết quả được chuẩn hóa theo số lượng issue trên mỗi 100 PR, và đo tần suất phát sinh theo từng loại vấn đề bằng so sánh tỷ lệ thống kê
- Kết quả cho thấy AI làm tăng năng suất nhưng đồng thời cũng làm tăng tỷ lệ phát sinh lỗi
- Trung bình mỗi PR do AI viết có 10,83 vấn đề, trong khi PR do con người viết là 6,45 vấn đề
- Đặc biệt, các lỗi có mức độ nghiêm trọng cao được phát hiện trong mã AI thường xuyên hơn
Hạn chế của nghiên cứu
- Không thể xác nhận trực tiếp việc mã có do AI viết hay không, nên các PR có tín hiệu AI đồng tác giả (
co-authored-by) được phân loại là PR do AI viết
- Các PR không có tín hiệu này được xem là do con người viết, nhưng không thể phân biệt hoàn toàn chính xác
- Dù có hạn chế này, sự khác biệt có ý nghĩa thống kê trong mẫu hình vấn đề giữa hai nhóm vẫn thể hiện rõ
- Toàn bộ phương pháp luận được công bố ở cuối báo cáo
10 phát hiện chính
- Không phải mọi loại lỗi chỉ tồn tại ở AI, nhưng trong đa số hạng mục, tỷ lệ lỗi của mã AI cao hơn
- Cả con người và AI đều mắc những kiểu lỗi giống nhau, nhưng AI xảy ra thường xuyên hơn và ở quy mô lớn hơn
-
1. Tổng số issue tăng 1,7 lần
- Trung bình mỗi PR do AI viết có 10,83 issue, còn PR do con người viết là 6,45 issue
- Các PR có issue tập trung bất thường (outlier) xuất hiện nhiều hơn hẳn trong mã AI, làm tăng gánh nặng review
-
2. Lỗi nghiêm trọng tăng
- Các vấn đề mức cao và nghiêm trọng nhiều hơn 1,4~1,7 lần
-
3. Vấn đề logic và độ chính xác tăng 75%
- Bao gồm lỗi business logic, dependency sai, lỗi control flow, lỗi cấu hình
- Chi phí sửa cao và có khả năng dẫn đến sự cố vận hành lớn
-
4. Vấn đề về khả năng đọc tăng hơn 3 lần
- Quy tắc đặt tên, cấu trúc mã, tính nhất quán trong biểu đạt giảm sút rõ rệt
- Dù mã trông có vẻ gọn gàng, vi phạm pattern cục bộ vẫn xảy ra thường xuyên
-
5. Thiếu xử lý lỗi và nhánh ngoại lệ tăng 2 lần
- Kiểm tra null, điều kiện guard, logic xử lý ngoại lệ thường bị bỏ sót
- Đây là kiểu lỗi gắn trực tiếp với sự cố dịch vụ thực tế
-
6. Vấn đề bảo mật tăng tối đa 2,74 lần
- Tiêu biểu là xử lý mật khẩu không phù hợp, lỗ hổng tham chiếu đối tượng
- Không phải lỗ hổng hoàn toàn mới, nhưng đa số lỗi bảo mật đều bị khuếch đại
-
7. Vấn đề giảm hiệu năng ít hơn nhưng tập trung ở phía AI
- Các lời gọi I/O quá mức nhiều hơn khoảng 8 lần
- AI có xu hướng ưu tiên mã dễ hiểu nên hiệu quả kém hơn
-
8. Lỗi đồng thời và dependency tăng khoảng 2 lần
- Lỗi thứ tự, luồng phụ thuộc sai, sử dụng sai cơ chế kiểm soát đồng thời xuất hiện thường xuyên
-
9. Vấn đề formatting tăng 2,66 lần
- Có nhiều lỗi hình thức như thụt lề, khoảng trắng, không nhất quán về style
- Ngay cả khi dùng formatter và linter tự động, noise trong mã AI vẫn tăng
-
10. Không nhất quán trong đặt tên tăng 2 lần
- Tên không rõ nghĩa, thuật ngữ không nhất quán, dùng identifier quá chung chung làm tăng gánh nặng nhận thức cho reviewer
Nguyên nhân phát sinh vấn đề
- AI thiếu hiểu biết về business logic
- Tạo mã dựa trên pattern thống kê nên bỏ sót các quy tắc của hệ thống
- Sinh mã thiên về tính đúng đắn bề mặt
- Mã nhìn qua có vẻ đúng nhưng vẫn có lỗi bảo vệ control flow hoặc sai thứ tự phụ thuộc
- Không tuân thủ quy ước riêng của repository
- Các quy tắc về đặt tên, cấu trúc, format bị biến thành dạng khái quát hóa
- Pattern bảo mật bị suy yếu
- Nếu không có chỉ dẫn rõ ràng, AI sẽ tái tạo các pattern mã cũ hoặc dễ tổn thương
- Ưa sự đơn giản hơn hiệu quả
- Có xu hướng dùng I/O lặp lại, cấu trúc chưa tối ưu
Cách ứng phó dành cho các nhóm kỹ sư
- Việc áp dụng AI không chỉ đòi hỏi tăng tốc độ mà còn cần thiết kế lại hệ thống đảm bảo chất lượng
-
1. Cung cấp đủ ngữ cảnh cho AI
- Cần nêu rõ quy tắc nghiệp vụ, pattern cấu hình, ràng buộc kiến trúc để giảm lỗi
- Bao gồm hướng dẫn riêng theo repository và schema trong prompt
-
2. Bắt buộc style mã dựa trên chính sách
- Ngăn ngừa vấn đề về khả năng đọc bằng CI formatter, linter, style guide
-
3. Bổ sung các cơ chế an toàn cho độ chính xác
- Bắt buộc test, kiểm tra null/type, chuẩn hóa xử lý ngoại lệ, nêu rõ điều kiện guard
-
4. Tăng cường mặc định bảo mật
- Tập trung hóa credential, chặn dùng trực tiếp mật khẩu, chạy SAST và security linter tự động
-
5. Định hướng các pattern hiệu quả
- Batch I/O, chọn cấu trúc dữ liệu phù hợp, cung cấp gợi ý hiệu năng
-
6. Áp dụng checklist PR có nhận thức về AI
- Khi review, cần kiểm tra các mục sau:
- Có bao phủ đường đi lỗi hay không
- Tính chính xác của kiểm soát đồng thời
- Có xác thực giá trị cấu hình hay không
- Cách xử lý mật khẩu
-
7. Tự động hóa review mã AI
- Để tránh bỏ sót bug do gia tăng mệt mỏi khi review, báo cáo đề xuất sử dụng công cụ review mã AI (CodeRabbit)
- Chuẩn hóa chất lượng review và giảm thời gian kiểm tra cũng như gánh nặng nhận thức
Kết luận
- Công cụ lập trình AI là bộ tăng tốc mạnh mẽ, nhưng tăng tốc không có cơ chế bảo vệ là điều rủi ro
- Mã do AI sinh ra có mức biến động, tỷ lệ lỗi và mức độ nghiêm trọng đều cao hơn
- Cần sử dụng AI như công cụ bổ trợ chứ không phải thay thế, đồng thời tăng cường hệ thống chất lượng, bảo mật và kiểm thử là bắt buộc
- Muốn đảm bảo cả tốc độ lẫn chất lượng thì cần quản trị kỹ thuật có chủ đích
- Việc sử dụng công cụ review mã AI có thể giúp ích thực tế trong việc duy trì chất lượng
5 bình luận
Gấp 1,7 lần thì cũng ít hơn tưởng tượng nhỉ...?
Tôi cũng cảm thấy khá giống như vậy khi lập trình bằng AI. Nhìn vào các nguyên nhân đã được sắp xếp lại thì có lẽ là vì khi con người code, những thứ như các pattern được mặc định từ kiến thức nền tảng, quy tắc đặt tên, xử lý edge case, guard condition, v.v. không được cung cấp đầy đủ trong context.
Vì vậy tôi tạo hẳn một file quy tắc gom riêng mấy thứ đó lại, rồi khi code thì ra lệnh phải обязательно đọc và tuân thủ file đó. Làm vậy thì chỉ cần cải thiện file rule thôi là chất lượng kết quả tốt lên đáng kể.
Mình hơi sợ sẽ có ý kiến kiểu: "Làm ra nhiều khủng khiếp như vậy thì bug nhiều gấp 1,7 lần chẳng phải là quá hời sao..."
Nhưng vẫn nhanh mà, đúng không? Làm tôi nhớ đến cái meme đó haha
Ý kiến trên Hacker News
Tôi nghĩ "vibe coding" đã tồn tại từ trước cả AI
Những chỉ trích về vibe coding là hợp lý, nhưng thật ra chất lượng code đã tệ từ trước cả AI
Câu “code AI tạo ra có nhiều vấn đề hơn 1,7 lần” thực ra chỉ là số lượng bug được phát hiện
Gần đây trong .NET, Copilot đã gợi ý cho tôi phần triển khai IComparable, giúp tiết kiệm được vài phút
Trước đây cũng từng có tình huống tương tự
Tôi thấy thú vị khi một công ty làm về LLM lại khẳng định rằng “AI không tệ như mọi người nghĩ”
Tôi dùng CodeRabbit khá thường xuyên, nhưng nó vẫn có nhiều false positive
“nhiều hơn 1,7 lần” và “tăng thêm 1,7 lần” không phải là cùng một ý
Agentic AI coding chỉ là một công cụ, dùng sai thì đương nhiên cho ra kết quả sai
Cách đặt tiêu đề của bài là “code AI tạo ra gây ra nhiều vấn đề hơn 1,7 lần”, nhưng diễn đạt này không chính xác