1 điểm bởi GN⁺ 2024-02-25 | 1 bình luận | Chia sẻ qua WhatsApp

Trình tạo kiểm thử mới dựa trên LLM của Meta cho thấy tương lai của phát triển phần mềm

  • Meta đã công bố bài báo "Automated Unit Test Improvement using Large Language Models at Meta".
  • Bài báo này cho thấy cách dùng AI để tăng tốc độ phát triển và giảm lỗi phần mềm.
  • Bằng cách tích hợp LLM vào quy trình làm việc của lập trình viên, hệ thống đề xuất các cải tiến phần mềm chính xác và đầy đủ nhằm cải thiện độ bao phủ mã hiện tại.

Các điểm chính

  • TestGen-LLM sử dụng cách tiếp cận 'Assured LLM-based Software Engineering' (Assured LLMSE).
  • Hệ thống dùng phương pháp tổ hợp, tạo ra các phương án cải tiến mã bằng nhiều LLM, prompt và siêu tham số, rồi chọn ra phương án tốt nhất.
  • TestGen-LLM được thiết kế đặc biệt để cải thiện các bài kiểm thử hiện có do con người viết.

Thống kê

  • Trong đánh giá sản phẩm Reels và Stories của Instagram, 75% các ca kiểm thử do TestGen-LLM tạo ra đã build thành công, 57% vượt qua một cách ổn định và 25% làm tăng độ bao phủ.
  • TestGen-LLM có thể cải thiện 10% tổng số lớp đã được áp dụng, và các lập trình viên đã chấp nhận 73% đề xuất cải tiến kiểm thử để đưa vào production.
  • Trong "test-a-thon" nơi các kỹ sư Meta tạo kiểm thử để tăng độ bao phủ kiểm thử của Instagram, số dòng mã trung vị được các bài kiểm thử TestGen-LLM bổ sung là 2,5.

Insight có thể áp dụng

  • Đây là một ví dụ tốt cho thấy có thể dùng LLM để cải thiện hiệu quả năng suất phát triển và độ tin cậy phần mềm.
  • Giá trị thực sự của LLM nằm ở khả năng tìm ra và bắt được các edge case ngoài dự kiến.
  • Để dùng LLM trong production, cần có orchestration, pipeline và xử lý phù hợp.

Cách TestGen-LLM hoạt động

  • TestGen-LLM áp dụng một loạt bộ lọc ngữ nghĩa lên các lời giải ứng viên được tạo bởi LLM nội bộ của Meta để chỉ giữ lại những bài kiểm thử có giá trị nhất.
  • Bộ lọc 1: khả năng build, bộ lọc 2: thực thi (kiểm thử có pass hay không), bộ lọc 3: tính thất thường, bộ lọc 4: cải thiện độ bao phủ.
  • Các bộ lọc xử lý này bảo đảm việc cải thiện test suite.

Kết luận

  • Bài báo này là một cách tốt để theo dõi tiến bộ của LLM trong không gian độ tin cậy phần mềm, nơi nhiều lập trình viên đã sử dụng LLM.
  • LLM sẽ ngày càng có khả năng tìm lỗi và kiểm thử trong các hệ thống phần mềm phức tạp hơn.

Ý kiến của GN⁺

  • Bài viết này mang đến góc nhìn thú vị về cách trí tuệ nhân tạo có thể ảnh hưởng đến tương lai của phát triển phần mềm.
  • Các công cụ như TestGen-LLM có thể hỗ trợ rất nhiều trong việc tự động hóa công việc của lập trình viên và nâng cao hiệu quả.
  • Sự phát triển của các công nghệ này đang hướng tới việc giảm độ phức tạp của phát triển phần mềm, nâng cao chất lượng và tiết kiệm thời gian cho lập trình viên.

1 bình luận

 
GN⁺ 2024-02-25
Ý kiến trên Hacker News
  • Có ý kiến cho rằng việc dùng LLM (mô hình ngôn ngữ lớn) để viết mã kiểm thử lại có xu hướng đi trước cả phần triển khai là điều thú vị. Vì kiểm thử đóng vai trò mô tả hệ thống nên hoạt động như thế nào, nên có góc nhìn cho rằng đây là phần con người phải định nghĩa. Tuy vậy, LLM có thể hữu ích trong việc chỉ ra những vùng chưa được đặc tả, và đề xuất unit test cho các vùng đó có thể là cách sử dụng LLM phù hợp.
  • Có ý kiến phê phán bài blog về việc trong các test case do TestGen-LLM của Meta tạo ra, phần lớn chỉ bao phủ thêm đúng 2,5 dòng mã, nhưng có một test case lại bao phủ tới 1326 dòng. Đây là trường hợp ngoại lệ, và bản thân bài báo cũng nêu rõ rằng đa số test case có độ bao phủ thấp hơn rất nhiều so với mức người ta kỳ vọng. Các tác giả bài báo gọi đây là một "jackpot", qua đó nhấn mạnh rằng kết quả như vậy không phải chuyện phổ biến.
  • Có ý kiến cho rằng viết được kiểm thử tốt là việc khó. Code coverage không nhất thiết lúc nào cũng tốt, và viết quá nhiều kiểm thử có thể làm chương trình trở nên cứng nhắc. Việc dùng LLM để tái tạo kiểm thử có thể trông như một bước tiến, nhưng rốt cuộc có thể chỉ là tạo ra một chương trình phát hiện thay đổi mà thôi.
  • Có chỉ ra rằng phần tóm tắt của bài báo về TestGen-LLM không khớp với nội dung thực tế. Tóm tắt của bài báo đề cập đến tỷ lệ thành công đối với test case, nhưng báo cáo thực tế lại nói về tỷ lệ thành công đối với test class, và đây là hai phát biểu rất khác nhau. Phần kết luận cũng diễn đạt sai sự khác biệt này.
  • Có sự cảm thông dành cho các lập trình viên tương lai sẽ phải bảo trì đoạn mã do LLM sinh ra. Có lo ngại rằng loại mã này sẽ rất khó quản lý.
  • Có lo ngại rằng mã kiểm thử do LLM sinh ra có thể tạo ra một môi trường bất lợi cho lập trình viên. Có thể sẽ xuất hiện tình huống phải liên tục xin phê duyệt cho các đoạn test do LLM tạo ra nhưng rất khó quản lý. Việc viết kiểm thử có thể được tăng tốc, nhưng bảo trì thì chưa chắc sẽ dễ hơn. Kiểm thử giúp xem xét thiết kế mã, và nếu việc viết kiểm thử không dễ thì có thể đó không phải là một thiết kế tốt. Kiểm thử cung cấp sự yên tâm tự động và giúp ngăn lỗi tiềm ẩn, nhưng hiệu quả trên chi phí đầu tư sẽ giảm dần khi độ bao phủ tăng cao. LLM chỉ có thể tiết kiệm thời gian khi lập trình viên giàu kinh nghiệm đã biết rõ cần kiểm thử điều gì.
  • Có người chia sẻ rằng họ đã dùng GPT-4 để tạo unit test cho một mô-đun TypeScript, và kết quả là tạo ra được các bài kiểm thử hoạt động thành công.
  • Có ý kiến đặt câu hỏi làm sao AI có thể biết nên viết loại kiểm thử nào. Cách tốt nhất để AI hỗ trợ phát triển phần mềm là cung cấp câu trả lời khi lập trình viên đặt câu hỏi về mã, đôi khi có thể kèm theo gợi ý mã, đôi khi không. AI nên giúp con người hiểu mã và hiểu cách cải thiện nó.
  • Có ý kiến cho rằng không thể có nhận định giá trị về mã AI nếu chưa có trải nghiệm thực tế với công cụ thật và chưa từng xem xét đầu ra trên một codebase mà mình hiểu rõ. Mã AI là một chủ đề rất mang tính chính trị và nhiều người có quan điểm mạnh mẽ về nó. Tuy nhiên, vẫn có mong muốn được thực sự thử nghiệm. Vì chi phí phát triển các công nghệ này rất cao, sẽ khó biện minh cho chi phí đó nếu công cụ AI không được cải thiện đáng kể. Dù vậy, vẫn lạc quan về những gì có thể đạt được trong tương lai.
  • Có cung cấp liên kết đến phần tóm tắt audiobook của bài báo.