Thông tin liên hệ
- 036.686.3943
- admin@nguoicodonvn2008.info
Trong bài học trước, chúng ta đã tìm hiểu về test và đảm bảo chất lượng code. Giờ hãy xây dựng trên nền tảng đó. Người đánh giá code không phair là những cỗ máy. Họ cũng có các cuộc họp, hạn chót và những ngày tồi tệ. Họ chỉ lướt qua yêu cầu kéo thứ tư trong buổi sáng. Họ bỏ sót lỗi chuyển đổi kiểu dữ liệu tinh vi ẩn trong dòng 247.
Trí tuệ nhân tạo (AI) không lướt qua. Nó không có những ngày tồi tệ. Nó phát hiện ra cùng một mẫu dù đó là lần đánh giá đầu tiên trong ngày hay lần thứ một trăm.
Điều này không có nghĩa là AI thay thế người đánh giá. AI có thể xử lý các kiểm tra mang tính kỹ thuật - lỗi, vấn đề bảo mật, những mẫu hiệu suất, tính nhất quán về kiểu dáng - để người đánh giá có thể tập trung vào kiến trúc, các quyết định thiết kế và logic nghiệp vụ.
Đây là cấu trúc prompt giúp nhận được những đánh giá tốt nhất:
📍 Nơi dán: Mở ChatGPT (chat.openai.com), Claude (claude.ai) hoặc Gemini (gemini.google.com) và bắt đầu một cuộc trò chuyện mới.
📋 Cách sao chép prompt này: Nhấp vào bất kỳ đâu bên trong khối màu xám, nhấn Cmd+A rồi Cmd+C (Mac) hoặc Ctrl+A rồi Ctrl+C (Windows). Hoặc sử dụng biểu tượng sao chép xuất hiện.
Xem xét code này để tạo yêu cầu kéo (pull request). Tập trung vào:
1. Lỗi và sai sót logic
2. Lỗ hổng bảo mật
3. Vấn đề về hiệu suất
4. Khả năng đọc hiểu và khả năng bảo trì
Ngữ cảnh: Đây là [mô tả chức năng của code]
trong [ngăn xếp công nghệ] của chúng tôi. Nó [là một phần của hệ thống nào].
Các quy ước hiện có để kiểm tra:
- [liệt kê các quy ước chính của nhóm bạn]
[dán code]
Đối với mỗi vấn đề, hãy chỉ rõ:
- Mức độ nghiêm trọng (nghiêm trọng/cảnh báo/đề xuất)
- Số dòng hoặc phần
- Vấn đề là gì
- Cách khắc phục✏️ Cách điền thông tin chi tiết của bạn: Thay thế mỗi [] và trình giữ chỗ trong ngoặc bằng thông tin cụ thể từ tình huống thực tế của bạn. Thông tin mơ hồ sẽ tạo ra kết quả mơ hồ — hãy cụ thể.
👀 Những gì bạn sẽ thấy: Trong vòng vài giây, AI sẽ trả về một phản hồi có cấu trúc dựa vào prompt ở trên. Hãy đọc kỹ và coi đó là bản nháp, không phải câu trả lời cuối cùng.
📌 Nên làm gì với kết quả: Lưu phản hồi vào một file Notes. Chọn gợi ý có hiệu quả cao nhất và thực hiện nó trong tuần này — đừng cố gắng làm tất cả cùng một lúc.
⚠️ Nếu kết quả không ổn: Nếu các gợi ý có vẻ chung chung, hãy dán nội dung sau: "Hãy cụ thể hơn với ngữ cảnh thực tế của tôi. Bỏ qua những lời khuyên chung chung." Nếu nó bỏ qua các chi tiết quan trọng bạn đã cung cấp, hãy hỏi: "Bạn đã bỏ sót [X] trong ngữ cảnh của tôi — hãy thực hiện lại với điều đó làm ràng buộc chính."
Hãy xem cách hoạt động này trên code thực tế. Đây là một endpoint xác thực người dùng:
app.post('/api/login', async (req, res) => {
const { email, password } = req.body;
const user = await db.query(
`SELECT * FROM users WHERE email = '${email}'`
);
if (user.rows.length === 0) {
return res.status(401).json({ error: 'User not found' });
}
if (password === user.rows[0].password) {
const token = jwt.sign(
{ id: user.rows[0].id, role: user.rows[0].role },
'my-secret-key',
{ expiresIn: '24h' }
);
res.json({ token, user: user.rows[0] });
} else {
return res.status(401).json({ error: 'Wrong password' });
}
});
AI sẽ cảnh báo nhiều vấn đề ở đây, theo thứ tự gần đúng như sau:
Nghiêm trọng: Lỗi tấn công SQL Injection (Dòng 5) Địa chỉ email được chèn trực tiếp vào truy vấn SQL. Kẻ tấn công có thể gửi ' OR 1=1 --' làm email. Khắc phục: Sử dụng truy vấn tham số hóa.
Nghiêm trọng: So sánh mật khẩu dạng plain text (Dòng 11) Mật khẩu được so sánh dưới dạng plain text, nghĩa là chúng được lưu trữ mà không được mã hóa trong cơ sở dữ liệu. Khắc phục: Sử dụng bcrypt.compare().
Nghiêm trọng: JWT secret được hardcode (Dòng 13) Key bí mật nằm trong code nguồn. Khắc phục: Sử dụng biến môi trường.
Cảnh báo: Thông báo lỗi khác nhau cho email không hợp lệ với mật khẩu (Dòng 9, 17) Điều này làm rò rỉ thông tin — kẻ tấn công có thể liệt kê các email hợp lệ. Khắc phục: Sử dụng cùng một thông báo cho cả hai: "Thông tin đăng nhập không hợp lệ."
Cảnh báo: Trả về toàn bộ đối tượng người dùng (Dòng 16) user.rows[0] có thể bao gồm hash mật khẩu và các trường nhạy cảm khác. Khắc phục: Chỉ chọn các trường cần thiết hoặc làm sạch trước khi trả về.
Gợi ý: Không có xác thực đầu vào (Dòng 2) Email và mật khẩu được sử dụng mà không có xác thực. Thêm xác thực đầu vào trước khi truy vấn cơ sở dữ liệu.
Đó là 6 vấn đề, 3 trong số đó là các lỗ hổng bảo mật nghiêm trọng. Một người đánh giá mệt mỏi có thể phát hiện ra một số lỗi này. AI phát hiện ra tất cả, mọi lúc.
Đôi khi bạn không cần đánh giá tổng quát - bạn cần tập trung cụ thể:
Xem xét code này cụ thể về các lỗ hổng bảo mật.
Kiểm tra:
- Các cuộc tấn công Injection (SQL, XSS, chèn lệnh)
- Vượt qua xác thực/ủy quyền
- Lộ dữ liệu nhạy cảm
- Thiếu xác thực đầu vào
- Các thực hành mã hóa không an toànXem xét code này về các vấn đề hiệu suất.
Kiểm tra:
- Mẫu truy vấn N+1
- Cấp phát bộ nhớ không cần thiết
- Thiếu chỉ mục cơ sở dữ liệu (dựa trên mẫu truy vấn)
- Cơ hội để lưu vào cache
- Các thao tác chặn trong ngữ cảnh bất đồng bộXem xét code này về khả năng đọc hiểu và khả năng bảo trì.
Kiểm tra:
- Tên biến/hàm không rõ ràng
- Hàm thực hiện quá nhiều việc
- Thiếu hoặc chú thích gây hiểu nhầm
- Logic điều kiện phức tạp có thể được đơn giản hóa
- Các mẫu không nhất quán so với phần còn lại của codebaseMỗi lĩnh vực trọng tâm sẽ cung cấp cho bạn phản hồi sâu sắc hơn, phù hợp hơn so với một câu hỏi chung chung "xem xét code này".
Hãy xem code này. AI sẽ phát hiện ra những lỗi gì?
def process_order(order):
total = 0
for item in order['items']:
total += item['price'] * item['qty']
if total > 100:
total = total * 0.9 # 10% discount
order['total'] = total
send_email(order['email'], f"Your order total: ${total}")
charge_payment(order['payment_info'], total)
save_to_database(order)
return {'status': 'success'}
AI có thể sẽ cảnh báo: Không xử lý lỗi (điều gì sẽ xảy ra nếu thanh toán thất bại sau khi gửi email?), thay đổi từ điển đơn hàng đầu vào, không xác thực cấu trúc đơn hàng, các vấn đề tiềm ẩn về số thập phân với tiền tệ, logic giảm giá được hardcode, và những thao tác email/thanh toán/lưu nên nằm trong một giao dịch.
Tái cấu trúc code là nơi AI thực sự phát huy tác dụng. Quy trình:
Đây là một hàm đã dài đến 200 dòng và đảm nhiệm
quá nhiều trách nhiệm. Xác định các vấn đề riêng biệt
và đề xuất cách chia nhỏ nó.
[dán hàm dài]AI sẽ vạch ra các trách nhiệm: Xác thực, logic nghiệp vụ, thao tác cơ sở dữ liệu, thông báo, xử lý lỗi. Nó sẽ đề xuất cách tách chúng ra.
Dựa trên phân tích của bạn, hãy tạo một kế hoạch tái cấu trúc.
Đối với mỗi bước:
1. Thay đổi cần thực hiện
2. Thêm/sửa đổi những bài kiểm tra nào
3. Làm thế nào để xác minh không có gì bị lỗi
Hàm hiện tại có các bài kiểm tra sau:
[dán những bài kiểm tra hiện có]Đừng chỉnh sửa lại toàn bộ cùng một lúc. Tách từng vấn đề một:
Bước chỉnh sửa 1: Tách logic kiểm tra từ
processOrder thành một hàm validateOrder riêng biệt.
Đây là code hiện tại:
[dán trạng thái hiện tại]
Yêu cầu:
- Hàm mới phải đưa ra lỗi có mô tả rõ ràng
- Các bài kiểm tra hiện có vẫn phải đạt
- Thêm các bài kiểm tra mới cho hàm được tách raSau mỗi bước, hãy chạy các bài kiểm tra của bạn. Xác minh. Sau đó chuyển sang bước tách tiếp theo.
Sau khi hoàn tất tất cả các bước:
Đây là hàm gốc và phiên bản đã được chỉnh sửa. Xác minh rằng:
1. Tất cả các hành vi ban đầu được giữ nguyên
2. Không có trường hợp ngoại lệ nào bị mất trong quá trình tái cấu trúc
3. Xử lý lỗi tương đương hoặc tốt hơn
Bản gốc:
[dán bản gốc]
Bản tái cấu trúc:
[dán phiên bản đã tái cấu trúc]Trích xuất phương thức: AI xác định các ranh giới tự nhiên trong những hàm dài và trích xuất chúng thành các hàm trợ giúp được đặt tên rõ ràng.
Thay thế điều kiện bằng đa hình: Khi bạn có một chuỗi switch/case hoặc if/else lớn, AI có thể đề xuất một chiến lược hoặc factory pattern.
Đơn giản hóa các điều kiện phức tạp:
// Trước đó (AI nhận định đoạn này khó đọc)
if (user.role === 'admin' || (user.role === 'manager'
&& user.department === dept && !user.suspended))
// Sau (AI đề xuất phương pháp trích xuất)
const canAccess = isAdmin(user) || isActiveDeptManager(user, dept)
Loại bỏ trùng lặp: Dán hai hàm tương tự và yêu cầu AI xác định logic chung và tạo ra một sự trừu tượng chung.
Theo thời gian, bạn sẽ phát triển các mẫu cho những gì AI phát hiện tốt trong codebase của bạn. Xây dựng một danh sách kiểm tra có thể tái sử dụng:
Xem xét PR này dựa trên danh sách kiểm tra tiêu chuẩn của chúng tôi:
[ ] Không có lỗ hổng SQL injection hoặc XSS
[ ] Xử lý lỗi bao gồm tất cả các chế độ lỗi
[ ] Có xác thực đầu vào cho tất cả các đầu vào bên ngoài
[ ] Không có bí mật hoặc thông tin đăng nhập được hardcode
[ ] Các truy vấn cơ sở dữ liệu được tối ưu hóa (không có N+1)
[ ] Nhất quán với các mẫu code hiện có
[ ] Các hàm dưới 50 dòng
[ ] Code mới có các bài kiểm tra tương ứng
[ ] Không có bình luận TODO hoặc FIXME mà không có ticket
[ ] Có nhật ký để gỡ lỗi các sự cố sản xuất
[dán sự khác biệt của PR]AI sẽ kiểm tra từng mục và gắn cờ bất kỳ vi phạm nào.
AI liên tục phát hiện các vấn đề về mặt kỹ thuật - lỗi bảo mật, mô hình hiệu suất, vi phạm quy tắc về kiểu dáng
Các đánh giá tập trung (bảo mật, hiệu suất, khả năng đọc hiểu) cung cấp phản hồi sâu sắc hơn, có thể hành động được
Sử dụng đánh giá của AI trước khi đánh giá của con người để phát hiện các vấn đề rõ ràng trước tiên
Tái cấu trúc từng bước: đánh giá, lập kế hoạch, thực hiện từng bước, xác minh
Xây dựng danh sách kiểm tra đánh giá có thể tái sử dụng cho các tiêu chuẩn của nhóm bạn
Người đánh giá nên tập trung vào kiến trúc, thiết kế và logic nghiệp vụ
Nguồn tin: Quantrimang.com
Ý kiến bạn đọc
Những tin mới hơn
Những tin cũ hơn
Xây dựng bộ công cụ tự động hóa Python với AI
TOP ứng dụng ghi chú AI tốt nhất cho học tập và công việc
Cách xây dựng app tự học trên Google AI Studio
Hướng dẫn tạo video intro từ ảnh logo
Phát triển kỹ năng code với sự hỗ trợ của AI
Gỡ và phân tích lỗi code bằng AI
Test và đảm bảo chất lượng code tạo bằng AI
Tạo code thực sự hoạt động với AI
TOP công cụ AI tạo website hiệu quả và dễ sử dụng nhất
Đánh giá và tái cấu trúc code với AI
Prompt tạo video intro từ logo chuyên nghiệp nhiều phong cách
Tạo tài liệu và chia sẻ kiến thức code với AI
TOP công cụ AI tạo video từ ảnh chân thực nhất
Các quyết định về kiến trúc và thiết kế code hệ thống với AI
Chuyển ảnh bài tập thành trò chơi tương tác trên Canva AI
Cách dùng Cursor Rules File (.mdc)
10 công cụ AI miễn phí đang âm thầm giúp hàng triệu người làm việc hiệu quả hơn
TOP công cụ AI tạo bài hát tốt nhất để sáng tác những bản nhạc ấn tượng
Tạo video giới thiệu thành phố siêu điện ảnh trên Flow