testing , testing , testing

Post on 01-Jan-2016

137 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

TESTING, TESTING, TESTING

Gestión de pruebas de aplicaciones empresariales con Visual Studio 2005

Ricardo.Minguez@microsoft.com 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 !!

top related