510 likes | 750 Views
Testing , Testing , Testing. Ricardo.Minguez@microsoft.com http://blogs.msdn.com/rido. Gestión de pruebas de aplicaciones empresariales con Visual Studio 2005. 061127. Agenda. Introducción a las pruebas Tipos de Pruebas Pruebas Unitarias Pruebas de Integración Pruebas Funcionales
E N D
Testing, Testing, Testing Ricardo.Minguez@microsoft.com http://blogs.msdn.com/rido Gestión de pruebas de aplicaciones empresariales con Visual Studio 2005 061127
Agenda • Introducción a las pruebas • Tipos de Pruebas • Pruebas Unitarias • Pruebas de Integración • Pruebas Funcionales • Pruebas de Rendimiento • Integración con TeamFoundation
Agenda • Introducción a las pruebas • Tipos de Pruebas • Pruebas Unitarias • Pruebas Funcionales • Pruebas de Rendimiento • Integración con TeamFoundation
Metodologías Ágiles • El código es el entregable más importante • Tiene que ejecutarse a menudo • Calidad del código • Soportable / Insoportable • Testeable / Detestable(*) • CleanCodethat Works (**) • Prácticas recomendadas • Refactoring • Pruebas Unitarias / TDD • Pruebas Automatizadas • Diseño bottom-up *Fuente: Martin Fowler ** Fuente: Kent Beck
Relación entre las prácticas El plan de juego Cliente disponible 40 horas Metáfora Diseño Simple Refactoring Versiones reducidas Parejas Pruebas • Estándares Propiedad repartida Integración Continua
Relación entre las prácticas El plan de juego Cliente disponible 40 horas Metáfora Diseño Simple Refactoring Versiones reducidas Parejas Pruebas Estándares Integración Continua Propiedad repartida Fuente: Kent Beck
Mínimos MSF-Agile Diseño Simple Refactoring Pruebas Parejas * Integración Continua Estándares
Agenda • Introducción a las pruebas • Tipos de Pruebas • Pruebas Unitarias • Pruebas de Integración • Pruebas Funcionales • Pruebas de Rendimiento • Integración con TeamFoundation
Tipos de Pruebas • Unitarias (DeveloperTests) • Integración • Rendimiento (Carga, Fatiga..) • Funcionales(CustomerTests)
Pruebas Unitarias • Se realizan por y para los desarrolladores • Nivel de clase/método • Ayudan a resolver defectos • Disminuyen el tiempo de desarrollo • Desarrollo guiado por pruebas (TDD) • Cobertura de código
Pruebas de Integración • Aseguran que todos los componentes funcionan en conjunto • No sólo se prueba el código… • Sólo atacan a los interfaces públicos • Datos de prueba “suficientes”
Pruebas Funcionales • Aseguran que se cumple la funcionalidad pactada • Escenarios de pruebas • Escritas por testers para el cliente • Dependen de un producto instalado • Datos de prueba “reales” • A veces no es rentable la automatización
Pruebas de Rendimiento • Dependiendo del sistema • Carga de usuarios • Carga de datos • Fatiga • Plan de capacidad • Tamaño de Datos aproximado o superior • Nunca ejecutar las pruebas al final !!
Code Coverage Code Profiler Change Management Work Item Tracking Reporting Project Site Integration Services Project Management Static Code Analyzer Class Designer Unit Testing Dynamic Code Analyzer Visio and UML Modeling Deployment Designer Big Build Application Designer Test Case Management Logical Infra. Designer Load Testing Visual Studio Professional Edition Team Foundation Client (includes CAL) Manual Testing Process and Architecture Guidance Visual Studio Industry Partners Visual Studio Team System Visual StudioTeam Architect Visual StudioTeam Developer Visual StudioTeam Test Visual StudioTeam Foundation
Pruebas en el ciclo de vida Cada Hora Cada Día Cada Iteración Cada Versión
Especificación Gestionar los usuarios de una aplicación web: Registro de usuarios (Nombre, contraseña, Email) Almacén en SQLServer Cifrar contraseñas Validar Credenciales Contraseñas Fuertes Validar email Comprobar que el email existe Si falla el registro indicar porqué Validación de usuarios Usuario/Contraseña
Código::Esqueleto de la Solución • Crear Solución • TFS • BBDD Gestionar los usuarios de una aplicación web: Registro de usuarios (Nombre, contraseña, Email) Almacén en SQLServer Cifrar contraseñas Validar Credenciales Contraseñas Fuertes Validar email Comprobar que el email existe Si falla el registro indicar porqué Validación de usuarios Usuario/Contraseña
Agenda • Introducción a las pruebas • Tipos de Pruebas • Pruebas Unitarias • Pruebas de Integración • Pruebas Funcionales • Pruebas de Rendimiento • Integración con TeamFoundation
Características de las pruebas Unitarias • Prueban una única funcionalidad • Son rápidas • Se ejecutan en todas las máquinas • Se ejecutan muchas veces (build+)
¿Qué probar? • La lógica de negocio • Código Frágil (xpath,regex …) • ¿Bases de datos? • Patrones pruebas CRUD • ¿Código Generado? • (DataSets, Web References)
Anatomía de una prueba • El patrón de las 3 A [TestMethod] publicvoidCreateUser() { stringuserName = “rido”; User u = newUser(userName); Assert.AreEqual(“rido”, u.Name); }
Código::Visual Studio Test Projects • Demos • VS TestProjects • Test Windows • TestRuns, TestResults • SimpelUnit Test • RegEx
Test DrivenDevelopment (I) • Problema • Cambios en el código crean defectos • Miedo a realizar cambios, diseño deteriorado • Un buen diseño OO es difícil a la primera • Más tiempo probando que escribiendo código • Solución • Establecer un proceso que permita: • Modificar cambios con confianza • Mejorar el diseño incrementalmente
Test DrivenDevelopment (II) • Los dos gorras • Añadir funcionalidad • Mejorar el diseño • Secuencia TDD • Escribir una prueba que falle • Hacer que el código compile • Ejecutar la prueba (falla) • Añadir el código para que pase • Mejorar el código (Refactoring)
Test DrivenDevelopment (III) • Escribir las pruebas antes que el código a probar • Las pruebas unitarias hacen de “mini-spec” • Sirven como pruebas de regresión
Las 6 reglas • Escribir primero la prueba • Nunca escribir una prueba que pasa la primera vez • Empezar con el caso “nulo” • Realizar la “mínima” implementación para pasar la prueba • Pruebas repetibles • Usar MockObjects cuando hay dependencias
Código::TDD en acción • Cifrado • Validar datos de entrada • Capa de acceso a datos Gestionar los usuarios de una aplicación web: Registro de usuarios (Nombre, contraseña, Email) Almacén en SQLServer • Cifrar contraseñas Validar Credenciales Contraseñas Fuertes Validar email Comprobar que el email existe Si falla el registro indicar porqué Validación de usuarios Usuario/Contraseña
Beneficios • El código funciona(*) !! • Facilidad para realizar cambios • Diseño Emergente( Refactoring ) • Funcionales • Defectos • Documentación • Ejemplos • Cobertura de código • Reducción de tiempo desarrollo • Mantenimiento
Código::Integrar • Validar contraseña • Detallar problemas al registrar usuario Gestionar los usuarios de una aplicación web: Registro de usuarios (Nombre, contraseña, Email) Almacén en SQLServer • Cifrar contraseñas Validar Credenciales Contraseñas Fuertes Validar email Comprobar que el email existe Si falla el registro indicar porqué Validación de usuarios Usuario/Contraseña
Patrones de pruebas unitarias • Objetivo • Aislarse de las dependencias • Evitar código duplicado • Patrones • Fakeobjects • Stubs • Inversion del Control (IoC) • MockObjects
Código::MockObjects • Comprobar si existe un mail (usar WebService) Gestionar los usuarios de una aplicación web: Registro de usuarios (Nombre, contraseña, Email) Almacén en SQLServer • Cifrar contraseñas Validar Credenciales Contraseñas Fuertes Validar email Comprobar que el email existe Si falla el registro indicar porqué Validación de usuarios Usuario/Contraseña
Agenda • Introducción a las pruebas • Tipos de Pruebas • Pruebas Unitarias • Pruebas de Integración • Pruebas Funcionales • Pruebas de Rendimiento • Integración con TeamFoundation
Pruebas de Integración • Diferencias entre unitarias e integración • Depende de la “altura a la que se mire” • Entendibles por un analista • Ejecutar las pruebas en su contenedor • ASPNet Host • Configuración • Servicios Externos Simuladores
Gestión de casos de prueba • Configuración de las pruebas • Casos de prueba == Datos de prueba • BBDD con datos de prueba • DataBinding • Evolucionar con la funcionalidad • Listas de pruebas
Código::Última Integración • Integrar todos los componentes Gestionar los usuarios de una aplicación web: Registro de usuarios (Nombre, contraseña, Email) Almacén en SQLServer • Cifrar contraseñas Validar Credenciales Contraseñas Fuertes Validar email Comprobar que el email existe Si falla el registro indicar porqué Validación de usuarios Usuario/Contraseña
Herramientas • Cobertura de Código • Trx2html • NMock2 • Integración con TeamBuild
Break • 15 minutos para un café
Agenda • Introducción a las pruebas • Tipos de Pruebas • Pruebas Unitarias • Pruebas de Integración • Pruebas Funcionales • Pruebas de Rendimiento • Integración con TeamFoundation
Pruebas funcionales • Probar lo que va a ver (usar) el cliente • Entorno de Preproducción • Se prueba el código y además: • Configuración • Red • Seguridad • Plataforma • Interfaz de Usuario • Se valida el diseño
Pruebas Web • Simular el uso desde el punto de vista del usuario • No se requiere el mismo detalle • Automatización más complicada • Dependen de una instalación • Grabación desde IE • Nivel HTTP • Otras plataformas de prueba se basan en automatizar el cliente • Nivel JS
Pruebas Manuales • Requieren rellenar un documento • No se pueden automatizar!! • Pero están integradas en VS (TestRuns, TestResults) • Incluso se puede medir la cobertura
Herramientas adicionales • Convertir las pruebas a código • Fiddler
Agenda • Introducción a las pruebas • Tipos de Pruebas • Pruebas Unitarias • Pruebas de Integración • Pruebas Funcionales • Pruebas de Rendimiento • Integración con TeamFoundation
Pruebas de Rendimiento • Asegurar tiempo de respuesta en situaciones críticas • Volumen de datos • Usuarios concurrentes • Fatiga • Reutilizar otras pruebas • Unitarias • Integración • Web
Almacén de los resultados • Base de datos (SQLExpress) • Configurable • Desde VS • Desde el Controller • Exportar los resultados
Agenda • Introducción a las pruebas • Tipos de Pruebas • Pruebas Unitarias • Pruebas de Integración • Pruebas Funcionales • Pruebas de Rendimiento • Integración con TeamFoundation
TeamFoundation • Integración con el ciclo de vida • Gestión de casos de prueba • Integración con WorkItems • TeamBuild • Ejecuta una lista de pruebas • ProcessTemplate • Reports • Indicadores de Calidad
Conclusiones • Las pruebas afectan otras disciplinas • No sólo a los testers • Diseño • Desarrollo • Gestión de proyecto • Relación con el cliente • VS no sólo para programadores • Integración con VS • Integración con TFS
Tipos de prueba • Características