Catégories : Tous - pruebas - flujo - datos - combinación

par JOHANA PERDOMO Il y a 5 années

387

PRUEBAS EN SISTEMAS DE INFORMACIÓN

Las pruebas funcionales son esenciales para garantizar que los sistemas de información operen de manera correcta y eficiente. Un aspecto clave es el diseño de casos de prueba, el cual se basa en estrategias para identificar diferentes flujos a probar, siguiendo el flujo de funcionalidad del sistema.

PRUEBAS EN SISTEMAS DE INFORMACIÓN

PRUEBAS DE SISTEMAS DE INFORMACIÓN

TÉCNICA DE TABLAS DE DECISIÓN
MATRIZ CRUD

CRUD Matrix

tener una vista general sobre el ciclo de vida de las entidades, y cómo es afectado en las distintas funcionalidades que estamos probando

Tener una vista general sobre el ciclo de vida de las entidades, y cómo es afectado en las distintas funcionalidades que estamos probando

(Crear, Leer, Actualizar, Eliminar, del inglés: create, read, update, delete).

MÁQUINAS DE ESTADO

CTWEB PARA DERIVAR PRUEBAS CON MÁQUINAS DE ESTADO

Permite diseñar los casos de prueba que cubren una máquina de estados dada,

APLICACIÓN DE LA TÉCNICA EN UN EJEMPLO

Gestión de Artículos

Los artículos pueden tener distintos estados, y el comportamiento esperado para cada acción o funcionalidad del sistema, dependerá del estado asociado al artículo.

Modelar el comportamiento de los artículos con una máquina de estados y a partir de ella derivar los casos de prueba

Estructura

-Cobertura de estados: Este criterio se satisface cuando los casos de prueba recorren todos los estados. - Cobertura de transiciones: En este caso cuando se recorren todas las transiciones. - Cobertura de pares de transiciones: Para cada estado se cubren las combinaciones de transiciones de entrada y salida.

Es un grafo dirigido cuyos nodos representan estados y cuyas aristas representan transiciones entre dichos estados.

Este tipo de técnicas es de las más usadas en el mundo del Model-based Testing (MBT),

Conocida como FSM del inglés finite state machine

Grafo Causa-Efecto

Muestra las reglas de la lógica del sistema

Se listan las causas (entradas o acciones del usuario) y los efectos (salidas o acciones del sistema esperadas), y luego se unen indicando relaciones entre ellos.

Representan la relación lógica entre distintas causas y los posibles efectos.

if-thenelse

Aplica a programas donde la lógica predominante es del tipo

la representación en Tablas de Decisión

Cada columna indicará una posible combinación entre condición y acción

Identifica los posibles valores para esas condiciones y cómo están relacionadas.

Completar con las combinaciones de datos que formarán los casos de prueba. Básicamente se listan las condiciones y acciones identificadas en una matriz.

Se puede expresar la lógica en forma de reglas

- Si A es mayor que X entonces… - Si el cliente C tiene deuda entonces… - etc.

Es muy aplicable cuando la lógica a probar está basada en decisiones
SELECCIÓN DE CASOS DE PRUEBA
¿Cómo seleccionar?

- Primero seleccionando los casos de uso más importantes - Para cada caso de uso, cuáles son los flujos más importantes - Para cada flujo, ver qué datos son los más importantes a utilizar

Está en nosotros seleccionar lo que ejecutamos/automatizamos de acuerdo a los recursos y la importancia que le damos a cada valor de cada variable y a cada caso de uso.
Es la técnica que nos da la cobertura de casos de uso
ACTORES
Los que van a ejecutar cada casos de prueba

Este tipo de información generalmente está disponible en las descripciones de los diagramas de uso

DATOS DE PRUEBA
Ciertos flujos se asocian con ciertas clases de equivalencia de algunas variables.

Solo podremos seleccionar algunas clases de equivalencia para algunos flujos.

FLUJO DEL TC5

(donde se quiere recordar el password y para ello se debe ingresar la cuenta de e-mail registrada) solo se puede ejecutar si se selecciona una cuenta de e-mail válida, con lo cual para ese caso de prueba no consideraremos todos los valores posibles para esa variable, sino que solo los que aplican para el flujo correspondiente.

FLUJOS DE PRUEBA
Para seleccionar los flujos debemos tener en cuenta

FLUJOS ALTERNATIVOS

Debería ser recorrido al menos una vez. Con esto nos garantizamos de visitar cada posible interacción del usuario con el sistema, y cada grupo de datos que hace que se vaya por un flujo u otro. Para

BUCLES

Deberíamos al menos seleccionar un caso en el que no se ejecute el bucle, uno en el que se ejecute una vez, y en algunos casos, si se considera que es oportuno, repetir el bucle varias veces. Se podrían distinguir dos tipos de bucles, los que tienen una cantidad de repeticiones definida.

DERIVANDO LOS CASOS DE PRUEBA
Se recorre desde el nodo inicial a cada uno de los nodos finales, pasando por cada una de las transiciones del modelo.
REPRESENTACIÓN DE CASOS DE USO
Cada caso de uso cuenta con una serie de pre-condiciones y post-condiciones que deben cumplirse antes y luego de la ejecución del mismo respectivamente.
Elemento de análisis muy conocido para documentar una iteracción típica entre el usuario y el sistema.

diagramas UML

Muestran qué tipo de actor o usuario puede ejecutar cada caso de uso o funcionalidad

Se captura conocimiento del negocio y de cómo se desea que trabaje el sistema

REPRESENTACIÓN GRÁFICA

Representación, en forma de grafo, para poder desde ahí visualizar más fácilmente los distintos flujos que se pueden seguir y seleccionarlos como casos de prueba.

Abstraerse de la letra, representarlo como un grafo dirigido que muestre fácilmente cuáles son los flujos del sistema.

REPRESENTACIÓN TABULAR

Se comienza describiendo el flujo principal, y luego se enriquece describiendo cada uno de los posibles flujos alternativos y excepciones.

Se representan en lenguaje natural, pero generalmente se intenta seguir cierta estructura, indicando el flujo de interacción como pasos numerados.

pre-condiciones y post-condiciones

Deben cumplirse antes y luego de la ejecución del mismo respectivamente.

DERIVACIÓN DE CASOS DE PRUEBA DESDE CASOS DE USO
No hay una única forma de aplicar esta técnica

Vamos a ver que vamos a tener que tomar muchas decisiones, plantear algunas alternativas, o algunas cosas que podríamos tener que considerar.

QUÉ ES EL TESTING EXPLORATORIO

TESTING EXPLORATORIO BASADO EN SESIONES
tengo equipos diferentes para hacer tester, ejecutar roles

Saber el antes y el después

TESTING EXPLORATORIO BASADO EN ESTRATEGIAS
diseñar programas o metodologias para cumplir un requerimiento
ESTILOS DE TESTING EXPLORATORIO

AD-HOC TESTING

sin seguir un orden determinado

QUIERO PROBAR UNA FUNCIONALIDAD ESPECIFICA

Probar una funcionalidad especifica

PROPIEDADES DEL TESTING EXPLORATORIO
1. Las pruebas no son definidas con anticipación, en este contexto se espera que el tester aprenda con rapidez y velocidad acerca de un producto o nueva funcionalidad, mientras que se provee retroalimentación al resto del equipo.

5. La efectividad del testing se apoya en el conocimiento, habilidades y experiencia del tester

4. Es un acercamiento a las actividades de testing que consisten en una serie de actividades que se realizan en simultáneo, tales como el aprendizaje del sistema, diseño y ejecución de las pruebas.

3. Su foco está en encontrar problemas y defectos por medio de la exploración del sistema bajo prueba.

2. Los resultados obtenidos durante pruebas anteriores guiarán las acciones, los pasos y los siguientes escenarios de prueba a ejecutar, construyendo así un conjunto de pruebas más eficaz

interactúa con un producto para cumplir con el objetivo de una misión, para posteriormente presentar y reportar los resultados que el resto de los actores del proyecto utilizarán para tomar decisiones a conciencia
CONSTRUYAMOS NUESTRO MAPA

Herramientas que los ayudaban en su actividad

- Brújula, para indicar en qué dirección iban; - Catalejo, para enfocar a lo lejos y “acercar” los lugares; - Compás, que permitía medir y ubicar más precisamente los sitios explorados.

Tomar notas de lo que se va descubriendo ya sea en forma esquemática o en forma tabulada

MISIÓN

tiempo, objetivos y reportes.

1. Proporcionar información y resultados de forma rápida; 2. Para obtener nueva información y conocimiento a lo largo de nuestro trabajo de testing; 3. Revelar nuevos tipos de defectos y problemas; 4. Mejorar las habilidades del tester y equipo de testing en general, además del conocimiento sobre la lógica del negocio; 5. Por último, notamos que el modo de registrar y guardar información en las sesiones, es una tarea muy importante, tanto para el tester, equipo de testing, como para el resto de los actores que forman parte del equipo.

presenta una estructura externa que es sencilla de describir, en la que durante un lapso de tiempo un tester –o equipo de testers
“El Testing Exploratorio consiste en el aprendizaje, diseño y ejecución de pruebas de forma simultánea.”

PRINCIPIOS BÁSICOS DE LA AUTOMATIZACIÓN DE PRUEBAS

BUENAS PRÁCTICAS DE AUTOMATIZACIÓN DE PRUEBAS
LAS COSAS CLARAS AL COMENZAR

NOMENCLATURA

Crear casos de prueba temporales, los cuales se los puede nombrar con un prefijo común como pru o tmp

Definir una estructura de carpetas que permita separar los casos de prueba generales

Utilizar nombres para los casos de prueba de forma tal que sea fácil distinguir

Definir y dejar clara la organización y nomenclatura a utilizar, que a futuro nos permita manejar lo más simple posible el enorme set de pruebas que vamos a tener

PARADIGMAS DE AUTOMATIZACIÓN
DISEÑO DE SUITES DE PRUEBA

Criticidad: podríamos definir un grupo de pruebas que se debe ejecutar siempre (en cada build), ya que son las más críticas, otro de nivel medio, que lo ejecutamos con menos frecuencia (o tal vez que se seleccionan solo si hay cambios en determinadas funcionalidades), y uno de poca criticidad, que ejecutaríamos opcionalmente si

Módulo o Funcionalidad: agrupando todos los casos de prueba que actúan sobre una misma funcionalidad.

¿CÓMO AUTOMATIZAR?

Definido en dos niveles de abstracción

Casos de prueba con datos

Se instancian los casos de prueba abstractos con valores concretos

Casos de prueba abstractos o conceptuales,

Son guiones de prueba, que al indicar que se utilizarán datos no hacen referencia a valores concretos, sino a clases de equivalencia, o a grupos de valores válidos

Se comienza por el inventario de funcionalidades asignaríamos prioridades a cada caso de prueba que tenemos preparado para cada una de las distintas funcionalidades.

PRIORIZACIÓN: DECIDIR QUÉ Y CUÁNDO AUTOMATIZAR

- Importancia o criticidad para la operativa del negocio. -Costo del impacto de errores. - Probabilidad de que hayan fallos (esto hay que preguntárselo a los desarrolladores, que seguramente sabrán que determinado módulo lo tuvieron que entregar en menor tiempo del que necesitaban, entonces ellos mismos dudan de la estabilidad o calidad del mismo). -Acuerdos de nivel de servicio (SLA). - Dinero o vidas en juego (suena dramático, pero sabemos que hay muchos sistemas que manejan muchas cosas muy sensibles).

Nos basamos en algo llamado “testing basado en riesgos”

DISEÑO DE PRUEBAS SEGÚN OBJETIVOS

1. Testing consistente y repetible, asegurando que se ejecutan siempre exactamente las mismas acciones, con los mismos datos, y verificando cada una de las cosas que siempre hay que verificar, tanto a nivel de interfaz como a nivel de base de datos. 2. Correr casos de prueba desatendidos. 3. Encontrar errores de regresión, a menor costo y en forma más temprana. 4. Correr casos de prueba más seguidos (después de cada commit al repositorio de código por ejemplo). 5. Mejorar la calidad del software (más testing, más oportunidades de mejora), y así incrementar la confianza de los usuarios. 6. Medir performance. 7. Testear en diferentes sistemas operativos, navegadores, configuraciones, gestores de bases de datos, etc., sin duplicar el costo de ejecución. 8. Disminuir el tiempo de salida al mercado/correr las pruebas más rápido. 9. Mejorar la moral en los testers, haciendo que las tareas rutinarias sean ejecutadas en forma automática.

RECORD AND PLAYBACK

La herramienta sea capaz de capturar las acciones del usuario (record) sobre el sistema que estamos probando.

Luego a un script que sea reproducible (playback).

SCRIPTING

Lenguajes pueden ser específicos, conocer el lenguaje o API de la herramienta, los distintos elementos con los que interactuamos del sistema bajo pruebas, los botones en una página web, los métodos de la lógica que queremos ejecutar, o los parámetros a enviar en un pedido GET de un sistema web

TESTING AUTOMATIZADO

una máquina logre ejecutar los casos de prueba en forma automática
scripts en un lenguaje genérico o propio de una herramienta

TEST DE REGRESIÓN

verificar que lo que estoy probando no tenga regresiones
pruebas planificadas que se seleccionan para ejecutar periódicament

PRUEBAS AUTOMATIZADAS

¿POR QUÉ Y PARA QUÉ AUTOMATIZAR?
x Mejora la calidad, pues hay menos errores humanos. x Mejora la performance de producción, pues con las mismas personas se puede lograr mucho más trabajo, a mayor velocidad y escala, y en ese sentido mejoran el rendimiento de las personas. tema

al automatizar pruebas logramos

obtener un rápido feedback

sobre el estado de calidad del sistema

Al ejecutar las pruebas automatizadas más rápido

permite detectar antes los errores introducidos sobre funcionalidades ya existentes del sistema

(a mediano y largo plazo

reducir el tiempo insumido en las pruebas de una determinada funcionalidad, con lo cual podremos disminuir el tiempo de salida al mercado.

sean “automáticas” y “ejecutadas por una máquina”, vamos a necesitar gente capacitada.
el beneficio se da desde el momento de modelar, y especificar con un lenguaje formal las pruebas a realizar

Pruebas de Performance

tener el sistema bien alineado
cobijar todos los escenarios extremos
son las mismas pruebas no funcionales
se hacen con equipos interelacionados

se analiza el servidor

INTRODUCCIÓN A LAS PRUEBAS FUNCIONALES

DISEÑO BÁSICO DE CASOS DE PRUEBA
Estrategias para determinar distintos flujos a probar.
Determinar el flujo del caso de prueba, que básicamente será seguir el flujo de la funcionalidad

CALCULAR VALORES ESPERADOS

Esta es la única forma de determinar si la aplicación funciona como es esperado o no.

Estamos incluyendo a lo que el sistema muestra en pantalla, archivos que se tengan que modificar, estados de la base de datos, o cualquier otro tipo de acción que deba realizar el software que estamos probando.

Testing Negativo

Incluir escenarios con aquellas cosas que el sistema debe estar preparado para no hacer, o no fallar por tratarse de una situación incorrecta.

COMBINACIÓN DE VALORES

Busca obtener el conjunto de datos más eficiente posible (eficiente = encontrar la mayor cantidad de errores con la menor cantidad de ejecuciones).

Permiten seleccionar una cantidad acotada de datos de prueba, siguiendo teorías de errores que indican cómo combinar los datos para aumentar esa probabilidad de encontrar errores

NO ENMASCARAMIENTO DE ERRORES

En los conjuntos de datos de prueba se utilizará solo un valor de una clase inválida a la vez, pues si se utilizan dos se corre el peligro de no identificar qué valor inválido produce el error.

COMBINACIÓN POR PARES

Una de las técnicas de combinación de datos más usada es all-pairs, o sea todos los pares, y justamente lo que se hace es intentar utilizar todos los pares posibles.

PROW (pairwise with restrictions, order and weight).

Utilizando este algoritmo podemos excluir pares que nos resulten inválidos, e incluso darle distintas prioridades a los distintos pares, pues siempre será necesario repetir algunos pares para lograr todas las combinaciones,

SELECCIONAR VALORES INTERESANTES

Ya identificadas las variables, para cada una hay que seleccionar los valores que se le asignarán en las pruebas.

Un grupo de valores pertenece a una misma clase de equivalencias si deben producir un comportamiento similar en el sistema.

Distinguir opciones significativamente diferentes cuando:

-Disparan distinto flujo sobre el sistema (al ingresar un valor inválido me lleva a otra pantalla distinta). - Dispara un mensaje de error diferente (no es lo mismo ingresar un password corto que uno vacío). -Cambia la apariencia de la interfaz del usuario, o el contenido del form (al seleccionar pago con tarjeta de crédito aparecen los campos para ingresar el número de tarjeta, titular y fecha de expiración, pero si se selecciona pago por transferencia entonces aparecen los campos para ingresar información de la cuenta bancaria). -Cambian las opciones disponibles para otras variables (al seleccionar un país distinto se pueden seleccionar sus estados o provincias). 34 Introducción a las Pruebas Funcionales - Si dispara distintas condiciones para una regla de negocio (si se ingresa una edad será distinto el comportamiento si es menor o mayor de edad). - Valores por defecto o cambiados (en ocasiones el sistema sugiere datos que se habían ingresado previamente para un cliente, como por ejemplo su dirección, pero si se cambian en el formulario de entrada entonces el sistema actualizará ese dato). -Cambios de comportamiento por distintas configuraciones o distintos países (formato de números, formatos de fecha, moneda, etc.). - ¿Qué más se les ocurre? Seguro que hay más, estos fueron ejemplos para mostrar cómo analizar los casos significativamente diferentes.

Para cada variable utilizar distintos datos

IDENTIFICAR VARIABLES

Se identifican las variables que están en juego en la funcionalidad

Para cada variable se diseñan valores interesantes

Las variables, de cualquier entrada que al cambiar su valor hace que cambie el comportamiento o resultado del sistema bajo pruebas.

conformar las variables de una funcionalidad

-Entradas del usuario por pantalla. - Parámetros del sistema (en archivos de configuración, parámetros de invocación del programa, tablas de parámetros, etc.). - Estado de la base de datos (existencia –o no– de registros con determinados valores o propiedades).

PRUEBAS DIRIGIDAS POR DATOS
Es una técnica para construir casos de prueba basándose en los datos entrada, y separando el flujo que se toma en la aplicación.

FLUJO

Se almacenan los datos de entrada y salida esperados.

Definiendo con casos de prueba abstractos

Casos de prueba específicos

Data-driven testing

Casos de prueba abstracto y específico

Al momento de ser ejecutados con un juego específico de datos,

Serie de pasos para ejecutar el caso de prueba

Permite agregar nuevos casos de prueba fácilmente, ingresando simplemente nuevos datos de entrada y de salida esperados, que sirvan para ejecutar el mismo flujo.

CASO DE PRUEBA ABSTRACTO Y ESPECÍFICO
Se utilizan variables y se describen con operadores lógicos
Se caracteriza por no tener determinados los valores para las entradas y salidas esperadas.

ESPECIFICO

Se determinan valores específicos para cada variable de entrada.

CAJA BLANCA Y CAJA NEGRA
Basada en la información utilizada como entrada.
CAJA BLANCA

Si utilizamos información interna del sistema que estamos probando, tal como el código, esquema de base de datos, etc.,

CAJA GRIS

Combinación de caja blanca y caja negra

CAJA NEGRA

Observación de entradas y salidas del sistema

TÉCNICAS DE DISEÑO DE CASOS DE PRUEBA
Se basa en técnicas bien conocidas y utilizadas, tales como particiones de equivalencia, valores límites, combinaciones por pares, tablas de decisión o máquinas de estado.
Permiten seleccionar la menor cantidad de casos con mayor probabilidad de encontrar fallas en el sistema.
COBERTURA DE PRUEBAS
Es una medida de calidad de las pruebas.

Subtema

ORÁCULO
Es el mecanismo, ya sea manual o automático, de verificar si el comportamiento del sistema es el deseado o no.

Deberá comparar el valor esperado contra valor obtenido, el estado final esperado con el estado final alcanzado, el tiempo de respuesta aceptable con el tiempo de respuesta obtenido, etc.

CASO DE PRUEBA
ELEMENTOS DE DESCRIPCIÓN

􀁸 Flujo: secuencia de pasos a ejecutar 􀁸 Datos entrada 􀁸 Estado inicial 􀁸 Valor de respuesta esperado 􀁸 Estado final esperado

Lo más importante el flujo, o sea la serie de pasos a ejecutar sobre el sistema, los datos de entrada, ya sean entradas proporcionadas por el usuario al momento de ejecutar, o el propio estado de la aplicación, y por último las salidas esperadas, el oráculo, lo que define si el resultado fue positivo o negativo.

“Un conjunto de entradas de prueba, condiciones de ejecución, y resultados esperados desarrollados con un objetivo particular, tal como el de ejercitar un camino en particular de un programa o el verificar que cumple con un requerimiento específico.”

“Una idea de prueba es una breve declaración de algo que debería ser probado. Por ejemplo, si se está probando la función de la raíz cuadrada, una idea de prueba sería el ‘probar un número que sea menor que cero’. La idea es chequear si el código maneja un caso de error.”

INTRODUCCIÓN

TESTING INDEPENDIENTE
Quienes construyeron el software son los que mejor lo conocen

Se pide a la gente que construyó el software que lo pruebe.

EL TESTING AL FINAL DEL PROYECTO
En cada etapa del proceso de desarrollo tendremos actividades de testing para realizar

Si dejamos para el final nos costará mucho más, más tiempo, más horas, y más costo de reparación, pues si encontramos un problema en la arquitectura del sistema cuando este ya se implementó, entonces los cambios serán más costosos de implementar.

No debería ser una etapa sino que debería ir de la mano con el desarrollo en sí

El testing es algo que queda para el final

OBJETIVOS
La estrategia más efectiva sería centrarse en un módulo que esté más verde, que tenga errores más fáciles de encontrar, me centro en diseñar y ejecutar más pruebas para ese módulo, pues ahí encontraré más fallos.

El objetivo no tiene por qué ser el mismo a lo largo del tiempo, pero sí es importante que se tenga claro en cada momento cuál es.

La forma en la que estaremos aportando calidad es principalmente buscando fallos

Si no encontramos fallos entonces tenemos más confianza en que los usuarios encontrarán menos problemas.

TESTING
Es una investigación técnica realizada para proveer información a los stakeholders sobre la calidad del producto o servicio bajo pruebas.

Es un proceso diseñado para asegurar que el código hace lo que se supone que debe hacer y no hace lo que se supone que no debe.

Un proceso en el que se ejecuta un programa con el objetivo de encontrar errores.

Falacia del Nirvana
Esta refiere al error lógico de querer comparar cosas reales con otras irreales o idealizadas5
CALIDAD
Es una característica que nos permite comparar distintas cosas del mismo tipo.

Se define, o se calcula, o se le asigna un valor, en base a un conjunto de propiedades (seguridad, performance, usabilidad, etc.),

LA CALIDAD, EL TESTING Y SUS OBJETIVOS
Aportar a la calidad del producto que se está verificando