T

property-based-testing

bởi trailofbits

Hướng dẫn skill property-based-testing để viết, review và cải thiện PBT trên nhiều ngôn ngữ và smart contract. Dùng hướng dẫn property-based-testing này để nhận diện các trường hợp roundtrip, idempotence, invariant, parser, validator và normalization; chọn generator; và quyết định khi nào property-based-testing mạnh hơn test theo ví dụ.

Stars5k
Yêu thích0
Bình luận0
Đã thêm4 thg 5, 2026
Danh mụcSkill Testing
Lệnh cài đặt
npx skills add trailofbits/skills --skill property-based-testing
Điểm tuyển chọn

Skill này đạt 83/100, nghĩa là đây là một mục khá tốt trong directory: nó cung cấp đủ quy tắc nhận diện và hướng dẫn quy trình để hữu ích hơn nhiều so với một prompt chung chung, dù người dùng vẫn nên kỳ vọng phải tự cân nhắc thêm ở các trường hợp biên và chi tiết triển khai theo từng ngôn ngữ.

83/100
Điểm mạnh
  • Có các tín hiệu phát hiện tự động rõ ràng cho những mẫu PBT phổ biến như cặp encode/decode, parser, normalizer, validator, hàm thuần và smart contract.
  • Nội dung vận hành mạnh xuyên suốt vòng đời: thiết kế property, tạo test, review lỗi và tái cấu trúc để dễ kiểm thử hơn.
  • Giá trị quyết định cài đặt tốt nhờ phạm vi hỗ trợ ngôn ngữ/công cụ rộng cùng bảy file tham chiếu giúp đào sâu quy trình mà không có nội dung placeholder.
Điểm cần lưu ý
  • Không có lệnh cài đặt trong SKILL.md, nên việc áp dụng đòi hỏi người dùng phải tự tích hợp skill vào môi trường hoặc suy ra cách thiết lập.
  • Có tín hiệu experimental/test và tài liệu thiên về tham chiếu, nên người dùng có thể cần tự diễn giải hướng dẫn thay vì làm theo một quy trình chạy được từ đầu đến cuối.
Tổng quan

Tổng quan về skill property-based-testing

Skill này dùng để làm gì

Skill property-based-testing giúp bạn viết, review và cải thiện các bài test dựa trên thuộc tính khi test theo ví dụ không còn đủ để tạo niềm tin. Skill này đặc biệt hữu ích cho property-based-testing skill khi bạn cần kiểm tra roundtrip, invariant, parser, validator, bộ chuẩn hoá, logic sắp xếp, hoặc các quy tắc trạng thái của smart contract.

Ai hưởng lợi nhiều nhất

Phù hợp nhất với: kỹ sư làm việc trong các ngôn ngữ có thư viện PBT trưởng thành, reviewer đang kiểm tra những bộ test yếu, và developer thiết kế tính năng nên được đặc tả trước dưới dạng thuộc tính. Nếu bạn đang cân nhắc có nên cài property-based-testing hay không, câu hỏi mấu chốt là: code của bạn có cấu trúc có thể tái sử dụng, phép biến đổi có thể đảo ngược, hay các quy tắc cần đúng trên nhiều đầu vào khác nhau không.

Điểm khác biệt

Khác với một prompt test tổng quát, skill này được tổ chức quanh việc phát hiện vấn đề, chọn thuộc tính, thiết kế strategy, và diễn giải lỗi. Điều đó quan trọng vì rào cản lớn nhất khi áp dụng không phải cú pháp; mà là chọn được một thuộc tính hữu ích và sinh input hợp lệ mà không lọc quá tay. Skill này cũng đủ rộng để dùng cho property-based-testing for Skill Testing trên nhiều hệ sinh thái, bao gồm cả smart contract.

Cách dùng skill property-based-testing

Cài đặt và nạp đúng ngữ cảnh

Cài bằng npx skills add trailofbits/skills --skill property-based-testing, rồi mở SKILL.md trước tiên. Để quyết định nhanh hơn, hãy đọc thêm README.md và các file tham chiếu liên quan nhất tới nhiệm vụ của bạn: references/generating.md, references/reviewing.md, và references/interpreting-failures.md.

Biến ý tưởng sơ bộ thành prompt dùng được

Một prompt property-based-testing usage tốt nên nêu rõ đích đến, thao tác, và cam kết bạn quan tâm. Đầu vào tốt hơn: “Thêm PBT cho decode(encode(x)) trên serializer này, với đầu vào chỉ nằm trong giới hạn UTF-8 hợp lệ và kích thước cho phép.” Đầu vào kém hơn: “Viết property tests cho module này.” Câu đầu cho skill một thuộc tính thật, ranh giới miền hợp lệ rõ ràng, và hình dạng đầu ra cụ thể.

Cần cung cấp gì trong yêu cầu của bạn

Hãy bao gồm ngôn ngữ, test library, chữ ký hàm, các invariant đã biết, hành vi khi input không hợp lệ, và mọi ví dụ hoặc spec liên quan. Nếu bạn đang dùng property-based-testing guide để review, hãy dán test hiện tại vào và nói rõ bạn muốn tìm bug, refactor, hay audit chất lượng. Nếu code có luồng parsing hoặc validation, hãy nói rõ điều gì phải xảy ra với dữ liệu lỗi; điều đó giúp tránh các test mơ hồ và tránh lạm dụng assume().

Quy trình khuyến nghị

Hãy bắt đầu bằng cách ánh xạ code sang một loại thuộc tính: roundtrip, idempotence, invariant, ordering, hoặc oracle. Sau đó thiết kế strategy để sinh input hợp lệ ngay từ đầu, thay vì lọc mạnh tay. Cuối cùng, hãy diễn giải các failure theo references/interpreting-failures.md trước khi xem chúng là bug. Với smart contract, hãy kiểm tra các ghi chú riêng cho EVM và giữ mô hình trạng thái thật rõ ràng.

Câu hỏi thường gặp về skill property-based-testing

property-based-testing có thay thế test thông thường không?

Không. Skill này hữu ích nhất ở nơi các ví dụ thông thường bỏ sót edge case, hoặc khi một thuộc tính có thể bao phủ nhiều hành vi. Hãy giữ example tests cho các regression hẹp và dùng property-based-testing khi một quy tắc tổng quát rõ ràng hơn nhiều case rời rạc.

Guide property-based-testing này có thân thiện với người mới không?

Có, nếu hành vi mục tiêu đơn giản và thuộc tính hiển nhiên, chẳng hạn như kiểm tra roundtrip hoặc idempotence. Nó khó hơn khi spec còn mơ hồ, vì PBT cần một hợp đồng rõ ràng trước khi generator trở nên hữu ích.

Khi nào tôi không nên dùng skill này?

Đừng ưu tiên nó trước tiên khi hành vi chủ yếu do UI điều khiển, quá ngẫu nhiên, hoặc không thể diễn đạt thành một thuộc tính ổn định. Nó cũng không phù hợp lắm khi oracle duy nhất là một chuỗi tái triển khai dài chỉ lặp lại code production.

Nó có phù hợp với ngôn ngữ hoặc framework của tôi không?

Skill này hỗ trợ nhiều hệ sinh thái, bao gồm Hypothesis, fast-check, proptest, jqwik, ScalaCheck, FsCheck, StreamData, QuickCheck, và các smart contract fuzzer như Echidna và Medusa. Nếu stack của bạn nằm ngoài danh sách này, phương pháp nền tảng vẫn hữu ích, nhưng bạn có thể phải điều chỉnh cú pháp test và API strategy.

Cách cải thiện skill property-based-testing

Đưa ra thuộc tính mạnh nhất, không chỉ nêu đích đến

Kết quả tốt nhất đến từ việc mô tả đúng cam kết cần kiểm tra. Ví dụ: “normalize(normalize(x)) == normalize(x) với chuỗi Unicode” tốt hơn nhiều so với “test normalize.” Skill property-based-testing làm tốt hơn khi thuộc tính cụ thể, có thể bị phản ví dụ hóa, và gắn với một hợp đồng đã biết.

Chia sẻ các ràng buộc định hình generator

Các lỗi thường gặp là input không hợp lệ, strategy bị lọc quá nhiều, và thuộc tính quá yếu nên không bắt được bug thật. Hãy nâng chất lượng đầu ra bằng cách nêu rõ khoảng giá trị chấp nhận được, quy tắc định dạng, giới hạn kích thước, và việc có kỳ vọng ngoại lệ hay không. Nếu thuộc tính chỉ nên đúng sau khi validation, hãy nói thẳng điều đó.

Lặp lại từ các ví dụ thất bại

Khi test đầu tiên fail, đừng chỉ yêu cầu sửa. Hãy cung cấp counterexample đã được thu gọn, quy tắc dự định, và mọi tài liệu mô tả hành vi ở edge case. Như vậy skill có thể tách bug thật khỏi thuộc tính sai, đồng thời tạo ra test vòng hai hoặc gợi ý refactor mạnh hơn.

Đánh giá & nhận xét

Chưa có đánh giá nào
Chia sẻ nhận xét của bạn
Đăng nhập để chấm điểm và để lại nhận xét cho skill này.
G
0/10000
Nhận xét mới nhất
Đang lưu...