Testing , Testing , Testing
-
Upload
wing-mcknight -
Category
Documents
-
view
137 -
download
1
description
Transcript of Testing , Testing , Testing
TESTING, TESTING, TESTING
Gestión de pruebas de aplicaciones empresariales con Visual Studio 2005
[email protected] http://blogs.msdn.com/rido
061127
Agenda
Introducción a las pruebas Tipos de Pruebas Pruebas Unitarias Pruebas de Integración Pruebas Funcionales Pruebas de Rendimiento Integración con Team Foundation
Agenda
Introducción a las pruebas Tipos de Pruebas Pruebas Unitarias Pruebas Funcionales Pruebas de Rendimiento Integración con Team Foundation
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(*) Clean Code that Works (**)
Prácticas recomendadas Refactoring Pruebas Unitarias / TDD Pruebas Automatizadas Diseño bottom-up
*Fuente: Martin Fowler** Fuente: Kent Beck
5
Relación entre las prácticas
Cliente disponible El plan de juego
Metáfora40 horas
RefactoringDiseño Simple
Parejas Pruebas
Versiones reducidas
Propiedad repartida
•Estándares
Integración Continua
6
Relación entre las prácticas
Cliente disponible El plan de juego
Metáfora40 horas
RefactoringDiseño Simple
Parejas Pruebas
Versiones reducidas
Propiedad repartida
EstándaresIntegración Continua
Fuente: Kent Beck
7
Mínimos MSF-Agile
RefactoringDiseño Simple
Pruebas
Estándares Integración Continua
Parejas *
Agenda
Introducción a las pruebas Tipos de Pruebas Pruebas Unitarias Pruebas de Integración Pruebas Funcionales Pruebas de Rendimiento Integración con Team Foundation
Tipos de Pruebas
Unitarias (Developer Tests) Integración Rendimiento (Carga, Fatiga..) Funcionales(Customer Tests)
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 !!
Visual Studio Team System
Change Management
Work Item Tracking
Reporting
Project Site
Visual Studio
Team Foundation
Integration Services
Project Management
Pro
cess
an
d A
rch
itect
ure
Gu
idan
ce
Dynamic Code Analyzer
Visual Studio
Team Architect
Static Code Analyzer
Code Profiler
Unit Testing
Code Coverage
Visio and UML Modeling
Team Foundation Client (includes CAL)
Visual Studio Professional Edition
Load Testing
Manual Testing
Test Case Management
Application Designer
Logical Infra. Designer
Deployment Designer
Visual Studio
Team DeveloperVisual Studio
Team Test
Vis
ual S
tud
io In
du
stry
Part
ners
Big Build
Class Designer
Pruebas en el ciclo de vida
Cada
Hora
Cada
Día
Cada
Itera
ción
Cada
Vers
ión
DesarrolloComponentes
CompilaciónEjecuciónPruebas Unitarias
UnitTest OK?
No
SíEjecuciónPruebas
Integración
IntegrationTest OK?
No
InstalaciónEntorno
Integración
InstalaciónEntorno
Preproducción
EjecuciónPruebas
Funcionales
FuncTest OK ?
EjecuciónPruebas
Rendimiento
PerformanceTest OK?
Versión Terminada
Resultados Pruebas Unitarias
Resultados Pruebas
Integración
Resultados Pruebas
Rendimiento
Resultados Pruebas
Fucnionales
Inicio Desarrollo
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 CredencialesContraseñas Fuertes Validar emailComprobar que el email existe
Si falla el registro indicar porqué
Validación de usuariosUsuario/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 CredencialesContraseñas Fuertes Validar emailComprobar que el email existe
Si falla el registro indicar porqué
Validación de usuariosUsuario/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 Team Foundation
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
21
[TestMethod]public void CreateUser(){
string userName = “rido”;User u = new User(userName);Assert.AreEqual(“rido”, u.Name);
}
Código::Visual Studio Test Projects Demos
VS TestProjectsTest Windows
TestRuns, TestResults Simpel Unit Test
RegEx
23
Test Driven Development (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 Driven Development (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 Driven Development (III)
Escribir las pruebas antes que el código a probar
Las pruebas unitarias hacen de “mini-spec”
Sirven como pruebas de regresión
Escribe una
prueba
Compila
Ejecuta (y
Falla)Arregla
el código
Ejecuta (y
Funciona)
Refactor
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 SQLServerCifrar contraseñas
Validar CredencialesContraseñas Fuertes Validar emailComprobar que el email existe
Si falla el registro indicar porqué
Validación de usuariosUsuario/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
Gestionar los usuarios de una aplicación web:Registro de usuarios (Nombre, contraseña, Email)
Almacén en SQLServerCifrar contraseñas
Validar CredencialesContraseñas Fuertes Validar emailComprobar que el email existe
Si falla el registro indicar porqué
Validación de usuariosUsuario/Contraseña
Validar contraseña
Detallar problemas al registrar usuario
Patrones de pruebas unitarias Objetivo
Aislarse de las dependencias Evitar código duplicado
Patrones Fake objects 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 SQLServerCifrar contraseñas
Validar CredencialesContraseñas FuertesValidar emailComprobar que el email existe
Si falla el registro indicar porqué
Validación de usuariosUsuario/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 Team Foundation
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 SQLServerCifrar contraseñas
Validar CredencialesContraseñas FuertesValidar emailComprobar que el email existe
Si falla el registro indicar porqué
Validación de usuariosUsuario/Contraseña
Herramientas
Cobertura de Código Trx2html NMock2 Integración con Team Build
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 Team Foundation
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 Team Foundation
Pruebas de Rendimiento
Asegurar tiempo de respuesta en situaciones críticas Volumen de datos Usuarios concurrentes Fatiga
Reutilizar otras pruebas Unitarias Integración Web
Lab
(IIS)SWebTest
(TFS)GENSERVER
TestController
TestAgent1
Ridopc(VS)
Lab03(VS)
TestAgent2
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 Team Foundation
Team Foundation
Integración con el ciclo de vida Gestión de casos de prueba
Integración con WorkItems Team Build
Ejecuta una lista de pruebas Process Template
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
Unit Int Func Load
Cuándo?
Todo el rato
Cada día/semana
Cada Iteración/Versión
Cada Iteración/Versión
Donde? Devs, Build, Tests
Dev, Build, Tests
Lab, PRE Lab, PRE
Quién? Devs Devs, Testers
Testers,Clientes
Testers
Cómo? VSUnitFx VSUnitFx WebTests, Manual Tests
VS Load AgentsWebTests
Preguntas y..
Respuestas (si las hay :-) Otros ejemplos
Suites de pruebas unitarias famosas Nunit EnterpriseLibrary Composite UI Application Block CCNet
Es sólo la primera versión !!