0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Sử Dụng ChatGPT Như Lập Trình Viên Junior: Hữu Ích Nhưng Cần Kiểm Tra

Đăng vào 7 tháng trước

• 5 phút đọc

Sử Dụng ChatGPT Như Lập Trình Viên Junior: Hữu Ích Nhưng Cần Kiểm Tra

Giới Thiệu

Với sự phát triển mạnh mẽ của trí tuệ nhân tạo, các trợ lý lập trình như ChatGPT đã trở nên phổ biến trong cộng đồng lập trình viên. Chúng có khả năng tạo ra mã, kiểm tra và gỡ lỗi, giúp tiết kiệm thời gian đáng kể. Tuy nhiên, điều quan trọng cần nhớ là chúng không thể thay thế hoàn toàn sự phán đoán của con người. Trong bài viết này, chúng ta sẽ tìm hiểu cách làm việc hiệu quả với ChatGPT và những kinh nghiệm thực tiễn từ việc xử lý mã legacy.

Kinh Nghiệm Của Tôi: Sửa Chữa Mã Legacy Trước Các Kiểm Thử Hỏng

Gần đây, tôi đã làm việc trên một tính năng xác thực biểu mẫu React legacy. Yêu cầu rất đơn giản:

  • Xác thực tên, email, ID nhân viên và ngày tham gia.
  • Hiển thị thông báo lỗi cho đến khi các đầu vào hợp lệ.
  • Cho phép gửi chỉ khi tất cả đều hợp lệ.

Điều khó khăn là tôi không chỉ phải triển khai biểu mẫu - mà còn phải làm cho nó vượt qua một bộ kiểm thử hiện có đã được viết từ nhiều năm trước.

Tôi đã tìm đến ChatGPT để nhận sự trợ giúp, với hy vọng nó có thể nhanh chóng phác thảo một thành phần hoạt động. Nó đã tạo ra một giải pháp - nhưng khi tôi chạy các kiểm thử, chúng liên tục thất bại.

Vấn Đề Với Kiểm Thử

Ban đầu, tôi nghĩ có thể tôi đã hiểu sai yêu cầu, vì vậy tôi đã yêu cầu ChatGPT gỡ lỗi. Chúng tôi đã trao đổi qua lại nhiều lần. Tôi đã cung cấp thêm ngữ cảnh, làm rõ từng quy tắc xác thực đầu vào và thậm chí giải thích các thông báo lỗi nên là gì. ChatGPT đã đề xuất sửa chữa mỗi lần, nhưng không cái nào trong số đó hoạt động.

Cuối cùng, khi tôi tự mình xem xét bộ kiểm thử, tôi nhận ra vấn đề thực sự: các kiểm thử đã sai.

Kiểm Thử Hỏng Mọi Thứ

Một kiểm thử đã mã hóa cứng "2025-04-12" như một “ngày trong tương lai”:

javascript Copy
changeInputFields("UserA", "user@email.com", 123456, "2025-04-12");
expect(inputJoiningDate.children[1])
  .toHaveTextContent("Ngày tham gia không thể ở tương lai");

Vấn đề là gì? Chúng ta đã qua tháng 4 năm 2025. Ngày đó không còn là trong tương lai nữa, vì vậy thông báo lỗi dự kiến sẽ không bao giờ xuất hiện. Thành phần là ổn - các kiểm thử mới là vấn đề.

Tôi đã phải xem xét lại logic, phân tích các giả định và viết lại kiểm thử với các ngày tương đối, như sau:

javascript Copy
// Kiểm thử đã được sửa với ngày tương đối
const futureDate = new Date();
futureDate.setDate(futureDate.getDate() + 30); // luôn 30 ngày tới
const futureDateStr = futureDate.toISOString().slice(0, 10);

changeInputFields("UserA", "user@email.com", 123456, futureDateStr);
expect(
  screen.getByText("Ngày tham gia không thể ở tương lai")
).toBeInTheDocument();

Thay đổi nhỏ này làm cho kiểm thử của bạn không phụ thuộc vào thời gian, vì vậy nó sẽ hoạt động bất kể năm hiện tại là gì.

Những Bài Học Rút Ra

  1. AI sẽ tuân theo các yêu cầu hỏng một cách mù quáng: ChatGPT không thể nhận ra rằng một kiểm thử là vô lý. Nó sẽ cố gắng để làm hài lòng kiểm thử mặc dù nó không hợp lý.
  2. Xem xét đầu ra như một PR của junior: Các đề xuất của ChatGPT rất hữu ích như một khung công tác, nhưng nó không thể nhìn thấy nguyên nhân gốc rễ. Tôi đã phải can thiệp, xem xét mã legacy và phân tích các kiểm thử.
  3. Kiểm thử cũng có thể trở nên lỗi thời: Các ngày mã hóa cứng, số phép thuật hay giả định lỗi thời khiến bộ kiểm thử trở nên mong manh. Nếu các kiểm thử sai, không có sửa chữa nào cho thành phần sẽ giúp.
  4. Giá trị tương đối giữ cho các kiểm thử đáng tin cậy: Thay thế các ngày hoặc giá trị tuyệt đối bằng các phép tính liên quan đến ngày hôm nay. Điều này đảm bảo rằng các kiểm thử của bạn hoạt động qua thời gian.

Cách Làm Việc Hiệu Quả Với Các Công Cụ AI

  • Cung cấp ngữ cảnh, nhưng đừng dựa vào nó để suy luận như một lập trình viên cấp cao.
  • Hỏi “tại sao”, và kiểm tra kỹ lưỡng các giải thích của nó.
  • Xác thực mọi thứ một cách độc lập - đặc biệt là khi làm việc với mã legacy.
  • Tinh chỉnh theo từng bước - sử dụng AI như một khung công tác, nhưng bạn là người sở hữu việc sửa chữa.

Kết Luận

Kinh nghiệm của tôi đã dạy tôi một sự thật đơn giản: AI có thể thúc đẩy tốc độ lập trình, nhưng nó không thể thay thế sự phán đoán của con người, đặc biệt là khi đối mặt với mã legacy lộn xộn và các kiểm thử lỗi thời.

Hãy xem ChatGPT như một đồng đội junior:

  • Hữu ích, mong muốn làm hài lòng, nhanh chóng.
  • Đôi khi sai một cách tự tin.
  • Cần được kiểm tra, giám sát và đôi khi, một cuộc kiểm tra thực tế.

Nếu bạn giữ tâm lý đó, bạn sẽ nhận được sự gia tăng năng suất mà không phải mù quáng làm theo hướng dẫn sai — và bạn sẽ biết khi nào cần phải tự mình đào sâu.

Thực Tiễn Tốt Nhất

  • Luôn kiểm tra: Bất kỳ mã nào được tạo ra bởi AI cũng cần được kiểm tra kỹ lưỡng trước khi đưa vào sản phẩm.
  • Cập nhật kiểm thử thường xuyên: Đảm bảo rằng các kiểm thử của bạn luôn chính xác và không lỗi thời.
  • Chia sẻ kinh nghiệm: Hãy chia sẻ những bài học bạn đã học được với cộng đồng lập trình viên để mọi người cùng phát triển.

Câu Hỏi Thường Gặp

ChatGPT có thể thay thế lập trình viên không?

ChatGPT là một công cụ hỗ trợ hữu ích, nhưng nó không thể thay thế hoàn toàn lập trình viên, đặc biệt khi cần sự phán đoán và hiểu biết sâu về mã.

Làm thế nào để kiểm tra mã do AI tạo ra?

Luôn chạy các kiểm thử tự động và kiểm tra mã một cách thủ công để đảm bảo tính chính xác và hiệu suất.

Có cách nào để cải thiện độ tin cậy của kiểm thử không?

Sử dụng các ngày và giá trị tương đối thay vì giá trị tuyệt đối để đảm bảo rằng kiểm thử vẫn chính xác theo thời gian.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào