Testing basado en sintaxis: Introducción

Slides:



Advertisements
Presentaciones similares
Clase 09.  Garantizar la calidad de software  La prueba nunca termina, del IS translada se translada al usuario  Las casas de software invierte del.
Advertisements

Javier Benavides Pañeda
Lcda. Ingrid Graü Diseño de Sistemas 1. Lcda. Ingrid Graü Diseño de Sistemas 2.
Traducción dirigida por la Sintaxis Teoría de Autómatas y Lenguajes Formales Alma María Pisabarro, 2007.
Análisis de Proyecto de Software.
Herencia Multiple en Java
INGENIERÍA DE INFORMACIÓN Y APLICACIONES
Ingreso , proceso y salida de datos
Visual ITP y Web ITP Raquel Sánchez Díaz Universidad de Salamanca.
U-6. Cap. III Introducción a la solución por series.
“Análisis y Descripción de Lenguajes de Programación”
Programación Avanzada
SOFTWARE Se forma por el conjunto de instrucciones o programas. Los programa son una secuencia de órdenes que se le dan a la computadora para que haga.
Diagramas de Casos de Uso
CC4401 – Ingeniería de Software I
“POLIMORFISMO PARAMETRICO”
MANEJO DE ARRELOGS EN C Clase 8: Arreglos.
Conceptos y definición básicos
Programación orientada a objetos
METODOLOGÍA DE SISTEMAS
Ingeniería de Sistemas Requerimientos
CREAR DIAGRAMA DE FLUJO
Ingeniería de Software Somerville
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno. INTRODUCCIÓN A UML  QUE ES UML?  PARA QUE SE UTILIZA  COMPONENTES  DIAGRAMAS.
Tema 3. Lenguaje unificado de modelado UML
UNIVERSIDAD NACIONAL DE LOJA Área de la Educación, el Arte y la Comunicación Informática Educativa IV INGENIERIA DE SOFTWARE Taller de Análisis y Diseño.
Software Se conoce como software al equipamiento lógico o soporte lógico de un sistema informático, que comprende el conjunto de los componentes lógicos.
Continuación Unidad 4. Control de flujo
Lenguaje y representación técnica
Software Es intangible, existe como información, ideas, conceptos, símbolos, pero no ocupa un espacio físico, se podría decir que no tiene sustancia. Se.
LENGUAJES Y REPRESENTACION TECNICA
ALGORITMOS es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos.
Índice temático 2.1 Análisis de problemas. 2.2 Representación de algoritmos: gráfica y pseudocódigo. 2.3 Diseño de algoritmos aplicados a problemas 2.4.
Salvador Arteaga Gracia
CONCEPTOS PRELIMINARES (Cont)
Grafos dirigidos: Sea G un grafo, si cada arista en G tiene una dirección entonces G se llama grafo dirigido o dígrafo y sus aristas se llaman arcos.
Introducción al lenguaje de programación. Introducción  Los lenguajes de programación son aplicaciones específicas que han sido pensadas y diseñadas.
Retroalimentación ejercicios de tarea. Ejercicios para resolver 1.¿Cuántos bytes hay exactamente en un sistema que contiene a.32 Kbytes b.64 Mbytes c.6.4.
HERRAMIENTAS DE PROGRAMACIÓN
Programación Lógica.
Comprensión y obtención de los requerimientos
Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.
Análisis y diseño de aplicaciones. Introducción Crisis del software - conferencia organizada en 1968 por la Comisión de Ciencias de la OTAN en Garmisch.
EXPRESIONES REGULARES COMPUTACIÓN 2. EXPRESIONES REGULARES Es una secuencia de caracteres que van a formar un patrón, este se utiliza para realizar búsquedas.
ANALISIS DE SISTEMAS ANALISIS ORIENTADO A OBJETOS.
Agentes que planifican. 1. Introduccion En la actualidad todas la mayoría de actividades en un empresa o compañía, como en el hogar o el medio ambiente.
Criterios cobertura de grafos: código fuente
Automatización del testing
Criterios cobertura de grafos: casos de uso
Funciones del Analizador Sintáctico
Criterios cobertura de grafos: introducción
Fundamentos de la Programación I
Instituto Tecnológico de Minatitlán
Partición del espacio de inputs (PEI)
Testing basado en sintaxis: Gramáticas en espacios de inputs
Criterios cobertura de grafos: especificaciones
Manuel Núñez Especificación, Validación y Testing
Testing basado en sintaxis: Gramáticas a partir de programas
Hoja de recopilación y/o recopilación de datos
Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.
Objetivos:  Explicar el concepto de la Investigación de Operaciones mediante análisis del tema.  Describir los pasos del método científico en Investigación.
CONTROLES Y ESTRUCTURAS BÁSICAS DE PROGRAMACIÓN  1. Algoritmos: conjunto de instrucciones programadas para resolver una tarea específica.  2. Datos:
PRESENTACION DE INGENIERIA ORIENTADA A OBJETOS. INTRODUCCION. ¿ Qué es UML ?. UML, por sus siglas en Ingles, Unified Modeling Languaje.(Lenguaje Unificado.
INTRODUCCIÓN A UML Oscar Miguel Alonso Moreno. INTRODUCCIÓN A UML  QUE ES UML?  PARA QUE SE UTILIZA  COMPONENTES  DIAGRAMAS.
¿Qué es la celda de manufactura? La celda de manufactura es un conjunto de componentes electromecánicos, que trabajan de manera coordinada para el logro.
INTRODUCCIÓN A UML.  QUE ES UML?  PARA QUE SE UTILIZA  COMPONENTES  DIAGRAMAS.
PRUEBAS DE CAJA NEGRA. -Internationa Software Testing Qualification Board (ISTQB) Internationa Software Testing Qualification Board (ISTQB) Técnica de.
ICI 502 Procesos de Software
Luis Fernando Muñoz Pantoja Ingeniero de Sistemas Copyright 2019 Luis Fernando Muñoz Pantoja Ingeniero de Sistemas Derechos reservados UML.
SIMULACIONES 2019 German Vega Quintero John Farley Paez Santamaria.
Transcripción de la presentación:

Testing basado en sintaxis: Introducción Manuel Núñez Especificación, Validación y Testing Estas transparencias están basadas en las desarrolladas por Ammann & Offutt como acompañamiento de su libro Introduction to Software Testing (2nd Edition)

Cuatro estructuras para modelar software Grafos Lógica Espacio de Inputs Sintaxis Casos de uso Especs Diseño Código Aplicado a FND Especs FSMs Código Aplicado a Input Modelos Integra Código Aplicado a Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Uso de sintaxis para generar tests Muchos artefactos software siguen una reglas sintácticas estrictas. La sintaxis se suele expresar como una gramática en un lenguaje como BNF. Las descripciones sintácticas pueden provenir de muchos sitios: Programas. Elementos de integración. Documentos de diseño. Descripción de inputs. En este contexto, los tests se crean con dos objetivos en mente: Cubrir la sintaxis de una cierta manera. Violar la sintaxis (tests inválidos). Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Cobertura para gramáticas La Ingeniería del Software utiliza la teoría de autómatas de varias formas: Lenguajes de programación definidos como BNF. Comportamiento de programas descrito mediante FSMs. Inputs permitidos definidos mediante gramáticas. Ejemplo de expresión regular: Genera cualquier secuencia que contenga G s n y B t n. G y B podrían representar comandos, métodos o eventos. s, t y n pueden representar argumentos, parámetros o valores. También podrían representar literales o conjuntos de valores. ‘*’ clausura: cero o más veces. (G s n | B t n)* ‘|’ elección: escoger uno. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Especificación, Validación y Testing (M. G. Merayo y M. Núñez) Tests para gramáticas Una cadena que cumple las reglas de derivación se dice que está en la gramática. Un test es una secuencia de cadenas que cumple la expresión regular. Supongamos que s, t y n representan números. Entonces, G 26 080190 B 22 062794 G 22 112194 B 13 010903 Podría ser un test con cuatro partes o cuatro tests distintos. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Especificación, Validación y Testing (M. G. Merayo y M. Núñez) Gramáticas BNF Stream ::= acción* acción ::= accG | accB accG ::= “G” s n accB ::= “B” t n s ::= dígito1-3 t ::= dígito1-3 n ::= dígito2 “.” dígito2 “.” dígito2 dígito ::= “0” | “1” | “2” | “3” | “4” | “5” | “6” |“7” | “8” | “9” Símbolo inicial No terminales Regla de producción Terminales Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Especificación, Validación y Testing (M. G. Merayo y M. Núñez) Usando gramáticas Stream ::= acción acción * ::= accG acción* ::= G s n acción* ::= G dígito1-3 dígito2 . dígito2 . dígito2 acción* ::= G dígitodígito dígitodígito. dígitodígito. dígitodígito acción * ::= G 25 08.01.90 acción * … Reconocedor: ¿Está una cadena (o un test) en la gramática? Esto se llama parsear. Existen herramientas que facilitan la tarea de parsear. Los programas las pueden usar para validar inputs. Generador: Dada una gramática, deriva cadenas que están en la gramática. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Mutación como testing basado en gramáticas Derivaciones sin mutar (cadenas válidas) Derivaciones mutadas (cadenas inválidas) Mutación de gramáticas (cadenas inválidas) Mutación de cadenas básicas Ahora podemos definir criterios genéricos de cobertura Cadenas inválidas cadenas válidas Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Criterios de cobertura basados en gramáticas El más común y sencillo: usar cada símbolo terminal y cada producción al menos una vez. PDC subsume TSC. Gramáticas y grafos son intercambiables: PDS ≈ EC y TSC ≈ NC. Se podrían definir otros criterios..... Terminal Symbol Coverage (TSC): RT contiene cada símbolo terminal t de la gramática G. Production Coverage (PDC): RT contiene cada producción p de la gramática G. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Criterios de cobertura basados en gramáticas Podríamos proponer derivar todas las cadenas posibles. El número de tests en TSC está acotado por el número de símbolos terminales (en el ejemplo de stream, tenemos 13). El número de tests en PDC está acotado por el número de reglas de producción (en el ejemplo de stream, tenemos 18). El número de tests en DC depende de los detalles de la gramática ( 2∗10 9 en el ejemplo de stream). Todos los tests que usamos en TSC, PDC o DC están en la gramática…. ¿Qué hacemos con los tests que NO están en la gramática? La respuesta es Mutation Testing. Derivation Coverage (DC): RT contiene todas las cadenas que están en la gramática G. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Especificación, Validación y Testing (M. G. Merayo y M. Núñez) Mutation testing Las gramáticas describen cadenas válidas e inválidas. Ambos tipos se pueden producir como mutantes. Un mutante es una variación de una cadena válida. Nota: un mutante puede ser tanto una cadena válida como una inválida. Las mutaciones se basan en operadores de mutación y en cadenas básicas (las que están en la gramática). Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

¿En que consiste la mutación? Operadores de mutación Visión general Hacemos análisis basado en mutaciones siempre que Usamos reglas bien definidas, definidas mediante descripciones sintácticas, para realizar cambios sistemáticos, a la sintaxis o a los objetos derivados de la sintaxis. Gramáticas Aplicados universalmente o siguiendo alguna distribución verificada empíricamente Gramática Cadenas básicas (tests o programas) Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Especificación, Validación y Testing (M. G. Merayo y M. Núñez) Mutation testing Cadenas básicas: las que están en la gramática. Operadores de mutación: Una regla que especifica las variaciones sintácticas que se aplican a las cadenas anteriores. Mutante: El resultado de la aplicación de un operador de mutación. Cada mutante es o una cadena básica o se parece mucho. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Mutantes y cadenas de la gramática La clave para el éxito de mutation testing es diseñar operadores de mutación: operadores bien diseñados dan lugar a testing muy potente. Algunas veces las cadenas mutadas se basan en las cadenas básicas. Otras veces se derivan directamente de la gramática. Las cadenas básicas se usan para generar test válidos. Los tests inválidos no necesitan estas cadenas. Mutantes válidos Cadenas básicas Mutantes G 26 08.01.90 B 26 08.01.90 B 22 06.27.94 B 45 06.27.94 Mutantes inválidos 7 26 08.01.90 B 22 06.27.1 Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Preguntas sobre Mutation ¿Deberíamos aplicar más de un operador al mismo tiempo? En otras palabras, ¿debería una cadena mutada contener más de un elemento mutado? Habitualmente, no: múltiples mutaciones pueden interferir entre ellas. De hecho, la experiencia dice que no…. Aunque investigaciones recientes están encontrando excepciones. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Preguntas sobre Mutation ¿Deberíamos considerar todas las aplicaciones posibles de un operador de mutación? Si, si estamos trabajando en un marco de mutación basada en programas. ¿Se han definido operadores de mutación para distintos lenguajes? Si, se ha definido para lenguajes de programación (Fortran, Lisp, Ada, C, C++, Java), lenguajes de especificación (SMV, Z, Object-Z, especificaciones algebraicas) y lenguajes de modelado (statecharts, diagramas de actividad). Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Especificación, Validación y Testing (M. G. Merayo y M. Núñez) Matando mutantes Cuando se muta una cadena básica para crear cadenas válidas, esperamos que las mutaciones presenten un comportamiento distinto. Esta es la idea, en particular, cuando las gramáticas corresponden a lenguajes de programación, las cadenas son programas, y las cadenas básicas son programas que ya existen. Matar mutantes: Dado un mutante m  M para una derivación D y un test t, decimos que t mata a m sii el resultado de aplicar t sobre D es diferente del resultado de aplicar t sobre m. La derivación D puede representarse o por una lista de producciones o por la cadena final. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Criterios de cobertura basados en sintaxis Definimos cobertura en función de los mutantes que se maten. Por tanto, la cobertura se equipara con el porcentaje de mutantes matados. A este porcentaje se le llama mutation score. Mutation Coverage (MC): Para cada m  M, RT contiene exactamente un requisito: matar a m. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)

Mutation testing: reflexiones finales El número de requisitos de testing para aplicar mutaciones depende de dos cosas: La sintaxis del artefacto que se muta Los operadores de mutación. Es muy difícil aplicar mutation testing a mano. Mutation testing es muy efectivo: se considera el “patrón oro” del testing. Mutation testing se suele utilizar para evaluar la utilidad de otros criterios. Durante el resto de este tema nos centramos en mutación en programas (uso habitual) y en espacios de inputs. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)