Documentos de Académico
Documentos de Profesional
Documentos de Cultura
R/
son las investigaciones empíricas y técnicas cuyo objetivo es proporcionar información
objetiva e independiente sobre la calidad del producto a la parte interesada o stakeholder.
Es una actividad más en el proceso de control de calidad.
Las pruebas son básicamente un conjunto de actividades dentro del desarrollo de software.
Dependiendo del tipo de pruebas, estas actividades podrán ser implementadas en cualquier
momento de dicho proceso de desarrollo. Existen distintos modelos de desarrollo de
software, así como modelos de pruebas. A cada uno corresponde un nivel distinto de
involucramiento en las actividades de desarrollo.
“El proceso que consiste en todas las actividades del ciclo de vida, tanto estáticas como
dinámicas relacionadas con la planificación, preparación y evaluación de productos de
software y productos relacionados con el trabajo para determinar que cumplen los
requisitos especificados, para demostrar que son aptos para el propósito y para detectar
defectos”.
Error: está provocado por la acción humana. Por ejemplo, el error lo provocará el
desarrollador que realizará una incorrecta interpretación de un método del programa que
producirá un resultado no esperado.
Defecto: provocado por un error de implementación. Por ejemplo, el defecto lo provocará
el haber utilizado el operador “x + y > z” en vez de “x + y => z”
2. Historia
R/
El objetivo de las pruebas es presentar información sobre la calidad del producto a las
personas responsables de este. Las pruebas de calidad presentan los siguientes objetivos:
encontrar defectos o bugs, aumentar la confianza en el nivel de calidad, facilitar
información para la toma de decisiones, evitar la aparición de defectos.
Teniendo esta afirmación en mente, la información que puede ser requerida es de lo más
variada. Esto hace que el proceso de testing sea completamente dependiente del contexto en
el que se desarrolla. El ambiente ideal de las pruebas es aquel que es independiente del
desarrollo del software, de esta manera se logra objetividad en las pruebas. A pesar de lo
que muchos promueven, no existen las "mejores prácticas" como tales. Toda práctica puede
ser ideal para una situación, pero completamente inútil o incluso perjudicial en otra.
Por esto, las actividades técnicas, documentación, enfoques y demás elementos que
condicionarán las pruebas a realizar deben ser seleccionadas y utilizadas de la manera más
eficiente según contexto del proyecto.
Demostración (1957-1958)
En esta fase se encargaban de utilizar de forma masiva la prueba para asegurar que se
cumplía con la especificación. Se realizaban al finalizar el desarrollo del Software.
Destrucción (1979 – 1982)
Los cambios en la metodología se hicieron notar, en este período pasaron de demostrar que
un programa era correcto mediante pruebas y demostraciones teóricas a demostrar que el
programa no funciona o tiene fallos, con este cambio de óptica, se tiene una mayor
posibilidad de encontrarlos, las pruebas se transforman en casos de prueba que se aplican a
los productos de los desarrolladores para encontrar errores y corregirlos.
Esta fue una etapa donde se comenzó a integrar las pruebas de Software en el ciclo de vida
del desarrollo del software.
Finalmente, en esta época se diversificaron las pruebas incorporándolas en todas las fases
del desarrollo, para con esto poder verificar todos los tipos de componentes, modelos,
módulos, subsistemas y sistemas que conforman el software.
R/
También tenemos el desarrollo iterativo y creciente, se tiene las mismas etapas que en el
Proceso de Desarrollo en Cascada, sin embargo, en este proceso, la etapa de relevamiento
se divide en distintos sub conjuntos,y cada uno de estos sub conjuntos se construye de la
misma forma que con el ciclo de vida en cascada. Se van desarrollando por partes que
luego se integran, una vez finalizadas las mismas.
Otro Proceso de Desarrollo que tenemos es el Iterativo, en este tenemos las mismas etapas
de desarrollo que los procesos anteriores, pero trabajamos sobre el todo, no necesariamente
conocemos al comienzo todos los detalles del producto que queremos construir.
En la imagen anterior se puede observar las fases que se desarrollan en este método, se
llevarían a cabo una seguida de la otra. Además, también se puede volver a la anterior. La
documentación se realiza durante todo el proceso.
Definición:
En esta etapa se elige la posible solución con mejores especificaciones y sea la adecuada.
Se plantea la estructura que tendrá el software, para tener totalmente definido y estar listos
para la siguiente etapa.
En este nivel se concreta la estructura de control y flujo de datos, para entender los
algoritmos. Por último, el resultado de esta etapa puede ser un organigrama, un
pseudocódigo, etc.
Codificación:
Es el proceso donde se comienza a realizar la programación mediante un lenguaje. Pero se
debe tener en cuenta que el diseño sea el correcto y que este bien estructurado para no tener
inconvenientes.
Para calificar que la codificación fue la correcta se debe llevar un trabajo muy grande.
Debido a que para un diseño pueden existir gran variedad de posibles soluciones y por lo
tanto es difícil decidir cuál es la mejor. Por otro lado, cuando son varios los programadores
los que intervienen pueden generar algunos problemas al realizar cambios, porque cada
programador tiene diferente forma de pensar. Por eso es importante tener claro los
estándares del software.
Integración:
En esta etapa una vez todo este codificado, se procede a unir todas las partes. Pero no solo
es el proceso de ensamble. También eso donde se corrigen problemas entre módulos.
Cuando el software es demasiado grande, las versiones se vuelven parte fundamental para
el desarrollo correcto.
Prueba:
En esta etapa se busca que se cumplan todos los objetivos de manera correcta. Aunque en la
práctica es casi imposible lograr que alguien pruebe por completo el software, por esto
siempre quedan algunos errores o bugs que más adelante serán corregidos. Pero si no son
corregidos a tiempo se generan actualizaciones que, en vez de aportar soluciones, aportan
son más problemas.
Documentación:
La documentación es una parte fundamental en el desarrollo del software porque
prácticamente es el software en sí, contiene todo lo relacionado con él. Partiendo desde
documentar todo el ciclo de vida, hasta el código de programación.
Además, es donde se plasman todas las funciones y como el usuario puede hacer uso de
todas las herramientas que el software otorga.
4. Pruebas estáticas vs dinámicas
R/
Pruebas de software
Dinámicas Estáticas
Todas aquellas pruebas que para su Son el tipo de pruebas que se
ejecución requieren la ejecución de realizan sin ejecutar el código de la
la aplicación. aplicación.
Objetivo de la Prueba: Se focaliza en ejecutar cada módulo, lo que provee un mejor modo
de manejar la integración de las unidades en componentes mayores.
Busca asegurar que el código funciona de acuerdo con las especificaciones y que el módulo
lógico es válido.
Para esto los casos de prueba deben diseñarse de forma tal que se recorran todos los
caminos de ejecución posibles dentro del código bajo prueba; por lo tanto, el diseñador
debe construirlos con acceso al código fuente de la unidad a probar.
Los aspectos para considerar son los siguientes: Rutinas de excepción, Rutinas de error,
Manejo de parámetros, Validaciones, Valores válidos, Valores límites, Rangos, Mensajes
posibles.
Criterio de Completitud: Todas las pruebas planeadas han sido ejecutadas. Todos los
defectos que se identificaron han sido tenidos en cuenta.
Descripción de la Prueba:
• Describe cómo verificar que las interfaces entre las componentes de software
funcionan correctamente.
• Determina cómo la base de datos de prueba será cargada.
• Determina el enfoque para avanzar desde un nivel de integración de las
componentes al siguiente.
• Decide qué acciones tomar cuando se descubren problemas.
Por cada Caso de Prueba ejecutado: Comparar el resultado esperado con el resultado
obtenido.
Técnica:
Utilizar la técnica top-down. Se empieza con los módulos de nivel superior, y se verifica
que los módulos de nivel superior llaman a los de nivel inferior de manera correcta, con los
parámetros correctos.
Criterio de Completitud:
PRUEBA DE REGRESIÓN
Criterio de Completitud: Todas las pruebas planeadas han sido ejecutadas. Todos los
defectos que se identificaron han sido tenidos en cuenta.
Descripción de la Prueba:
Toma este nombre debido a que su objetivo es probar el sistema constantemente buscando
que saque “humo” o falle. En algunos proyectos este tipo de prueba va junto con las
pruebas funcionales. Permite detectar problemas que por lo regular no son detectados en las
pruebas normales. Algunas veces, si las Pruebas ocurren tarde en el ciclo de desarrollo está
será una forma de garantizar el buen desarrollo.
Técnica:
• Realizar una integración de todo el sistema cada cierto periodo (se recomienda un
día, máximo una semana).
• Realizar los casos de prueba asignados a los casos de uso finalizados ese día más los
realizados en días anteriores.
• Buscar eficientemente errores.
Criterio de Completitud:
Consideraciones Especiales:
Cuando se encuentre un error en el reléase correspondiente al periodo elegido para hacer las
integraciones del sistema, se detiene el desarrollo hasta que el error es corregido.
Este tipo de pruebas es útil en la programación extrema (extremme programming) y de
sistemas complejos. Es útil el uso de programas de prueba automáticas que se encarguen de
probar os casos de prueba ya ejecutados en realeases anteriores.
Descripción de la Prueba: Las pruebas del sistema deben enfocarse en requisitos que
puedan ser tomados directamente de casos de uso y reglas y funciones de negocios. El
objetivo de estas pruebas es verificar el ingreso, procesamiento y recuperación apropiado
de datos, y la implementación apropiada de las reglas de negocios. Este tipo de pruebas se
basan en técnicas de caja negra, ésto es, verificar el sistema (y sus procesos internos), la
interacción con las aplicaciones que lo usan via GUI y analizar las salidas o resultados.
En esta prueba se determina qué pruebas de Sistema (usabilidad, volumen, desempeño, etc.)
asegurarán que la aplicación alcanzará sus objetivos de negocio.
• Prueba funcionalidad
• Prueba de Usabilidad
• Prueba de Performance
• Prueba de Documentación y Procedimientos
• Prueba de Seguridad y Controles
• Prueba de Volumen
• Prueba de Esfuerzo (Stress)
• Prueba de recuperación
• Prueba de múltiples sitios
Para sistemas web se recomienda especialmente realizar mínimo el siguiente grupo de
pruebas de sistema:
• Humo.
• Usabilidad
• Performance
• Funcionalidad
Para capitalizar el trabajo hasta ahora completado, los casos de prueba de las pruebas
previas realizadas pueden frecuentemente ser reorganizados y rehusados durante la prueba
de sistema. No obstante, deben ser desarrollados casos de prueba adicionales para aquellos
aspectos del sistema, tales como documentación, procedimientos y desempeño que no han
sido probados durante la prueba unitaria y de integración.
Técnica:
Ejecute cada caso de uso, flujo básico o función utilizando datos válidos e inválidos, para
verificar que:
Criterio de Completitud:
Objetivo de la Prueba:
Validar el tiempo de respuesta para las transacciones o funciones de negocios bajo las
siguientes dos condiciones:
Descripción de la Prueba:
Las pruebas de desempeño usualmente se ejecutan varias veces, utilizando en cada una,
carga diferente en el sistema. La prueba inicial debe ser ejecutada con una carga similar a la
esperada en el sistema. Una segunda prueba debe hacerse utilizando una carga máxima.
Adicionalmente, las pruebas de desempeño pueden ser utilizadas para perfilar y refinar el
desempeño del sistema como una función de condiciones tales como carga o
configuraciones de hardware.
• Errores lógicos
• Procesamiento ineficiente
• Diseño pobre: muchas interfases, instrucciones y entradas/salidas.
• Cuellos de botella en discos, CPU ó canales de entrada/salida
• Salidas del sistema
• Tiempos de respuesta
• Capacidad de almacenamiento
• Tasa de entrada/salida de datos
• Número de transacciones que pueden ser manejadas simultáneamente.
• Las pruebas de desempeño utilizan las técnicas de caja blanca y caja negra.
Técnica:
Utilice los procedimientos de prueba desarrollados para las pruebas del modelo del negocio
(Pruebas del Sistema).
Los scripts deben ser ejecutados en una máquina y deben ser repetidos con múltiples
clientes (virtuales o actuales).
Criterio de Completitud:
Un Usuario / Una Transaccion. Se completaron las pruebas sin ninguna falla y dentro del
tiempo esperado o requerido por transacción.
Múltiples transacciones, múltiples usuarios. Se completaron las pruebas de los scripts sin
ninguna falla y dentro del tiempo esperado.
Consideraciones Especiales:
Use múltiples clientes físicos, cada uno corriendo los scripts de prueba.
Las pruebas de desempeño deben ser ejecutadas en una máquina dedicada o en un tiempo
dedicado. Esto permite control total y medidas precisas.
La Base de datos utilizada para pruebas de desempeño debe ser de un tamaño real o
proporcionalmente más grande que la diseñada.
PRUEBAS DE CARGA
Objetivo de la Prueba:
Verificar el tiempo de respuesta del sistema para transacciones o casos de uso de negocios,
bajo diferentes condiciones de carga.
Descripción de la Prueba:
Las pruebas de carga miden la capacidad del sistema para continuar funcionando
apropiadamente bajo diferentes condiciones de carga.
Técnica:
Múltiples transacciones, múltiples usuarios. Se completaron las pruebas de los scripts sin
ninguna falla y dentro del tiempo esperado.
Consideraciones Especiales:
Las pruebas de carga deben ser ejecutadas en una máquina dedicada o en un tiempo
dedicado. Esto permite control total y medidas precisas.
La Base de datos utilizada para pruebas de desempeño debe ser de un tamaño real o
proporcionalmente más grande que la diseñada.
PRUEBAS DE STRESS
Objetivo de la Prueba:
Verificar que el sistema funciona apropiadamente y sin errores, bajo estas condiciones de
stress:
Descripción de la Prueba:
Las pruebas de stress se proponen encontrar errores debidos a recursos bajos o completitud
de recursos. Poca memoria o espacio en disco puede revelar defectos en el sistema que no
son aparentes bajo condiciones normales. Otros defectos pueden resultar de incluir recursos
compartidos, como bloqueos de base de datos o ancho de banda de la red. Las pruebas de
stress identifican la carga máxima que el sistema puede manejar.
El objetivo de esta prueba es investigar el comportamiento del sistema bajo condiciones
que sobrecargan sus recursos. No debe confundirse con las pruebas de volumen: un
esfuerzo grande es un pico de volumen de datos que se presenta en un corto período de
tiempo.
Es aplicable, sin embargo, a programas que trabajan bajo cargas variables, interactivos, de
tiempo real y de control de proceso.
Técnica:
Criterio de Completitud:
Todas las pruebas planeadas han sido ejecutadas y excedidas sin que el sistema falle. (O si
las condiciones en que el sistema falle ocurren por fuera de las condiciones especificadas).
Consideraciones Especiales:
Producir stress en la red puede requerir herramientas de red para sobrecargarla de tráfico.
El espacio en disco utilizado para el sistema debe ser reducido temporalmente para limitar
el espacio disponible para el crecimiento de la Base de datos.
Técnicas de prueba
Para conseguir el objetivo de que el producto tenga la calidad deseada vamos a ver
diferentes técnicas de prueba que se pueden aplicar a la hora de realizar las pruebas. Estas
técnicas tienen el objetivo de identificar condiciones de la prueba, casos de prueba y datos
de la prueba.
• Técnicas estáticas.
• Técnicas dinámicas.
• Técnicas basadas en la experiencia.
Como se verá más adelante, las pruebas dinámicas detectan los fallos, mientras que las
pruebas estáticas detectan sus causas, los defectos.
Técnicas estáticas
Este tipo de técnicas son aquellas que no ejecutan la aplicación. Se llevan a cabo a nivel de
especificaciones. No ejecutan código, pero si realizarán un análisis estático del código. Se
realizarán revisiones de todos los documentos del proyecto como pueden ser las
especificaciones de diseño, de requisitos, los casos de prueba, etc.
Análisis estático
El análisis estático tiene como objetivo detectar defectos en el código fuente del software y
en los modelos de software, y se realizará sin ejecutar dicho software.
Para llevar a cabo estas pruebas se utilizan herramientas que analizan el código del
programa y las salidas generadas.
Estas pruebas ayudan a la detección temprana de defectos, ya sean aspectos sospechosos
del código o del diseño. Permiten identificar defectos que no se encuentran fácilmente
mediante las técnicas dinámicas.
Técnicas dinámicas
Este tipo de técnicas son las realizadas ejecutando la aplicación y son las utilizadas para el
diseño de los casos de prueba.
Al conocer las funciones específicas del producto se pueden llevar a cabo pruebas que
demuestren que estas funciones son operativas y la búsqueda de errores en dichas
funciones. Estas pruebas se realizan desde una visión externa, mediante las pruebas de caja
negra.
Estas dos técnicas nos ayudarán a definir los casos de prueba para tener la mayor
probabilidad de encontrar errores ahorrando esfuerzo y tiempo.
La técnica de caja blanca, a veces definida como prueba de “caja de cristal” o “caja
transparente”, es una técnica de diseño de casos de prueba que usa la estructura de control
para obtener los casos de prueba.
Ilustración 2. Caja blanca
• Garantizan que todas las rutas del código se revisan al menos una vez.
• Revisan las condiciones lógicas.
• Revisan estructuras de datos.
El ISTQB define también las técnicas basadas en la experiencia y las define como, “las
pruebas basadas en la experiencia son aquellas en las que las pruebas se derivan de la
habilidad e intuición del probador y de su experiencia con aplicaciones y tecnologías
similares”.
Estas pruebas pueden tener poca o mucha efectividad dependiendo de la experiencia del
probador y suelen aplicarse en proyectos donde la documentación es escasa o inadecuada.
• Predicción de error.
• Pruebas exploratorias.
6. Que herramientas se utilizan para realizar las pruebas
R/
Todos los proyectos, por muy pequeños que sean, pueden llegar a tener una cantidad de
casos de pruebas muy elevado, sin contar que las pruebas se repetirán varias veces debido a
las pruebas de regresión. Estos proyectos, necesitan de una administración, planificación y
ejecución, así como de herramientas que permitan realizar pruebas automáticas.
Para llevar a cabo estas tareas existen diferentes tipos de herramientas que ayudarán en todo
lo posible a que el proyecto se maneje más eficientemente y que ayudarán a conseguir la
calidad deseada. Existen herramientas que se utilizan para diseñar casos de prueba,
gestionar y administrar pruebas y monitorizar sistemas en pruebas. Una simple hoja de
datos puede ser considerada una herramienta de pruebas. Al inicio del proyecto, el
desarrollador y el probador son los encargados de estudiar y plantear el tipo de
herramientas necesarias que se van a usar durante el proyecto.
Se van a clasificar en varias categorías dependiendo del uso que se pueda hacer de ellas:
Este tipo de herramientas ayudan a encontrar defectos en las etapas tempranas del proyecto.
Herramientas de revisión
Análisis estático
Estas herramientas sirven para localizar defectos en el código antes de realizar las pruebas
dinámicas proporcionando soporte para aplicar las normas de codificación, análisis de
estructuras y las dependencias [ISTQB].
Herramientas de modelado
Herramientas que sirven para validar modelos de software, como por ejemplo modelos de
datos físicos (PDM) de una base de datos relacional, enumerando inconsistencia y
localizando defectos [ISTQB].
Ejemplos de herramientas
Hay una gran cantidad de herramientas presentes para las pruebas estáticas. A continuación,
se muestran algunas de estas herramientas:
PMD (libre): es un analizador de código fuente. Encuentra defectos comunes de
programación como las variables utilizadas, bloques catch vacíos, la creación de objetos
innecesarios, y así sucesivamente [WEB25].
SONAR (libre): es una herramienta que permite analizar, recopilar y visualizar métricas del
código fuente. Podríamos decir que es una mezcla entre las dos anteriores PMD y
ChekStyle [WEB27].
Simian (libre): herramienta que detecta software duplicado. Entre los lenguajes de
programación que acepta están, Java, C#, C++, C COBOL, Ruby, ASP, JSP, HTML, XML
y Visual Basic [WEB28].
FindBugs (libre): es una herramienta que detecta errores en el código. Se utiliza en java y
es capaz de encontrar errores con el manejo de hilos, el mal uso de los métodos del API,
etc. [WEB29].
MacCabeTest (pago por licencia): implementa una gran variedad de técnicas de prueba
derivadas de una evaluación de complejidad ciclomática y de otras mediciones [WEB30].
Teslink (libre): es una herramienta que permite crear y gestionar casos de prueba y
organizarlos dentro de planes de prueba. Se puede ejecutar los casos de prueba a partir de
los planes creados en la misma herramienta. También permite la generación de informes,
así como priorizar y asignar tareas [WEB31].
Redmine (libre): es una aplicación para gestión y planificación de proyectos con interfaz
web. Está diseñada para facilitar el control y seguimiento de proyectos [WEB32].
Trello (libre): es una herramienta con interfaz web que permite organizar proyectos y
tareas. Está basada en el método ágil Kanban. [WEB33].
Mantis (libre): es una herramienta para gestionar incidencias. Permite llevar un control y
mantener un historial de las incidencias, así como especificar un número indeterminado de
opciones de la incidencias, como los estados de éstas (abierta, cerrada, resuelta, reabierta,
etc.), la severidad (baja, media, alta), etc. Es una herramienta con interfaz web [WEB34].
HP Quality Center (pago por licencia): esta herramienta es un todo en uno propiedad de
la empresa HP. El objetivo de esta herramienta es el control de la calidad de software y
tiene varios módulos que nos permitirán gestionar los requisitos de un proyecto, la gestión,
el diseño y la creación de pruebas y la gestión de incidencias. También tiene un módulo
para pruebas automáticas que se verá más adelante [WEB35].
IBM Rational Quality Manager (pago por licencia): tiene las mismas funciones y
características que la herramientas de HP, pero en este caso la empresa propietaria de esta
herramienta es IBM [WEB36].
Ejemplos de herramientas
SoapUI (libre/pago por licencia): permite probar, simular y generar código de servicios
web partiendo del contrato de estos en formato WSDL y con vinculo SOAP sobre http
[WEB40].
Ejemplos de herramientas
Jmeter (libre): es una herramienta de pruebas de carga para analizar y medir el desempeño
de una variedad de servicios, con énfasis en aplicaciones web. Es una de las herramientas
más utilizadas para las pruebas de rendimiento [WEB42].
LoadUI (libre): es una herramienta de pruebas de carga y rendimiento que se integra con
SoapUI. Es la mejor alternativa a Jmeter [WEB43].
HP Load runner (pago por licencia): es el módulo de pruebas de carga que se integra
dentro del paquete de aplicaciones de HP [WEB35].
Referencias