Get in touch
or send us a question?
CONTACT

Viết Unit Test dễ dàng và hiệu quả với Copilot

1. Giới thiệu

Nhân dịp tham gia sự kiện khai bút đầu xuân do Viblo tổ chức, mình chúc mọi người năm mới thật vui vẻ và thành công nhé!

Trong quy trình phát triển phần mềm, việc viết Unit Test là một phần không thể thiếu để đảm bảo tính ổn định và chất lượng của ứng dụng. Tuy nhiên, quá trình này thường đòi hỏi sự đầu tư lớn về thời gian và kiến thức kỹ thuật. May mắn thay, với sự xuất hiện của Copilot – một công cụ hỗ trợ phát triển dựa trên trí tuệ nhân tạo, việc viết Unit Test đã trở nên dễ dàng và thú vị hơn bao giờ hết.

Trong bài viết này, chúng ta sẽ khám phá cách sử dụng Copilot để viết Unit Test một cách hiệu quả và ứng dụng cụ thể trong dự án Laravel nhé.

2. Sơ lược về Unit Test

a. Ý nghĩa của Unit Test

  • Kiểm tra tính đúng đắn: Unit Test kiểm tra từng phần nhỏ (unit) của mã nguồn để đảm bảo chúng hoạt động như mong đợi.
  • Phát hiện lỗi sớm: Bằng cách kiểm tra từng phần riêng lẻ của mã, Unit Test giúp phát hiện và sửa chữa lỗi ngay khi chúng xuất hiện.

b. Lợi ích của việc sử dụng Unit Test

  • Tăng tính ổn định: Nhờ Unit Test, chúng ta có thể tự tin hơn khi thực hiện các thay đổi trong mã, bởi vì chúng ta biết rằng các thay đổi này không ảnh hưởng đến các phần khác của ứng dụng.
  • Hỗ trợ tái sử dụng mã: Việc viết các đoạn mã testable thúc đẩy việc thiết kế mã linh hoạt và có thể tái sử dụng.
  • Tăng hiệu suất phát triển: Việc tự động hóa việc kiểm tra giúp giảm thời gian kiểm tra thủ công và tăng hiệu suất phát triển.

c. Quy trình viết và chạy Unit Test

  • Viết test case: Xác định các trường hợp kiểm thử và viết các test case tương ứng.
  • Thực thi test case: Chạy test case để kiểm tra tính đúng đắn của mã nguồn.
  • Xác nhận kết quả: Kiểm tra kết quả của các test case và sửa chữa mã nếu cần.

d. Công cụ Unit Test trong Laravel: PHPUnit Laravel sử dụng PHPUnit làm framework kiểm thử để viết và chạy các Unit Test. PHPUnit cung cấp một loạt các assertion và phương thức để kiểm tra kết quả của các đoạn mã.

e. Tích hợp Unit Test vào quy trình phát triển

Unit Test thường được tích hợp vào quy trình phát triển Agile và Continuous Integration (CI), giúp đảm bảo rằng mã nguồn luôn ổn định và đáng tin cậy.

Thông qua sơ lược này, chúng ta đã hiểu được ý nghĩa, lợi ích và quy trình cơ bản của Unit Test trong phát triển phần mềm.

3. Giới thiệu về Copilot

GitHub Copilot là một trợ lý lập trình dựa trên trí tuệ nhân tạo, được phát triển bởi Microsoft dựa trên mô hình GPT-4 của OpenAI và được thiết kế để hỗ trợ trong nhiều nhiệm vụ liên quan đến phát triển phần mềm. Github Copilot hiện tại đang yêu cầu mức phí khá là hợp lý so với giá trị mà nó có thể đem lại cho chúng ta( khoảng 10$/tháng hoặc 100$/năm ở thời điểm viết bài) 😃)))

Một số tính năng quan trọng của Copilot:

a. Hỗ trợ việc code

Copilot có khả năng đề xuất các đoạn code dựa trên ngữ cảnh và yêu cầu của người dùng. Điều này giúp giảm thời gian và công sức cần thiết để viết code mới, đồng thời cung cấp ý tưởng và giải pháp cho các vấn đề lập trình.

b. Đa dạng ngôn ngữ

Copilot có khả năng hỗ trợ nhiều ngôn ngữ lập trình, từ các ngôn ngữ thông dụng như Python, JavaScript, Java,… đến các ngôn ngữ mới lạ như Rust và Go. Điều này giúp cho chúng ta có thể sử dụng Copilot trong nhiều dự án khác nhau.

c. Tích hợp với các công cụ phát triển Copilot tích hợp tốt với các công cụ phát triển phổ biến như Visual Studio Code, GitHub Desktop và các trình biên tập mã nguồn khác. Điều này giúp cho việc sử dụng Copilot trở nên thuận tiện và linh hoạt hơn.

d. Học từ cộng đồng

Copilot học từ hàng triệu dòng mã nguồn mở trên GitHub và sử dụng kiến thức này để đề xuất các giải pháp cho các vấn đề lập trình. Điều này giúp cho Copilot có khả năng tạo ra các đoạn mã chất lượng và phù hợp với ngữ cảnh.

e. Tính năng Generate Test Một trong những tính năng nổi bật của Copilot là khả năng tự động tạo ra các đoạn mã Unit Test. Điều này giúp giảm thời gian và công sức cần thiết để viết và duy trì các bộ kiểm thử, đồng thời đảm bảo tính đúng đắn và hoạt động của mã nguồn.

4. Cách sử dụng Copilot để viết Unit Test trong dự án Laravel trên VSCode

Copilot hỗ trợ khá là mạnh về khả năng viết Unit test và gần như có thể support chúng ta viết mọi thành phần của dự án (Controller, Model, View, Jobs, Repository,…)

Ở bài viết này, mình sẽ demo với VS Code, với các IDE khác thì các bạn có thể research cách cài đặt và ứng dụng tương ứng với IDE đó nhé (nhìn chung thì nó cũng khá giống nhau thuii).

Trước tiên, chúng ta cần phải cài đặt extension Github Copilot trên VSCode với các bước như sau:

  • Bước 1: Vào extension, tìm Github Copilot và ấn Install
  • Bước 2: Nếu trước đó bạn chưa ủy quyền Visual Studio Code trong tài khoản GitHub của bạn,bạn sẽ được yêu cầu đăng nhập vào GitHub trong Visual Studio Code. Và hãy đảm bảo tài khoàn của bạn đã được active Copilot nhé.
    • Nếu trước đó bạn đã ủy quyền Visual Studio Code cho tài khoản của mình trên GitHub, GitHub Copilot sẽ được tự động ủy quyền.
    • Nếu bạn không nhận được yêu cầu ủy quyền, hãy nhấp vào biểu tượng chuông trong thanh bảng dưới cùng của cửa sổ Visual Studio Code.
  • Bước 3: Kiểm tra xem Copilot đã hoạt động được chưa bằng cách sử dụng các chức năng cở bản của nó như Chat, hoặc tự động gợi ý code chẳng hạn.image.png

Sau khi đã hoàn thành việc cài đặt thì mình cùng tới với chức năng chính đối với bài viết này thôi. Hiện tại, mình thấy có một số cách để Copilot có thể generate ra Unit Test như sau:

  • Tạo file test và sử dụng promt hoặc viết test để Copilot suggestion code
image.png

  • Sử dụng Chat của copilot và yêu cầu generate test cho đoạn code đang được selectionimage.png
  • Select đoạn code muốn generate và click chuột phải chọn Copilot > Generate Testsimage.png
  • Dùng phím tắt Ctrl + Shift + P (Cmd + Shift+P MacOS) > search Github Copilot: Generate Tests rồi Enter
image.png

Việc của chúng ta chỉ là review code, chọn accept nếu hài lòng. Nếu sai trong trường hợp 2 và 3 có thể bổ sung thêm promp để Copilot có thể sửa lại cho đúng hoặc có thể Reject.

Tất nhiên, Copilot không thể luôn luôn đúng 100% được mà còn phụ thuộc vào việc nó hiểu bối cảnh của dự án đó ra sao. Vì vậy hay review thật kỹ trước khi accept nhé =)

5. Tổng kết

Viết Unit Test cho dự án Laravel bằng Copilot không chỉ là một cách để tăng sự chính xác và độ tin cậy của mã nguồn, mà còn để tăng năng suất và tiết kiệm thời gian cho chúng ta. Bằng cách sử dụng Copilot, chúng ta có thể tạo ra các test case một cách tự động và nhanh chóng, từ việc tạo ra các test function cho các models, controllers đến việc viết các assertions để kiểm tra tính đúng đắn của mã.

Tuy nhiên, việc sử dụng Copilot cần được kết hợp với kiến thức và hiểu biết vững về Laravel hay bất kể ngôn ngữ hay framework nào khác để đảm bảo tính chính xác và an toàn của mã nguồn. Ngoài ra, việc kiểm tra và điều chỉnh các test case là quan trọng để đảm bảo rằng chúng phản ánh đúng các trường hợp sử dụng thực tế của ứng dụng.

Cuối cùng, việc sử dụng Copilot không chỉ là một công cụ hỗ trợ, mà còn là một cách để khám phá và học hỏi từ các mẫu mã nguồn mở hàng triệu dòng trên GitHub, từ đó nâng cao kỹ năng lập trình và phát triển phần mềm của chúng ta.

Nguon: viblo