property-based-testing
por trailofbitsGuía de skill de property-based-testing para escribir, revisar y mejorar PBT en distintos lenguajes y contratos inteligentes. Usa esta guía de property-based-testing para detectar casos de roundtrip, idempotencia, invariantes, parsers, validadores y normalización, elegir generadores y decidir cuándo property-based-testing es más sólido que las pruebas basadas en ejemplos.
Esta skill obtiene 83/100, lo que significa que es una ficha sólida para el directorio: ofrece a los agentes suficientes reglas de activación y orientación de flujo de trabajo como para ser claramente más útil que un prompt genérico, aunque los usuarios aún deberían esperar cierto juicio manual en casos límite y detalles de implementación específicos de cada lenguaje.
- Dispara la detección automática de forma explícita para patrones PBT habituales como pares encode/decode, parsers, normalizadores, validadores, funciones puras y contratos inteligentes.
- Contenido operativo sólido a lo largo de todo el ciclo: diseñar propiedades, generar pruebas, revisar fallos y refactorizar para mejorar la capacidad de prueba.
- Buen valor para decidir la instalación gracias a una amplia cobertura de lenguajes y herramientas, además de siete archivos de referencia que profundizan en el flujo sin contenido de relleno.
- No hay comando de instalación en SKILL.md, así que su adopción exige que los usuarios integren la skill manualmente en su entorno o infieran la configuración.
- Hay una señal de uso experimental/de prueba y parte de la documentación es muy de referencia, por lo que los usuarios quizá tengan que interpretar la guía en lugar de seguir un flujo único, ejecutable de principio a fin.
Descripción general de la skill property-based-testing
Para qué sirve esta skill
La skill property-based-testing te ayuda a escribir, revisar y mejorar pruebas basadas en propiedades cuando las pruebas basadas en ejemplos ya no bastan para dar confianza. Es especialmente útil para la skill property-based-testing cuando necesitas validar roundtrips, invariantes, parsers, validadores, normalizadores, lógica de ordenación o reglas de estado en smart contracts.
Quién se beneficia más
Encaja mejor con ingenieros que trabajan en lenguajes con librerías maduras de PBT, revisores que detectan pruebas débiles y desarrolladores que diseñan funcionalidades que deberían especificarse primero como propiedades. Si estás decidiendo si instalar property-based-testing, la pregunta clave es si tu código tiene estructura reutilizable, transformaciones reversibles o reglas que deberían cumplirse a través de muchas entradas.
Qué la hace diferente
A diferencia de un prompt genérico de testing, esta skill está organizada en torno a la detección, la elección de propiedades, el diseño de estrategias y la interpretación de fallos. Eso importa porque el principal freno de adopción no es la sintaxis, sino elegir una propiedad útil y generar entradas válidas sin filtrar de más. La skill también es lo bastante amplia para property-based-testing for Skill Testing en varios ecosistemas, incluidos los smart contracts.
Cómo usar la skill property-based-testing
Instala y carga el contexto adecuado
Instala con npx skills add trailofbits/skills --skill property-based-testing, y luego abre primero SKILL.md. Para decidir más rápido, lee también README.md y los archivos de referencia más relevantes para tu tarea: references/generating.md, references/reviewing.md y references/interpreting-failures.md.
Convierte una idea imprecisa en un prompt útil
Un buen prompt de property-based-testing usage debería nombrar el objetivo, la operación y la garantía que te importa. Mejor entrada: “Añade PBT para decode(encode(x)) en este serializer, manteniendo las entradas dentro de los límites de UTF-8 válido y tamaño.” Peor entrada: “Escribe pruebas de propiedades para este módulo.” La primera le da a la skill una propiedad real, límites válidos del dominio y una forma de salida.
Qué debes incluir en tu solicitud
Incluye el lenguaje, la librería de tests, la firma de la función, los invariantes conocidos, el comportamiento ante entradas inválidas y cualquier ejemplo o especificación. Si vas a usar la guía de property-based-testing para una revisión, pega la prueba actual y explica si buscas detección de bugs, refactorización o una auditoría de calidad. Si el código tiene rutas de parsing o validación, indica qué debe pasar con datos malformados; así evitas pruebas vagas y mal uso de assume().
Flujo de trabajo recomendado
Empieza mapeando el código a un tipo de propiedad: roundtrip, idempotencia, invariante, orden o oráculo. Después define estrategias que generen entradas válidas por construcción, no mediante filtrado agresivo. Por último, interpreta los fallos con references/interpreting-failures.md antes de tratarlos como bugs. Para smart contracts, revisa las notas específicas de EVM y mantén explícito el modelo de estado.
Preguntas frecuentes sobre la skill property-based-testing
¿La skill property-based-testing sustituye a las pruebas normales?
No. La skill aporta más valor donde los ejemplos ordinarios no cubren casos límite o donde una sola propiedad puede abarcar muchos comportamientos. Mantén pruebas de ejemplo para regresiones concretas y usa property-based-testing cuando una regla general sea más clara que un puñado de casos.
¿Esta guía de property-based-testing es apta para principiantes?
Sí, si el comportamiento objetivo es simple y la propiedad es obvia, como un roundtrip o una comprobación de idempotencia. Es más difícil cuando la especificación está poco definida, porque PBT necesita un contrato claro antes de que el generador sea útil.
¿Cuándo no debería usar esta skill?
No recurras a ella en primer lugar cuando el comportamiento dependa sobre todo de la interfaz, sea altamente no determinista o no se pueda expresar como una propiedad estable. Tampoco encaja bien cuando el único oráculo disponible es una larga cadena de reimplementación que simplemente imita el código de producción.
¿Encaja con mi lenguaje o framework?
La skill admite muchos ecosistemas, incluidos Hypothesis, fast-check, proptest, jqwik, ScalaCheck, FsCheck, StreamData, QuickCheck y fuzzers para smart contracts como Echidna y Medusa. Si tu stack no está en esa lista, el método subyacente sigue sirviendo, pero quizá tengas que adaptar la sintaxis de las pruebas y las APIs de estrategias.
Cómo mejorar la skill property-based-testing
Aporta la propiedad más fuerte, no solo el objetivo
Los mejores resultados llegan cuando nombras la garantía exacta. Por ejemplo: normalize(normalize(x)) == normalize(x) para cadenas Unicode es mejor que “test normalize”. La skill property-based-testing funciona mejor cuando la propiedad es específica, falsable y está vinculada a un contrato conocido.
Comparte las restricciones que condicionan los generadores
Los fallos más comunes son entradas inválidas, estrategias filtradas en exceso y propiedades demasiado débiles para detectar bugs reales. Mejora la calidad de salida indicando rangos aceptables, reglas de formato, límites de tamaño y si se esperan excepciones. Si una propiedad solo debe cumplirse después de la validación, dilo explícitamente.
Itera a partir de ejemplos que fallan
Cuando falle la primera prueba, no pidas solo una corrección. Aporta el contraejemplo minimizado, la regla prevista y cualquier documentación que defina el comportamiento en casos límite. Eso permite que la skill distinga entre un bug real y una mala propiedad, y que produzca una segunda versión más sólida de la prueba o una sugerencia de refactorización.
