Pruebas de Software: Herramientas: Pruebas Unitarias. Elisa Herrmann Ingeniería del Software de Gestión

Documentos relacionados
JUNIT. Pruebas Unitarias

Laboratorio de Programación

Programación Tema 8: Estilo y pruebas. Programación DIT-UPM

Pruebas. Una introducción práctica. Javier Gutiérrez sirve de algo? Ariane segundos después explotó.

Tema 5 - Pruebas del software Ingeniería del Software de Gestión II

Pruebas unitarias JUnit

JUnit 3 vs. JUnit 4. David Alonso Ríos. Facultad de Informática Universidade da Coruña 2008/2009

JUNIT MATERIAL ELABORADO POR: RUBBY CASALLAS/JUAN PABLO QUIROGA/GLORIA CORTÉS DEPARTAMENTO DE SISTEMAS Y COMPUTACIÓN UNIVERSIDAD DE LOS ANDES

TESTS UNITARIOS. keep the bar green to keep the code clean

INGENIERÍA DEL SOFTWARE II Práctica 1. Univ. Cantabria Fac. de Ciencias Carlos Blanco, Juan Hernández

Elementos de Java LSUB. 30 de marzo de 2016 GSYC

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Pruebas, depuración y profiling

Lenguaje Java Avanzado

Capitulo 3. Test Driven Development

Contenido. Pruebas del Software. Verificación vs. Validación. Prueba de Software. Information Engineering Research Group

Sacándole Partido a JUnit Módulo 1. Introducción a las Pruebas

Ejercicios resueltos de programación

Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Práctica : Creación y uso de métodos

Ingeniería del Software Separación entre Presentación y Lógica del Negocio

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

JUnit es un paquete Java para automatizar las pruebas de clases Java.

Estructuras de control selectivas

Examen Teórico Convocatoria de Junio de 2012

Tecnología hardware y software

Programación Orientada a Objetos. Java: Excepciones

Programación Orientada a Objetos. Java: Excepciones

Eventos. Nota: Los eventos poseen las siguientes características:

Grado en Ingeniería Informática. Estructura de Datos y Algoritmos, Grupo 84M, 2014/ de Marzo de

Ingeniería Software. Verificación y Validación

Examen de Programación II (Ingeniería Informática)

Implementación de clientes con CORBA y Java

k. Son métodos de la clases y respectivamente, que analiza un para devolver un entero con

Programación orientada a objetos

Manual de usuario JUnit

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

Técnicas Avanzadas de Testing Automatizado

Pruebas en Visual Studio XII Encuentro Danysoft en Microsoft Directos al código

Elementos léxicos del lenguaje de programación Java

Examen de Prácticas de Programación Ingeniería Informática

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

Pruebas de unidad con JUnit

Ejercicios de tratamiento de errores

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

SCR6150c Versión 2.0(12/01/05)

Lenguaje Java Avanzado

Pruebas de Software. Escuela de Ingeniería de Sistemas y Computación Desarrollo de Software II Agosto Diciembre 2008

Tema 5 Corrección y Robustez Excepciones en Java

Desarrollo Software Gran Escala

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

Sebastián García Galán

Ejercicios de Lenguaje Java y Entorno de Desarrollo

Proceso de Pruebas. Consta de las siguientes actividades: Planificación y Control

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

Uso de excepciones en Java

Tecnología de la Programación

Introducción a la Computación. Testing en Python. Maximiliano Geier. Facultad de Ciencias Exactas y Naturales, UBA 13/11/2017

Ejercicio 1 (1 punto) Contesta verdadero o falso a las siguientes preguntas. Cada respuesta correcta suma 0.25 y cada respuesta incorrecta resta 0.

PRUEBA DE SOFTWARE LA PRUEBA DE UN SISTEMA

Guillermo Román Díez

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Programación de sistemas Listas enlazadas

Diseño y Programación Orientados a Objetos 29 de Abril de Primer Certamen

Construcciones del Lenguaje Java

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Práctica 5. Fecha límite de entrega: viernes, 14 de diciembre

Test Driven Development en la plataforma Salesforce

Applying UML and Patterns Capítulos 18, 19, 20 y 21

Formato para prácticas de laboratorio

Pruebas de unidad utilizando JUnit Juan Manuel Fernández Peña, 2005

IMPORTAR Y USAR CLASES DEL API DE JAVA. EJEMPLO CLASE MATH Y MÉTODO POW. CONSTRUCTORES PRIVADOS. (CU00647B)

Fundamentos de Pruebas de Software

Presentación. Programación I. Programación Orientada a Objetos. :: Prof. Yeniffer Peña

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

Excepciones. Excepciones

Excepciones e hilos. Acceso a la red - Ejercicios

Ingeniería Software. Verificación y Validación

Parte I: Programación en un lenguaje orientado a objetos

Pruebas unitarias en profundidad

Punteros y Memoria Dinámica II

Programación Concurrente y Distribuida Ingeniería Informática Facultad de Ciencias Universidad de Cantabria.

Modelo de Objetos Distribuidos

Desarrollo de Servicios Web con JBuilder

CLASE 11: PRUEBAS DE SOFTWARE. Unversidad Simón Bolívar. Prof. Ivette Carolina Martínez

Repaso de las características más importantes de la programación Java y su adaptación a Android

Fase de Pruebas Introducción.

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Objetivos. El alumno empleará el concepto de excepción en la programación orientada a objetos para el manejo de errores de ejecución.

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

PROGRAMACION CONCURRENTE

Ejercicio 1 (proyecto prlistas, paquete listas)

Tema 4. Excepciones en Java

LA PALABRA CLAVE THIS EN JAVA. CONTENIDO NULL POR DEFECTO DE UN OBJETO. SOBRECARGA DE NOMBRES. EJEMPLOS (CU00654B)

TEMA 8. Excepciones en Java. Curso de Java. Manejo de Excepciones

Tema 14: Excepciones

Introducción a Java LSUB. 30 de enero de 2013 GSYC

11. Algunas clases estándar de Java (II)

Transcripción:

Pruebas de Software: Herramientas: Pruebas Unitarias Elisa Herrmann Ingeniería del Software de Gestión

Contenido Qué son Pruebas Unitarias? Frameworks Ventajas Desventajas y limitaciones Mitos sobre Pruebas Unitarias Prácticas recomendadas en DBAccess NUnit Referencias

Qué son Pruebas Unitarias? Es un procedimiento usado para validar que un modulo o método de un objeto fuente funciona apropiadamente y en forma independiente. A través de ellas se verifica que cierto módulo o método se ejecuta dentro de los parámetros y especificaciones concretadas en documentos tales como los casos de uso y el diseño detallado. Permiten detectar efectivamente la inyección de defectos durante fases sucesivas de desarrollo o mantenimiento.

Qué son Pruebas Unitarias? Las pruebas unitarias típicamente son automatizadas, pero pueden llevarse a cabo de forma manual. Cuando son automatizadas es buena práctica que formen parte del repositorio que contiene al código probado. Se dice que una prueba unitaria es completa o es buena si cumple con los siguientes elementos: Automática Cobertura Repetibles Independiente

Frameworks Para llevar a cabo pruebas unitarias, cada organización se apoya en frameworks que ofrecen un conjunto completo de utilidades, motores de ejecución y reportes. Entre los frameworks más empleados destacan: XUnit: JUnit, NUnit, RUnit, PHPUnit TestNG CPPUnit Visual Studio UnitTesting

Ventajas Dependiendo del framework empleado podemos encontrar las siguientes ventajas: Automatizadas, por lo cual se hacen repetibles. Fomentan el cambio: ya que permiten probar cambios en el código y asegurar que en éstos no se hayan introducido errores funcionales; habilitan el refactoring del código. Simplifican la integración: permiten llegar a la fase de integración con un grado alto de seguridad sobre el código.

Ventajas Documenta el código. Separa la interfaz y la implementación. Los defectos están acotados y fáciles de localizar. Permiten al desarrollador pensar como el consumidor del código y no como el productor.

Desventajas y limitaciones No descubrirán todos los defectos del código. No permite determinar problemas de integración o desempeño. No es trivial anticipar todos los casos especiales de entradas. Las pruebas unitarias determinan la presencia de defectos, no la ausencia de éstos. Son efectivas al combinarse con otras actividades de pruebas.

Prácticas recomendadas Seguir el procedimiento de integración continua al pie de la letra, evitando hacer commit al repositorio si las pruebas unitarias preexistentes fallan. Toda falla es producida por un defecto. Antes de corregir el defecto, debe escribirse una prueba unitaria que, al fallar, compruebe que el defecto está allí, y que al pasar compruebe que el defecto fue eliminado. Aprovechar que se tiene la atención en esa parte del código y escribir otras pruebas que se piensen empleando las capacidades del motor de pruebas unitarias. Es a tiempo de diseño que debe definirse formalmente la estrategia para implementar las pruebas unitarias.

Pruebas Unitarias Los datos de entrada son conocidos por el Tester o Analista de Pruebas y estos deben ser preparados con minuciosidad. Se debe conocer de antemano que resultados debe devolver el componente según los datos de entrada utilizados en la prueba. Se deben comparar los datos obtenidos en la prueba con los datos esperados, si son idénticos podemos decir que el modulo supero la prueba y empezamos con la siguiente. 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 10

JUnit: Ejemplo Método estático que tome un array de enteros como argumentos y devuelva el mayor valor encontrado en el array public class MayorNumero{ /** * Devuelve el elemento de mayor valor de una lista *@param list Un array de enteros * @return El entero de mayor valor de la lista*/ public static int obtenermayor(int lista[]){ return 0; // Para que compile } } 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 11

Qué pruebas pueden hacerse? Caso normal: array con valores cualesquiera [3, 7, 9, 8] -> 9 El mayor número se encuentra al principio o al final de la lista [9, 7, 8] -> 9 [8, 7, 9] -> 9 El mayor número está duplicado en el array [9, 7, 9, 8] -> 9 Sólo hay un elemento en el array [7] -> 7 Array compuesto por números negativos [-4, -6, -7, -22] -> -4 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 12

Código de Clase a probar package elementos; public class MayorNumero { public static int mayornumero(int lista[]) { int indice, max = Integer.MAX_VALUE; for (indice = 0; indice < lista.length-1; indice++) { if (lista[indice] > max) { max = lista[indice]; } }return max; } 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 13

Código de Prueba package elementos; import junit.framework.testcase; public class MayorNumeroTest extends TestCase { public void testsimple() { assertequals(9, MayorNumero.mayorNumero(new int[] {3, 7, 9, 8})); } public void testorden() { assertequals(9, MayorNumero.mayorNumero(new int[] {9, 7, 8})); assertequals(9, MayorNumero.mayorNumero(new int[] {7, 9, 8})); assertequals(9, MayorNumero.mayorNumero(new int[] {7, 8, 9})); } public void testduplicados() { assertequals(9, MayorNumero.mayorNumero(new int[] {9, 7, 9, 8})); } public void testsolouno() { assertequals(7, MayorNumero.mayorNumero(new int[] {7})); } public void testtodosnegativos() { assertequals(-4, MayorNumero.mayorNumero(new int[] {-4, -6, -7, 22}));}} 14/11/2011 14

Ejecutar Prueba Qué está mal? public static int mayornumero(int lista[]) { int indice, max = Integer.MAX_VALUE; for (indice = 0; indice < lista.length-1; indice++) { if (lista[indice] > max) { max = lista[indice]; } }return max; } 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 15

Errores MIN_VALUE Analizar los extremos: Lista.Length 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 16

Marco para desarrollar pruebas unitarias Pasos: Importar las clases de JUNIT necesarias Definir la clase de pruebas: Debe extender la clase TestCase Definir los métodos de prueba Serán ejecutados automáticamente por JUNIT Definir un main o ejecutar desde un IDE junit.textui.testrunner.run(<clase>) 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 17

Comprobaciones assertequals (valor_esperado, valor_real); Los valores pueden ser de cualquier tipo Si son arrays, no se comprueban elemento a elemento, sólo la referencia asserttrue (condición_booleana) assertfalse (condición_booleana) assertsame (Objeto esperado, Objeto real) Comprueba que son la misma referencia assertnotsame (Objeto esperato, Objeto obtenido) Comprueba que son referencias distintas assertnull (Objeto) Comprueba que el objeto es Null assertnotnull (Objeto objeto) Comprueba que el objeto no es Null fail (string Mensaje) Imprime el mensaje y falla Útil para comprobar que se capturan excepciones 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 18

Uso de Comprobaciones En una función de prueba se pueden poner tantos métodos de comprobación como sean necesarios para implementar el caso de prueba concreto. En general hay que comprobar que un método lanza todas las excepciones que se han declarado en el mismo cuando debe. Y que no las lanza cuando no hay motivo para ello. Esta es la utilidad del método fail. public void testexcepcionordenarlistanula( ) {try {ordena_lista(null); fail( Debería haber lanzado una excepción );} catch (RuntimeException e) { }} 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 19

Visual Studio UnitTesting public int Sumar(int a, int b ) { return a + b; } Recomendación: crear al menos un proyecto de Test por cada proyecto, en lugar de crear un único proyecto de test que englobe todas las pruebas. 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 20

14/11/2011 Ing.Software de Gestión (LADE-ITIG) 21

14/11/2011 Ing.Software de Gestión (LADE-ITIG) 22

Código del método de prueba ///A test for Sumar ///</summary> [TestMethod()] public void SumarTest() { ClaseEjemplo target = new ClaseEjemplo(); int a = 0; int b = 0; int expected = 0; int actual; actual = target.sumar(a, b); Assert.AreEqual(expected, actual); Assert.Inconclusive("Verify the correctness of this test method."); } 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 23

Sample.vsmdi 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 24

LocalTestRun.testrunconfig activar el análisis de la cobertura de código 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 25

Ejecutar Prueba 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 26

% de Cobertura 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 27

Otras Pruebas Pruebas de Aislamiento mediante Mock Objects: JMock y EasyMock. Pruebas de Aplicaciones que acceden a Bases de Datos: DBUnit. Pruebas de Documentos: XMLUnit. Pruebas de Aplicaciones Web : HttpUnit HtmlUnit JWebUnit 14/11/2011 Ing.Software de Gestión (LADE-ITIG) 28