TESTING, TESTING, TESTING
[email protected]
http://blogs.msdn.com/rido
061127
Gestión de pruebas de aplicaciones empresariales
con Visual Studio 2005
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
Relación entre las prácticas
El plan de juego
Cliente disponible
40 horas
Metáfora
Refactoring
Diseño Simple
Versiones reducidas
Parejas
Pruebas
•Estándares
Propiedad repartida
Integración Continua
5
Relación entre las prácticas
El plan de juego
Cliente disponible
Metáfora
Refactoring
Parejas
40 horas
Diseño Simple
Versiones reducidas
Pruebas
Estándares
Propiedad repartida
Integración
Continua
Fuente: Kent Beck
6
Mínimos MSF-Agile
Refactoring
Parejas *
Estándares
Diseño Simple
Pruebas
Integración
Continua
7
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
Visual Studio
Visual Studio
Team Architect
Team Developer
Team Test
Application Designer
Dynamic Code Analyzer
Load Testing
Logical Infra. Designer
Static Code Analyzer
Manual Testing
Deployment Designer
Code Profiler
Test Case Management
Unit Testing
Code Coverage
Class Designer
Visio and UML Modeling
Team Foundation Client (includes CAL)
Visual Studio Professional Edition
Visual Studio
Team Foundation
Change Management
Reporting
Integration Services
Big Build
Work Item Tracking
Project Site
Project Management
Visual Studio Industry Partners
Process and Architecture Guidance
Visual Studio Team System
Desarrollo
Componentes
Compilación
Ejecución
Pruebas
Unitarias
Resultados
Pruebas
Unitarias
Ejecución
Pruebas
Integración
Resultados
Pruebas
Integración
UnitTest OK?
Sí
Instalación
Entorno
Integración
Integration
Test OK?
Performance
Test OK?
FuncTest
OK ?
Instalación
Entorno
Preproducción
Ejecución
Pruebas
Rendimiento
Resultados
Pruebas
Rendimiento
Cada
Iteración
No
Cada
Día
No
Ejecución
Pruebas
Funcionales
Resultados
Pruebas
Fucnionales
Cada
Versión
Inicio
Desarrollo
Cada
Hora
Pruebas en el ciclo de vida
Versión
Terminada
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 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
[TestMethod]
public void CreateUser()
{
string userName = “rido”;
User u = new User(userName);
Assert.AreEqual(“rido”, u.Name);
}
21
Código::Visual Studio Test Projects

Demos
 VS
TestProjects
 Test
Windows
 TestRuns, TestResults
 Simpel
 RegEx
Unit Test
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
23
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
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
Gestionar los usuarios de una aplicación
web:


Validar
contraseña
Detallar
problemas al
registrar
usuario
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
 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 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 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 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 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

Grabación desde IE
 Nivel

de una instalación
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
Ridopc
(VS)
TestAgent2
TestAgent1
(TFS)
GENSERVER
Lab03
(VS)
TestController
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

Team Build
 Ejecuta

con WorkItems
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
VS Load Agents
WebTests
WebTests,
Manual Tests
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 !!
Descargar

Testing, Testing, Testing