miércoles, 20 de febrero de 2013

PakEngine. Capitulo 5. Primeras pruebas con TDD

Artículo perteneciente a la sección del PakEngine

Hola a todos,

Ya tenéis subido en el repositorio el nuevo proyecto PakTest que se encarga de llevar el tema del TDD en el proyecto PakEngine.

Para los escépticos os diré que gracias a TDD  he encontrado un bug en el pintado, por el cual si introducías ordenes de pintado en sentido inverso de z (de menor a mayor), no ordenaba bien el vector de pintado, seguramente, de este bug habría tardado mucho a darme cuenta y lo que es peor, para cuando lo detectase es muy posible que estuviese ya enterrado entre cientos de lineas de código.

Como funciona PakTest??

Es una "libreria" que lo único que hace es darnos dos funciones muy sencillas para gestionar TDD: TDD_Assert y  PrintSummary.


void TDD_Assert(char *cad, bool isTrue)
{
num_run_test++; //Estamos ejecutando un nuevo test

if(isTrue)
{
num_ok_test++; //El test es ok.
}
else
{
std::cout << cad << std::endl;
num_fail_test++;
}
}

void PrintSummary(void)
{
if (!GetFailTest())
{
std::cout << "ALL TDD TEST ARE OK!!!" << std::endl;
  }
else
{
std::cout<< "TDD FAIL. STOP ALL AND FIX IT.RIGHT NOW!!!!" << std::endl;
}

std::cout << "Run: " << GetRunTest() << "  Ok: " << GetOkTest() << "  Fail: " << GetFailTest() << std::endl;
}

Con estas dos funciones podemos hacer tests muy sencillos y acumulativos que nos permitan asegurar que cierto código funciona como nosotros queremos. Por ejemplo:


PAKENGINE_DrawGraf(0,0,0, 0);
PAKENGINE_DrawGraf(0,0,0, 0);
PAKENGINE_DrawGraf(0,0,0, 0);
TDD_Assert("No introduce bien 3 tareas de pintado",max_draw_list == 3);

PAKENGINE_Render();
TDD_Assert("No limpia bien 3 tareas de pintado",max_draw_list == 0);



PAKENGINE_DrawGraf(0,0,50, 0);
PAKENGINE_DrawGraf(0,0,25, 0);
PAKENGINE_DrawGraf(0,0,0, 0);
TDD_Assert("No ordena bien 3 z's ordenadas", ((DrawList[0].z == 50) && (DrawList[1].z == 25) && (DrawList[2].z == 0)) );

PAKENGINE_Render();
TDD_Assert("No limpia bien 3 tareas de pintado ordenadas",max_draw_list == 0);

       PrintSummary();

Ahora el siguiente paso es refactorizar tanto los tests como el código del proyecto para eliminar redundancias y repeticiones de código, pero esto es ya tema del siguiente capítulo.

Fijaos que aunque parezca que se avance más lento en un principio (el hecho de hacer los tests de TDD mucha gente le tira para atrás), se gana en confianza en el código y en mantenibilidad, haciendo que el número de bugs que aparezcan en etapas posteriores sean mínimos y fáciles de encontrar y solucionar.

Espero que os guste el tema,

Nos vemos

LordPakusBlog

<< capitulo anterior                                                                                         siguiente capitulo >>


0 comentarios :

Publicar un comentario

Entradas populares