GenerateData
- Área: Verificación de Entrega Software
- Carácter del recurso: Recomendado
- Fases del ciclo de vida: Construcción del Sistema de Información (CSI)
- Perfiles: Programador, Equipo de Proyecto, Grupo de Aseguramiento de la Calidad
Descripción
GenerateData es una herramienta para la generación automatizada de juegos de datos. Ofrece ya una serie de datos precargados en BBDD y un conjunto de tipos de datos bastante amplio, así como la posibilidad de generar tipos genéricos. Podemos elegir en que formato se desea la salida de entre los siguientes:
- HTML
- EXCEL
- XML
- CSV
- SQL(MySQL)
En caso de ser necesario, sería posible generar nuevos tipos de datos personalizados con solo modificar unas cuantas lineas de código (php).
Uso en MADEJA
Es recomendable el uso de esta herramienta en aquellos procesos en los que se realice una carga masiva de datos y que estos sean coherentes y fácilmente legibles.
Generación de tipos personalizados
Aunque la herramienta ya dispone de una serie de tipos de datos preestablecidos, que en la mayoría se los casos suele ser suficientes, puede ser necesario dar de alta nuevos tipos para cubrir determinado tipo de necesiados, como un dato cuyo valor sea validado por un algoritmo, como por ejemplo, el DNI español. A continuación se muestra como generar un nuevo tipo de dato para la aplicación. Para el ejemplo, daremos de alta el tipo de dato "DNI".
Generación de función tipo personalizado.
Las acciones de generación u obtención de datos se definen en el fichero $INSTALL_DIR/global/library.php. El primer paso para crear un nuevo tipo personalizado, sería crearse la correspondiente función en dicho fichero.
Ejemplo:
function generate_dni() { //TODO: Por simplificar, se desprecian DNI menores de 10000000, para no rellenar 0 a la izquierda. $dni= (string) rand(10000000,99999999); if(!isset($_SESSION['lista_dni'])){ $_SESSION['lista_dni'][]=$dni; } else { $indice=0; $dni_nuevo=false; while (!$dni_nuevo) { if($_SESSION['lista_dni'][$indice]==$dni){ $indice=0; $dni= (string) rand(10000000,99999999); } else { $_SESSION['lista_dni'][]=$dni; $dni_nuevo=true; } } } $letra=substr("TRWAGMYFPDXBNJZSQVHLCKE",strtr($dni,"XYZ","012")%23,1); return $dni.$letra; }
Inclusión de opción en combo desplegable en GUI.
A continuación habría que incluir la nueva opción en la interfaz gráfica. Para ello, se deberá editar el fichero $INSTALL_DIR/global/scripts/library-uncompressed.js y crearse un nueva entrada en el combo desplegable. Para ello nos crearemos una variable del tipo "document.createElement("option")".
Ejemplo:
var option20 = document.createElement("option"); option20.setAttribute("value","DNI"); option20.appendChild(document.createTextNode("DNI"));
A continuación añadiríamos el nuevo nodo a la agrupación que deseemos:
optgroup1.appendChild(option20);
Con esto, ya debería aparecer la nueva opción en el combo desplegable de la interfaz gráfica.
- NOTA: Existe también un fichero $INSTALL_DIR/global/scripts/library-compressed.js, que es el que se utiliza por defecto (es el mismo fichero que library-uncompressed.js, pero eliminando todos los espacios). Por legibilidad, se recomienda hacer los cambios sobre $INSTALL_DIR/global/scripts/library-uncompressed.js y después utilizar una herramienta para eliminar los espacios sobre este y sobreescribir library-compressed.js con la nueva versión o bien realizar los cambios directamente sobre library-uncompressed.js y realizar la modificación en el fichero $INSTALL_DIR/index.php para que haga uso del fichero library-uncompressed.js. En sistemas en producción, por razones de rendimiento, se recomienta utiizar la version comprimida (sin espacios).
Ejemplo:
index.php: <script type="text/javascript" src="/servicios/madeja/global/scripts/library-uncompressed.js"></script>
Llamada a función de generación desde scripts de salida.
Para cada uno de los formatos de salida, existe un script que genera dicha salida. Es decir, para la generación en HTML, existe un fichero $INSTALL_DIR/html.php que genera la salida. En cada uno de los ficheros, habrá que realizar la llamada correspondiente a la función de generación que nos hemos creado.
Ejemplo:
Fichero html.php
switch ($col[1]) { case "Name": echo generate_name($col[2][0], $g_male_names, $g_female_names, $g_names, $g_surnames); break; case "DNI"; echo generate_dni(); break; . . . [Resto entradas case (una por opción en combo desplegable)]
Fichero xml.php
switch ($col[1]) { case "Name": echo generate_name($col[2][0], $g_male_names, $g_female_names, $g_names, $g_surnames); break; case "DNI"; echo generate_dni(); break; . . . [Resto entradas case (una por opción en combo desplegable)]
Fichero excel.php
switch ($col[1]) { case "Name": echo generate_name($col[2][0], $g_male_names, $g_female_names, $g_names, $g_surnames); break; case "DNI"; echo generate_dni(); break; . . . [Resto entradas case (una por opción en combo desplegable)]
Fichero csv.php
{ case "Name": $row_vals[] = generate_name($col[2][0], $g_male_names, $g_female_names, $g_names, $g_surnames); break; //Observese que para este caso, el resultado de la llamada a la función se guarda en el array $row_vals case "DNI"; $row_vals[] = generate_dni(); break; . . . [Resto entradas case (una por opción en combo desplegable)]
Fichero sql.php
case "Name": $elements[] = generate_name($col[2][0], $g_male_names, $g_female_names, $g_names, $g_surnames); break; //Al igual que en el caso antererior, el resultado de la ejecución de la función se almacena en el array $elements case "DNI"; $elements[] = generate_dni(); break; . . . [Resto entradas case (una por opción en combo desplegable)]
Modificación fichero de procesado.
Para finalizar, habría que modificar el fichero proccess.php, que es donde generamos nuestra respuesta. Este último paso no siempre tiene por que ser necesario, aunque si es recomendable actualizar el fichero con la opción correspondiente, aunque no se realice acción alguna. Para nuestro ejemplo, los DNI queremos que sean únicos. Para que sean únicos, en nuestra función de generación guardamos en la variable $_SESSION, un array que contiene los distintos números que vamos utilizando. Cada vez que se genera un nuevo número, se recorre este array en su búsqueda. Si se encuentra, se genera un nuevo número aleatorio y se vuelve a recorrer el array desde el principio. Si no se encuentra, el número es nuevo, se añade al array y se continua con las operaciones. Cada vez que vayamos a generar un nuevo conjunto de datos, necesitamos que la variable en $_SESSION que contiene el array de DNI, este vacío. Para ello, debemos vaciar dicha variable cada vez que pulsemos el botón "Generate" (llamada a proccess.php)
Ejemplo:
switch ($type) { case "Name": //En estos tres casos siguientes, no se genera ninguna acción. case "Phone": case "Email": case "Alphanumeric": $options[] = $hash["option_$i"]; break; case "DNI": unset($_SESSION['lista_dni']); break;
Versiones
La versión actualmente en uso por parte de la Oficina de Testing es la 2.1.