0
0
Lập trình
Admin Team
Admin Teamtechmely

Chia sẻ lỗi lập trình do AI: Thách thức mới cho lập trình viên

Đăng vào 2 tuần trước

• 5 phút đọc

Giới thiệu

Vibe coding đang ngày càng trở thành một phần không thể thiếu trong quy trình phát triển phần mềm. Nhóm PVS-Studio coi đây là một thách thức mới cho các công cụ phân tích mã tĩnh: tìm kiếm lỗi trong mã do việc sử dụng các trợ lý AI và các công cụ tương tự. Trong bài viết này, chúng ta sẽ cùng khám phá những lỗi có thể xảy ra khi sử dụng mã do AI tạo ra, cũng như cách mà các lập trình viên có thể nhận diện và khắc phục những lỗi này.

Hai luồng tư tưởng về vibe coding

Có hai trường phái tư tưởng khác nhau về vibe coding:

  • Trường phái thứ nhất: Các giám đốc, HR và "nhà quản lý hiệu suất" đang lập kế hoạch cho việc cắt giảm nhân sự trong bộ phận IT. Họ tin rằng ChatGPT sẽ sớm viết tất cả mã và lập trình viên sẽ không còn cần thiết.
  • Trường phái thứ hai: Các lập trình viên kỳ cựu lại có cái nhìn hài hước hơn và không thể diễn đạt thành lời.

Có phải AI đang tạo ra lỗi trong mã?

Khi bạn yêu cầu AI tạo ra một hàm sắp xếp, nó có thể thực hiện mà không gặp lỗi. Tuy nhiên, phát triển dự án không chỉ đơn giản là viết những hàm riêng lẻ. Khi dự án phát triển, mật độ lỗi gia tăng do sự tương tác phức tạp giữa các thực thể.

Ví dụ thực tế: Lỗi từ AI

Một đồng nghiệp của tôi đã gửi cho tôi một báo cáo lỗi:

csharp Copy
public class Warning
{
  public string ErrorCode { get; set; }
  public string Message { get; set; }
  public uint Level { get; set; }
  public List<Position> Trace { get; set; }
}

public class Position
{
  public int Line { get; set; }
  public string FilePath { get; set; }
}

Dưới đây là một đoạn mã mà AI đã triển khai:

csharp Copy
public bool Equals(Warning other)
{
  if (other is null) return false;
  if (ReferenceEquals(this, other)) return true;

  return ErrorCode == other.ErrorCode &&
         Message == other.Message &&
         Level == other.Level &&
         (Trace == other.Trace || 
          (Trace != null && other.Trace != null &&
           Trace.SequenceEqual(other.Trace)));
}

public override int GetHashCode()
{
  unchecked
  {
    int hash = 17;
    hash = hash * 23 + (ErrorCode?.GetHashCode() ?? 0);
    hash = hash * 23 + (Message?.GetHashCode() ?? 0);
    hash = hash * 23 + Level.GetHashCode();
    hash = hash * 23 + (Trace?.GetHashCode() ?? 0); 
    return hash;
  }
}

Phân tích lỗi

Có một lỗi trong dòng mã của phương thức GetHashCode:

csharp Copy
hash = hash * 23 + (Trace?.GetHashCode() ?? 0);

Trace là một danh sách (kiểu tham chiếu), do đó mã băm được tính từ địa chỉ bộ nhớ, mà địa chỉ này khác nhau cho tất cả các đối tượng. Điều này có nghĩa là các đối tượng sẽ không bao giờ bằng nhau, ngay cả khi chúng có cùng giá trị.

Lỗi này không phải là bất thường; một lập trình viên cũng có thể viết nó. Hiện tại, PVS-Studio chưa có quy tắc chẩn đoán cho các trường hợp như vậy, nhưng chúng tôi đã tạo một TODO để triển khai chúng.

Tại sao nên sử dụng công cụ phân tích tĩnh?

Nhu cầu về các công cụ phân tích tĩnh có thể sẽ tăng lên, vì chúng cung cấp một phương pháp tiếp cận có tính xác định cao trong việc đảm bảo chất lượng phần mềm. Việc cho mã do một hệ thống AI tạo ra để một AI khác xem xét là một ý tưởng thú vị, nhưng có hai vấn đề lớn:

  • Vấn đề đầu tiên: Việc tạo ra các đoạn mã là một chuyện, nhưng gửi mã dự án của bạn cho một nguồn bên thứ ba để xem xét lại là một chuyện hoàn toàn khác. Nhiều công ty rất nhạy cảm với việc giữ bí mật mã nguồn.
  • Vấn đề thứ hai: Không phải ai cũng có thể chấp nhận tính vô trách nhiệm hoàn toàn.

PVS-Studio có sử dụng thuật toán AI để phát hiện lỗi không?

Hiện tại, PVS-Studio chưa sử dụng bất kỳ thuật toán AI nào để phát hiện lỗi, nhưng chúng tôi đang xem xét việc thử nghiệm trong lĩnh vực này. Chúng tôi không có ý định sử dụng AI để viết lại bất kỳ thứ gì, mà ngược lại, chúng tôi nhận thấy giá trị của các thuật toán cổ điển trong lĩnh vực vibe coding.

Chia sẻ lỗi mà bạn gặp phải trong vibe coding

Chúng tôi mời bạn chia sẻ những ví dụ về lỗi đã xảy ra trong quá trình vibe coding hoặc khi sử dụng trợ lý AI. Những lỗi xuất hiện trong quá trình tinh chỉnh mã thủ công cũng rất thú vị. Các trường hợp mà mã hoạt động, nhưng có thể dễ dàng bị hỏng do thay đổi cũng rất đáng lưu ý.

Kết luận

Chúng tôi rất mong nhận được ý kiến và phản hồi từ bạn đọc về những lỗi gặp phải. Việc chia sẻ sẽ mang lại lợi ích cho cả lập trình viên và nhóm phát triển công cụ phân tích mã. Hãy cùng nhau nâng cao chất lượng phần mềm và giảm thiểu lỗi!

Câu hỏi thường gặp (FAQ)

  1. Vibe coding là gì?
    Vibe coding là việc sử dụng mã do AI tạo ra mà không hiểu rõ về nó, điều này có thể dẫn đến những lỗi nghiêm trọng.
  2. Làm thế nào để phát hiện lỗi trong mã do AI tạo ra?
    Sử dụng các công cụ phân tích tĩnh và kiểm tra mã bằng tay là những cách hiệu quả để phát hiện lỗi.
  3. Tại sao không nên hoàn toàn tin tưởng vào AI trong lập trình?
    AI có thể tạo ra mã với lỗi, và lập trình viên cần có khả năng đánh giá và sửa chữa mã đó.

Chúng tôi rất trân trọng mọi ý kiến đóng góp và mong nhận được phản hồi từ bạn!

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