enero 17, 2008

Generador de datos de prueba para SQL

Los amigos de Red Gate lanzaron recientemente una beta pública de su nuevo SQL Data Generator. El producto insipira confianza sabiendo que gente como Ben Hall estuvo trabajando en él.

Básicamente,
permite llenar bases SQL 2000 y 2005 en base a datos de muestreo existentes en varios formatos, más la generación de datos de prueba incluyendo cosas como la cantidad de nulos, valores únicos, rangos de valores con diversos algoritmos, etc.

Dentro de cualquier esfuerzo serio de calidad en un proyecto de software, el contar con volúmenes de datos importantes y con rangos de dispersión es fundamental. Hay montones de cosas que influyen en la escalabilidad y rendimiento de una aplicación en este aspecto, desde cómo se comporta el código hasta temas de optimización de consultas e inserciones, la manera en que los índices quedan paginados, etc.

Siempre es mejor probar desde temprano las aplicaciones contra una base de datos grande y llena, y esta herramienta es una buena alternativa.

Para escribir y ejecutar las pruebas en si, una buena alternativa reciente es xUnit.net, producto de los infatigables Jim Newkirk y Brad Wilson (ambos trabajando en Microsoft pero aportando código a la comunidad abierta). Jim es también el autor de NUnit, y este nuevo framework de testing es un poco el resultado de esa experiencia, con la decisión de comenzar desde cero con un paradigma mejorado.

Yendo al grano, xUnit tiene también unas extensiones, entre las cuales tenemos atributos para utilizar sets de datos como parámetros de entrada a los tests. Básicamente
[Theory] permite crear series de datos incluídos como [InlinData] para datos hard-coded en el test, [PropertyData] permite alimentar series mediante una propiedad devolviendo un IEnumerable, otra para Excel, y [SqlServerData] para tomarlos de una base de datos.

A estos se suma el infaltable atributo [AutoRollback] que envuelve todo el test en una transacción y la cancela al final, sin importar que el test pase o falle. Esto permite mantener la aislación entre tests, manteniendo la DB en un estado consistente.








No hay comentarios.: