Técnicas Avanzadas de Testing Automático

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

Elementos requeridos para crearlos (ejemplo: el compilador)

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología

Técnicas Avanzadas de Testing Automatizado

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

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 SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE

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

Ciclo de vida del software

Unidad 1. Fundamentos en Gestión de Riesgos

SISTEMAS Y MANUALES DE LA CALIDAD

Gestión de Configuración del Software

Procesos Críticos en el Desarrollo de Software

6.4 ESTRATEGIAS DE PRUEBA

Plan de estudios ISTQB: Nivel Fundamentos

Patrones de software y refactorización de código

Introducción al Proceso de Pruebas.

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

SEGURIDAD Y PROTECCION DE FICHEROS

+ Cómo ahorrar dinero con Software Quality

Ingeniería de Software. Pruebas

Empresa Financiera Herramientas de SW Servicios

SISTEMAS DE INFORMACIÓN III TEORÍA

CMMI (Capability Maturity Model Integrated)

Gestión y Desarrollo de Requisitos en Proyectos Software

El Proceso de Pruebas de acuerdo a los estandares y la experiencia.

El Software. Es lo que se conoce como el ciclo de vida del software.

Presentación de Pyramid Data Warehouse

Metodología Orientada a Objetos Clave Maestría en Sistemas Computacionales

ASIS Technology Partners. 1

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

LA LOGÍSTICA COMO FUENTE DE VENTAJAS COMPETITIVAS

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual

Calidad de Sistemas de Información

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

CAPITULO 2 - POR QUÉ NECESITAN LAS EMPRESAS UN CUADRO DE MANDO INTEGRAL?

implantación Fig. 1. Ciclo de vida tradicional

SÍNTESIS Y PERSPECTIVAS

Tópicos Avanzados de Análisis y Diseño INGENIERIA DE SOFTWARE ING. MA. MARGARITA LABASTIDA ROLDÁN

CONCLUISIONES Y RECOMENDACIONES

Instituto Nacional de Tecnología Industrial TESTING DE SOFTWARE

Calidad Escuela de Ingeniería de Sistemas y Computación Desarrol o de Software II Agosto Diciembre 2007

Introducción. Por lo que existe una creciente preocupación por lograr que los productos software cumplan con ciertos criterios de calidad.

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

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

CICLO DE VIDA DEL SOFTWARE

NUEVAS TENDENCIAS EN LA CALIDAD DEL SOFTWARE IGNACIO BAYUGAR

<Generador de exámenes> Visión preliminar

Pruebas de unidad con JUnit

3. GESTIÓN DE CONFIGURACIÓN DE SOFTWARE

Técnicas Avanzadas de Testing Automatizado

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

Plan de Gestión de Configuración. Universidad Nacional de la Patagonia Austral

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

PERFIL DEL PUESTO POR COMPETENCIAS Sepa cómo construirlo y evitar bajos desempeños posteriores

Sistemas de Información Geográficos (SIG o GIS)

IAP TÉCNICAS DE AUDITORÍA APOYADAS EN ORDENADOR (TAAO)

El Proceso Unificado de Desarrollo de Software

ISO 9001:2000 DOCUMENTO INFORMATIVO DOCUMENTO ELABORADO POR CHRISTIAN NARBARTE PARA EL IVECE

Master en Gestion de la Calidad

Aseguramiento de la Calidad, QA. Materia: Desarrollo Industrial de Software Alumno: David Alejandro González Díaz y Froylan Ruiz Cirilo.

GESTION OPERATIVA. Niveles de gestión

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

Traducción del. Our ref:

Construcción y Pruebas de Software

Sistema Gestión Licitación para la compra del desarrollo y migración del Sistema de Gestión de Activos y Configuraciones para Plan Ceibal

Planificación, Gestión y Desarrollo de Proyectos

TITULO Editorial Autores ISBN AÑO

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

Decisión: Indican puntos en que se toman decisiones: sí o no, o se verifica una actividad del flujo grama.

Normas chilenas de la serie ISO 9000

Muchas veces hemos visto un juego de billar y no nos percatamos de los movimientos de las bolas (ver gráfico 8). Gráfico 8

Universidad acional Experimental Del Táchira Decanato de Docencia Departamento de Ingeniería en Informática

Funcionalidades Software PROYECTOS GotelGest.Net Software para la gestión de Proyectos GotelGest.Net

ANÁLISIS DE RIESGOS EN LA GESTIÓN DE PROYECTOS. Los riesgos son eventos o condiciones inciertas que, si se producen, tienen un

Marco Normativo de IT

UNIVERSIDAD CATOLICA DE COLOMBIA FACULTAD DE INGENIERIA DE SISTEMAS

CALIDAD DEL SOFTWARE TESTS DE EXAMEN ACTUALIZADO SEP TEMA 3 NORMALIZACIÓN Y CERTIFICACIÓN: NORMA ISO 9001:2000

MODIFICACIONES de ISO 9001:2000 a ISO 9001:2008

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

Servicio de administración de pautas publicitarias en Internet

Aseguramiento de la Calidad

Introducción a las Pruebas de Software

UNIVERSIDAD DE ORIENTE FACULTAD DE CIENCIAS ECONOMICAS

PROPÓSITO... 2 DETERMINANTES PARA UNA BUENA EXPERIENCIA DE USO...

Introducción. Definición de los presupuestos

Guía Metodológica para el diseño de procesos de negocio

DOCUMENTO GENERAL POLÍTICA DE CALIDAD ANALÍTICA DOCUMENTO EXPLICATIVO

Principales Cambios de la ISO 9001:2015

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

5to Año PROFESORES DE 5TO Página 1 de 5

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

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

1. INTRODUCCIÓN 1.1 INGENIERÍA

IBISCOM AUMENTE SU EFICIENCIA. i-bpm

PROCEDIMIENTO AUDITORÍA INTERNA

Hoy terminamos caja blanca

GUIA SOBRE LOS REQUISITOS DE LA DOCUMENTACION DE ISO 9000:2000

Las Normas ISO 9000 del 2000

Transcripción:

Técnicas Avanzadas de Testing Automático Marcelo Frias ITBA - Buenos Aires, Argentina CONICET Preliminares: Calidad Validación y Verificación Especificaciones y V&V Análisis estático y dinámico Inspecciones Testing Procesos de desarrollo Terminología Clasificación

Calidad en el Desarrollo de Software Uno de los objetivos principales en el desarrollo de software es conseguir productos de alta calidad. La calidad involucra confiabilidad, mantenibilidad, interoperabilidad, etc. La confiabilidad es uno de los atributos de calidad más importantes. Una de las medidas de calidad mejor establecidas es la cantidad de defectos por líneas de código. Mayor cantidad de defectos hace al software menos confiable (de menor calidad).

Validación y Verificación Las tareas de validación y verificación ayudan a mostrar que el software cubre las expectativas para las cuales fue construido. Ayuda a garantizar calidad (en particular, confiabilidad). Esto no significa garantizar que el software será completamente libre de defectos. Debe ser lo suficientemente bueno para el uso que se le pretende dar (y el uso determina el grado de confianza que se requiere del software)

Validación vs. Verificación Verificación: el software debería realizar lo que su especificación indica: construimos el producto correctamente? Validación: El software debería hacer lo que el usuario requiere de él: construimos el producto correcto?

Validación vs. Verificación

Validación vs. Verificación requisitos reales

Validación vs. Verificación requisitos reales

Validación vs. Verificación.tex requisitos reales especificación

Validación vs. Verificación.tex requisitos reales especificación

Validación vs. Verificación requisitos reales.tex especificación.java implementación

Validación vs. Verificación Validación requisitos reales.tex especificación.java implementación

Validación vs. Verificación Validación requisitos reales.tex especificación.java implementación Verificación

Especificaciones en V&V Las especificaciones son fundamentales como mecanismo para poder razonar sobre la corrección de un programa, es decir, para las actividades de Validación y Verificación La especificación de un programa es una descripción de qué es lo que se supone que el programa debe hacer Existen muchas formas diferentes de expresar especificaciones de programas una particularmente adecuada es la basada en aserciones de corrección

Contratos como Especificación de Software El Diseño por Contratos es una metodología de desarrollo de software (orientado a objetos) basado fuertemente en la posibilidad de especificar las funcionalidades asociadas a las partes de un sistema (clases, pero también unidades de menor granularidad como las rutinas). Estas especificaciones deben permitir, de manera precisa, indicar cuál es la relación correcta entre una clase y los clientes de la misma, y hacen uso intensivo de aserciones, y elementos de especificaciones formales. Las aserciones forman parte de los denominados contratos, y constituyen la base esencial del Diseño por Contratos.

Aserciones de Corrección Las aserciones de corrección de programas, en particular para programas imperativos, suelen venir en el siguiente formato, de pre- y post-condición: {P(s)} A {Q(s,s )} donde A es un programa, P y Q son fórmulas (de estado). El significado de una aserción como la anterior es: Siempre que se inicie la ejecución del programa A en un estado que satisfaga P, el programa termina en un estado que satisface Q. (Correción total) Las aserciones de corrección son una notación matemática, y generalmente no son parte de nuestro lenguaje para construir software. En este curso haremos uso de éstas, como parte de diferentes aspectos

Contratos, derechos y obligaciones Las especificaciones de rutinas mediante pre- y post-condiciones establecen derechos y obligaciones para cliente y proveedor: Precondición Postcondición Cliente Proveedor debe asegurarse que se cumple (antes de la ejecución) puede suponer que se cumple (antes de la ejecución) puede suponer que se cumple (luego de la ejecución) debe asegurarse que se cumple (luego de la ejecución)

Ejemplo /* @pre. A!= null, 0 <= i <= j < A @post. - A no cambia. - Si A =0, resultado = (0,0), sino resultado.fst() es el mínimo de A en el segmento [i..j] y resultado.snd() es el máximo de A en el segmento [i..j] */ public static IntPair minmaxarray(int[] A, int i, int j) {! if (i>j) {! IntPair res = new IntPair(0,0);! return res;! }! else {! IntPair res_sub = new IntPair(A[i],A[i]);! int k = i;! while (k<=j) {! if (A[k]<res_sub.fst()) {!! res_sub.changefst(a[k]);!! }! if (A[k]>res_sub.snd()) {!! res_sub.changesnd(a[k]);!! }!! k++;! }! return res_sub; } }

Invariantes de Clase Las precondiciones y postcondiciones establecen propiedades de rutinas particulares. Existe en general la necesidad de expresar otras propiedades globales de las instancias de una clase. Esto se logra a través de los invariantes de clase (también llamados invariantes de representación). Los invariantes de clase forman parte del contrato de una clase. Establecen propiedades que deben mantenerse a lo largo de la ejecución de una clase. Es decir, todos los constructores deben establecer, al finalizar, la propiedad todas las rutinas de la clase deben preservar la propiedad

Los Métodos y el Invariante de Representación Los métodos de una clase corresponden a abstracciones procedimentales. Luego, éstos deben ser acompañados por especificaciones en términos de pre- y post-condiciones. El contrato de una clase está compuesto por: las pre- y post-condiciones de cada uno de los métodos de la clase, el invariante de representación de la clase. Se dice que una clase respeta su contrato si y sólo si: Los constructores de la clase garantizan la validez del invariante de representación en su terminación. Cada método m satisface que: {pre-m {post-m m repok()} repok()}

Ejemplo! public class Fecha {!!!! private int dia;!! private int mes;!! private int anho;!!!!...!!!! /*!! Invariante:!! - mesvalido: 1<=mes y mes<=12!! - diavalido: 1<=dia y dia<=31 y!! (si (mes=4 o mes=6 o mes=9 o mes=11) entonces dia<=30) y!! (si mes=2 entonces dia<=29)!! - anhovalido: 1900<=anho!! */!!! }

Ejemplo! public class Fecha {!!!! private int dia;!! private int mes;!! private int anho;!!!!...!!!! /*!! Invariante:!! - mesvalido: 1<=mes y mes<=12!! - diavalido: 1<=dia y dia<=31 y!! (si (mes=4 o mes=6 o mes=9 o mes=11) entonces dia<=30) y!! (si mes=2 entonces dia<=29)!! - anhovalido: 1900<=anho!! */!!! } en realidad es un invariante aproximado Se puede escribir algo más preciso controlando bisiestos!

Violaciones de Aserciones Las violaciones de aserciones nos llevan a una de las reglas fundamentales del diseño por contratos La violación en tiempo de ejecución de una aserción de corrección es la manifestación de un bug en el software. Esto es importante: no debe confundirse a las aserciones de corrección con estructuras de control (como es en algunos casos usual, en el manejo de excepciones en otros lenguajes). De acuerdo a los derechos y obligaciones enunciados anteriormente, la violación de una precondición es un error del cliente, mientras que la violación de una postcondición es un error del proveedor. Esto permite identificar responsables de bugs reflejados como violaciones a contratos.

El proceso de validación y verificación V&V debería aplicarse en cada instancia del proceso de desarrollo. Tiene dos objetivos principales: descubrir defectos en el sistema, y medir si el sistema es usable en situaciones de operación del mismo. Una forma de realizar tareas de V&V es a través de análisis (de programas, modelos, especificaciones, documentos, etc.). En particular para código, tenemos análisis estático y análisis dinámico.

Análisis dinámico Analiza las propiedades de programas mediante su ejecución: extrae información de las corridas de programas, es sumamente preciso y escalable, pero intrínsecamente incompleto: testing, profiling de consumo de recursos (e.g., memoria), chequeo en tiempo de ejecución de propiedades de programas.

Análisis estático Se infieren propiedades de programas mediante el análisis del texto del mismo: generalmente es impreciso: en sus versiones automáticas, puede dar lugar a falsos positivos/negativos. con frecuencia es conservador. inspección manual, chequeo de tipos (en compilación).

Inspección manual Involucra personas que examinan el código fuente, para intentar descubrir defectos, y otros problemas de calidad internos : (e.g., código no apropiadamente documentado, mal estructurado, que no respeta estándares, etc.) No requiere la ejecución del sistema (incluso se aplica a otras representaciones del sistema además del código: diseño.) Técnica muy efectiva para descubrir errores, aunque difícilmente exhaustiva. Técnica muy efectiva para transmitir experiencia entre desarrolladores.

Testing Esencialmente, consiste en comprobar el comportamiento de los programas en un conjunto de situaciones particulares (e.g., para algunas entradas particulares). Puede revelar la presencia de errores pero rara vez puede garantizar su ausencia. Es la técnica de verificación funcional por excelencia. Debe usarse en combinación con otras técnicas de V&V estáticas (e.g., inspección de código) para dar mejores resultados. Debe realizarse de manera planificada.

Inspección y testing Las inspecciones y el testing son complementarias: ambas deberían usarse como parte del proceso de V&V. Las inspecciones suelen ser más efectivas en verificación (contrastación con la especificación), pero no en validación (contrastación con los requisitos reales del cliente). Las inspecciones tienen limitaciones para poder chequear características no funcionales (performance, usabilidad, etc.). Testing + inspecciones son actividades fundamentales para garantizar calidad. Testing es parte explícita de procesos de desarrollo.

Testing en procesos de desarrollo clásicos Los modelos de proceso de desarrollo clásicos involucran generalmente las siguientes actividades: Fase de requisitos Fase de especificación Fase de planeamiento Fase de diseño Fase de implementación Integración y Testing Mantenimiento Testing es una actividad realizada en este caso posteriormente a la implementación.

Testing en procesos de desarrollo ágiles En los modelos de proceso de desarrollo ágiles, el testing está presente en varias fases del proceso de desarrollo, principalmente como parte de la codificación. En el desarrollo de software guiado por funcionalidades, el testing se realiza como parte de la implementación de cada funcionalidad. Especificación del módulo Escribir código para implementar alguna funcionalidad Mejorar los tests para probar la nueva funcionalidad No Ejecutar tests Errores No Esp. cubiertas Si Si Reparar

Testing como especificaciones Especificación del módulo Escribir tests para parte de la funcionalidad Algunos procesos ágiles ponen un énfasis aún mayor en testing. Escribir código para pasar los nuevos tests (y los viejos) En Test Driven Development (TDD), los tests se escriben antes de la codificación, y sirven como especificación de funcionalidades, y criterio de aceptación de código Mejorar el código Si Ejecutar el código sobre los tests No Necesita mejoras Errores No Si Esp. cubiertas Reparar No Si

Testing: terminología básica Error: desatino del programador (el cual resulta en la introducción de un bug). Defecto, bug : manifestación concreta del error de programación en el código. Falla: resultado de la ejecución de un bug. Un test es una prueba de software, compuesta usualmente por: una precondición (condiciones bajo las cuales se ejecuta el código a testear), una porción de código (bloque a testear). una condición de aceptación (criterio para saber si el código pasó la prueba).

Testing: clasificaciones básicas Existen diferentes tipos de testing, de acuerdo a las características de sus partes. Algunos de estos tipos son los siguientes: Sistema: el bloque a testear es todo el sistema. Integración: el bloque a testear es la composición de varios módulos, y la condición de aceptación corresponde a propiedades de la ejecución combinada de los módulos. Regresión: la condición de aceptación es preservar el comportamiento de versiones anteriores del software. Diferencial: la condición de aceptación es mantener un comportamiento similar a otro software con el mismo propósito que el testeado.