Técnicas Avanzadas de Testing Automatizado



Documentos relacionados
Testing Unitario. Laboratorio de Testing y Aseguramiento de la Calidad del Software

CLASE # 5 TÉCNICAS DE CAJA BLANCA

Técnicas Avanzadas de Testing Automático

Técnicas de prueba 1. FUNDAMENTOS DE LA PRUEBA DEL SOFTWARE

Contenido. Tipos y niveles de pruebas de software Pruebas de caja negra

Técnicas Avanzadas de Testing Automatizado

Testing. Tipos, Planificación y Ejecución de Pruebas

1. Descripción y objetivos

Sistemas de Información Administrativo - Universidad Diego Portales. Cátedra : Sistemas de Información Administrativa S.I.A.

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE

Sistemas de Programas Universidad Simón Bolívar

SSTQB. Nivel Fundamentos. Examen ejemplo. Programa de estudios 2010

Elementos requeridos para crearlos (ejemplo: el compilador)

Ingeniería del Software. Pruebas. Pruebas en el PUD. Las pruebas del software. Tipos de prueba Estrategias de prueba

Ingeniería de Software. Pruebas

Hoy terminamos caja blanca

Preliminares. Tipos de variables y Expresiones

PRUEBAS, CALIDAD Y MANTENIMIENTO DEL SOFTWARE

Modulo 1 El lenguaje Java

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso

Su éxito se mide por la pertinencia y la oportunidad de la solución, su eficacia y eficiencia.

Práctica 7. Pruebas. Introducir conceptos básicos de pruebas unitarias en sistemas orientados a objetos.

Ingeniería del Software I Clase de Testing Funcional 2do. Cuatrimestre de 2007

Ingeniería de Software Avanzada

Pruebas de Programas. Introducción Errores de software. Julio Villena Román. Un error en un programa puede ser algo muy serio

Servicio de administración de pautas publicitarias en Internet

capitulo3 MARCO TEÓRICO Para el diseño de la reubicación de los procesos se hará uso de la Planeación

Generador de casos de prueba genético


Jose Mª Cervera Casanovas

GENERACIÓN DE CÓDIGO

6.4 ESTRATEGIAS DE PRUEBA

2.2. LA COMPRA. TOMA DE DECISIONES DEL CLIENTE.

Técnico y sus funciones. 5. Función de los líderes. 6 Función del analista de datos. 6. Metas del Help Desk. 7 Definir el alcance del Help Desk.

Entregable proyecto 3

Clase 11. Análisis dinámico, 2ª parte.

VERIFICACIÓN, TEST Y DEBUGGING

INTRODUCCIÓN AL TESTING BASADO EN MODELOS

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Implementando un ERP La Gestión del Cambio

NUEVAS TENDENCIAS EN LA CALIDAD DEL SOFTWARE IGNACIO BAYUGAR

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

ANEXO : PERFILES. Guía de Comunicación Digital para la Administración General del Estado. ANEXO PERFILES

Cadena de Valor y Estrategias Genéricas 1. Prof. Marcelo Barrios

En este capítulo se describe las herramientas, así como los procesos involucrados en el análisis y desarrollo de sistemas de información, por otro

Administración por Procesos contra Funciones

"Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios

Conclusiones. Particionado Consciente de los Datos

Tratamiento del Riesgo

5- Uso de sentencias avanzadas

El Auditor y la organización

Automatización en el diseño de pretrazados de ejes de caminos

Introducción a la Programación en MATLAB

SAQQARA. Correlación avanzada y seguridad colaborativa_

Soluciones Informáticas para Teoría de Restricciones (TOC)

CAPITULO I. Introducción. En la actualidad, las empresas están tomando un papel activo en cuanto al uso de sistemas y

Algunas Herramientas de Apoyo al Análisis y Diseño de Software. Agustín J. González ELO329: Diseño y programación orientados a objetos

REGISTRO DE EMPRESAS Y PERSONAS BASE DE INFORMACIÓN DE CLIENTES & CONTACTOS

Ejercicios. 1. Definir en Maxima las siguientes funciones y evaluarlas en los puntos que se indican:

6.3 CASOS DE PRUEBA CAJA BLANCA

INSTITUTO TECNOLÓGICO DE SALINA CRUZ. Fundamentos De Redes. Semestre Agosto-Diciembre Reporte De Lectura

Sesión No. 10. Contextualización: Nombre de la sesión: ClickBalance segunda parte PAQUETERÍA CONTABLE

ESTE EJERCICIO ES DE TIPO MIXTO.

PRU. Fundamento Institucional. Objetivos. Alcance

Caso práctico de Cuadro de Mando con Tablas Dinámicas

Estándares para planes de calidad de software. Escuela de Ingeniería de Sistemas y Computación Desarrollo de Software II Agosto Diciembre 2008

Pruebas de unidad con JUnit

Unidad 1. Fundamentos en Gestión de Riesgos

Como hemos visto en la teoría del tema existen numerosos sistemas ERP, unos software libre y otros propietario.

TUTORIAL DE PHP. M. en C. Erika Vilches. Parte 2.

Desarrollo de un Sistema de Gestión de Proyectos mediante el framework GWT

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Diseño orientado al flujo de datos

Figura 4.1 Clasificación de los lenguajes de bases de datos

6 Anexos: 6.1 Definición de Rup:

- Bases de Datos - - Diseño Físico - Luis D. García

[DISEÑO Y REALIZACIÓN DE PRUEBAS]

Guía de implementación Softland en SQL Server Versión 1.0

Tema: Clases y Objetos en C++.

METODOLOGÍA PARA REALIZAR UNA AUDITORÍA INFORMÁTICA.

Análisis y Diseño TES Software

Plan de Gestión Medioambiental para obras urbanas

Proceso Unificado de Rational PROCESO UNIFICADO DE RATIONAL (RUP) El proceso de desarrollo de software tiene cuatro roles importantes:

Deberemos escoger de nuestro equipo humano un responsable de la implementación (si no queremos hacerlo personalmente).

Sistema para Gestión Hotelera Visión

Beatriz Pérez. Jornada de Testing en Vivo - 1, 2, 3 probando!

Introducción al Proceso de Pruebas.

TOMA DE DECISIONES II

Objetivo de la secuencia

Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 9: CRITERIOS DE CALIDAD DE DISEÑO MODULAR

Introducción a la Computación. Testing en Python. Maximiliano Geier. Facultad de Ciencias Exactas y Naturales, UBA 17/06/2014

DCU Diagramas de casos de uso

CAPÍTULO 2 IMPORTANCIA DE LA ASIGNATURA OUTSOURCING EN TECNOLOGÍAS DE INFORMACIÓN

SERIE ESTRATEGIA COMERCIAL CRM. Lic. Guiomar Patricia González P.

DESARROLLO AGIL ING. MA. MARGARITA LABASTIDA ROLDÁN

ENFOQUE ISO 9000:2000

Sistemas de Recuperación de Información

Ecuaciones de primer grado con dos incógnitas

Análisis de estados financieros. Sesión 8: Análisis del capital contable

Modelo de calidad del producto software

Transcripción:

Técnicas Avanzadas de Testing Automatizado Criterios de cobertura: Caja blanca/caja negra Clases de Equivalencia Valores de borde Cobertura basada en flujo de control CodeCover Mutación Jumble

Criterios de testing Un criterio de testing es una mecanismo para decidir si una suite es adecuada o no. En general, se espera que un criterio de test cumpla con: Regularidad: Un criterio es regular si todos los conjuntos de tests que satisfacen el criterio detectan en general los mismos errores. Validez: Un criterio es válido si para cualquier error en el programa hay un conjunto de tests que satisfagan tal criterio y detecten el error. En general, es muy difícil conseguir criterios con buenas características de regularidad y validez.

Principales enfoques de testing La forma más efectiva de hacer testing es de manera exhaustiva, pero es en general impracticable. Luego, se necesita algún criterio para seleccionar tests. Existen principalmente dos ramas para definir criterios de testing: Caja negra (o funcional): abarca a aquellos criterios que deciden si una suite es adecuada analizando la especificación del software a testear (pero no su código) Caja blanca (o estructural): abarca a aquellos criterios que deciden si una suite es adecuada analizando la estructura del código a testear.

Testing de caja negra En el testing funcional, el SUT se trata como si fuera una caja negra: Entrada SUT Salida Como no se observa el comportamiento interno del software, es necesario contar con una descripción de qué se espera del SUT (especificación). Para diseñar los tests que conforman la suite, se usa el comportamiento esperado del sistema.

Relevancia de las especificaciones Para hacer testing de caja negra, se debe contar con una especificación del SUT. Es más efectivo si se cuenta con especificaciones ricas: A nivel de rutinas: pre- y post-condiciones. A nivel de módulos: especificación de diseño, contratos de clases, etc. A nivel de sistema: una buena especificación de requisitos.

Particionado en clases de equivalencia Consiste en dividir el espacio de entrada en clases de equivalencias: Las clases de equivalencia deberían corresponder a casos similares (para los cuales el SUT se comportaría de la misma manera). Motivación: si el SUT funciona correctamente para un test en una clase, se supone que lo hará para el resto de los casos de la misma clase. Problema: definir una política de particionado adecuada. Se debe analizar la especificación y definir clases de equivalencia de tests, identificando los inputs para los cuales se especifican distintos comportamientos.

Particionado en clases de equivalencia Una forma básica de hacer particionado por clases de equivalencia consiste en: considerar cada condición especificada sobre las entradas como un predicado, los predicados se combinan para definir una relación de equivalencia, incluir clases correspondiente a entradas inválidas, si las entradas correspondientes a una clase no se tratan uniformemente (e.g., salidas diferentes), particionar aún más las clases teniendo en cuenta los diferentes tratamientos.

Particionado en clases de equivalencia: ejemplo Supongamos que tenemos una rutina que, dada una lista y una posición en la misma, retorna el elemento en esa posición: { lista!= null && (pos>=0 && pos<lista.length) public Object get(list lista, int pos) {... { Resultado es el elemento de la lista en la posición pos Mirando las entradas y salidas posibles, tenemos como clases de equivalencia la combinación de las siguientes condiciones: lista pos resultado ==null!=null <0 >=0 && <lista.length >= lista.length ==null!=null

Particionado en clases de equivalencia: ejemplo Supongamos que tenemos una rutina que, dada una lista y una posición en la misma, retorna el elemento en esa posición: { lista!= null && (pos>=0 && pos<lista.length) public Object get(list lista, int pos) {... { Resultado es el elemento de la lista en la posición pos Mirando las entradas y salidas posibles, tenemos como clases de equivalencia la combinación de las siguientes condiciones: lista!=null, pos>=0, pos<lista.length

Análisis de valores de borde En muchos casos, el software tiene casos especiales, o extremos, propensos a errores: estos valores suelen encontrarse en los bordes de las clases de equivalencia. Una suite de valores de borde para un particionado es un conjunto de tests que se encuentran en los bordes de las clases de equivalencia. En general, usamos valores de borde para complementar una suite basada en particionado por clases de equivalencia.

Análisis de valores de borde: ejemplo Volvamos a mirar la rutina del ejemplo anterior { lista!= null && (pos>=0 && pos<lista.length) public Object get(list lista, int pos) {... { Resultado es el elemento de la lista en la posición pos Mirando las condiciones en las entradas, para cubrir los valores de borde deberíamos proveer tests que cubran las siguientes condiciones: pos "==-1" ==0 ==lista.length-1 ==lista.length

Clases de equivalencia con y sin Valores bordes y y ymax ymax ymin ymin xmax xmin x xmax xmin x clases de equivalencia clases de equivalencia + valores de borde

Testing de caja blanca A diferencia del testing de caja negra, en los criterios de test de caja blanca se analiza el código del SUT para decidir si una suite es adecuada o no. Es decir, los criterios de caja blanca se enfocan en la implementación. Muchos de los criterios exploran la estructura del código a testear, intentando dar casos que ejerciten el código de maneras diferentes.

Cobertura de sentencias Una test suite satisface el criterio de cobertura de sentencias si todas las sentencias del programa son ejecutadas al menos una vez por algún test de la suite. Es uno de los criterios de caja blanca más débiles. Errores en condiciones compuestas y ramificaciones de programas pueden ser pasados por alto. En muchos casos, con suites pequeñas se puede satisfacer este criterio.

Cobertura de sentencias: ejemplo El siguiente programa determina si un año dado, es o no bisiesto: public static boolean bisiesto(int a) { boolean b = false; if ((a%4==0 a%10==0) && (a%100!=0)) b = true; return b;

Cobertura de sentencias: ejemplo El siguiente programa determina si un año dado, es o no bisiesto: public static boolean bisiesto(int a) { boolean b = false; if ((a%4==0 a%10==0) && (a%100!=0)) b = true; return b; Con la entrada { a = 2008 nos alcanza para conseguir cumplir con cobertura de sentencias.

Cobertura de decisiones Una decisión es un punto en el código en el que se produce una ramificación o bifurcación. Ej.: condiciones de ciclos, condiciones de if-then-else Una suite satisface el criterio de cobertura de decisión si todas las decisiones del programa son ejecutadas por true y por false al menos una vez. Propiedad: cobertura de decisión es más fuerte que cobertura de sentencias. Si una suite satisface cobertura de decisión, también satisface cobertura de sentencias

Cobertura de decisión: ejemplo El siguiente programa determina si una cadena es capicúa: public static boolean capicua(char[] list) { int index = 0; int l = list.length; while (index<(l-1)) { if (list[index]!= list[(l-index)-1]) { return false; index++; return true; Qué entradas deberíamos dar para conseguir cobertura de decisión?

Cobertura de decisión: ejemplo El siguiente programa determina si una cadena es capicúa: public static boolean capicua(char[] list) { int index = 0; int l = list.length; while (index<(l-1)) { if (list[index]!= list[(l-index)-1]) { return false; index++; return true; Qué entradas deberíamos dar para conseguir cobertura de decisión? { list = neuquen, list = pero

Coverage Coverage es una herramienta para medir cobertura de una test suite, de acuerdo a algunos criterios de caja blanca: Diseñada para Java+JUnit. Se puede instalar como un plugin de Eclipse. Muestra visualmente el código cubierto + estadísticas de cobertura.

Testing basado en Mutación Otro criterio para evaluar suites de testing es el basado en mutación: Es un criterio de caja blanca, se basa en análisis del código a testear. Es un enfoque diferente a los vistos anteriormente. Según este criterio, una suite es adecuada si es efectiva para descubrir bugs inyectados: los bugs se inyectan en el código, mutando operaciones del mismo cada variante del código original es un mutante El objetivo: matar todos los mutantes usando tests: un mutante está muerto si existe un test de la suite que no falla en el original, pero si en el mutante.

Mutantes: ejemplo Consideremos el siguiente programa: public static boolean bisiesto(int a) { boolean b = false; if ((a%4==0) && (a%100!= 0)) b = true; return b; El siguiente es un mutante del anterior: public static boolean bisiesto(int a) { boolean b = false; if ((a%4==0) (a%100!= 0)) b = true; return b;

Jumble Jumble es una herramienta para evaluar suites de acuerdo a mutación: Diseñada para Java+JUnit. Se puede instalar como un plugin de Eclipse. Crea mutantes a partir del código original: A nivel de bytecode. Mutantes: cambios en operadores booleanos y aritméticos, etc. Corre suites JUnit y mide score (% de mutantes muertos) Reporta los mutantes que quedaron vivos. útil para mejorar la suite!