property-based-testing
por trailofbitsGuia da skill property-based-testing para escrever, revisar e melhorar PBT em diferentes linguagens e smart contracts. Use este guia de property-based-testing para identificar casos de roundtrip, idempotência, invariantes, parser, validador e normalização, escolher geradores e decidir quando property-based-testing é mais forte do que testes baseados em exemplos.
Esta skill recebe 83/100, o que indica uma listagem sólida no diretório: ela oferece regras de acionamento e orientação de fluxo suficientes para ser significativamente mais útil do que um prompt genérico, embora o usuário ainda deva esperar algum julgamento manual em casos de borda e detalhes específicos de implementação por linguagem.
- Gatilhos explícitos de detecção automática para padrões comuns de PBT, como pares encode/decode, parsers, normalizadores, validadores, funções puras e smart contracts.
- Conteúdo operacional forte ao longo de todo o ciclo: definição de propriedades, geração de testes, revisão de falhas e refatoração para testabilidade.
- Bom valor para decisão de instalação graças à ampla cobertura de linguagens e ferramentas, além de sete arquivos de referência que aprofundam o fluxo sem conteúdo placeholder.
- Não há comando de instalação em SKILL.md, então a adoção exige que o usuário integre a skill manualmente ao ambiente ou deduza a configuração.
- O sinal de experimental/teste é explícito e parte da documentação é mais voltada a referência do que a execução, então o usuário pode precisar interpretar as orientações em vez de seguir um único fluxo executável de ponta a ponta.
Visão geral da skill property-based-testing
Para que serve esta skill
A skill property-based-testing ajuda você a escrever, revisar e melhorar testes baseados em propriedades quando os testes por exemplo deixam de gerar confiança suficiente. Ela é especialmente útil para a skill property-based-testing quando você precisa validar roundtrips, invariantes, parsers, validadores, normalizadores, lógica de ordenação ou regras de estado em smart contracts.
Quem mais se beneficia
Melhor ajuste: engenheiros trabalhando em linguagens com bibliotecas maduras de PBT, revisores avaliando testes fracos e desenvolvedores desenhando funcionalidades que deveriam ser especificadas primeiro como propriedades. Se você está decidindo se vale instalar property-based-testing, a pergunta principal é se o seu código tem estrutura reaproveitável, transformações reversíveis ou regras que precisam valer para muitos inputs.
O que torna diferente
Diferente de um prompt genérico de testes, esta skill é organizada em torno de detecção, escolha de propriedades, desenho de estratégias e interpretação de falhas. Isso importa porque o maior obstáculo à adoção não é sintaxe; é escolher uma propriedade útil e gerar inputs válidos sem filtrar demais. A skill também é ampla o suficiente para property-based-testing for Skill Testing em vários ecossistemas, incluindo smart contracts.
Como usar a skill property-based-testing
Instale e carregue o contexto certo
Instale com npx skills add trailofbits/skills --skill property-based-testing, e depois abra primeiro o SKILL.md. Para decisões mais rápidas, leia também o README.md e os arquivos de referência mais relevantes para a sua tarefa: references/generating.md, references/reviewing.md e references/interpreting-failures.md.
Transforme uma ideia vaga em um prompt útil
Um bom prompt de property-based-testing usage deve nomear o alvo, a operação e a garantia que importam para você. Melhor entrada: “Adicione PBT para decode(encode(x)) neste serializer, mantendo os inputs dentro de UTF-8 válido e dos limites de tamanho.” Pior entrada: “Escreva testes de propriedade para este módulo.” O primeiro exemplo dá à skill uma propriedade real, limites válidos de domínio e uma forma de saída.
O que incluir na sua solicitação
Informe a linguagem, a biblioteca de testes, a assinatura da função, os invariantes conhecidos, o comportamento para entrada inválida e quaisquer exemplos ou especificações. Se estiver usando o guia property-based-testing para revisão, cole o teste atual e diga se quer encontrar bugs, refatorar ou fazer uma auditoria de qualidade. Se o código tiver caminhos de parsing ou validação, diga o que deve acontecer com dados malformados; isso evita testes genéricos e uso ruim de assume().
Fluxo de trabalho recomendado
Comece mapeando o código para um tipo de propriedade: roundtrip, idempotência, invariante, ordenação ou oracle. Depois defina estratégias que gerem inputs válidos por construção, e não por filtragem pesada. Por fim, interprete as falhas com references/interpreting-failures.md antes de tratá-las como bugs. Para smart contracts, verifique as notas específicas de EVM e mantenha o modelo de estado explícito.
FAQ da skill property-based-testing
A skill property-based-testing substitui testes normais?
Não. A skill é mais valiosa onde exemplos comuns deixam passar casos extremos ou onde uma única propriedade cobre muitos comportamentos. Mantenha testes por exemplo para regressões pontuais e use property-based-testing quando uma regra geral for mais clara do que meia dúzia de casos.
Este guia property-based-testing é amigável para iniciantes?
Sim, se o comportamento-alvo for simples e a propriedade for óbvia, como um roundtrip ou uma verificação de idempotência. Fica mais difícil quando a especificação está mal definida, porque PBT precisa de um contrato claro antes que o gerador seja realmente útil.
Quando eu não deveria usar esta skill?
Não comece por ela quando o comportamento for principalmente guiado por UI, altamente não determinístico ou impossível de expressar como uma propriedade estável. Também é uma escolha ruim quando o único oracle disponível é uma longa cadeia de reimplementação que só espelha o código de produção.
Ela funciona para minha linguagem ou framework?
A skill dá suporte a muitos ecossistemas, incluindo Hypothesis, fast-check, proptest, jqwik, ScalaCheck, FsCheck, StreamData, QuickCheck e fuzzers de smart contracts como Echidna e Medusa. Se sua stack estiver fora dessa lista, o método subjacente ainda ajuda, mas talvez seja preciso adaptar a sintaxe dos testes e as APIs de estratégia.
Como melhorar a skill property-based-testing
Dê a propriedade mais forte, não apenas o alvo
Os melhores resultados vêm de nomear a garantia exata. Por exemplo: normalize(normalize(x)) == normalize(x) para strings Unicode é melhor do que “testar normalize”. A skill property-based-testing funciona melhor quando a propriedade é específica, falseável e ligada a um contrato conhecido.
Compartilhe as restrições que moldam os geradores
Os modos de falha mais comuns são entradas inválidas, estratégias filtradas demais e propriedades fracas demais para pegar bugs reais. Melhore a qualidade da saída informando intervalos aceitos, regras de formato, limites de tamanho e se exceções são esperadas. Se uma propriedade só deve valer depois da validação, diga isso explicitamente.
Itere a partir dos exemplos que falharem
Quando o primeiro teste falhar, não peça só uma correção. Traga o contraexemplo reduzido, a regra pretendida e qualquer documentação que defina o comportamento em casos-limite. Isso permite que a skill separe um bug real de uma propriedade ruim e produza um segundo teste mais forte ou uma sugestão de refatoração.
