paint-brush
Cách khởi động bộ kiểm tra tự động khi có 0 bài kiểm tra được viếttừ tác giả@zvone187
1,339 lượt đọc
1,339 lượt đọc

Cách khởi động bộ kiểm tra tự động khi có 0 bài kiểm tra được viết

từ tác giả Zvonimir10m2023/06/30
Read on Terminal Reader

dài quá đọc không nổi

Pythagora là một công cụ dành cho nhà phát triển nguồn mở sắp trở thành người bạn tốt nhất mới của bạn. Nó khai thác sức mạnh của AI để tạo các bài kiểm tra cho toàn bộ cơ sở mã của bạn, tất cả chỉ bằng một lệnh duy nhất và đạt mức độ bao phủ mã lên tới 80% hoặc 90%.
featured image - Cách khởi động bộ kiểm tra tự động khi có 0 bài kiểm tra được viết
Zvonimir HackerNoon profile picture
0-item
1-item
2-item

Bạn biết đấy, có một sự lo lắng nhất định len lỏi khi bạn nhìn vào một cơ sở mã mà bạn mới bắt đầu làm việc, chỉ để nhận ra đó là một vùng hoang dã rộng lớn chưa được khám phá. Không một bài kiểm tra nào được viết để đề phòng những điều không mong muốn.


Nó giống như đi trên dây trên một vực thẳm, biết rằng chỉ một bước đi sai lầm có thể khiến toàn bộ dự án của bạn rơi vào hỗn loạn.


Nếu bạn đã làm việc trên một cơ sở mã với 0 bài kiểm tra, thì bạn biết rằng việc nghĩ đến việc bao phủ toàn bộ cơ sở mã bằng các bài kiểm tra từ đầu có thể là một nhiệm vụ khó khăn khi chưa có bài kiểm tra nào hiện tại.


Quá trình này đòi hỏi một nỗ lực gần như phi thường: bạn phải tập trung vào mọi chức năng, phương pháp và thành phần, động não tất cả các trường hợp cạnh tiềm năng, cấu trúc mã bộ thử nghiệm và làm cho tất cả chạy trơn tru.


Và điều đó thậm chí còn chưa tính đến thời gian cần thiết để đạt được phạm vi phủ sóng có ý nghĩa. Chúng ta đang nói chuyện hàng tuần, có lẽ hàng tháng, trước khi bạn có thể ngồi lại và nói, “Vâng, chúng tôi đã đạt được mức độ phù hợp 80% hoặc 90%.


Đây là lý do tại sao tôi hào hứng chia sẻ những gì tôi đã làm trong vài tháng qua. Hành trình này đưa chúng ta đến một nơi mà lĩnh vực thử nghiệm tự động gặp gỡ thế giới kỳ diệu của AI. Gặp gỡ Pythagora, một công cụ dành cho nhà phát triển mã nguồn mở sắp trở thành người bạn thân mới của bạn.


Trong suốt bài đăng trên blog này, tôi sẽ chỉ cho bạn cách bắt đầu thử nghiệm tự động với Pythagora , công cụ khai thác sức mạnh của AI để tạo các thử nghiệm cho toàn bộ cơ sở mã của bạn, tất cả chỉ bằng một lệnh CLI và hy vọng cơ sở mã của bạn đạt 80% – 90 % bảo hiểm mã trong một ngày .

Tạo một bộ thử nghiệm từ đầu

Tất cả chúng ta đều biết câu nói, “Rome không được xây dựng trong một ngày.” Điều tương tự cũng có thể xảy ra đối với một bộ thử nghiệm toàn diện, hiệu quả. Đó là một quá trình tỉ mỉ, đòi hỏi khắt khe, nhưng một khi bạn đã đi qua con đường đầy đá này, cảm giác hoàn thành sẽ vô cùng sâu sắc.


Hãy cùng nhau thực hiện các bước cần thiết liên quan đến việc tạo bộ thử nghiệm từ đầu và đạt được mức độ bao phủ mã 80% – 90% đáng mơ ước.


Sẵn sàng để bắt đầu viết bài kiểm tra từ đầu

Đặt nền móng

Trong giai đoạn đầu tiên, bạn giống như một họa sĩ trước một bức tranh trống. Thế giới đầy những khả năng và bạn có thể tự do tạo ra một kiệt tác.


Kiệt tác của bạn, trong trường hợp này, liên quan đến việc chọn loại bài kiểm tra bạn muốn viết, tìm khung kiểm tra phù hợp để sử dụng và áp dụng các phương pháp hay nhất phù hợp với môi trường cụ thể của bạn.


Bạn đang xem xét kiểm tra đơn vị, kiểm tra tích hợp, kiểm tra E2E hay kết hợp cả ba?


Mặc dù thiết lập ban đầu này thường được xem là phần “dễ dàng”, nhưng nó hoàn toàn không phải là một cuộc dạo chơi trong công viên. Cần có thời gian, nghiên cứu và có lẽ một vài tách cà phê để đưa ra quyết định sáng suốt.


Nhận ra những gì tôi đã đưa mình vào

Đi sâu vào chi tiết

Khi bạn đã có cấu trúc cơ bản của mình, đã đến lúc xắn tay áo và tìm hiểu sâu về vấn đề cốt lõi. Bây giờ, bạn sẽ cần xem qua toàn bộ cơ sở mã của mình, từng chức năng một và viết bài kiểm tra cho từng chức năng. Nhiệm vụ của bạn ở đây là đảm bảo rằng các bài kiểm tra của bạn chạm vào tất cả các dòng mã trong từng hàm, phương thức hoặc thành phần.


Nhiệm vụ này giống như khám phá một mê cung phức tạp. Bạn cần đi qua mọi con đường, rẽ mọi góc và đảm bảo không có viên đá nào bị lật.


Viết các bài kiểm tra này là một bước chi tiết, tốn nhiều thời gian. Nó không chỉ là viết một vài dòng mã; đó là về việc hiểu mục đích của chức năng, đầu ra dự kiến của nó và cách nó tương tác trong ứng dụng của bạn.


Quyết định rằng đó chỉ là quá nhiều cho một người để làm

Khám phá các trường hợp Edge

Sau vòng kiểm tra đầu tiên, bạn có thể thở phào nhẹ nhõm. Giữ lại, mặc dù; vẫn còn một mảnh ghép quan trọng còn sót lại. Đã đến lúc đi sâu vào thế giới hoang dã, không thể đoán trước của các trường hợp cạnh .


Phần này có thể không làm tăng tỷ lệ bao phủ mã của bạn, nhưng nó rất quan trọng trong việc kiểm tra độ bền và khả năng phục hồi mã của bạn.


Cái gọi là thử nghiệm tiêu cực này giúp đánh giá cách mã của bạn phản ứng với các đầu vào khác nhau, đặc biệt là những đầu vào bên lề của hành vi dự kiến. Từ các đầu vào trống đến các giá trị vượt quá giới hạn của các loại dữ liệu của bạn, các thử nghiệm này được thiết kế để bắt chước hành vi của người dùng trong thế giới thực, nơi người dùng thường có sở trường đẩy mã của bạn theo những hướng mà bạn không bao giờ nghĩ là có thể.


Tạo một bộ thử nghiệm từ đầu là một nhiệm vụ khó khăn. Nhưng hãy yên tâm, mọi nỗ lực bạn bỏ ra đều là một bước hướng tới việc tạo ra một ứng dụng mạnh mẽ, đáng tin cậy và linh hoạt hơn.


Và hãy nhớ rằng, bạn không đơn độc. Tất cả chúng ta đều đã từng ở đó, và với một công cụ như Pythagora, cuộc hành trình không còn khó khăn như vẻ ngoài của nó.

Tạo bài kiểm tra với một lệnh CLI

Mặt khác, với Pythagora, những gì bạn có thể làm là nhập:


 npx pythagora --unit-tests --path ./path/to/repo


Pythagora sẽ điều hướng qua tất cả các tệp trong tất cả các thư mục, tạo ra các bài kiểm tra đơn vị cho từng chức năng mà nó gặp phải. Bây giờ, bạn có thể ngồi lại và thư giãn hoặc đi ăn trưa và để nó chạy một lúc cho đến khi nó hoàn thành các bài kiểm tra viết.


Không tệ

Ok, nhưng đợi đã, Pythagora là cái quái gì vậy??

Pythagore là gì?

Tôi luôn mơ về một thế giới nơi các bài kiểm tra tự động có thể được tạo ra cho tôi. Nhưng thực tế không đơn giản như vậy. Không ai biết mã của bạn giống như bạn, khiến người khác gặp khó khăn trong việc soạn thảo các bài kiểm tra tự động hiệu quả cho mã đó. Kết quả thường không như những gì bạn đạt được.


Tuy nhiên, mọi thứ đã thay đổi khi ChatGPT xuất hiện. Khi mày mò công nghệ này, tôi tự hỏi: “Liệu chúng ta có thể khai thác sức mạnh của ChatGPT để viết bài kiểm tra tự động không?”


Tò mò trỗi dậy, tôi tìm hiểu sâu hơn, thử nghiệm các khả năng của nó và những gì tôi khám phá ra đã khiến tôi kinh ngạc.


ChatGPT đã thể hiện khả năng hiểu mã đáng kinh ngạc, mang đến cái nhìn thoáng qua về một con đường mới đầy hứa hẹn trong thử nghiệm tự động.


Và do đó, một ý tưởng về Pythagora đã ra đời.


Pythagora là một công cụ dành cho nhà phát triển mã nguồn mở, được tạo ra với một sứ mệnh: làm cho thử nghiệm tự động trở nên tự động . Tôi hình dung ra một thế giới nơi các nhà phát triển, chẳng hạn như bạn và tôi, có thể tập trung vào việc tạo ra các tính năng mà không bị sa lầy vào việc viết thử nghiệm và bảo trì.


Để đạt được tầm nhìn này, nó đang sử dụng GPT-4.


Hiện tại, Pythagora có khả năng viết cả bài kiểm tra đơn vị và bài kiểm tra tích hợp. Tuy nhiên, với mục đích của bài đăng trên blog này, chúng tôi sẽ tập trung vào khả năng tạo các bài kiểm tra đơn vị.


Cài đặt

Để cài đặt Pythagora, bạn chỉ cần làm npm i pythagora . Đó là nó! Pythagora hiện đang phục vụ bạn.

Cấu hình

Sau khi cài đặt Pythagora, bạn sẽ cần định cấu hình nó bằng khóa API. Đây có thể là khóa API OpenAI hoặc khóa API Pythagora.


Để sử dụng khóa API OpenAI, bạn nên chạy lệnh sau:

 npx pythagora --config --openai-api-key <OPENAI_API_KEY>


Điều quan trọng cần lưu ý là nếu bạn chọn sử dụng khóa API OpenAI của riêng mình, thì bạn phải có quyền truy cập vào GPT-4.


Ngoài ra, bạn có thể lấy khóa API Pythagora từ liên kết này . Khi bạn đã có nó, hãy thiết lập nó bằng lệnh sau:

 npx pythagora --config --pythagora-api-key <PYTHAGORA_API_KEY>

lệnh

Nếu bạn muốn tạo các bài kiểm tra cho một tệp cụ thể, hãy sử dụng:

 npx pythagora --unit-tests --path ./path/to/file.js


Và nếu bạn có một chức năng cụ thể trong tâm trí, hãy sử dụng:

 npx pythagora --unit-tests --func <FUNCTION_NAME> 


Thời gian trôi đi của Pythagora

Pythagora hoạt động như thế nào?

Hãy vén bức màn và nhìn vào phòng máy. Điều gì khiến Pythagora đánh dấu?


Về cốt lõi, Pythagora hoạt động như một nhà thám hiểm dũng cảm, đi sâu vào mê cung phức tạp trong cơ sở mã của bạn. Đầu tiên, nó ánh xạ tất cả các chức năng được xuất từ các tệp của bạn để có thể gọi chúng từ trong các bài kiểm tra.


Rõ ràng, nếu một chức năng không được xuất, thì nó không thể được gọi từ bên ngoài tệp của nó. Nhân tiện, sau khi tạo các bài kiểm tra một vài lần, nó sẽ khiến bạn suy nghĩ về cơ sở mã của mình và cách bạn có thể cấu trúc nó tốt hơn để có thể tạo ra nhiều bài kiểm tra hơn.


Sau khi xác định được các chức năng đã xuất, Pythagora tiến thêm một bước vào lỗ thỏ: nó điều tra lần lượt từng chức năng, tìm kiếm bất kỳ chức năng bổ sung nào được gọi bên trong.


Hình dung nó như là nhà khảo cổ học của cơ sở mã của bạn, nhẹ nhàng phủi đi các lớp bụi để lộ các kết nối và phụ thuộc ẩn.


Nói cách khác, nó tìm kiếm tất cả các chức năng được gọi từ bên trong chức năng đang được kiểm tra để GPT có thể hiểu rõ hơn về chức năng mà các bài kiểm tra đang được viết để làm gì.


Được trang bị thông tin này, Pythagora chuẩn bị sử dụng sức mạnh của AI. Nó đóng gói mã đã thu thập và gửi nó tới API Pythagora. Tại đây, điều kỳ diệu thực sự đã xảy ra: một lời nhắc được tạo ra một cách tỉ mỉ và chuyển giao cho mô hình GPT.


Sự tương tác giữa mã, API và mô hình AI này dẫn đến việc tạo ra một bộ kiểm tra đơn vị toàn diện, sẵn sàng để triển khai và đưa vào hoạt động.


Cả máy chủ API và lời nhắc được sử dụng đều là nguồn mở. Chúng luôn sẵn sàng để bạn nghiên cứu, xem xét kỹ lưỡng và thậm chí đóng góp nếu bạn mong muốn. Bạn có thể tìm thấy máy chủ API Pythagora tại đây trong khi các lời nhắc và thành phần chính trong quá trình tạo các bài kiểm tra đơn vị được lưu trữ trong thư mục này .

Ôn tập các bài kiểm tra

Sau khi Pythagora viết tất cả các bài kiểm tra được yêu cầu, đã đến lúc bạn bắt tay vào và bắt đầu xem xét chúng. Đây là một bước quan trọng trong quy trình; điều quan trọng là phải biết những gì đã được tạo ra và đảm bảo mọi thứ phù hợp với mong đợi của bạn.


Hãy nhớ rằng, Pythagora tạo ra các bài kiểm tra dựa trên Jest. Vì vậy, để chạy tất cả các bài kiểm tra đã tạo, bạn chỉ cần chạy:

 npx jest ./pythagora_tests/


Bây giờ, một lời cảnh báo: Pythagora vẫn đang trong giai đoạn đầu. Như với tất cả các dự án trẻ, chắc chắn sẽ có một số trục trặc trong quá trình thực hiện. Vì vậy, bạn có thể gặp phải các bài kiểm tra không thành công trong lần chạy đầu tiên của mình.


Đừng nản lòng; coi đây là một phần của cuộc hành trình. Với sự xem xét của bạn và những cải tiến liên tục đối với Pythagora, những thử nghiệm thất bại này sẽ sớm trở thành dĩ vãng.


Và đừng quên mặt tươi sáng. Ngay cả với những vấn đề mới mọc ở giai đoạn đầu này, Pythagora có thể đưa bạn đến một nơi mà cơ sở mã của bạn có phạm vi kiểm tra đáng kể, có khả năng lên tới 90% .


Cam kết kiểm tra

Quá trình xem xét, đặc biệt đối với các cơ sở mã lớn hơn, có thể mất vài giờ. Hãy nhớ rằng, bạn không chỉ nhìn vào những bài kiểm tra đã vượt qua mà còn cả những bài kiểm tra không đạt. Điều quan trọng là phải hiểu mọi thử nghiệm mà bạn cam kết với kho lưu trữ của mình. Rốt cuộc, kiến thức là sức mạnh.


Sau khi xem xét kỹ lưỡng và các chỉnh sửa tiềm năng, bạn đã sẵn sàng thực hiện bước cuối cùng: cam kết các thử nghiệm đã tạo vào kho lưu trữ của bạn. Với bước cuối cùng này, bạn đã tích hợp thành công bộ thử nghiệm đơn vị mạnh mẽ vào dự án của mình.


Và tất cả những điều này đạt được nhờ sức mạnh của Pythagora và một vài dòng lệnh trong thiết bị đầu cuối của bạn.

Ví dụ kiểm tra trên Lodash Repo

Được rồi, bây giờ tôi đã thu hút được sự quan tâm của bạn, hãy đi sâu vào nội dung thực tế – những ví dụ hữu hình về hoạt động của Pythagora. Với mục đích trình diễn của chúng tôi, chúng tôi đã chọn một dự án mã nguồn mở nổi tiếng, Lodash .


Chỉ cần chạy một lệnh Pythagora là đủ để tạo ra 1604 thử nghiệm khổng lồ, đạt được mức độ bao phủ mã ấn tượng 91% của toàn bộ kho lưu trữ Lodash. Nhưng ấn tượng không chỉ ở số lượng bài kiểm tra.


Trong số này, 13 bài kiểm tra đã phát hiện ra các lỗi thực tế trong nhánh chính của Lodash.


Nếu bạn tò mò muốn tự kiểm tra những thứ này, thì chúng tôi đã phân nhánh kho lưu trữ Lodash và thêm các bài kiểm tra do Pythagora tạo ra. Hãy khám phá chúng ở đây .


Bây giờ, chúng ta hãy xem xét kỹ hơn một trong những bài kiểm tra đã phát hiện ra một lỗi lén lút:

 test(`size({ 'a': 1, 'b': 2, 'length': 9 })`, () => { expect(size({ 'a': 1, 'b': 2, 'length': 9 })).toBe(3); // test returns 9 });


Trong thử nghiệm này, hàm size của Lodash được cho là trả về kích thước của một đối tượng JSON. Tuy nhiên, GPT đã thêm một khóa có tên là length , một mẹo nhỏ để xem liệu Lodash có thể trả về giá trị của khóa đó thay vì kích thước thực của đối tượng hay không.


Có vẻ như Lodash đã mắc phải mưu mẹo này, vì thử nghiệm đã thất bại khi trả về '9' thay vì '3' như mong đợi.


Đây là một ví dụ tuyệt vời về cách Pythagora, được hỗ trợ bởi GPT, vượt trội trong việc phát hiện ra các trường hợp phức tạp có thể dễ dàng lọt vào tầm ngắm.


Bằng cách tự động tạo một số lượng lớn các trường hợp thử nghiệm phức tạp như vậy, Pythagora có thể là người bạn đồng hành đáng tin cậy của bạn, giúp bạn khám phá và sửa các lỗi mà bạn có thể chưa bao giờ lường trước được.

Phần kết luận

Vâng, chúng tôi có nó, các nhà phát triển đồng nghiệp. Hôm nay, chúng tôi đã bắt đầu một hành trình khá dài, đi qua các lãnh thổ chưa được khám phá của một cơ sở mã lớn không có thử nghiệm và quay lại với một bộ thử nghiệm tự động được tạo bởi công cụ hỗ trợ AI đáng tin cậy của chúng tôi, Pythagora.


Bạn đã học được rằng ngay cả khi đối mặt với một cơ sở mã khó kiểm tra, khó khăn, bạn không cần phải tuyệt vọng. Nhiệm vụ tạo ra một bộ kiểm tra đáng kể không còn là một nhiệm vụ khó khăn nữa.


Chúng ta đã chứng kiến sự kỳ diệu của Pythagora khi nó kiểm tra một thư viện mã nguồn mở nổi tiếng, Lodash, và tạo ra 1604 bài kiểm tra bao trùm 91% cơ sở mã .


Chúng ta đã thấy Pythagora không chỉ quan tâm đến số lượng mà còn cả chất lượng của các bài kiểm tra. Nó không chỉ tạo ra các bài kiểm tra vì lợi ích của nó, mà còn tìm ra các trường hợp khó khăn và lỗi một cách thông minh có thể đã lọt qua mà không được chú ý.


Pythagora đã vạch mặt 13 lỗi thực sự trong nhánh chính của Lodash – một minh chứng cho sức mạnh của AI trong kiểm thử phần mềm.


Bây giờ, bạn đã hiểu rõ hơn về lý do tại sao các công cụ kiểm tra do AI hỗ trợ như Pythagora không chỉ là một thứ xa xỉ mà còn là một điều cần thiết trong bối cảnh phát triển với nhịp độ nhanh ngày nay.


Vì vậy, cho dù bạn đang xử lý một dự án hiện có mà không có bài kiểm tra nào hay đang bắt đầu một dự án mới và đang tìm cách thiết lập một khuôn khổ kiểm tra vững chắc ngay từ đầu, hãy nhớ rằng bạn không đơn độc.


Pythagora ở đây để nắm quyền kiểm soát, giúp bạn tạo các bài kiểm tra có ý nghĩa một cách dễ dàng và giúp bạn tiết kiệm thời gian quý báu để có thể sử dụng tốt hơn cho việc phát triển các tính năng tuyệt vời.


Cảm ơn bạn đã tham gia cùng tôi trong cuộc hành trình này và tôi rất nóng lòng muốn xem cách bạn sử dụng Pythagora trong các dự án của mình. Chúc mừng mã hóa!


PS Nếu bạn thấy bài đăng này hữu ích, nó sẽ có ý nghĩa rất lớn đối với tôi nếu bạn gắn dấu sao cho repo Pythagora Github và nếu bạn dùng thử Pythagora, vui lòng cho chúng tôi biết nó diễn ra như thế nào [email protected]

L O A D I N G
. . . comments & more!

About Author

Zvonimir HackerNoon profile picture
Zvonimir@zvone187
I founded AWW which had 1.5M MAU and was acquired by Miro in 2021. Now I'm working on making automated tests autonomous.

chuyên mục

BÀI VIẾT NÀY CŨNG CÓ MẶT TẠI...