Explora Libros electrónicos
Categorías
Explora Audiolibros
Categorías
Explora Revistas
Categorías
Explora Documentos
Categorías
“MONOGRAFIA”
INTRODUCCIÓN ............................................................................................................ 7
1.1. ANTECEDENTES.................................................................................................... 7
1.2. OBJETIVO GENERAL ............................................................................................. 8
1.3. OBJETIVOS ESPECÍFICOS .................................................................................... 8
1.4. DEFINICIÓN DEL PROBLEMA ............................................................................... 8
1.5. FORMULACIÓN DEL PROBLEMA .......................................................................... 9
1
HERRAMIENTAS PARA PRUEBAS DE ACEPTACIÓN ................................. 27
HERRAMIENTAS PARA PRUEBAS ESTÁTICAS DE CÓDIGO ..................... 28
HERRAMIENTAS PARA PRUEBAS UNITARIAS ........................................... 29
HERRAMIENTAS PARA PRUEBAS FUNCIONALES ..................................... 29
SINGLETON ................................................................................................... 51
FACTORY ...................................................................................................... 53
2
4.4.1.1. PAGE OBJECT ....................................................................................... 57
4.4.1.2. DATA SETS ............................................................................................ 61
4.4.1.3. TEST SUITES ......................................................................................... 62
4.4.1.4. CONFIGURACIÓN DE REGRESIONES ................................................. 65
4.4.1.5. LOGS DE EJECUCIÓN ........................................................................... 65
MANTENIMIENTO.......................................................................................... 66
6. BIBLIOGRAFÍA ............................................................................................................. 76
3
ÍNDICE DE FIGURAS
4
ÍNDICE DE TABLAS
5
RESUMEN
Este documento sirve como base de conocimientos, para la aplicación de un proceso de pruebas
automatizadas para páginas web, que asegure la calidad de los productos de software. El centro
del proyecto es el diseño de framework automatizado que propone el proceso desde el punto de
vista teórico y práctico y además funciona como repositorio de conocimientos para permitir ser
llevada a la realidad de los proyectos que incluyan pruebas de software, tanto en el ámbito
empresarial como académico.
Por otro medio de la utilización de este framework se tendrá una amplia visión de lo que las
pruebas de software implican. Como se plantea en el transcurso de este documento, la idea
central es tener una amplia gama de conocimientos que permitan el aprendizaje y la realización
de procesos involucrados en las pruebas de software automatizadas para el desarrollo de un
framework a medida, logrando así la uniformidad de las posibles soluciones.
6
INTRODUCCIÓN
En ese sentido, los desarrollos tecnológicos pueden ayudar a las empresas a lograr un
mejoramiento de procesos, una clara reducción de costos, y el siempre deseado incremento de
la riqueza de las acciones de dicha empresa. Así, el software desarrollado colabora en cada una
de las actividades importantes del negocio. Siendo la calidad del software un conjunto de
cualidades que lo caracterizan y que determinan su utilidad y existencia, sinónimo de eficacia,
flexibilidad, corrección, confiabilidad, mantenibilidad, portabilidad, usabilidad, seguridad e
integridad. Lograr un alto nivel de calidad de un producto o servicio es el objetivo de la mayoría
de las organizaciones que desarrollan software. Se ha comprobado que el desarrollo de software
está en tendencia de crecimiento en el área de control de calidad de pruebas; satisfaciendo las
necesidades del cliente con un cumplimento de alta calidad. Por lo que se puede analizar la
variedad de tipos y técnicas de pruebas, dada esta situación se considera la complejidad que a
medida van existiendo distintos lenguajes de programación, sistemas operativos tanto en
aplicaciones como en programa de escritorio o Web [1].
1.1. ANTECEDENTES
“De acuerdo con Gartner, Estados Unidos gasta US $59 billones de dólares en pruebas en calidad
del software. De este total, US $13 billones de dólares se invierten en outsourcing en los países
asiáticos. Dada la reputación de India, como país TI, un 70%, representado en US $9.1 billones
7
de dólares, se obtuvo por servicios de TI en pruebas de software externalizadas. Además, se
estima que la India necesitará cerca de 18.000 profesionales en pruebas en calidad del software
cada año durante los próximos tres años para satisfacer la demanda del mercado de las pruebas
de software” [4].
“National Institute of Standards & Technology (NIST), informa que los errores de software está
costando a la economía de Estados Unidos aproximadamente $59,5 billones de dólares cada
año, con más de la mitad de los gastos sufragados por los usuarios finales y el resto por los
desarrolladores y proveedores, y que las mejoras en las pruebas pueden reducir este costo en
cerca de un tercio, o $22,5 billones de dólares pero aun así no se puede garantizar que eliminen
todos los errores de software” [5].
Existen altas exigencias por parte de los clientes para implementar producción en el software que
se requiere. Hoy en día el software acapara gran parte de las actividades diarias de las personas
donde se puede llegar a manejar desde grandes sumas de dinero hasta vidas de personas, desde
8
el inicio del día hasta el final del día se puede ver, la continua usabilidad de aplicaciones de
software se puede ver en todo lado la tecnología.
Los desarrolladores son humanos y el humano comete errores, por lo que el 95% de incidencia
de seguridad de informática se deben a errores humanos, mencionado por el último informe de
los investigadores en seguridad de IBM [6].
La complejidad propia de software hace que sea susceptible de tener errores y un software que
no pase por un proceso de pruebas puede causar importantes pérdidas a nivel económico, daños
ambientales e incluso puede costar la vida de las personas. Sin embargo, a pesar de la
importancia de las pruebas en la calidad del software, y de los beneficios que tiene, no existe en
la actualidad un framework que reúna los procesos, las actividades, los roles involucrados, los
formatos requeridos que cubra el aspecto teórico y práctico de pruebas y que identifique los
distintos entregables o productos de trabajo en cada fase, que permitan asegurar un proceso
efectivo de pruebas en la calidad del software.
Frente a dicho problema, algunas organizaciones han optado por implementar scripts de
automatización de pruebas, aunque al principio arrojan resultados positivos, a largo plazo implica
alta mantenibilidad de los desarrollos realizados para dicho fin. De hecho, uno de los
impedimentos para implementar la automatización es el bajo reúso e inflexibilidad de los scripts
(Zhu, Zhou, Li y Gao, 2008).
Para mejorar la productividad del software desarrollado, actualmente las empresas invierten más
del 50% del costo total de un proyecto en la ejecución de pruebas (Alégroth, Feldt y Kolström,
2016), lo cual ha despertado interés en cómo mejorar el proceso global de pruebas a través de
la automatización.
El estándar IEEE 829-1998 es sumamente importante porque cubre los planes de prueba, los
diseños de pruebas, los casos de prueba, los registros de prueba, los informes de incidentes de
prueba, los informes de resumen de prueba y otros materiales (ULAKBIM UASL - MIDDLE EAST
TECHNICAL UNIVERSITY). Se podrá identificar un plan de prueba, su nivel y el nivel de software
con el que está relacionado. Preferiblemente, el nivel del plan de prueba será el mismo que el
nivel de software relacionado. El número también puede identificar si el plan de prueba es un plan
maestro, un plan de nivel, un plan de integración o cualquier nivel de plan que represente. Esto
9
es para ayudar a coordinar las versiones de software y software de pruebas dentro de la
administración de la configuración.
En la figura 1 se puede observar la oportunidad de negocio entre tecnologías que existe hoy en
día. Las aplicaciones web presentan la particularidad de disponer dos factores fundamentales, su
agilidad para el despliegue y una gran capacidad para saber adaptarse a los gustos de los
usuarios.
Mientras las aplicaciones de escritorio gozaban de casi todo el mercado, no tienen la capacidad
de hacer un despliegue ágil en comparación con otras tecnologías. Este factor, con el nivel de
competitividad, donde predomina el que primero coloque su producto resulta una desventaja
frente a la competencia.
Otra gran oportunidad de negocio son las aplicaciones que aún se desarrollan con tecnología
web 2.0 y aplicaciones destinadas a dispositivos móviles. Estas últimas en pleno auge [8].
MARCO TEÓRICO
10
elaborando las pruebas manuales, cual es el proceso de ejecución de las pruebas manuales,
como son los procesos de desarrollo de la aplicación, que metodología se está usando, cada que
tiempo se tiene un solicitud de cambio, cual es el proceso actual de desarrollo de la aplicación.
2.1. CALIDAD
Una palabra clave que se ha convertido en un factor estratégico y diferenciador para las
organizaciones en búsqueda de esa tan valorada y esperada satisfacción de las necesidades y
expectativas del cliente “la calidad”. Las organizaciones y empresas de desarrollo de software se
han dado cuenta del importante beneficio que conlleva ofrecer productos y servicios de excelente
calidad, reflejados en su productividad, costos, participación en el mercado, competitividad,
motivación del personal y lealtad de los clientes (Sommerville “Ingeniería de Software 7ma. Ed.”).
El término “calidad” ha tomado tal importancia en estas últimas décadas que su aplicación está
más allá de algún tipo de organización en particular o de algún producto específico; el concepto
de calidad es una filosofía aplicable en todos los tipos de organizaciones y alcanza a tocar a cada
persona perteneciente a la organización; así pues, que la calidad tiene que ver con todo y con
todos, y es el factor que permite a las organizaciones asegurar su permanencia en el mercado
(ISO 9000, IEEE 730-2014).
"La calidad no es otra cosa más que una serie de cuestionamientos hacia una mejora continua".
Edwards Deming
“La calidad es la adecuación para el uso, satisfaciendo las necesidades del cliente".
Dr. J. Juran
“La primera hipótesis errónea es que la calidad significa la bondad o elegancia. La palabra
"calidad" se utiliza a menudo para indicar el valor relativo de algo en frases tales como "buena
calidad", "mala calidad" y "calidad de vida", lo que significa algo diferente para cada persona.
Por lo tanto, la calidad debe ser definida como "la conformidad con los requisitos", si hemos de
gestionarla. En consecuencia, la no conformidad detectada es la falta de calidad, los problemas
en la calidad se convierten en problemas de no conformidad, y la calidad se convierte en
definible.”
Philip B. Crosby
11
2.2. CALIDAD DEL PRODUCTO SOFTWARE
La calidad que pueden alcanzar los productos software y en general cualquier producto, está
sometida a cómo se desarrolla cada una de las etapas de la vida del producto, partiendo por la
definición de la idea del producto hasta la entrega y mantención de este. Es importante hacer
énfasis en que la calidad se construye durante el proceso y no al final cuando el producto ya está
construido y que las pruebas se encargan de verificar y validar que el producto final satisface los
requerimientos de usuarios y uso deseado. Es decir, las pruebas no agregan calidad, ésta se
construye durante el proceso de desarrollo.
Así, la entrega de calidad a un producto considera actividades tales, como:
• Administración de los recursos, asegurando minimizar las diferencias entre los recursos
presupuestados y los recursos realmente utilizados en las distintas etapas. Dichos
recursos incluyen el staff, el equipamiento y tiempo de desarrollo.
• Uso de tecnología de Ingeniería de Software eficiente, considerando métodos de
desarrollo y herramientas.
• Aplicación de técnicas o metodologías formales de ingeniería de software a lo largo de
todo el proceso.
• Minimización de las variaciones entre los productos, disminuyendo las diferencias y
defectos entre versiones.
• Testeo exhaustivo en diferentes etapas del desarrollo.
• Control de la documentación, tanto de apoyo al desarrollo como la entregada al usuario
final, generado en cada etapa, y verificación de los posibles cambios y modificaciones
que pudiera sufrir.
• Correcta mantención y servicios de post-venta.
Existen varios modelos reconocidos mundialmente que sirven de guía para la gestión de la
calidad en relación con el software. Cada uno de ellos presenta un conjunto de buenas prácticas
para el ciclo de vida del software, enfocándose en los procesos de gestión y desarrollo de
proyectos (Sommerville “Ingeniería de Software 7ma. Ed.”).
Entre los más conocidos se encuentra el modelo CMMI®, que en una de sus últimas versiones
tiene el modelo CMMI-DEV V1.3 (CMMI for Development –CMMI para Desarrollo), el cual sirve
de apoyo a una organización o proyecto que desarrolle productos o servicios, enfocándose en la
administración, medición y monitoreo de los procesos de desarrollo [11].
12
Por otro lado, se encuentra la norma ISO/IEC 15504, que es un modelo para la mejora y
evaluación de los procesos de desarrollo y mantenimiento de sistemas y productos de software.
Además, el estándar ISO/IEC 9126 es un estándar internacional para la evaluación del software.
Está dividido en cuatro partes las cuales dirigen, respectivamente, lo siguiente: modelo de calidad,
métricas externas, métricas internas y métricas de calidad en uso [11].
El estándar ISO/IEC 29119 para las pruebas de Software, estándar relativo a revisiones, tiene
como objetivo proveer un estándar que capture vocabulario, procesos, documentación y técnicas
para todo el ciclo de pruebas de software [11].
Finalmente, ISO/IEC 12207 establece un sistema para los procesos del ciclo de vida del software.
Contiene procesos, actividades y tareas que se deben aplicar durante la adquisición de un
software [11].
Las pruebas de software se aplican a lo largo del proceso de desarrollo de software, su objetivo
es asegurar que el software cumpla con las especificaciones requeridas y eliminar los posibles
defectos que pudiera tener. Este proceso es llevado a cabo por un equipo de probadores de
software.
Las pruebas nunca podrán identificar todos los defectos en el software. En su lugar, realiza una
comparación entre el estado y el comportamiento del producto frente a los principios o
mecanismos por los cuales alguien podría reconocer que el software tiene un problema.
Las pruebas de software son un proceso de verificación y validación de este. Tiene tres propósitos
principales: verificar, validar y encontrar defectos:
13
• Finalmente, un defecto es una variación entre el resultado previsto y el real.
En un principio, la mayoría de las empresas de desarrollo contaban con una etapa de pruebas
demasiado informal, pero en la actualidad la prueba del software se ha convertido en una de las
etapas más críticas del ciclo de vida del desarrollo de software y esto se ha traducido en el origen
de diversas metodologías.
En la actualidad las pruebas, se hace más complicado ya que debe hacer frente a una gran
cantidad de metodologías de desarrollo, lenguajes de programación, sistemas operativos,
hardware, entre otros.
Para las pruebas del producto, lo recomendable es que el software se mantenga en un ambiente
aislado o separado del ambiente de desarrollo o de producción: lo ideal es preparar un ambiente
de pruebas lo más parecido a los ambientes que existen en producción para asegurar su correcto
funcionamiento en esa futura etapa. Se debe considerar adquirir un equipo de pruebas
especializado, conformado por “probadores de software” o analistas de pruebas con experiencia,
aunque en ocasiones, algunas empresas más informales utilizan a los futuros usuarios del
sistema como probadores de software, situación que puede traer una serie de problemas debido
a la poca experiencia que pueden tener los usuarios en la detección de errores y la falta de
formación en las pruebas para el software, además se obvian pruebas importantes como las
pruebas de esfuerzo o “de stress”; también se dejan de lado las pruebas unitarias o pruebas
modulares, las que deberían asegurar que cada módulo del sistema trabaje correctamente de
manera independiente.
"El testing es una habilidad. Si bien esto puede ser una sorpresa para algunas personas es un
hecho simple."
Graham Fewster
Brian Marick
14
“Una investigación técnica de un producto bajo prueba con el fin de brindar información relativa
a la calidad del software, a los diferentes actores involucrados en un proyecto.”
Cem Kaner
E. W. Dijkstra
ISO/IEC/IEEE 29119
Dave Gelperin y William C. Hetzel describieron en 1988 la evolución de las pruebas de software
como se puede observar en la Figura 2:
Hasta 1956 fue el período orientado a la depuración, donde las pruebas eran asociadas a menudo
con la depuración, no había una clara diferencia entre uno y otro.
De 1957 a 1978 fue el período orientado a la demostración, en la cual la depuración y las pruebas
se distinguían uno del otro. En este período se empezó a mostrar que el software debía cumplir
con los requerimientos.
Entre 1979 y 1982 comienza el período orientado a la destrucción, donde la meta principal era
encontrar errores.
15
De 1983 a 1987 es el período orientado a la evaluación, donde la intención era que durante el
ciclo de vida del software se hacía una evaluación del producto y una medición de la calidad.
Desde 1988 comenzó un período orientado a la prevención, donde las pruebas se hacen para
demostrar que el software satisface las especificaciones, para detectar fallas y prevenir errores
[12]
.
Los modelos más comunes que acostumbran a utilizarse para desarrollar proyectos de pruebas,
y analizar si es posible utilizar alguno de ellas como modelo para la metodología de
automatización de pruebas para servicios web de la respectiva empresa. Las metodologías más
comunes que utilizan para el desarrollo de proyectos que son las siguientes:
• Modelo Cascada
• Modelo V
• Modelo Espiral
• Modelo Ágil
• RAD
MODELO CASCADA
1. Análisis de requisitos.
2. Diseño de los casos de prueba.
3. Implementación de los casos de prueba.
4. Ejecución y verificación de las pruebas.
5. Mantenimiento de las pruebas.
A pesar de ser una metodología muy simple tiene una deficiencia para aplicaciones web y es que
los fallos y errores del código no se pueden descubrir hasta que haya finalizado la implementación
de todas las pruebas de la aplicación. Es muy frecuente que las aplicaciones web estén
continuamente sujetas a cambios importantes de diseño, requisitos, etc. En consecuencia, el
proyecto de pruebas de una aplicación web también requerirá continuas adaptaciones: cambios
16
de etapa sin finalizar, saltos atrás, en definitiva, puede decirse que no se respetarían los principios
de este modelo [39] [40], [12].
MODELO V
El modelo V se llama así porque el esquema que la representa tiene la forma de esa letra. La
mayor ventaja de esta metodología es que el desarrollo de la aplicación y el desarrollo de las
pruebas se van ejecutando paralelamente. Por ejemplo, cuando el equipo de desarrollo se
encuentra desarrollando el análisis de requisitos, el equipo de pruebas al mismo tiempo puede
comenzar a preparar las pruebas aceptación. Siguiendo este modelo, los retrasos se reducen al
mínimo [12].
En la siguiente figura se muestran las etapas de desarrollo del proyecto de una aplicación y el
nivel de las pruebas que se ejecutarán en esa etapa [40], [12].
17
Figura 4: Modelo V
Fuente: ISTQB
MODELO ESPIRAL
El modelo en espiral sigue un planteamiento en el que cada espiral es un ciclo que contiene todos
los pasos secuenciales del modelo de cascada. Una vez que el ciclo inicial se completa, un
análisis exhaustivo y la revisión del producto logrado o de salida se llevan a cabo. Si no está de
acuerdo con los requisitos establecidos o estándares esperados, un segundo ciclo siguiente, y
así sucesivamente. Esta metodología sigue un método iterativo y generalmente es adecuado para
proyectos muy grandes con requisitos complejos y en constante cambio [40], [41], [12].
18
Figura 5: Modelo espiral
Fuente: ISTQB
MODELO ÁGIL
El modelo ágil es una metodología que no sigue ni un enfoque puramente secuencial como
modelo cascada, ni un enfoque puramente iterativo como el modelo en espiral. Más bien puede
considerarse como una combinación entre estos dos enfoques y otros métodos de desarrollo
propios. El objetivo de este modelo es obtener resultados rápidamente, de manera práctica y que
sean visibles. La continua interacción con el cliente y la colaboración es una parte clave del
proceso de desarrollo [40], [12].
Esta metodología, está diseñada para conseguir un desarrollo rápido del proyecto de pruebas.
Apenas conocer los requisitos de la aplicación, se prepara un prototipo rápido. Una vez elaborado
el prototipo y haberlo comentado con el cliente o el equipo de desarrollo, se hacen los cambios
necesarios y se continúa con el desarrollo. No es adecuado para proyectos grandes ni complejos,
más bien está pensado para proyectos sencillos donde las necesidades estén en constante
cambio [40], [12].
19
2.6. NIVELES DE PRUEBAS
Una breve descripción de los niveles de pruebas, organizados según la etapa del proyecto que
se quiere testear en la que se ejecutan. Para cada tipo de pruebas, hay tres características sobre
las que se hace especial énfasis. La primera es la opacidad del tipo de prueba, es decir, si es un
testeo de tipo caja blanca o caja negra. La segunda es el alcance del proyecto con el que se
corresponde la prueba. Puede ir desde una línea de código hasta toda la aplicación. Por último,
se define cual es el objetivo de las pruebas [12].
Este tipo de testeo puede describirse como la verificación a muy bajo nivel de que el código hace
lo que se espera que haga y para poder verificar las pruebas es necesario disponer del diseño y
la estructura del código.
Un ejemplo de prueba de este tipo sería la verificación que una función de la aplicación devuelve
el valor esperado [12][9].
20
• Objetivo: verificar que los distintos módulos individuales testeados en las pruebas
unitarias funcionan como grupo.
La prueba de integración testea la interacción entre los componentes de software, hardware o
ambos. Este testeo casi siempre lo realiza el desarrollador del código. Usando las técnicas Black-
box y White-box el probador de software verifica la correcta unión entre las diferentes unidades
para construir el sistema [12][9].
Un ejemplo de problema de este tipo sería, por ejemplo, que los datos que debieran llegar a la
interfaz no lo hicieran. Esto podría suceder por dos razones distintas:
Las pruebas de sistema consisten en probar la aplicación que se está desarrollando en diferentes
entornos, para verificar que el software funciona correctamente en los entornos más comunes
que los usuarios accederán a ella. Las pruebas de sistema tienen en cuenta las distintas
versiones, tipos de sistemas operativos y aplicaciones que intervienen al ejecutarse la aplicación.
Es más conveniente que las pruebas funcionales y las pruebas de sistema los lleven a cabo
personas que no hayan desarrollado ese código, puesto que aportan un punto de vista imparcial
e independiente al que tendrían los autores del código [12][9].
21
• Pruebas de funcionalidad: Las pruebas funcionales son una parte de las pruebas cuyo
objetivo es verificar que las funcionalidades definidas en la especificación de requisitos de
la aplicación se cumplen. Para verificar las funcionalidades de la aplicación se consideran
los datos de entrada que tras utilizarlos para testear esta funcionalidad devolverán otros
valores de salida. La verificación se obtiene comprobando que los datos de salida que se
[12]
obtienen son los esperados para los datos que hemos utilizado en la entrada .
• Pruebas de carga: este tipo de prueba consiste en llevar el sistema a los límites de la
especificación de requisitos. Por ejemplo, si una de las condiciones acordada con el cliente
sobre la web que se está desarrollando es que 1000 personas puedan autenticar al mismo
tiempo, el stress test de este requerimiento consistiría en comprobar que 1000 personas
pueden autenticar al mismo tiempo sin provocar ningún problema [12].
• Performance testing: este tipo de prueba verifica que se cumplen los requisitos de
ejecución acordados con el cliente. Continuando con el ejemplo anterior, si uno de los
requisitos acordados es que un cliente debe poder autenticar sin tener que esperar más de
5 segundos, el probador de software tendría que comprobar en cualquiera de los casos
posibles que puedan darse que cualquier usuario, tanto si se están autenticar de “0” a “999”
usuarios a la vez [12].
22
Este tipo de pruebas sencillamente verifica si el producto desarrollado satisface al cliente y si en
consecuencia aceptará o no aceptará el producto.
Estas pruebas pueden ser especificadas por el cliente y dados a los probadores de software para
llevarlos a cabo antes de entregar el producto. Si el software no pasa las pruebas de aceptación,
el cliente tiene el derecho de no aceptar el producto.
Un cliente generalmente no especifica una prueba completa de todo el sistema. Quizás especifica
un buen test para cada requerimiento, pero probablemente no sean suficientes. Para que el
software tenga la aceptación del cliente y no falle en el futuro, es recomendable hacer pruebas
de aceptación por cuenta propia de los probadores de software [12].
El otro modo de agrupar las pruebas es según el objetivo para el que se utilizan. En la
documentación y bibliografía consultada se consideran dos tipos: pruebas de regresión, pruebas
alfa y pruebas beta.
“Selective retesting of a system or component to verify that modifications have not caused
unintended effects and that the system or component still complies with its specified
requirements.” (IEEE 610.12-1990).
Es decir, las pruebas de regresión son aquellas cuyo objetivo es volver a testear el sistema para
verificar que las pruebas que antes tenían éxito, después de las modificaciones lo siguen
teniendo.
Las pruebas de regresión pueden considerarse como un subgrupo del conjunto de todos los
casos de prueba. Se ejecutan tras modificaciones significativas como errores resueltos o mejoras
en el sistema.
23
Dependiendo del tamaño del proyecto y de todas las pruebas que el sistema tiene que superar,
puede resultar poco práctico ejecutarlos todos cada vez que se hace una modificación. Las
pruebas de regresión se realizan durante todo el ciclo de desarrollo del proyecto con White-box
en los niveles de pruebas unitarios y de pruebas de integración y con Black-box en los niveles de
test de integración, funcionales, sistema y aceptación [12].
Tras llevar a cabo una modificación deben tenerse en cuenta los siguientes criterios para escoger
el grupo de pruebas a ejecutar:
24
• Objetivo: hallar errores ofreciendo la aplicación de prueba a los usuarios finales.
Cuando una versión avanzada o completa del software que se está desarrollando está disponible
para su uso, se puede realizar una prueba de tipo beta. Este tipo de prueba consiste en ofrecer
esta versión a algunos usuarios para que utilicen la aplicación y la prueben a condición de que
reporten al equipo de desarrolladores los errores que vayan detectando [12].
A continuación, se muestran unas tablas informativas que resumen los niveles de pruebas.
Nivel de Pruebas Requisitos
Unitario Diseño de Bajo Nivel / Código Actual
Integración Diseño de Bajo Nivel / Diseño de Alto Nivel
Funcional Diseño de Alto Nivel
Sistema Análisis de Requerimientos
Aceptación Análisis de Requerimientos
Beta Ad hoc
Regresión Cambios en la Documentación / Diseño de Alto Nivel
25
Nivel de Pruebas Método
Unitario Caja Blanca
Integración Caja Blanca / Caja Negra
Funcional Caja Negra
Sistema Caja Negra
Aceptación Caja Negra
Beta Caja Negra
Regresión Caja Blanca / Caja Negra
Se definen en primer lugar los dos grandes grupos en los que se separan las pruebas: caja negra
y caja blanca (ISBQT) [12].
A continuación, se caracterizan las pruebas por niveles. Para cada nivel se define los aspectos
[12]
que se tienen en cuenta a la hora de clasificar una prueba: opacidad, requisitos y objetivos .
La estrategia de Black-Box, o caja negra, puede definirse en los términos que presenta el IEEE:
“Testing that ignores the internal mechanism of a system or component and focuses solely on
the outputs generated in response to selected inputs and execution conditions.”
(IEEE 610.12-1990).
Lo único que ha de hacerse es facilitar datos de entrada al programa y comprobar que los datos
de salida corresponden a los datos esperados. A esta estrategia también se le llama funcional.
En las pruebas de caja negra, es preciso diseñar casos de prueba en los que el programa no
actúe como está esperado que lo haga.
Si se desea utilizar este método para encontrar todos los errores en el programa, el factor
determinante es la prueba de entrada exhaustiva, esto es, utilizando todas las posibles entradas
como juego de pruebas [12].
26
3.2. PRUEBAS DE CAJA BLANCA (WHITE-BOX)
La estrategia White-box, o de caja blanca, queda definida como:
“White-box testing is testing that takes into account the internal mechanism of a system or
component”
(IEEE610.12-1990)
Lo ideal sería probar todos los posibles puntos por los que puede pasar el programa según los
datos de entrada. A los caminos que puede tomar la ejecución del programa se le llama el flujo
del programa [12].
Este tipo de pruebas pueden realizarse con prototipos de la aplicación basados por la ISTQB [12],
diagramas de secuencia o casos de uso que se muestran al usuario para que valide los
requerimientos definidos, existen algunas herramientas que pueden ser útiles:
FitNesse: “SOFTWARE TESTING CLASS”, menciona que la herramienta permite a los usuarios,
equipos de pruebas y programadores aprender lo que debe hacer el software y comparar
automáticamente lo que realmente hace. Se pueden realizar pruebas de aceptación y pruebas
[16]
de reglas de negocio. Es una wiki que no requiere demasiadas configuraciones .
27
HERRAMIENTAS PARA PRUEBAS ESTÁTICAS DE CÓDIGO
En este tipo de prueba es muy importante la utilización de herramientas, dado que las mismas
facilitan las tareas del equipo de pruebas. Con su uso, es posible encontrar más fácilmente
errores tales como: código muerto, código fuente no documentado o mal finalizado, entre otros.
Se pueden utilizar las siguientes herramientas:
PHPLint: “Tutorial PHPLint”, expresa que la herramienta permite realizar pruebas de código
fuente, con esto se pueden mejorar las tareas de programación, ya sea comenzando la
codificación con esta herramienta o bien, mejorando código ya existente. Brinda buenas prácticas
que permiten dar seguridad en el código, errores de sintaxis, variables no utilizadas, código
muerto [18].
PMD: “Marco de desarrollo de la Junta de Andalucia” menciona que la herramienta puede ser
integrado a varias herramientas: JDeveloper, Eclipse, JEdit, JBuilder, BlueJ, TextPad, Maven,
Ant, Gel, Jcreator, etc. Permite encontrar en el código errores en el manejo de excepciones,
código muerto, código sin optimizar, código duplicado [21].
28
devAdvantage Anticipating Minds Crea estándares de codificación en C#. Detecta y corrige
para cumplir con las mejores prácticas de .NET.
LDRA Testbed LDRA Herramienta de análisis estático de código para C/C ++, C#,
Ada83, Ada95, Java, Visual Basic, Cobol, Coral66, Fortran,
Pascal, PL/Mx86, PL/1, Algol e Intel
Logiscope Telelogic Herramienta de análisis de código fuente.
McCabe TQ McCabe Software Ayuda a identificas, medir y reportar la complejidad del
código en la aplicación y a nivel de empresa.
Predictive Lite Ism Analizador de código que predice defectos en C, C++, Java
o C#, basándose en estándares de industria
En este tipo de prueba el uso de herramientas facilita tareas como probar una clase o un módulo
en particular. Las herramientas dependen del lenguaje utilizado. Algunas de ellas son:
PHPUnit: “Sebastian Bergmann”, menciona que es un framework para PHP que permite crear y
ejecutar tests unitarios de manera simple. Está basado en el framework “JUnit” para java [24]
.
SimpleTest: Es un framework para pruebas de unidad en PHP y pruebas Web. Esta herramienta
cuenta con un navegador Web interno, lo que permite que las pruebas naveguen los sitios Web,
ingresen datos en formularios y páginas de prueba [25].
Para este tipo de pruebas, se tiene varias herramientas, las cuales se dividen en distintas
“categorías”. Analizaremos las herramientas que verifican enlaces y de funcionalidad.
XENU: “Xenu’s link Sleut”, menciona que la herramienta, permite encontrar los enlaces rotos en
un análisis en profundidad (HTTP y HTTPS). Como resultado muestra un listado de los enlaces
(imágenes, .css, etc.) rotos en el sitio [26].
29
LINK Checker W3C: “Ville Skyttä”, expresa que una herramienta disponible On-Line. Permite
encontrar enlaces rotos, anclas mal definidas, advertir sobre redirecciones [27].
Link Evaluator: Se integra a la interfaz del navegador. Se procesa sólo la página actual y no
realiza un análisis en profundidad, resaltando en distintos colores el estado de los enlaces [29].
Selenium IDE: “SeleniumHQ”, menciona que es una extensión para el navegador Web Firefox
entre otros. Permite grabar clicks, tipeo y otras acciones para realizar test. Estos scripts grabados,
luego pueden ser exportados en distintos lenguajes (PHP, JAVA, Ruby, C, etc.) para su posterior
adaptación y utilización [30].
Badboy: Permite grabar y luego reproducir las acciones realizadas por los usuarios, luego este
script puede ser utilizado en otras herramientas, como ser JMeter. Se puede integrar al navegador
Web Internet Explorer [32].
SAHI: “SAHI”, menciona que la herramienta permite grabar y luego reproducir script. Tiene
soporte funciones realizadas en lenguaje JavaScript [33].
30
ofrece una versión mejorada para SAP, con un motor para
realizar pruebas de carga y de estrés.
GUITAR University of Herramienta libre que genera nuevos test cases basándose en
Maryland una tecnología que usa gráficos de flujo de eventos. El pre y
post-condiciones se usan para generar la respuesta esperada.
HoloDeck Security Simula el mundo real y los errores de una aplicación. Permite a
Innovations los testers y desarrolladores trabajar y depurar código en
ambientes complejos.
MITS.GUI Tiene una máquina de estados que toma decisiones en tiempo
real para navegar a través de una porción de GUI de una
aplicación sin Scripts. Los testers simplemente entran los datos
en una hoja de cálculo, y estos se usan para poblar los datos en
una hoja de cálculo, y estos se usan para poblar los objetos que
aparezcan en un escenario particular definido.
QACenter Compuware Herramienta para el desarrollo y ejecución de pruebas de GUI y
basadas en arquitectura cliente – servidor.
SAP Software Sucid El proveedor de herramientas y productos para aseguramiento
Quality de la calidad del software.
Assurance
Testing Tools
ScriptTech TMX Genera scripts ejecutables par WinRunner, TestPartner, SilkTest
y otras herramientas sin necesidad de entender el lenguaje de
programación.
Smalltalk Test SilverMark, Inc. Hermanitas de pruebas GUI y de objetivos para IBM.
Mentor
Squish Froglogic Framework para aplicaciones en C++. Permite hacer pruebas a
las aplicaciones usando scripts grabados o creados
manualmente en diferentes lenguajes.
TestArchitect LogiGear Framework para automatización que soporta la mayoría de las
plataformas existentes.
TestWorks Software Suite que integra Pruebas de Regresión Automatizadas y
Research Análisis de Cobertura para UNIX, Windows/2000/NT/XP con
múltiples reportes y scripts reutilizables en C, C++ y Java.
Unified Test Pro Software Una solución de “3ra generación” para pruebas de
Debelopment automatización que usa un enfoque basado en roles para el
Technologies diseño, construcción y ejecución de casos de pruebas.
WinRunner ® Mercury Graba y reproduce pruebas de GUI para aplicaciones Windows.
31
X-Unity MIIK Ltd Ambiente de pruebas unitarias para el Framework de Microsoft
.NET.
Astra Mercury Web site para testing funcional.
QuickTestTM
Auto Tester One Auto Tester Sirve para realizar pruebas funcionales de regresión e
integración de aplicaciones Windows, Cliente-Servidor o Web.
PerterCat PesterCat Herramienta de pruebas Web diseñado para realizar pruebas
funcionales sobre aplicaciones Web. Permite grabar scripts
usando cualquier navegador. Funciona en Linux, MAC, OSX y
Windows.
Ranorex Ranorex Framework de automatización para pruebas en Windows GUI y
Software C++, Python y los lenguajes .NET.
Rational Robot Rational Permite realizar pruebas funcionales de regresión y smoke test
Software en aplicaciones Web.
Selenium ThoghtWorks Herramienta de pruebas para aplicaciones Web. Se ejecuta
directamente en un navegador tal y como lo harían los usuarios
reales. Corre en Internet Explorer, Mozilla, Firefox y en Windows,
Linux y Macintosh.
TestWeb Original Software Soluciones de automatización para IBM iSeries, Microsoft y
Oracle.
QTP Mercury-HP El Quick Test Profesional es utilizado popularmente como
herramienta de automatización de pruebas de regresión.
Yawet InfoMatrix Herramienta Java para crear, ejecutar y depurar pruebas sobre
Web. Sirve para verificar HTML, PDF y XML.
Las herramientas, en este caso son útiles, por ejemplo, en las pruebas que necesitan tener
concurrencia de usuarios al servidor a probar. Algunas de ellas son:
JMeter: “THE APACHE SOFTWARE FUNDATION”, menciona que es utilizada para realizar
pruebas de rendimiento, de stress, de carga y de volumen, sobre recursos estáticos o dinámicos
[34]
(Servlets, scripts Perl, Objetos Java, BB.DD., Servidores de FTP).
OpenSTA: “OpeenSTA User Home”, expresa de la herramienta que se pueden crear script con
peticiones HTTP y HTTPS, para realizar pruebas de rendimiento. Permite captar las peticiones
32
del usuario generadas en un navegador Web, luego guardarlas, y poder editar para su posterior
uso [35].
Grinder: Es un framework escrito en Java, con el cual se pueden realizar pruebas de rendimiento,
[37]
a través de script escritos en lenguaje Jython . Permite grabar las peticiones del cliente sobre
un navegador Web para ser luego reproducido [36].
BugTimer BugStomper Aplicación que graba, muestra, guarda, ordena e imprime los
Software resultados de las pruebas de desempeño.
DB Stress DTM Aplicación para hacer pruebas de estrés sobre aplicaciones y
DBMSs.
IxLoad Ixia Herramientas para ejecutar pruebas de carga en clientes, servidores
y web.
SilkPerformer Segue Aplicación para ejecutar pruebas de desempeño que puede emular
millones de usuarios. Emula protocolos por HTTP, SSL, FTP, SMTP,
POP3, Streaming/VolP, IPSEC, PPPoX, entre otros.
ANTS Red Gate Para realizar pruebas de carga y escalabilidad en servicios Web de
.NET y en aplicaciones.
LoadTracer Trace Herramientas para pruebas de carga desempeño, estrés y
Technologies escalabilidad de aplicaciones Web. Simula múltiples instancias de
un cliente Web entrando aun servidor Web y es compatible con
internet Explorer y Netscape.
Microsoft Microsoft Diseñada para realizar pruebas de estrés en servicios Web y
Application analizar el desempeño de la aplicación, incluyendo páginas en ASP
Center Test y sus componentes. Soporta diferentes esquemas de autenticación
y el protocolo SSL, muy útil en pruebas de sitios seguros.
NeoLoad Neotys Simula cientos de usuarios virtuales en el sitio Web obteniendo
estadísticas de desempeño y resolviendo los errores que surgen de
las pruebas.
OpenSTA OpenSTA Software Open source para generar cargar realmente pesadas para
simular la actividad de miles de usuarios virtuales.
Proxy Sniffer Ing. Fischer Herramientas de pruebas de carga y estrés que permite analizar las
características de desempeño y la estabilidad de una aplicación bajo
diferentes condiciones de carga.
Siege Joe Dog Herramientas open source para pruebas en sistemas UNIX.
33
TestMaker PushToTest Framework open source para construir agentes de pruebas
inteligentes para probar servicios web (HTTP, HTTPS, SSL, Servlet,
JSP, EJB, ActiveX, SOAP, .NET). Creado en Java se puede ejecutar
en cualquier sistema que permita Java, incluyendo Windows, Linux,
Solaris, Macintosh y más.
Web Appliation Microsoft Herramienta que simula múltiples pedidos de diferentes páginas de
Stress Tool diferentes browsers.
Webload Radview Herramientas para hacer pruebas de desempeño en aplicaciones en
Software internet e intranet
Web Web Para realizar pruebas de desempeño Web en Windows y UNIX.
Performance Performance
Trainer
Web Server Paessler Aplicación para pruebas de carga en servicios Web.
Stress Tool
Load Gold ApTest Combina herramientas Open source con consultoría por parte de
expertos y transferencia de tecnología al equipo.
SiteStress WebMetrics Un completo servicio para generar transacciones que soporten
HTTP que crecen de cientos a miles.
WebStress Moniforce Servicio para realizar desempeño Web y pruebas de estrés.
AETG Telcordia Sus algoritmos usas técnicas de diseño combinatorio para crear
sets de prueba mínimos que cubren todas las interacciones
entre los datos de entrada.
Data Generator DTM Sirve para generar datos, tablas (vistas, procedimientos, etc.)
para pruebas de base de datos.
Datatect Banner Sftware Genera datos de pruebas a archivos ASCII o directamente en
el RDBMS (sirve para Oracle, Sybase, SQL Server e Informix).
Jenny Herramienta gratuita similar a AETG y a ALLPAIRS. JENNY
indica la cantidad de test cases que se deben generar para
probar todas las características de la aplicación.
Jumpstart Talking Frog Herramienta de generación de base de datos para SQL Server.
34
TurboData Canam Generador gratuito de datos de prueba bastante reales con las
Software foreing key resueltas. También genera los Select, Update, y
Delete en SQL.
utPLSQL Herramienta open source, para pruebas unitarias en Oracle
PL/SQL.
GenerateData.com Benjamin Keen Generador on-line gratuito de hasta 200 datos. Por ejemplo,
nombres, números telefónicos, direcciones de correo
electrónico, ciudades, estados, provincias, países, fechas,
direcciones, rangos de números, cadenas alfanuméricas, textos
Lorem Ipsum y más. Guardando los datos en formato HTML,
XML, Exel o SQL.
35
HERRAMIENTAS PARA PRUEBAS DE SERVICIOS HTML
36
BugAware.com Bugaware Solución para control de defectos que incluye notificación por
Email, base de conocimientos, reportes dinámicos, gestión del
equipo, hilos de distribución entre los usuarios, etc.
BugHost Active-X.COM BugHost es un sistema de control de defectos ideal para
compañas pequeñas y medianas que quieren usar un sistema
seguro y basado en Web.
BugRoster Codeca Corp Sistema multiusuario para el control de defectos de reportes.
37
HP Quality HP Gestiona y controla los procesos de calidad y automatiza las
Center pruebas de software en el entorno de las aplicaciones y TI.
SilkPlan Pro Seque Software Sistema para gestión de la calidad que permite la gestión de las
pruebas y un framework de colaboración diseñado para
aplicaciones de gran tamaño.
38
HERRAMIENTAS PARA GESTIÓN DE REQUISITOS
Producto
Proveedor Descripción
Analyst Pro Goda Potente herramienta para gestión de requisitos, que incluye la
Software posibilidad de crear y modificar especificaciones y diagramas.
Caliber Borland Ayuda a los equipos a hacer seguimiento de cada etapa de proyecto
con bastante precisión. Tiene una interfaz intuitiva y soporta el proceso
de toma de decisiones.
RequisitePro IBM Herramienta de gestión de requisitos y casos de uso para equipos que
quieran mejorar la comunicación de las metas del proyecto, mejorar el
desarrollo colaborativo, reducir los riesgos del proyecto e incrementar
la calidad de las aplicaciones antes de ser puestas en producción.
SteelTrace SteelTrace Herramienta de captura de requisitos que permite a todos los
involucrados en el negocio trabajar colaborativamente para entender,
definir, comunicar y gestionar los requisitos del software.
OTRAS HERRAMIENTAS
39
3.4. VENTAJAS Y DESVENTAJAS DE LAS HERRAMIENTAS
Las herramientas antes mencionadas, fueron analizadas y las siguientes tablas resumen las
características más destacadas de cada una de ellas. Esto permite contar con una guía que
permitirá evaluar su utilización dependiendo de la finalidad en la cual se van a utilizar.
Las herramientas para pruebas de aceptación mencionadas en la tabla 16, considerando que son
herramientas open source favorece en su aprendizaje fácilmente sin necesidad de permisos o
adquisición para su manipulación, la herramienta Avignon tiene la manipulación de lenguajes
mínimos y definidos en la tabla, no se encuentra demasiada información de aplicaciones en
software de automatización, en comparación con FitNesse, tal herramienta tiene casi toda la
manipulación de lenguajes, tiene una dependencia de Maven Classpath, Ivy Classpath, Gradle
Classpath, tiene accesorios de aplicaciones web como Xebio (driver para selenium-IDE con
soporte de ida y vuelta), SeleNesse (criver para selenium), Azufre(driver para selenium, soporte
para todos los selectores de selenium).
VENTAJAS DESVENTAJAS
FitNesse Avignon FitNesse Avignon
Compara las Permite escribir pruebas No tiene guía de usuario
expectativas de los ejecutables en el o ayuda para la
clientes a los resultados lenguaje elegido. manipulación de la
reales herramienta.
Código abierto Código abierto. Los lenguajes
manipulables son java y
.NET
Es adaptable para todos Es adaptable con todos
los idiomas. los idiomas.
40
Cuando el proyecto está
escrito en Java, Python
o C#, se puede conectar
y puede automatizar el
proceso de prueba.
La herramienta PHPLint; enfocado en lenguaje PHP, ejecuta las pruebas unitarias, detecta
variables no validas, código muerto, errores de sintaxis brindando seguridad en el código, en
comparación RATS; esta herramienta se aplica para software industrial, tiene más lenguajes con
los que pude trabajar para la identificación de errores de la funcionalidad en procesos de
ejecución y rendimiento del software y no existe un manual específico para su aprendizaje, en
comparación con YASCA encuentra errores en el código, tiene una manipulación más amplia en
cuanto a lenguajes de programación, comparando con PMD y FindBugs estos usan lenguaje java,
la diferencia entre tales herramientas es que unas funcionan con diversos lenguajes y otras son
para lenguajes específicos.
41
PHPLint RATS YASCA PMD FindBugs
42
JUnit PHPUnit SimpleTet
Se ejecutan datos de entrada (casos Tiene una extensión
Codigo abierto.
de prueba) para verificar que el eclipse para PHP 5.1
funcionamiento cumple los Tiene tutorial explicito para su (también conocido como
requisitos esperados. aplicación. antiguo).
Disponible para todos los
Posee la herramienta XUnit que sistemas operativos.
domina las pruebas unitarias para
diferentes lenguajes.
Convierte un lenguaje poco tipado
como PHP en un lenguaje
Sirve para realizar pruebas de fuertemente tipado.
regresión.
Funciona bien con todos los
VENTAJAS
servidores de integración
continua.
Usa un lenguaje
especifico PHP.
43
SAHI tiene las mismas funcionalidades que los demás pero presenta problemas en su
implementación.
Conjunto de Código abierto. Diseñada para ayudar Soporta por defecto pas
herramientas con en la prueba y el aplicaciones web y la
enfoques diferentes Adaptado para ser desarrollo de automatización de API
para admitir la utilizado en aplicaciones REST.
automatización de combinación con dinámicas complejas.
pruebas. JUnit. Realiza pruebas entre
El usuario graba navegadores/navegadores
Tiene soporte para Ayuda en las pruebas fácilmente scripts de web 2.0 complejas con
ejecutas las pruebas de regresión. grado profesional y gran cantidad de AJAX y
en múltiples enviarlos contenido dinámico.
plataformas. directamente a
WatchMouse para Agrega soporte para
que se ejecuten como aplicaciones de escritorio
scripts supervisados de Windows(Win32, WPF,
en más de 25 WinForms, .NET,
estándares.
VENTAJAS
SilverLight, XBAP,
Universal Windows
platform, UWP)
44
Como buenas prácticas se propone tener establecida una Arquitectura de Automatización de
Pruebas (TAA - Test Automation Architecture), teniendo en cuenta que la automatización de
pruebas es un proyecto de Software, y debe ser tratado como tal.
El SUT (Software Under Test) debe ser desarrollado para soportar pruebas automáticas, en
dónde el SUT debe desacoplar la interacción con la interfaz gráfica de los datos y su apariencia
visual. Esto se puede traducir en la creación de mecanismos para identificar de manera única
cada elemento visual presente en el Software Under Test.
Los 5 principios básicos de la programación orientada a objetos son esenciales para construir
software que permitirá implementar una estrategia y se pueda conseguir software que funciona.
El principio SOLID ayuda a los desarrolladores de software a conseguir escalabilidad y evitar que
el código se rompa cada vez que aparece un cambio [43].
“Nunca debería haber más de una razón en una clase para cambiar”
Este principio dice que el módulo (clase) debería tener una sola razón para ser modificado.
Ejemplo: la clase Mensajero, de la figura 6, tiene dos responsabilidades: enviar correos y enviar
mensajes de texto.
45
Esta clase podría cambiar por varias razones:
• El mecanismo para enviar correos es diferente. Por ejemplo, antes se usaba un servidor
SMTP y ahora se requiere usar un API.
• Cambios en la plataforma de mensajes de texto.
• Aparición de una nueva forma de enviar mensajes.
Se puede ver 3 razones diferentes por las cuales la clase podría cambiar. Esto puede traer
problemas de mantenibilidad. De ahí la importancia de respetar este principio.
En el ejemplo anterior, se podría utilizar distintos patrones de diseño para resolver el problema.
En este caso en particular, se tiene que separar cada una de las formas de mandar mensajes en
clases diferentes, y luego, mediante un patrón de fachada podrá facilitar el consumo de cada una
de las funcionalidades.
Así, cada clase tendría una única razón para cambiar. Por ejemplo, si en algún momento cambia
la plataforma de mensajes de texto, tendría que modificarse la clase EnvioSMS. Si en algún
momento se puede enviar correos con un servidor SMTP a un API de un tercero, solo impactara
la clase EnvioCorreo.
De esta forma, se cumple el principio de única responsabilidad.
46
4.1.1.2. O (OCP) PRINCIPIO DE ABIERTO/CERRADO:
“Entidades de Software (clases, módulos, funciones, entre otros.) han de estar abiertas para
extensiones, pero cerradas para modificaciones”
Este segundo principio dice que nuestro sistema debería estar cerrado a modificaciones, y abierto
a extensiones.
En pocas palabras: si se quiere añadir nuevo código, lo ideal sería poder construir sobre lo que
ya existe, sin tener que hacer modificaciones grandes.
Ejemplo: al enviar mensajes usando el chat corporativo de la empresa. Tal como quedó el refactor
del ejemplo anterior, serían necesarios los siguientes cambios:
• Agregar un nuevo método en la clase Mensajero para enviar mensajes por chat.
Esto no sería lo óptimo. Cada vez que se añade una nueva forma de envío, sería necesario
modificar la clase Mensajero. Además, habría que cambiar todos los lugares donde se llamen los
métodos de Mensajero para que tengan en cuenta la nueva forma de enviar mensajes.
Este es un ejemplo donde no estamos respetando el principio de abierto cerrado.
¿Cómo lo podemos mejorar?
47
Añadiendo mayor flexibilidad.
Flexibilidad que permita añadir nuevos mecanismos de forma fácil, sin tener que modificar lo que
ya funciona. Nuevamente, vienen los patrones al rescate.
Lo primero que se puede hacer es crear una interfaz que permita definir el comportamiento de
cualquier clase que sea capaz de enviar un mensaje. Luego, poner a cada una de las clases
especializadas en envíos a que la implementen.
(Una nueva clase, Mensaje, que sirve para unificar los parámetros que recibe el método enviar).
Es algo muy similar al patrón adaptador, esto se ve en la figura 9. Cada clase está especializada
en conectarse con una forma diferente de enviar mensajes.
Se necesita quitar el conocimiento a la clase Mensajero de las distintas clases que envían
mensajes. Para esto, se implementa una fábrica.
48
Figura 10: Diagrama "Fábrica"
Fuente: Software Architect Oscar Blancate Iturralde
Teniendo la fábrica, la clase Mensajero ya no necesita métodos específicos por cada método de
envío. Solo necesita pedirle a la fábrica un objeto de tipo EnvioMensaje, e invocar sobre este el
método enviar.
Visto de otra manera, las clases hijas no deberían modificar o eliminar los comportamientos
definidos en el padre.
A diferencia de los principios anteriores, no hay algún patrón de diseño específico por aplicar
aquí. Sin embargo, tener a la mano patrones de diseño relacionados con la herencia pueden ser
muy útiles. Algunos ejemplos:
• Método plantilla.
• Composite.
• Estrategia.
• Estado.
49
4.1.1.4. I (ISP) PRINCIPIO DE SEGREGACIÓN DE LA INTERFAZ:
• Las abstracciones no deberían depender de los detalles. Los detalles deberían depender
de las abstracciones.
Una forma de lograr esto, es empleando la inyección de dependencias (un tipo de inversión de
control). Si bien no es uno de los patrones de diseño orientado a objetos, es una forma muy útil
de garantizar la dependencia con abstracciones.
En general todos los patrones que ayuden a abstraer nuestros módulos son útiles para lograr
este principio. En particular, es relevante mencionar:
• Fachada.
• Fábrica abstracta y método fabrica.
• Adaptador.
50
4.2. PATRONES DE DISEÑO DE SOFTWARE
Los patrones de diseño de software son formas “estandarizadas” de resolver problemas comunes
de diseño en el desarrollo de software amplio.
SINGLETON
Singleton es el más sencillo de los patrones que se presentan en el catálogo del GoF (disponible
en el libro Patrones de Diseño (GoF 95) y analizado previamente en "Patrones y Antipatrones:
una introducción" [Welicki05]). Es también uno de los patrones más conocidos y utilizados. Su
propósito es asegurar que sólo exista una instancia de una clase.
El patrón singleton garantiza que una clase solo tenga una instancia y proporciona un punto de
acceso global a esta instancia.
A continuación, se muestra una versión reducida de la pantalla de este patrón.
Implementación:
Siempre que se crea un objeto nuevo (en Java, con la palabra reservada new) se invoca al
constructor del objeto para que cree una instancia. Por lo general, los constructores son públicos.
El Singleton lo que hace es convertir el constructor en privado, de manera que nadie lo pueda
instanciar.
51
Hay que tener especial cuidado cuando el Singleton se utiliza en un ambiente multihilos, porque
puede crear problemas si no se implementa de la manera adecuada. En Java es posible que se
realice una "inicialización bajo demanda" para evitar problemas en este sentido. Concluyendo, la
idea central del Singleton es esa: asegurar de que exista tan solo una instancia del objeto en toda
la aplicación. Es un patrón muy aplicado en Java, aunque, como todos los patrones, se puede
implementar en cualquier lenguaje orientado a objetos.
• Ocultar el constructor de la clase Singleton, para que los clientes no puedan crear
instancias.
• Declarar en la clase Singleton una variable miembro privada que contenga la referencia a
la instancia única que se quiera gestionar.
• Proveer en la clase Singleton una función o propiedad que brinde acceso a la única
instancia gestionada por el Singleton. Los clientes acceden a la instancia a través de esta
función o propiedad.
VENTAJAS DESVENTAJAS
Acceso controlado a la única instancia: encapsula Suele convertirse en un anti-patron, Ej. cuando se
su única instancia, puede tener un control estricto decide en un proyecto ya avanzado que si se
sobre como y cuando acceden a ella los clientes. requieren más instancias de una clase. Esto convierte
al código en algo inflexible.
Espacio de nombres reducido: es una mejora sobre
las variables globales. Evita contaminar el espacio de Dificultad para realizar testing: Un singleton es
nombres con variables globales que almacenan las como un valor de variable global. Lo global y la
instancias. orientación a objeto no son buenos amigos ya que
introduce un “estado persistente”, es decir valores
Permite el refinamiento de operaciones y la que es mantienen siempre dificultando el uso de
representación: se puede crear una subclase de la objetivo de reemplazo(mock) en test.
clase Singleton y es fácil configurar una aplicación
con una instancia de esta clase extendida, incluso en Promociona el alto acoplamiento: Si hay algo que
tiempo de ejecución. debe ser alto en la orientación a objetos es la
cohesión y no el acoplamiento. El Singleton es
Permite un numero variable de instancias: hace instanciado directamente desde su propia clase
que sea fácil permitir más de una instancia de clase. promocionando el uso de métodos privados y
52
Solo se necesitaría cambiar la operación que otorga estáticos. Esto acopia la clase que los use además de
acceso a la instancia del Singleton. impedir el uso adecuado de inyección de
dependencias.
FACTORY
Factory Method, permite la creación de objetos de un subtipo determinado a través de una clase
Factory. Esto es especialmente útil cuando no se conoce el tiempo de diseño, el subtipo que
utilizara o cuando se delega la lógica de creación de los objetos a una clase Factory. Utilizando
este patrón se puede crear instancias dinámicamente mediante la configuración, estableciendo
cual será la implementación para utilizar en un archivo de texto, XML, properties o mediante
cualquier otra estrategia.
53
IProduct: Representa de forma abstracta el objeto que queremos crear, mediante esta interface
se definen la estructura que tendrá el objeto creado.
AbstractFactory: Este componente puede ser opcional, sin embargo, se recomienda la creación
de un AbstractFactory que define el comportamiento por default de los ConcreteFactory.
Concrete Factory: Representa una fábrica concreta la cual es utilizada para la creación de los
ConcreteProduct, esta clase hereda el comportamiento básico del AbstractFactory.
54
Mediante la implementación del patrón de diseño Factory Method se crea una aplicación que sea
capaz de conectarse a más de una base de datos, intercambiando de una a la otra, con tan solo
realizar una simple configuración y sin una sola línea de código adicional.
VENTAJAS DESVENTAJAS
Encapsula la creación de objetos, y aísla las clases Soportar nuevos tipos de productos es complejo.
concretas del cliente.
Aumenta la complejidad de la aplicación, añadiendo
Permite intercambiar familias de productos de nuevos niveles de indirección. No obstante, al tratarse
manera sencilla. de un patrón conocido es fácil abstraerse de esta
complejidad.
Elimina la necesidad de instanciar de forma explícita
los objetos que se van a utilizar, lo que tiene ventajas Al delegar funciones puede ser más complejo
claras en el desacoplamiento e interdependencia de encontrar en primera instancia la mecánica de
las clases. funcionamiento de la aplicación.
Es fácilmente extendible ya que la arquitectura queda No se puede utilizar cuando el cliente no tiene claro
abierta a desarrollos horizontales con nuevas clases que tipo de objeto de la familia necesita.
que existiendan a factory method y a la familia de
productos. El uso no es adecuado en todos los casos: es
necesaria una familia de objetos sobre la que operar.
Permite encapsular en las clases factory method toda Si no existe este polimorfismo no se tiene por que
la lógica de creación de objetos, que pueden ser más caer en la tentación de hacer factorías de objetos para
complejas que realizar que realizar un simple new.
55
Es una buena forma de disponer de una solución en el futuro. Hay que analizar bien el problema al que se
la arquitectura de la aplicación que se entiende enfrenta para ver si encaja.
fácilmente con metáforas.
La automatización de pruebas puede ser definida como “el uso de software para controlar la
ejecución de pruebas, la comparación de las salidas actuales con salidas predichas, la
configuración de las precondiciones, y otras funciones de control y reportes” [44].
Las pruebas automatizadas generan como resultado scripts que a su vez generan reportes sobre
la efectividad de las pruebas ejecutadas sobre el Software Bajo Prueba (Software Under Test
SUT).
En cualquier herramienta para cualquier aplicación siempre está el concepto de ubicar los
campos, objetos de una pantalla para el uso de acciones sobre ellos.
Un framework debería tomar en cuenta el mapeo de estos teniendo como objetivo la
mantenibilidad.
Posibles formas de mapeo:
56
4.4.1.1. PAGE OBJECT
Page Object posee ciertas ventajas y desventajas en su implementación. Dentro de sus ventajas
se encuentra que cualquier cambio en el SUT (Software Under Test) solo requerirá modificación
de la clase que implementa el diseño y no de las pruebas. Por otra parte, presenta como
desventaja que requiere de probadores de software que tengan de cierto nivel de programación,
además de que su tiempo de mantenimiento incrementa de manera lineal cuando existen más de
dos aplicaciones con un promedio de 10 – 20 páginas [10].
Al crear un PageObject, se crea una capa de abstracción entre el “¿Qué podemos hacer / ver en
la página?”, y el “Cómo” se realiza esta acción, simplificando enormemente la creación de
nuestras pruebas y reutilizando el código con el que interactuamos con la página en concreto. Y
a la vez, cualquier cambio que se produzca en la UI únicamente afectará al PageObject en
cuestión, no a las pruebas ya implementados.
Esto se debe a que una prueba nunca debe manipular directamente elementos de la página (UI),
si no que este manejo debe realizarse a través del PageObject correspondiente que representa
la página. Para entender, el PageObject se convierte en una API con la que fácilmente se puede
encontrar y manipular los datos de la página.
57
Se puede encontrar que una página corresponda a más de un PageObject, si se da el caso de
que algunas áreas de la página son lo suficientemente significativas. Por ejemplo, en una página
web, podemos tener un PageObject para el header y otro para el body.
Detalles de la implementación:
Una de las opciones de las que disponemos es crear, en primer lugar, una clase “básica”, que
posteriormente será la que extenderán cada uno de los distintos PageObjects que vayamos
implementando. Esta PageBase aporta la estructura básica y las propiedades generales que se
utiliza:
Y una vez creada esta página, crear los PageObjects necesarios. Un ejemplo de una página de
“Login” podría ser:
58
Lógicamente, si es conveniente se pode saltar la creación de la PageBase, y crear directamente
los distintos PageObjects con todas las propiedades y métodos necesarios.
Como se ve en este simple ejemplo, los métodos que interactúan con la página en sí,
normalmente o bien no devolven ningún parámetro, o bien serán de tipo sencillo, como boolean,
string, etc (ej. returnErrorMessage() devuelve un String con el mensaje de error de la página de
login). Pero cuando se trata de funciones de navegación entre páginas, estas devolven un nuevo
objeto PageObject del tipo correspondiente a la página de navegación. En el ejemplo superior,
si desde la página LoginPage se ejecuta el método loginAs, se realizará el login y
consecuentemente se devolverá un objeto de HomePage, que corresponde al PageObject de la
página principal.
Como consecuencia de este enfoque, será necesario crear métodos en los que la acción a
realizar acabe con éxito (ej: loginAs, que devuelve la HomePage), y otros en los que la acción no
sea correcta (ej: loginWithError, que se mantiene en la LoginPage).
Un ejemplo práctico:
59
PageObject: El GmailLoginPage, el PageObject que modela la página podría implementarse de
la siguiente forma:
En este código se está implementando algunos de los métodos para interactuar con la página
(introducir email, password, click en SignIn), en los que se enlazan los elementos de la página de
Gmail en si misma (ej. Código driver.findElement(…)).
Tests:
Un test sencillo que simplemente ejecute un login y verifique que se accede al “Inbox”
correctamente podría implementarse de la siguiente forma:
60
En esta prueba básica, se utiliza la función de loginAs que ofrece el PageObject de la página de
Login de GMail, así como el de getTitle de la página principal del EmailPage, para validar
posteriormente que se ha realizado el acceso de forma correcta.
Tal y como se puede ver, al utilizar el patrón de PageObjects, los test que se implementan son
sencillos y a la vez intuitivos y entendibles, y una vez realizado el esfuerzo inicial de desarrollar
los distintos métodos para interactuar con el objeto, la incorporación de nuevas pruebas se puede
realizar en un tiempo razonable [45].
DATA SETS se aplica especialmente para data-driven frameworks pero para cualquier framework
en general es recomendable que la data de los test scripts no quede guardada hard-coded (mala
práctica en el desarrollo de software) dentro.
La recomendación es usar algún tipo de mapeo para los datos de prueba que puede estar
alineada o no con el mapeo de objetos.
Un DataSet representa un conjunto, completo de datos, incluyendo las tablas que contienen,
ordenan y restringen los datos, así como las relaciones entre las tablas.
61
Hay varias maneras de trabajar con un DataSet, que se pueden aplicar de forma independiente
o conjuntamente. Puede realizar lo siguiente:
• Llenar el DataSet con tablas de datos de un origen de datos relacional existente mediante
DataAdapter.
También se puede transportar un DataSet fuertemente tipado mediante un servicio Web XML. El
diseño del DataSet lo convierte en idóneo para el transporte de datos mediante servicios Web
XML.
Test Suites es un contenedor que tiene un conjunto de pruebas que ayuda a los evaluadores a
ejecutar e informar el estado de ejecución de la prueba. Puede tomar cualquiera de los tres
estados: Active, Inprogress y completado.
Se puede agregar un caso de prueba a múltiples suites de prueba y planes de prueba. Después
de crear un plan de prueba, se crean suites de prueba que a su vez pueden tener cualquier
número de pruebas.
Las suites de prueba se crean en función del ciclo o en función del alcance. Puede contener
cualquier tipo de pruebas, a saber, funcionales o no funcionales.
Tomar en cuenta en un framework los grupos de pruebas que ejecutan solos y conceptualmente
agrupados es fundamental.
Tener control sobre la agrupación de pruebas para la combinación de estas para hacer
regresiones hace más eficiente el proceso de pruebas.
62
Figura 19: Proceso de Test Suite
Fuente: Wikipedia
PerroTest
package ar.com.ladooscurojava.model.test;
import org.junit.Assert;
import org.junit.Test;
@Test
Assert.assertTrue(true);
63
PersonaTest
package ar.com.ladooscurojava.model.test;
import org.junit.Assert;
import org.junit.Test;
@Test
Assert.assertTrue(true);
TestSuite
package ar.com.ladooscurojava.model.test.suite;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import ar.com.ladooscurojava.model.test.PerroTest;
import ar.com.ladooscurojava.model.test.PersonaTest;
@RunWith(Suite.class)
Hay que prestarle mucha atención al @RunWith(Suite.class) con lo cual le estamos indicando
que se compilara con la clase Suite y luego al @Suite.SuiteClasses({ PerroTest.class,
PersonaTest.class}) con lo cual le decimos que va a compilar los test de PerroTest y PersonaTest
[46]
.
64
Resultado:
Usando el test suites definidas, poder definir agrupaciones para configurar regresiones a medida,
de forma eficiente es un factor a tomar en cuenta.
Puntos para considerar:
- Pruebas distribuidas.
- Pruebas sincronizadas con ciclos de desarrollo.
Muchas herramientas ya tienen un output de ejecución que es legible a la hora de ver el estado
de una ejecución.
Si no lo tiene para crearlo tomar en cuenta estos puntos:
- Descripción clara del flujo de prueba
- Mapeo de acciones con resultados
- Visibilidad clara de posibles anomalías/bugs en las ejecuciones.
- Mapeo de bugs conocidos con el reporte ya realizado en la herramienta correspondiente
de bug reporting.
- Complemento con imágenes de captura en momentos del flujo cruciales y/o errores.
- Reducir ruido de información extra irrelevante
- Que el propio log de ejecución muestre métricas de la ejecución
65
MANTENIMIENTO
Las pruebas y las aplicaciones cambian y poder reaccionar rápidamente a esos cambios hace
que las pruebas automatizadas mantengan su vigencia.
Enfocarse en que el mantenimiento sea lo más sencillo posible reduce los tiempos de
mantenimiento y a mediano largo plazo hace que la carga de trabajo se reduzca (aunque no lo
parezca en el corto plazo).
Para diferentes tipos de proyectos puede haber diferentes tipos de automatización frameworks
que vayan a medida de estos:
La prueba dirigida por datos (DDT) es una metodología, en la que la repetición iterativa de la
misma secuencia de pasos de prueba se realiza con la ayuda de una fuente de datos para
controlar los valores de entrada de esos pasos y/o los valores esperados, mientras que los pasos
de verificación son realizados La configuración del entorno y el control en el caso de las pruebas
basadas en datos no están codificados. En otras palabras, las pruebas dirigidas por datos son la
construcción de un script de prueba para ejecutarse junto con todos sus conjuntos de datos
relacionados en un marco, que hace uso de la lógica de prueba reutilizable. Las pruebas basadas
en datos proporcionan ventajas como la reutilización, repetibilidad, separación de la lógica de
prueba de los datos de prueba y reducción del número de casos de prueba (test cases).
Es decir que el script de prueba (test script) sea suficientemente robusto para soportar diferentes
flujos en función el data set ingresado para la ejecución [12], [10], [9].
Un test case en este caso se define como el par data set - test script.
66
En Python:
values = source.readlines()
source.close()
driver.get('http://www.google.com')
driver.find_element_by_name("q").send_keys(search)
driver.find_element_by_id("btnG").click()
element=WebDriverWait(driver,5).until(ExpectedConditions.
presence_of_element_located((By.XPATH,
"//*[contains(., 'Results')]"))
El script de Python anterior abre un archivo de texto. Este archivo contiene una cadena de
búsqueda diferente en cada línea. El código luego guarda esto en una matriz de cadenas, e itera
sobre la matriz haciendo una búsqueda y afirmando en cada cadena.
Este es un ejemplo muy básico, pero la idea es mostrar que la ejecución de una prueba con datos
variables se puede hacer fácilmente con un lenguaje de programación o scripting. Además, este
es un tema bien conocido entre los profesionales de la automatización de pruebas.
67
Esto implica probar un módulo específico que requiere crear scripts de prueba individualmente
para cada uno de los módulos, ejecutarlos y validar sus resultados de ejecución. Gradualmente
a medida que avanzan las pruebas, los módulos individuales se combinan para formar una unidad
más grande.
KDT va enlazado de “Data Driven Testing” que consiste en utilizar datos pero que están
separados de las pruebas automatizadas, y esos datos son utilizados en el script de la prueba.
La ISO/IEC/IEEE 29119-5 define KDT como una forma de describir los casos de prueba mediante
el uso de un conjunto predefinido de palabras clave. Estas palabras clave son nombres que están
asociados con un conjunto de acciones que se requieren para realizar un paso específico en un
caso de prueba. Mediante el uso de palabras clave para describir las medidas de prueba en lugar
de lenguaje natural, los casos de prueba pueden ser más fáciles de entender, mantener y
automatizar.
Una palabra clave puede ser definida como un conjunto de acciones a llevar a cabo, también se
define como una única palabra que representa una funcionalidad. Las palabras clave se
organizan en tablas que representan una prueba, de esta forma como ya decíamos podemos
separar el diseño de los casos de prueba de la implementación de la prueba [12], [10],[9].
68
HYBRID-DRIVEN TESTING
Teniendo en cuenta la base de información del proyecto hay que decidir que herramienta de
automatización utilizar.
Aunque el uso de la automatización de pruebas puede traer ventajas a nivel de tiempo y recursos
financieros, su aplicación puede llegar a requerir cambios en las habilidades del equipo de trabajo
69
que implementa las pruebas. Lo anterior debido a que el ámbito de implementación de la
automatización de pruebas puede llegar a situarse entre pruebas y desarrollo [40]. Lo anterior dado
que la automatización requiere de scripts para que puedan ser ejecutados y reproducidos varias
veces. Por otra parte, es necesario por parte de quien crea los scripts tener suficiente
conocimiento en pruebas y de negocio para generar automatizaciones correctas a los
requerimientos del cliente.
De acuerdo con ello, las pruebas automatizadas tienen el mismo carácter y estructura que un
proyecto normal de software. De ahí que requiera características tales como manejo externo de
archivos, interacción con interfaz de usuario y manejo de plantillas de casos de pruebas.
5. CONCLUSIONES Y RECOMENDACIONES
Conclusiones:
• El uso de las metodologías ágiles tiene un enfoque de usabilidad alto a nivel mundial, muestra
en porcentajes de implementación: kambam con el 60% de usabilidad, hibrid (waterfall and
agile) 29%, traditional waterfall 27%, Bimodal (Agile and Waterfall) 26%, lean 22% y Scrum
16% (ScrumAlliance 2017-2018). en comparativa ágil vs tradiconal y según ISTQB La
metodología de desarrollo recomendable para la aplicación en el desarrollo de la
automatización de un framework, se considera metodologías ágiles, como se ha mencionado
en este documento, el modelo ágil a diferencia del modelo cascada, modelo espiral y modelo
en V, se requiere una planificación muy limitada para comenzar con el proyecto. El modelo
ágil supone que las necesidades de los usuarios finales cambian constantemente en un
mundo dinámico de TI, software de desarrollo y de negocio. brindando al cliente el sistema
terminado que quiere o necesita. Ahora en comparación con el modelo RAD, este trabaja con
sistemas que pueda modularizarse, se debe utilizar si hay una alta disponibilidad de
diseñadores para el modelado lo cual es sumamente costoso juntamente con las
herramientas automatizadas de generación de código, debe elegirse solo si dispone de
recursos con alto conocimiento de negocios y hay una necesidad de producir sistema en un
corto periodo (ISTQB) [12].
70
• El costo de la calidad es una de las medidas más establecidas y efectivas para cuantificar y
calcular el valor comercial de las pruebas. Para medir esto, el proyecto y sus gastos
presupuestados deben clasificarse en estas cuatro categorías:
- Costos de prevención: esto incluye el costo de la capacitación de los
desarrolladores para escribir código seguro y fácil de mantener.
- Costos de detección: esto incluye el costo de crear casos de prueba, configurar
entornos de prueba, revisar los requisitos de prueba.
- Costos de falla interna: esto incluye los costos incurridos en la repetición de
defectos justo antes de la entrega.
- Costos de fallas externas: esto incluye los costos de soporte del
producto incurridos al entregar software de baja calidad.
Sin embargo, el total de estos dos costos siempre es significativamente menor que los costos
de fallas externas. Por lo tanto, las pruebas siempre proporcionan un buen valor comercial.
71
RIESGOS Alto riesgo Alto riesgo
Baja importancia Alta importancia
IMPORTANCIA
Figura 24:Mitigación de Riesgos
Fuente: Wikipedia
• Tanto las pruebas manuales como las automáticas ofrecen ventajas y desventajas. Vale la
pena saber la diferencia y cuándo usar uno u otro para obtener los mejores resultados.
Las pruebas manuales son ejecutadas sin el apoyo de herramientas o scripts; con respecto a
las pruebas automatizadas, los casos de prueba se ejecutan a través de scripts y herramientas.
Esto dependerá de acuerdo con los requisitos del proyecto, el presupuesto, el calendario, la
experiencia y la idoneidad; por lo que, el tiempo, el costo y la calidad son el objetivo de
cualquier proyecto del software, cuando se trata de la gestión de casos de prueba.
Las pruebas manuales y las pruebas automatizadas cubren dos áreas. Dentro de cada
categoría, hay métodos de prueba específicos disponibles, como pruebas de caja negra,
pruebas de caja blanca, pruebas de integración, pruebas de sistema, pruebas de rendimiento
y pruebas de caja negra. pruebas de carga. Una breve comparación de cada tipo, junto con
algunas ventajas y desventajas:
PRUEBAS AUTOMATIZADAS
PRUEBA MANUAL
• La prueba manual no es precisa en todo • Las pruebas automatizadas son más confiables, ya que
momento debido a un error humano, por lo se realizan mediante herramientas y / o scripts.
que es menos confiable.
• Las pruebas manuales llevan mucho tiempo, • Las pruebas automatizadas se ejecutan mediante
ocupando recursos humanos. herramientas de software, por lo que es
significativamente más rápido que un enfoque manual.
72
• La inversión es necesaria para los recursos • Se requiere inversión para probar herramientas.
humanos.
• La prueba manual solo es práctica cuando • La prueba automatizada es una opción práctica cuando
los casos de prueba se ejecutan una o dos los casos de prueba se ejecutan repetidamente durante
veces, y no se requieren repeticiones un largo período de tiempo.
frecuentes.
Pruebas de usabilidad: esta es un área en la que necesita medir qué tan amigable,
eficiente o conveniente es el software o producto para los usuarios finales. Aquí, la
observación humana es el factor más importante, por lo que es preferible un enfoque
manual.
Pruebas de regresión: aquí, las pruebas automatizadas son adecuadas debido a los
frecuentes cambios de código y la capacidad de ejecutar las regresiones de manera
oportuna.
Pruebas de carga: las pruebas automatizadas también son la mejor manera de completar
las pruebas de manera eficiente cuando se trata de pruebas de carga.
73
Ejecución repetida: las pruebas que requieren la ejecución repetida de una tarea se
automatizan mejor.
Una comparación más clara de tiempo y costos mediante pruebas manuales y pruebas
automatizadas ayudará a tomar una buena decisión.
74
Recomendaciones:
75
6. BIBLIOGRAFÍA
LIBROS
9. Myers y Sandler; The Art of Software Testing, Second Edition, Copyright © 2004 by Word
Association, Inc. All rights reserved.
10. A. M. Memon, M. E. Pollack, and M. L. Soffa; Using a goal-driven approach to generate test
cases for GUIs. In ICSE ’99: Proceedings of the 21st international conference on Software
engineering, pages 257–266. IEEE Computer Society Press, 1999, Burstein, 2010 y Amaricai y
Constantinescu, 2014.
PAGINAS WEB
76
6. Jaime Domenech (20 de Junio de 2014), Silicom https://www.silicon.es/el-95-por-ciento-de-
las-incidencias-de-seguridad-informatica-se-deben-errores-humanos-61228 , 29 de Agosto de
2018.
7. Vamos a automatizar pruebas(23 Enero, 2015),
http://www.huenei.com/index.php/es/2018/03/18/por-que-automatizar-los-tests/ , 30 de agosto
de 2018; Globe, Automatizacion(febrero, 2016),
https://www.globetesting.com/2016/02/automatizacion-cuando-implementarla-2/ , 30 de agosto
de 2018.
8. BRITESNOW, The Five Software Architecture Generations: From Mainframe to Mobile Apps
to HTML5 (11 de marzo de 2013 ), http://britesnow.com/blog/software-architecture-evolution-
mobile-apps-to-html5 , 30 de Agosto de 2018.
11. ISO/IEC/IEEE 29119 Software Testing Standard (marzo del 2017),
http://in2test.lsi.uniovi.es/gt26/?lang=es , 29 de Agosto de 2018.
13. apTest software teting specialists, Software QA Testing and Test Tool Resources (08 de
noviembre de 2016), http://www.aptest.com/resources.html , 31 de Agosto de 2018.
14. Open Source Testing, (04 de octubre de 2016), http://www.opensourcetesting.org/ , 31 de
Agosto de 2018.
15. http://www.testingfaqs.org/ , 31 de Agosto de 2018.
16. FitNesse (08 de junio de 2016), https://qanewsblog.com/2014/05/22/framework-de-pruebas-
fitnesse/ , 3 de septiembre de 2018.
17. Avignon Acceptance Testign System (08 de octubre de 2005),
https://sourceforge.net/projects/avignon/ , 3 de septiembre de 2018.
18. PHPLint (27 de julio de 2018), http://www.icosaedro.it/phplint/ , 3 de septiembre de 2018.
19. SYSADMIN BLOG (Mayo del 2012), http://www.elmundoenbits.com/2012/05/rats-auditando-
codigo-fuente.html#.W7xvXHtKjIU , 4 de septiembre de 2018.
20. Articulo Wikipedia sobre el detective de enlaces de Xenu (2017)
http://home.snafu.de/tilman/xenulink.html#Description , 4 de septiembre de 2018.
21. PMD source Code Analyzer (septiembre de 2017), http://pmd.sourceforge.net/ , 4 de
septiembre de 2018.
22. UNIVERSITY OF MARYLAND, FindBugs (03 de junio de 2015),
http://findbugs.sourceforge.net/ , 4 de septiembre de 2018.
23. JUnit 5, http://www.junit.org/ , 4 de septiembre de 2018.
24. Documentation for PHPUnit, http://www.phpunit.de/ , 5 de septiembre de 2018.
77
25. SimpleTest (29 de octubre de 2010), http://www.simpletest.org/ , 5 de septiembre de 2018.
26. Xenu´s Link Sleuth, http://home.snafu.de/tilman/xenulink.html , 5 de septiembre de 2018.
27. W3C, https://dev.w3.org/perl/modules/W3C/LinkChecker/docs/checklink , 5 de septiembre
de 2018.
28. DRK Open Source Software Tools, http://www.drk.com.ar/index.php , 5 de septiembre de
2018.
29. Link Evaluator for Babalievsky, https://addons.mozilla.org/es-ES/firefox/addon/4094 , 5 de
septiembre de 2018.
30. SeleniumHQ, http://seleniumhq.org/projects/ide/ , 6 de septiembre de 2018.
31. HttpUnit, http://httpunit.sourceforge.net/index.html , 6 de septiembre de 2018.
32. BADBOY SOFTWARE, http://www.badboy.com.au/ , 6 de septiembre de 2018.
33. Sahi, http://sahi.co.in/w/ , 6 de septiembre de 2018.
34. APACHE SOFTWARE FOUNDATION, http://jakarta.apache.org/jmeter/ , 6 de septiembre
de 2018.
35. OpenSTA (Open System Testing Architecture), http://www.opensta.org/ , 6 de septiembre
de 2018.
36. The Grinder a Java Load Testing Framewoerk, http://grinder.sourceforge.net/ , 6 de
septiembre de 2018.
37. Jython for the Java Platform, http://www.jython.org/, 6 de septiembre de 2018.
38. Wikipedia, http://en.wikipedia.org/wiki/File:Waterfall_model.svg , 07 de septiembre del
2018.
39. Craig, Rick D. and S. Jaskiel (2002): Systematic Software testing.2
http://upload.wikimedia.org/wikipedia/commons/3/39/ModeloEspiral.svg4, 07 de octubre de
2018.
40. metodo Empirico(enero, 2018); Metodoss, https://metodoss.com/empirico/ , 07 de
septiembre del 2018.
41. software Architect (Agosto 15, 2018); principios SOLID y patrones de diseño,
https://www.oscarblancarteblog.com/2018/08/15/principios-solid- patrones-diseno/ , 07 de
septiembre del 2018.
42. Amaricai and Constantinescu, http://revistaie.ase.ro/content/69/14%20-
%20Amaricai,%20Constantinescu.pdf , 07 de septiembre del 2018.
43. Tutorialspoint (enero 2018),
https://www.tutorialspoint.com/software_testing_dictionary/test_suite.htm, 07 de octubre de
2018.
44. Lado oscuro de Java, JUnit-Test Suite(5 de junio 2014), http://java-white-
box.blogspot.com/2014/06/junit-test-suite-que-es-un-test-suite.html, 07 de octubre de 2018.
78