Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SEMI-AUTOMATIZACIÓN DE PRUEBAS
DE INTERFAZ EN MODERNIZACIÓN
FORMS
Autor:
Asesor:
Página 1 de 63
Contenido
0. Resumen..................................................................................................................................................... 5
1. Introducción ............................................................................................................................................... 5
Página 2 de 63
5.1 Desarrollo de la transformación de Oracle Forms a diagramas de actividad ........................................ 26
6. Validación ................................................................................................................................................. 34
7. Resultados ................................................................................................................................................ 59
Página 3 de 63
7.0 Costo de la cadena transformadora .................................................................................................... 59
8. Conclusiones............................................................................................................................................. 61
9. Bibliografía ............................................................................................................................................... 62
Página 4 de 63
0. RESUMEN
1. INTRODUCCIÓN
Página 5 de 63
posteriormente automatizados con el fin de ahorrar dinero en costos de producción y de
soporte.
Actualmente las aplicaciones existentes en Oracle Forms están pasando a ser poco
recomendables para empresas que quieren usar tecnologías de vanguardia, debido a que
cada vez menos profesionales las conocen en detalle y el soporte se va perdiendo a
medida que avanza el tiempo. Teniendo en cuenta lo anterior las empresas que tienen sus
sistemas en dicha plataforma de Oracle están interesadas en la modernización de las
mismas o en desarrollar nuevas que cumplan los mismos requisitos que la aplicación
legado. En el contexto colombiano se estiman que existen miles de aplicaciones basadas
en Oracle Forms, motivo por el cual dicho mercado resulta ser muy atractivo como posible
negocio empresarial destinado a dichas compañías y como motivación inicial del proyecto
que está realizando la universidad.
Página 6 de 63
La transformación de las aplicaciones escritas en Oracle Forms debe hacerse de modo tal
que se respeten ciertos estándares establecidos por las organizaciones involucradas en el
proceso y que permitan funcionalidades adicionales a la transformación básica. Estas son
necesarias para poder extender el uso de la plataforma que se propone en el presente
documento y así poder ser de utilidad para realizar procesos adicionales que podrían no
haber sido contemplados debido a las necesidades únicas de cada uno de los casos de
modernización posibles.
El presente documento se centra en el proceso completo que inicia una vez se tiene la
instancia del modelo de la aplicación legado, hasta que se logra llegar a código y
aplicaciones ejecutables las cuales tienen las pruebas que se van a generar con el fin de
poder ser ejecutadas una vez se finaliza el proceso. Adicionalmente, se da la opción de
modificar todas las pruebas resultantes a gusto del encargado del proceso para adaptarla
a los requerimientos específicos de cada proyecto.
2. DESCRIPCIÓN GENERAL
2.1 OBJETIVOS
Página 7 de 63
2.2 ANTECEDENTES
Otro caso de investigación que se basa en pruebas fue el realizado por Fröhlich y Link [3]
en donde se plantea la generación de las pruebas, partiendo de la documentación de las
mismas y pasando dicha información a modelos de estado de UML para posteriormente
convertir dichos modelos a casos de pruebas que cumplan con las especificaciones
iniciales que dieron lugar al modelo del primer paso en la cadena. Dicho documento
también fue utilizado como base para la implementación que se presentará más adelante.
Página 8 de 63
para desarrollar pruebas con modelos. En este documento se hace especial énfasis en la
arquitectura que debe seguirse para modelar adecuadamente el conjunto de pruebas,
basándose en tres tipos de diagramas principales: clases, estado y de objetos.
El presente proyecto se justifica a partir del deseo de las empresas que usan Oracle Forms
y que ven la migración a código ADF como una forma eficiente de ahorrar dinero en
soporte y mantenimiento. Igualmente, como una reducción de la dificultad para encontrar
mano de obra para sus aplicaciones. Así pues, la transformación semi-automatizada será
una solución mediante la cual se podrá realizar dichas transiciones con menos esfuerzo e
inversión de recursos humanos.
Página 9 de 63
Oracle por su parte ya se encuentra aconsejando a las empresas que deseen hacer estos
cambios de plataformas pues saben que las dificultades que se encuentran en la
actualidad con Oracle Forms. Entre los motivantes que existen, según Oracle[4], para
hacer la transición a una tecnología moderna como ADF se encuentra los siguientes:
Debido a cambios en los negocios y sus procesos las aplicaciones en Oracle Forms
ya no cumplen los requisitos mínimos de operación.
Las aplicaciones de Forms implementadas ya han terminado su ciclo de vida y es
momento de moverse a otros sistemas.
Determinados negocios deben adoptar tecnologías modernas debido a
restricciones propias de su sector empresarial.
3. DISEÑO Y ESPECIFICACIONES
3.1 ESPECIFICACIONES
Con base en el trabajo realizado por los ingenieros de Siemens[2] se decidió hacer uso de
los diagramas de actividad como modelo intermedio, puesto que estos permiten realizar
Página 10 de 63
modificaciones (creando nuevos nodos, acciones o modificando las existentes) y modelar
de forma directa la ejecución de pruebas (un conjunto de acciones queestán
concatenadas entre sí). Adicionalmente ya se cuenta con un metamodelo de dichos
diagramas de actividad, dicho metamodelo se encuentra en la suite de Epsilonde esta
manera es posible acceder a sus especificaciones por cualquier persona que tenga el
proyecto, cumpliendo así la condición de contar con una cadena de código abierto. Como
punto final, se pueden aprovechar los conceptos de UML (más específicamente los
conceptos de perfiles y estereotipos) con los cuales es posible definir de forma dinámica
los tipos de acciones que son ejecutadas en una prueba.
Para cumplir con las funcionalidades que se deseaban ofrecer en un inicio se planteó que
el código ejecutable debería ser código SeleniumHQ[5], SeleniumHQ se compone de dos
grandes plataformas en las que es posible automatizar la ejecución de acciones con el fin
de realizar todo tipo de pruebas sobre el navegador web elegido. Las dos plataformas son
el Selenium IDE y el SeleniumWebDriver. Ambos serán explicados a continuación.
El IDE de Selenium es un plugin disponible para Mozilla Firefox, cuando se usa dicho plugin
es posible ir monitoreando y controlando la ejecución de cada una de las pruebas que se
van a correr, debido a que el plugin cuenta con un panel de control en donde se va
manejando la ejecución de cada uno de los test case generados. Como requisito de dicha
plataforma únicamente está el tener instalado el navegador web de Mozilla y el plugin
que da el proyecto Selenium.
Página 11 de 63
Por otro lado se encuentra el WebDriver de Selenium, dicha plataforma se ejecuta como
pruebas JUnit tradicionales y permiten tener un poco más de flexibilidad al momento de la
generación de pruebas puesto que se cuenta con todos los componentes de Java y JUnit
con las que es posible realizar pruebas adicionales, sin embargo necesita usar un servidor
que se puede descargar de la página del proyecto y se recomienda tener un navegador
(como Firefox) para la ejecución de las pruebas usando el navegador.
Teniendo claro que las pruebas de interfaz se ejecutarían sobre Selenium, se decidió que
las pruebas se generarían para ambas plataformas de Selenium, es decir que la cadena de
transformación inicial cuenta con dos caminos finales, en uno se generá código Selenium
IDE y en el otro código SeleniumWebDriver.
Contando ya con todos los pasos de la cadena se diseñó como esqueleto del proyecto la
siguiente cadena de transformación:
Modelo Diagramas
Codigo
aplicación de
Selenium.
legado. actividad.
• Transformación • Transformación • Tanto IDE como
Modelo a Modelo a Texto WebDriver.
Modelo (M2M) (M2T)
Página 12 de 63
b. Maestro/Detalle: Son formularios en donde hay dos segmentos distintos: uno
maestro y otro detalle, en este caso la información desplegada en el segmento
detalle depende de lo que esté siendo mostrado en el formulario maestro.
3.2 RESTRICCIONES
A partir de la aplicación Oracle Forms se crean las siguientes pruebas. Cada una de ellas es
generada única y exclusivamente si la aplicación origen permitía realizar dicha acción y
contaba con los requerimientos mínimos de cada una.
PRUEBA DE CREACIÓN
Página 13 de 63
En los formularios que tengan la propiedad de inserción de información se realiza la
prueba de insertar un nuevo elemento al formulario. Dicha prueba se genera sobre las
tablas maestro y detalle por aparte. La prueba generada toma todos los elementos del
formulario y genera datos que estén dentro de los parámetros de cada uno de los ítems y
posteriormente llena cada uno de los campos con el dato correspondiente,
posteriormente se envía el formulario y una vez se tiene la página recargada se encarga de
verificar que los datos desplegados sean los que se habían fijado inicialmente.
Página 14 de 63
el guardar en una variable el identificador de la llave primaria del formulario y
posteriormente se elimina el dato actual, una vez es cargada la página se procede a
verificar que el contenido de la llave primaria mostrada no sea igual al valor almacenado.
PRUEBA DE NAVEGACIÓN
Verificar su
Almacenar las
despliegue al
llaves primarias.
navegar.
Página 15 de 63
Para todos los formularios detalles que tengan dependencia con uno maestro se
comprueba que la navegabilidad del formulario primario afecte los datos desplegados en
los de detalle. Los pasos para lograr lo anterior consisten en almacenar en variable la llave
primaria del elemento maestro, verificar que la llave que hace el “join” entre ambos
formularios corresponda a la variable almacenada y posteriormente se navega para
verificar que dicha relación se siga manteniendo.
Guardar la
llave primaria
del maestro en
variable.
PRUEBA DE ERRORES
Para los formularios con campos obligatorios se generan pruebas para verificar que la
interfaz este marcando el error en los campos al introducir información insuficiente para
el mismo, esto se realiza dejando los campos obligatorios vacíos y al enviar el formulario
esperar que dichos campos contengan la clase que marca el error en los formularios.
Página 16 de 63
Dejar los Verificar que los
campos Enviar el campos tengan
obligatorios formulario. el error
vacios. marcado.
Los formularios con gráficos (como barras estadísticas o imágenes) tienen una verificación
adicional en donde se busca comprobar que los gráficos que se encuentren activados y
visibles sean cargados en la página.
La cabeza del modelo es la aplicación como tal, dicho elemento del modelo contiene a
todos los demás. Sin embargo, de este elemento los únicos que son de interés para el
proyecto serán los formularios, puesto que estos son los que son desplegados al usuario y
sobre los que se deberán generar las pruebas, los demás no son tenidos en cuenta en el
proyecto actual.
Los formularios de la aplicación son de interés para la modernización, puesto que estos
contienenlos bloques de datos en donde se agrupa información vital para la creación de
Página 17 de 63
las pruebas. Cada formulario tiene “Form Data Blocks” que son representaciones de datos
como formularios. Estos Data Blocks son utilizados como parte fundamental en la cadena
al ser procesados como paquetes en el modelo intermedio.
Los Form Data Block contienen cuatro elementos principales para la ejecución de pruebas,
el primero es el “Form Data Block Database” en donde está la información de que
operaciones son válidas sobre la base de datos (como eliminar o actualizar datos), en
segundo lugar están los “Form Data Block Relation” los cuales son las relaciones que
permiten conocer los formularios detalle (donde el maestro es el formulario en cuestión),
también cuentan con un “Form Data Block Navigation” que indica si se permite navegar
los datos del formulario y finalmente están los ítems de texto (“Item Text item”), que son
los que componen el formulario, junto con los ítems que modelan los elementos gráficos
(“Item Chart Item” e “ItemImageItem”) del formulario. En resumen se usará la siguiente
información del modelo Forms:
Aplicación
Formularios
Form Data
Blocks
Teniendo claro los elementos significativos del modelo para la transformación es posible
empezar a crear las relaciones que definen que elementos del modelo van a ser
transformados y de qué manera.
Página 18 de 63
4.3 DISEÑO DE LAS RELACIONES ENTRE MODELOS
Es imperativo definir las relaciones entre los modelos con el fin de saber al momento de la
implementación que conceptos de cada modelo van a ser los del modelo destino, es decir
que partes del modelo original van a ser transformadas y en que lo serán.
Es decir, la aplicación como tal se verá representada como un modelo UML (al cuál se le
aplicará el perfil creado), luego cada uno de los data block de los formularios de la
aplicación pasaran ser un paquete UML estereotipado. Durante dicha transformación la
cadena misma creara los diagramas de actividad iniciales que vendrán en el paquete, los
cuales modelan las pruebas anteriormente detalladas.
Como segunda parte de la cadena se tiene la transformación del modelo UML a código
Selenium, dicha relación está dividida en dos, correspondientes a las plataformas de
Selenium IDE y SeleniumWebDriver:
Página 19 de 63
Diagramas
WebDriver IDE
de Actividad
Paquete Archivo Java Test Suite
Diagrama de
@Test Test Case
Actividad
Como se explicó en un inicio se hace uso de un perfil UML con el cual se definen los
estereotipos que han de ser usados por los diagramas de actividad para modelar las
distintas acciones que pueden ser ejecutadas al momento de realizar pruebas de interfaz
gráfica.
Un perfil en UML[6] es el mecanismo utilizado para darle forma a un modelo UML para
que este cumpla con ciertos parámetros básicos en un dominio específico. Los perfiles
permiten tres métodos de definir los parámetros del dominio, las etiquetas, los
constraints (restricciones) y finalmente los estereotipos, siendo estos últimos los
seleccionados para parametrizar el modelo intermedio de la cadena al permitir la creación
de atributos sobre cada estereotipo y poder extender los mismos para tener facilidad de
manejo sobre estereotipos que comparten elementos en común.
Los estereotipos en UML son un método de extender las propiedades de los elementos
que conforman un modelo UML, es decir que no se restringen únicamente a diagramas de
Página 20 de 63
actividad. Sin embargo, en el marco del proyecto solamente se utilizará para modelar
componentes del mismo. Al tener claras las relaciones entre los modelos se procedió a
definir los estereotipos del modelo intermedio, obteniendo las siguientes conclusiones:
Estereotipos del
Modelo UML
Perfil
Paquete TestSuite
Diagrama de
TestCase
actividad
Teniendo ya claros los tres elementos que serían modelados en el perfil se empezó a
definir cada uno de los seis estereotipos mencionados, definiendo sus atributos y los
estereotipos hijos de cada uno en caso de ser necesarios.
Para el estereotipo del TestSuite se definieron dos atributos básicos de una prueba de
interfaz, la URL base (que es la raíz de la aplicación en donde se ejecutaran las pruebas) y
un timeout que permite modelar el tiempo máximo de ejecución de las pruebas que
pertenezcan al TestSuite en cuestión. Quedando así la definición del estereotipo:
Página 21 de 63
Para los diagramas de actividad como tal no fue necesario implementar ningún tipo de
atributo sobre el estereotipo, sin embargo dicho estereotipo está siendo aplicado durante
la transformación a los diagramas de actividad y se ha dejado definido en el perfil debido a
que puede ser utilizado en trabajos posteriores para extender las funcionalidades de las
pruebas.
Los últimos elementos del modelo UML que han sido estereotipo han sido las acciones del
diagrama de actividad que para el proyecto actual están siendo manejados como
OpaqueAction en dichos diagramas. Las acciones usadas en el diagrama representan cada
una de las operaciones realizadas durante una prueba de interfaz, por lo que los
estereotipos definidos en el perfil deben cubrir todas las necesidades básicas de una
prueba usual de interfaz. Como resultado del análisis realizado sobre las posibles acciones
Página 22 de 63
que se realizan en una prueba sobre la capa que ha sido trabajada en el proyecto se
obtuvo el siguiente conjunto de estereotipos:
Como se puede apreciar hay cuatro estereotipos generales sobre las acciones, estas son:
Página 23 de 63
Para realizar los estereotipos que se derivan de action se tuvo en cuenta las acciones que
se necesitan para modelar pruebas de interfaz sobre los elementos de la página web en
cuestión, estas acciones fueron obtenidas al realizar pruebas manualmente, así fue que se
tuvo una idea de que cosas eran esenciales en una prueba de este estilo y como resultado
se obtuvieron los siguientes estereotipos:
Página 24 de 63
componentes necesarios de este, las relaciones, el perfil UML y las plataformas para las
cuales se crearan las pruebas.
Debido a que las pruebas pueden requerir el uso de variables durante la ejecución de un
Test Case, se da la opción de crear dichas variables creando acciones con el estereotipo:
“TestVariable”. Sin embargo, se debe tener en cuenta que el nombre que le asigne a la
variable debe tener el siguiente formato: ${NOMBRE} en donde NOMBRE es reemplazado
por el que se le quiera dar a la variable en cuestión, esto debe tenerse en cuenta al
modificar o crear diagramas de actividad.
Para leer las variables en cuestión se debe utilizar el mismo formato, es decir que si en
una acción específica se quiere comparar el valor de un elemento con el de una variable
que ha sido almacenada, se debe usar el valor: ${NOMBRE} en donde NOMBRE
corresponde al de la variable contra la que se quiere comparar el valor.
Como consideración adicional se han definido ciertas restricciones para las aplicaciones
ADF que se realicen pensando en hacerlas funcionar con el presente proyecto, dichas
consideraciones son las siguientes:
1. Los botones: Next de navegación Next, Previous, Last y First, junto con los de
acciones: Submit, Create, Update, Delete, deben tener el siguiente formato:
NOMBRE_DEL_FORMULARIO:NOMBRE_DEL_DATA_BLOCK-BOTON
2. Cada uno de los campos de los campos de texto debe tener como identificador el
siguiente namespace:
NOMBRE_DEL_FORMULARIO:NOMBRE_DEL_DATA_BLOCK-IDENTIFICADOR
Página 25 de 63
5. DESARROLLO DEL PROYECTO
PruebaCreate
PruebaUpdate
Principal
PruebaNavegacion
PruebaDelete
PruebaGraficos
PruebaError
Página 26 de 63
Cada uno de los seis archivos derivados del principal se encarga de crear un diagrama de
actividad (dos en el caso de la navegación, uno para maestro y otro para maestro/detalle),
dichos diagramas generados son adheridos a un paquete principal UML que se crea en el
archivo principal con el fin de contener todas las pruebas sobre un bloque del formulario
en formato de diagrama de actividad.
ARCHIVO PRINCIPAL
Este etl se encarga de realizar la transformación, es decir que crea el esqueleto del
modelo objetivo (el conjunto de diagramas de actividad), por lo que se encarga de
modelar cada aplicación como un modelo UML, le aplica el perfil UML creado a dicho
modelo, crea un paquete UML por cada Form Data Block, le asigna el estereotipo de
TestSuite al paquete y empieza a realizar la ejecución de cada uno de los archivos etl que
generan pruebas, verificando que el Form Data Block en cuestión cumpla con los
prerrequisitos de cada una de las pruebas.
Al momento de crear el paquete UML por cada Form Data Block el archivo principal se
encarga de asignarle como nombre al paquete el mismo que tiene el bloque de datos,
luego le asigna el estereotipo mencionado y para el presente proyecto le da una URL base
que ha sido previamente definida, esta URL corresponde a la base que tienen las
aplicaciones Oracle ADF.
El archivo principal tiene, a parte del método que da inicio a la transformación, una
operación que permite, para un Item Text Item dado, obtener un valor aleatorio valido
para dicho elemento. Este valor se genera teniendo en cuenta tres propiedades del Text
Item: longitud máxima, valor mínimo y valor máximo. El programa se encarga de revisar
dichas propiedades y a partir de estos valores se puede generar un valor valido que pueda
ser usado para realizar las pruebas de creación y actualización para los campos de texto en
cuestión.
Página 27 de 63
Todos los archivos derivados del principal tienen algunos elementos compartidos, propios
de un diagrama de actividad tradicional. Los elementos en cuestión son los siguientes:
Aquí se generan las dos pruebas de navegación principales, la navegación para formularios
maestros y los que son maestro/detalle. Ambos son muy similares, se guarda la llave y se
va navegando para verificar que el campo desplegado sea el adecuado y posteriormente
Página 28 de 63
se verifica el funcionamiento de los cuatro botones examinando si estos se desactivan
cuando deben estarlo.
Para este caso se verifica el valor de la llave primaria de cada formulario, es decir que esta
se almacena en una variable y se elimina el dato en cuestión, posteriormente se recarga la
página y se verifica que el campo mostrado no sea igual al que había sido guardado.
En los formularios detalle se deben tener los campos de llave de unión con la maestra en
primer lugar y el de la llave primaria del formulario en segundo lugar.
El diagrama generado aquí muy básico, consta de los nodos de inicio y fin, con la adición
de un conjunto de verificaciones para examinar si el grafico se encuentra desplegado en la
aplicación. Debido a que el contenido de estos gráficos no puede ser evaluado
sistemáticamente no es posible realizar pruebas de contenido sobre el mismo.
Las pruebas de error son un poco distintas a las demás debido a que en estas se debe usar
la propiedad “XPath” de los navegadores web. Esta consideración se hizo debido a la
restricción que posee Selenium para verificar si un elemento contiene una clase
específica.Para el proyecto actual se diferencia la utilización de un XPath al de un
identificador tradicional sobre un elemento utilizando como inicio del namespace dos
slash (//), posterior a esto se inserta el XPath en cuestión.
En este script etl, el XPath se utiliza examinando si la tabla que contiene un campo de
texto en donde se espera obtener un error contiene la clase ADF que muestra errores, la
cual es “p_AFError”.
Página 29 de 63
5.2 DESARROLLO DE LA TRANSFORMACIÓN DE DIAGRAMAS DE ACTIVIDAD A
SELENIUM IDE
La creación del código para Selenium IDE debe seguir el formato propio del plugin del
proyecto el cual indica que los archivos que allí se usaran: Test Suite y Test Case, deben
ser *.html y seguir un formato básico de Selenium.
Para el caso de los Test Suite el formato definido por el plugin es el siguiente:
Para cada uno de los paquetes que pasen el filtro se crea un nuevo directorio dentro de la
carpeta que contiene todo el código generado, dicho directorio tiene como nombre el
mismo del paquete y allí se pondrán todos los archivos *.html pertenecientes al paquete
que está siendo tratado. Adentro de cada uno de estos directorios creados se crea el
archivo Test Suite, el cual tiene como prefijo el texto “TEST_SUITE_” y se complementa
con el nombre del paquete en cuestión. El archivo mencionado se genera siguiendo la
estructura que requiere el plugin de Selenium IDE, es decir que se pone la información del
nombre del paquete en el título y la primera fila, y las demás filas de la tabla se
Página 30 de 63
populancon los diagramas de actividad del paquete, es decir que cada diagrama
corresponde a una fila de la tabla en donde se enlaza al Test Case correspondiente.
El formato del archivo HTML que representa un Test Case para Selenium IDE es el
siguiente:
1. La misma cabecera con la información del XML, HTML y el título del caso.
2. Una tabla adentro del <body> en donde la primera fila sea el nombre del Test
Case.
3. Posteriormente se tiene el cuerpo de la tabla, los cuales son filas con tres casillas:
a. Nombre del comando Selenium IDE a ejecutar.
b. Objetivo del comando, generalmente es el elemento o una propiedad
básica de la acción como el timeout para el comando wait. (Opcional para
algunos comandos).
c. El valor del comando, por ejemplo en el comando fill este campo
representa el valor que se le pondrá al elemento especificado en el
objetivo. (Opcional para algunos comandos).
Para iniciar la creación de los mismos se crea un archivo *.html el cual tiene como nombre
el que trae el diagrama de actividad, la ubicación del archivo es la misma en donde se
deposita su Test Suite respectivo.
Página 31 de 63
empiezan a agregar las acciones de la prueba, siguiendo el mismo sistema de antes:
comando, objetivo y valor.
Como detalle de esta transformación hay que tener en cuenta los acentos para los
objetivos y valores, así como el nombre de las operaciones en Selenium IDE, a
continuación se muestra un mapeo de los estereotipos con su respectivo comando en el
plugin:
fill type
TestVariable storeValue
NotEnabledVerify verifyNotEditable
EnabledVerify verifyEditable
wait pause
NotContentVerify verifyNotValue
ContentVerify verifyValue
ExistVerify isElementPresent
VerifyNotExist isElementNotPresent
Página 32 de 63
Realizando las operaciones anteriormente mencionadas es posible generar los Test Case
de Selenium IDE, incluyéndolos dentro del Test Case respectivo para que estos sean
cargados al plugin del navegador.
Las pruebas que hacen uso del WebDriver se ejecutan en un archivo JUnit, por lo cual para
esta transformación se tiene que cada paquete corresponde a un archivo *.java, el
nombre del archivo corresponde al nombre del paquete UML. El archivo representa una
clase de prueba que tiene como nombre el mismo del archivo.
Como la prueba es un JUnit tradicional, entonces se tiene como inicio la definición del
paquete y algunos import básicos que permiten la ejecución de métodos de Selenium y de
JUnit. En la clase se tiene un atributo llamado sel del tipo DefaultSelenium, con dicha
instancia se usaran los métodos que da el SeleniumWebDriver.
El primer método de la clase se llama prepare y se ejecuta antes del resto de pruebas,
motivo por el cual tiene la anotación @Before, allí se genera la instancia del
DefaultSelenium y es asignada al atributo mencionado anteriormente. En caso de que el
paquete tenga como atributo un timeout, entonces se utiliza el método setTimeout de la
clase para definir de antemano la demora máxima de cada acción.
Como parte final se crean los métodos de la clase, todos estos llevan la anotación de
prueba, es decir @Test y el nombre es el mismo del diagrama de actividad, luego se
recorre el diagrama, es decir que se inicia en el InitialNode y se empiezan a recorrer las
acciones del mismo, en cada acción se verifican los estereotipos aplicados y se van
escribiendo las líneas JUnit respectivas apoyándose en los métodos de
SeleniumWebDriver.
Página 33 de 63
Estereotipo Comando SeleniumWebDriver
fill type
EnabledVerify isEditable
ExistVerify isElementPresent
Finalmente, se hace el cierre de la instancia de Selenium, es decir que al final de cada uno
de los métodos generados se llama el método close de la instancia del WebDriver.
6. VALIDACIÓN
Página 34 de 63
1. Definición de las pruebas esperadas
Con el fin de validar el funcionamiento de las pruebas se diseñó una aplicación ADF de
prueba, la cual fue modelada utilizando el metamodelo de Oracle Forms de TICSw y a
partir de dicho modelo de la aplicación se ejecutó la cadena de transformación con el fin
de verificar el correcto funcionamiento de las pruebas generadas. El modelo de la
aplicación de prueba se presenta a continuación:
Página 35 de 63
A partir de dicho modelo se definieron las siguientes pruebas esperadas, las cuales fueron
realizadas a mano sobre el Selenium IDE con el fin de comparar las pruebas obtenidas en
la cadena con las que se realizaron manualmente. Las pruebas esperadas son las
siguientes:
Página 36 de 63
ID: FSTC1
Orden: 1
ID: FSTC2
Orden: 2
ID: FSTC3
Orden: 3
Página 37 de 63
Propósito: Probar que el formulario está permitiendo eliminar elementos.
ID: FSTC4
Orden: 4
ID: FSTC5
Orden: 5
Propósito: Probar que el formulario está dando error cuando se dejan vacíos
elementos obligatorios.
ID: FSTC6
Página 38 de 63
Orden: 6
Pasos: Verificar que exista cada uno de los elementos gráficos (imágenes
y datos graficados).
ID: FSTC7
Orden: 7
ID: FSTC8
Orden: 8
Página 39 de 63
Verificar que al recargar el segundo campo tiene el valor que se le
fue asignado.
Verificar que al recargar el tercer campo tiene el valor que se le fue
asignado.
ID: FSTC9
Orden: 9
ID: FSTC10
Orden: 10
ID: FSTC11
Orden: 11
Página 40 de 63
Verificar que ese valor sea el mismo del primer campo del
formulario detalle.
Dar click en Next.
Guardar el valor del primer campo en el formulario maestro.
Verificar que ese valor sea el mismo del primer campo del
formulario detalle.
Dar click en Next.
Guardar el valor del primer campo en el formulario maestro.
Verificar que ese valor sea el mismo del primer campo del
formulario detalle.
ID: FSTC12
Orden: 12
Propósito: Probar que el formulario está dando error cuando se dejan vacíos
elementos obligatorios.
ID: FSTC13
Orden: 13
Página 41 de 63
Dar click en First.
Verificar que el botón de First quede desactivado.
Verificar que el botón de Previous quede desactivado.
Dar click en Last.
Verificar que el botón de Last quede desactivado.
Verificar que el botón de Next quede desactivado.
ID: FSTC14
Orden: 14
ID: FSTC15
Orden: 15
ID: FSTC16
Orden: 16
Página 42 de 63
Asignar valores aleatorios a cada uno de los campos del formulario
(a excepción del primero debido a que este guarda la relación).
Dar click en Submit.
Verificar que cada uno de estos valores aleatorios sea el que esta
al recargar la página.
ID: FSTC17
Orden: 17
Propósito: Probar que el formulario está dando error cuando se dejan vacíos
elementos obligatorios.
Como se puede apreciar la instancia del metamodelo cuenta con un formulario y cuatro
Form Data Block, teniendo una relación maestro detalle entre equipos y software de
equipos y un data block únicamente diseñado para el despliegue de un gráfico circular. Al
realizar la ejecución de la primera parte de la cadena, es decir de la transformación Oracle
Forms a Diagramas de Actividad se obtuvo el siguiente modelo:
Página 43 de 63
Como se puede apreciar para cada uno de los paquetes anteriormente mencionados se
generaron distintos diagramas de actividad. Para el primer Data Block, es decir el de
software, se obtuvieron las pruebas CRUD, de navegación y de error. Lo anterior también
aplica para el paquete de software requerido, sin embargo en el tercero (equipos) se
adiciono el encargado de probar la navegación maestro/detalle del Data Block en cuestión
junto con el de software instalado. Para finalizar la transformación genero una única
prueba de existencia de gráficos para el Data Block llamado gráficos de sistemas
instalados.
Los anteriores paquetes y sus respectivos diagramas eran los que se esperaban de la
primera transformación, puesto que no se tienen ciertos elementos en todos los Data
Block y la información del modelo instanciado de la aplicación modela los que han sido
generados. En una etapa de validación posterior se verificaran las condiciones de cada
diagrama y si contienen los elementos adecuados.
Página 44 de 63
Al ejecutar la segunda parte de la cadena de transformación se obtuvo como resultado el
código en ambas plataformas: IDE y WebDriver. Ambas plataformas fueron probadas
satisfactoriamente, es decir que al tener la aplicación desplegada y al ejecutar tanto las
del IDE como las del WebDriver se pudo verificar que las pruebas habían sido creadas por
la transformación y que además verificaban el estado de la interfaz gráfica.
Página 45 de 63
3. El diagrama debe tener al menos un OpaqueAction (encargados de modelar las
acciones).
4. El diagrama debe tener un único nodo inicial.
5. El diagrama debe contar con un único nodo final.
6. El diagrama tiene una ruta definida, es decir que tiene un nodo inicial y a partir del
mismo es posible recorrer los OpaqueAction hasta llegar a un nodo final.
Al probar el modelo generado con el script EVL fue satisfactorio encontrar que el validador
no encontró errores en la operación, sin embargo se realizaron modificaciones
intencionales, dando lugar a errores que efectivamente fueron reportados por el
validador, comprobando así que el validador funciona de forma adecuada.
Página 46 de 63
6.4 VALIDACIÓN CON DIAGRAMAS HECHOS MANUALMENTE
Crear
Página 47 de 63
Eliminar
Verificación de errores
Página 48 de 63
Navegación
Página 49 de 63
Navegación maestro/detalle
Página 50 de 63
Actualizar
Existencia de gráficos
Página 51 de 63
DIAGRAMAS DE ACTIVID AD PARA FORMULARIO DE SOFTWARE (MAESTRO)
Crear
Página 52 de 63
Delete
Verificación de errores
Página 53 de 63
Navegación
Página 54 de 63
Actualización
Página 55 de 63
Crear
Página 56 de 63
Eliminar
Verificación de errores
Página 57 de 63
Navegación
Actualización
Página 58 de 63
Por otro lado en la generación de la primera transformación al convertir el modelo de
Oracle Forms de la aplicación ADF de pruebas a diagramas de actividad se obtuvieron los
siguientes diagramas:
Al hacer las comparaciones de los componentes de los diagramas con los que han sido
mostrados en las últimas páginas se puede comprobar que la primera transformación
tiene como resultado lo que se esperaba de él.
7. RESULTADOS
Página 59 de 63
PRIMERA SEGUNDA
VALIDACIONES
TRANSFORMACIÓN TRANSFORMACIÓN
Es decir que en conjunto se crearon 1.889 líneas de código junto con 14 archivos para la
implementación de la cadena, desde que se estudia el modelo inicial, se generan las
pruebas, se transforman a diagramas de actividad y se llevan los diagramas a código
Selenium en sus dos plataformas.
APLICACIÓN ADF
IDE WEBDRIVER
Página 60 de 63
Para la toma de resultados sobre una aplicación real se utilizó el modelamiento de una
aplicación empresarial real de Oracle Forms. El modelo de la aplicación cuenta con 89
formularios y la cadena de transformación para este modelo se demora cerca de 2
minutos y 20 segundos para la transformación a Selenium IDE, mientras que para el
WebDriver se demora cerca de 3 minutos con 15 segundos. Como resultado de la cadena
se generan los siguientes resultados:
IDE WEBDRIVER
34.564 660 17.814 168
LINEAS ARCHIVOS LINEAS ARCHIVOS
8. CONCLUSIONES
8.1 DISCUSIÓN
Página 61 de 63
Fue posible incluir las pruebas que se plantearon en un inicio, es decir que en efecto se
crean pruebas para las operaciones CRUD básicas, la navegación de los formularios, la
verificación de errores y la existencia de los gráficos. Todas estas operaciones se pueden
hacer en formularios maestro y maestro/detalle.
Entre los aspectos sobre los que se puede mejorar la implementación actual está el incluir
generación de pruebas para el modo de vista de tablas en los formularios maestro y
maestro/detalle, a partir de aquí se tienen que tener en cuenta las 3 combinaciones
restantes: tabla/tabla, tabla/formulario y formulario/tabla. En el presente proyecto se
manejan únicamente en formato de formulario.
Adicionalmente se pueden incluir las pruebas sobre formularios Lookup, los cuales son
una implementación adicional de Oracle Forms y que se encuentran contenidos en las
tecnologías que funcionan de manera similar.
Finalmente, es posible extender el proyecto actual con las demás capas de las
aplicaciones, es decir que se pueden crear pruebas de persistencia y de funcionalidad, con
las cuales sería posible automatizar aún más el proceso de pruebas.
9. BIBLIOGRAFÍA
Página 62 de 63
[2] Vieria, M., Leduc, J., Hasling, B., Subramanyan, R., &Kazmeier, J. (2006, Mayo 23).
Automation of GUI TestingUsing a Model-drivenApproach. Recuperadoen Septiembre 20,
2014, desde http://dl.acm.org/citation.cfm?id=1138932
[3] Fröhlich, P., & Link, J. (2000). Automated Test Case Generation from Dynamic
Models.Recuperado en Septiembre 20, 2014, desde http://extras.springer.com/2000/978-
3-540-67660-7/papers/1850/18500472.pdf
[4] Grant, R. (n.d.). From Forms to ADF – When, Why and How? Recuperado en Agosto
10, 2014, desde http://download.oracle.com/otndocs/OTNVDD-
REA/ppt/FormstoADF2.pdf
[5] Selenium HQ. (n.d.). Retrieved August 17, 2014, from http://www.seleniumhq.org
[6] Vladan, D., Dragan, D., & Dragan, G. (2006). TheOntology UML Profile. Recuperado en
Noviembre 28, 2014, desde http://link.springer.com/chapter/10.1007/3-540-32182-9_9
[7] Cavarra, A., Davies, J., Jeron, T., Mounier, L., Hartman, A., &Olvovsky, S. (2002). Using
UML for Automatic Test Generation.Recuperado de
http://www.research.ibm.com/haifa/projects/verification/mdt/papers/uml4testgen.pdf
Página 63 de 63