domingo, 16 de junio de 2019

Tasteful - C Testing Framework

Otro Framework de Testing..


Testing.

Algo tan dejado de lado en la comunidad informática. Pocas empresas hacen un correcto Testing y son aún menos los que lo hacen de la "forma correcta".

Cómo dijo un profesor mío, si bien una empresa puede hacer los Tests antes o después de programar, ¿Cómo se aseguran si esos Tests están bien hechos?

Ese es todo un tema aparte..

Para sobre-simplificar todo, podríamos decir que tenemos "niveles" de Testing:

  • Hacer Tests.
  • Análisis estático y dinámico de Código.
  • Análisis de Cobertura de los Tests.
  • Mutación de Tests.
  • ??? (mi conocimiento del tema llega hasta acá).
Como dije antes, pocos programadores testean su código. Lo que podría ser que hagan antes o después de los Tests es correr algunas herramientas de análisis de código estático que se encargan de verificar si hay algún "error conocido" a simple vista del código y cuando algo no falla, recién ahí suelen utilizar el análisis dinámico.

El análisis estático o dinámico pueden reconocer posibles problemas como "si este valor llega a ser NULL, va a generar una falla por acá".

Luego, de la gente que hace Tests de su código, algunos (me incluyo) dan como listo el código (que puede seguir teniendo fallas). Podríamos utilizar un análisis de cobertura que se encarga de fijarse si cada línea del código (o la gran mayoría) está implicada en algún Test, de esta forma podemos saber si hay algún camino de ejecución que no tuvimos cuenta en los Tests.

Y por último, el último nivel que conozco (hasta ahora). Sabiendo que un programa se transforma en "código de máquina" (Assembler), podemos tener que por ejemplo "a + b" se transforme en 3 pasos de assembler. Ahora, teniendo esta idea recordemos que un Test Unitario debería Testear una ÚNICA cosa.

Por lo tanto, si logramos crear un programita similar a "a + b" que cambie en alguna de esas 3 instrucciones de Assembler (mutación del programa), el Test debería dar.. ¿positivo?.. ¿negativo?..

Por cosas como estas es que luego de hacer los Tests podemos preguntarnos: ¿Están bien hechos?

Luego de este breve paseo por el Testing, les presento mi simple Framework.

El Framework es "Tasteful" y está disponible Open-Source en mi cuenta de Github:


Este Framework lo hice por dos motivos principalmente, el primero es que tenía que usar un Framework para hacer Tests y quería algo simple, que no requiera muchos pasos de instalación o configuración o escribir todo de cierta manera para que funcione (que en parte fue lo que me terminó pasando igual). La otra motivación fue practicar la programación en Linux en C.

Este Framework después lo utilicé para hacer los Tests de  mis Trabajos Prácticos y me sirvieron bastante, le fui agregando cosas a medida que las necesitaba y seguiré trabajando en él.

Algunas cosas que quiero agregarles son:
  • No tener que hacer add_test(funcion) para cada Test sino que lo reconozca solo.
  • Buscar otra forma más eficiente de poder seleccionar los archivos de Tests.
  • Rehacer el Makefile.
  • Ver si puedo simplificarlo y portarlo para que pueda ser usado por el sistema BareBones.
Al final estoy bastante contento con el resultado obtenido. A fin de cuentas, pude utilizarlo como quería.

Espero que les haya servido este Post (y que les sirva el Framework).

Hasta la próxima.

No hay comentarios.:

Publicar un comentario