Un Nuevo Enfoque para las Pruebas Basadas en Propiedades
Este artículo habla de un nuevo lenguaje de programación para hacer pruebas basadas en propiedades más fáciles.
― 6 minilectura
Tabla de contenidos
En el desarrollo de software, es crucial asegurarse de que los programas funcionen como se espera. Un método para comprobar esto se conoce como [Pruebas basadas en Propiedades](/es/keywords/pruebas-basadas-en-propiedades--k3zrz1e). Este enfoque verifica si ciertas propiedades o reglas sobre el programa son verdaderas. Aunque las pruebas basadas en propiedades pueden brindar mucha confianza en la corrección de un programa, no se utilizan a menudo en el desarrollo de software en el mundo real. Una de las principales razones de esto es el desafío de crear generadores, que son herramientas que crean entradas aleatorias necesarias para las pruebas.
Escribir estos generadores puede ser complicado, especialmente cuando las estructuras de datos utilizadas en un programa son complejas. En este artículo, veremos un nuevo lenguaje de programación diseñado para simplificar este proceso al incluir herramientas integradas para propiedades y su verificación.
¿Qué son las Pruebas Basadas en Propiedades?
Las pruebas basadas en propiedades son una forma de probar software al establecer ciertas propiedades que el código debería satisfacer. En lugar de revisar algunos ejemplos específicos, este método permite que las pruebas cubran un rango más amplio de posibles entradas. Un programador anota propiedades que describen lo que debería ser cierto para el programa. Luego, una herramienta genera Casos de prueba aleatorios y verifica si las propiedades se mantienen para esos casos.
Por ejemplo, si tienes una función de suma, una propiedad podría ser que sumar dos números en cualquier orden debería dar el mismo resultado. Esto significa que (m + n) debería ser igual a (n + m). Hay muchas propiedades así para diferentes operaciones y funciones, y cuantas más propiedades puedas probar, más seguro podrás estar de que tu código funciona correctamente.
El Desafío de los Generadores
Uno de los principales desafíos al usar pruebas basadas en propiedades es la necesidad de escribir generadores para las entradas. Los generadores crean datos aleatorios que se usarán para probar las propiedades. Para tipos de datos simples, esta tarea puede ser sencilla. Sin embargo, para tipos más complejos, el esfuerzo de escribir estos generadores a mano puede ser bastante alto.
Muchos desarrolladores encuentran que es una carga tener que crear generadores para todos los diferentes tipos de datos que podrían necesitar. Esta es una barrera significativa para usar efectivamente las pruebas basadas en propiedades.
Un Nuevo Lenguaje de Programación para Pruebas
Para abordar este problema, se ha introducido un nuevo lenguaje de programación funcional. Este lenguaje incluye características integradas que ayudan a definir propiedades y a generar automáticamente los datos de entrada de prueba necesarios.
El objetivo es facilitar a los Programadores la realización de pruebas basadas en propiedades sin necesidad de estar escribiendo constantemente sus propios generadores. Al automatizar este proceso, los desarrolladores pueden centrarse más en escribir las propiedades que importan para su código en lugar de perder tiempo creando entradas.
¿Cómo Funciona Esto?
Imagina que quieres comprobar una propiedad de una función de suma. Podrías expresarla así: "La operación de suma es conmutativa." Esto significa que para cualesquiera dos números (m) y (n), la relación (m + n = n + m) debería ser siempre verdadera.
En el nuevo lenguaje, un programador puede definir esta propiedad fácilmente. El lenguaje se encargará de generar números aleatorios para probar esta propiedad. Dado que el lenguaje viene con un Generador integrado para enteros, generar entradas se vuelve sencillo en muchos casos.
Sin embargo, las propiedades más complicadas requieren más esfuerzo. Por ejemplo, si quieres comprobar que sumar cero a un número no cambia su valor, necesitas establecer una propiedad que involucre alguna función (f) además de enteros. El generador automatizado creará los casos de prueba necesarios para verificar esta propiedad también.
Ejemplos Detallados
Veamos algunos ejemplos prácticos.
Conmutatividad de la Suma: Quieres verificar que sumar dos números da el mismo resultado sin importar su orden. El lenguaje puede producir automáticamente números y verificar la propiedad, dándote retroalimentación sobre si pasa en varios casos de prueba.
Cero como Identidad: Puedes probar si sumar cero a un número devuelve el mismo número. El lenguaje puede generar los términos apropiados y sustituirlos en la propiedad, produciendo resultados con cada prueba.
Propiedades de la Resta: También puedes comprobar propiedades relacionadas con la resta, como verificar si el orden de la resta afecta el resultado. El lenguaje generará los casos de prueba relevantes y ayudará a mostrar cuándo falla la propiedad.
Facilidad de Uso
Al usar este nuevo lenguaje, los programadores se desprenden de la carga de escribir generadores repetidamente. En cambio, se enfocan en definir propiedades y dejan que el lenguaje se encargue del resto. Este enfoque no solo ahorra tiempo, sino que también ayuda a prevenir errores que podrían ocurrir al escribir generadores complejos desde cero.
Comparando con Herramientas Existentes
Si bien hay otras herramientas disponibles para pruebas basadas en propiedades, muchas requieren una configuración manual significativa para los generadores. Este nuevo enfoque está diseñado para simplificar aún más el proceso, haciéndolo más accesible para los desarrolladores. En muchas comparaciones, el sistema automatizado se desempeña bien frente a bibliotecas existentes que ya son populares en entornos académicos.
Conclusión
En resumen, las pruebas basadas en propiedades son una forma efectiva de asegurar la corrección del software, pero la necesidad de generadores ha hecho que sea menos popular entre los desarrolladores. Un nuevo lenguaje de programación funcional tiene como objetivo cambiar esto integrando definiciones de propiedades y generación de datos de entrada de prueba en sus características principales. Se espera que este cambio reduzca las barreras para usar pruebas basadas en propiedades, facilitando a los programadores validar su software.
A medida que el software se vuelve más complejo, asegurar su corrección seguirá siendo vital. Nuevas herramientas y lenguajes como este pueden desempeñar un papel importante en hacer las pruebas más simples, más eficientes y, en última instancia, más confiables. Al centrarse en propiedades en lugar de casos de prueba individuales, los desarrolladores pueden obtener mayor confianza en su código mientras ahorran tiempo y esfuerzo en el proceso de pruebas.
Título: pun: Fun with Properties; Towards a Programming Language With Built-in Facilities for Program Validation
Resumen: Property-based testing is a powerful method to validate program correctness. It is, however, not widely use in industry as the barrier of entry can be very high. One of the hindrances is to write the generators that are needed to generate randomised input data. Program properties often take complicated data structures as inputs and, it requires a significant amount of effort to write generators for such structures in a invariant preserving way. In this paper, we suggest and formalise a new programming language \textsf{pun}; a simple functional programming with properties as a built-in mechanism for program validation. We show how to generate input for \textsf{pun} properties automatically, thus, providing the programmer with a low barrier of entry for using property-based testing. We evaluate our work a on library for binary search trees and compare the test results to a similar library in Haskell.
Autores: Triera Gashi, Sophie Adeline Solheim Bosio, Joachim Tilsted Kristensen, Michael Kirkedal Thomsen
Última actualización: 2023-09-12 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2309.04696
Fuente PDF: https://arxiv.org/pdf/2309.04696
Licencia: https://creativecommons.org/licenses/by/4.0/
Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.
Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.