testing + integración continua

61
Testing + Integración continua

Upload: tranquynh

Post on 06-Jan-2017

220 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Testing + Integración continua

Testing + Integración continua

Page 2: Testing + Integración continua

Introducción ConceptosHerramientasCI en ArquitecturaPráctica

Agenda

Page 3: Testing + Integración continua

Introducción ConceptosHerramientasCI en ArquitecturaPráctica

Agenda

Page 4: Testing + Integración continua

Conceptos

El Testing, o pruebas de software, es el proceso que verifica y revela la

calidad de un proyecto/producto software.

Las principales ventajas que ofrece la realización de testing son :

● Comprobar la calidad de la solución

● Detectar fallos de implementación

● Detectar comportamientos inesperados o incorrectos durante el ciclo de

construcción del software

● Obliga a modularizar el software correctamente

● Reduce el tiempo de resolución de incidencias

Page 5: Testing + Integración continua

Conceptos

● Aunque exige dedicar esfuerzo (coste para las empresas) para crear y

mantener los test, los beneficios obtenidos son mayores que la inversión

realizada

● Permite delegar responsabilidades ya que el testing manual no se debería

realizar por ningún integrante del equipo encargado de implementar la

solución para evitar “vicios adquiridos”

● El testing se puede utilizar incluso para implementar funcionalidad en

base a metodologías alrededor de los test (TDD)

● Tranquilidad y seguridad al equipo e indirectamente a la organización

Page 6: Testing + Integración continua

Conceptos

Un test unitario es la forma de comprobar el correcto funcionamiento de un

módulo de código. Nos permite comprobar que cada módulo de nuestro

sistema funciona correctamente por separado

Un simple servicio encargado de realizar sumas

Page 7: Testing + Integración continua

Conceptos

Un test unitario es la forma de comprobar el correcto funcionamiento de un

módulo de código. Nos permite comprobar que cada módulo de nuestro

sistema funciona correctamente por separado

Page 8: Testing + Integración continua

Conceptos

Un test de integración nos permite comprobar la integración entre varios

componentes o módulos de nuestro software.

● Permite comprobar la integración entres distintos módulos de nuestra

solución.

● Permita comprobar la integración con sistemas de terceros.

○ Sistemas de Mensajería JMS

○ Base de datos

○ Notificaciones

○ Etc

Page 9: Testing + Integración continua

Conceptos

Un test de integración nos permite comprobar la integración entre varios

componentes o módulos de nuestro software.

● Permite comprobar la integración entres distintos módulos de nuestra

solución.

● Permita comprobar la integración con sistemas de terceros.

○ Sistemas de Mensajería JMS

○ Base de datos

○ Notificaciones

○ Etc

App

Mod. 1

Mod. 2

Page 10: Testing + Integración continua

Conceptos

Un test de integración nos permite comprobar la integración entre varios

componentes o módulos de nuestro software.

● Permite comprobar la integración entres distintos módulos de nuestra

solución.

● Permita comprobar la integración con sistemas de terceros.

○ Sistemas de Mensajería JMS

○ Base de datos

○ Notificaciones

○ Etc

App

Mod. 1

Mod. 2

App

Mod. 1

Mod. 2

Page 11: Testing + Integración continua

Conceptos

Un test de integración nos permite comprobar la integración entre varios

componentes o módulos de nuestro software.

● Permite comprobar la integración entres distintos módulos de nuestra

solución.

● Permita comprobar la integración con sistemas de terceros.

○ Sistemas de Mensajería JMS

○ Base de datos

○ Notificaciones

○ Etc

App

Mod. 1

Mod. 2

App

Mod. 1

Mod. 2

App

Mod. 1

Mod. 2

Page 12: Testing + Integración continua

Conceptos

Un test funcional es una prueba basada en la ejecución, revisión y

retroalimentación de las funcionalidades previamente diseñadas para el

software (requisitos).

● Suelen formar parte de un plan de pruebas que puede ir ligado a la

aceptación.

● Generan informes con el resultado de ejecución de las pruebas.

● Están escritos en lenguaje “normal”, sin tecnicismos.

○ Ej: “Cuando un usuario de administración se registre en la aplicación

deberá ver todos sus expedientes pendientes.”

Page 13: Testing + Integración continua

Conceptos

● Mediante las herramientas adecuadas se pueden automatizar

App

a=3 b=4

res = 7

Page 14: Testing + Integración continua

Conceptos

● Mediante las herramientas adecuadas se pueden automatizar

App

a=3 b=4

res = 7

App

a=3 b=4

res = 7

Page 15: Testing + Integración continua

Conceptos

La cobertura de código es una medida (porcentual) que indica la cantidad de

código fuente abarcado por los test ejecutados contra nuestro proyecto.

Permite :

● Conocer cuánto porcentaje del código está probado.

● Detectar código no testeado.

● Fijar un porcentaje sobre el cual una entrega o proyecto puede ser

considerado “NO APTO”.

○ Ej: “El grado de cobertura de código debe superar el 60%”

Page 16: Testing + Integración continua

Integración Continua

Punto de partida sin integración continua :

● Los equipos trabajan de forma aislada sobre el mismo código

● Cuanto más tiempo pasan sin realizar entregas de código, más difieren las

versiones entre unos y otros

● Estas situaciones pueden dar lugar al llamado “integration hell”, en el que

se ha de dedicar mucho tiempo a integrar las distintas ramas de código.

○ ¿Qué sucede cuando alguien del equipo hace un commit con errores a

las 20:00? ¿Problema de mi yo del mañana?

Page 17: Testing + Integración continua

Integración Continua

¿Qué és?

● Práctica de desarrollo software donde los miembros del equipo integran

su trabajo frecuentemente, al menos una vez al día.

● En cada integración, se realiza lo siguiente:

○ Construcción automática de la aplicación

○ Ejecución de pruebas automáticas.

○ Comprobación de la calidad del software a través de métricas

predefinidas.

● Abarca todo el ciclo de vida de construcción de la solución:

○ Compilación -> Test Unitarios -> Test Integración -> Test Funcionales -

> Test QA -> Despliegue (puesta producción)

Page 18: Testing + Integración continua

Equipos de desarrollo

Control de versiones

Construcción automática

Tests unitarios

Análisis de código

Provisionamiento y despliegue de la aplicación

Tests Integración Tests funcionales

Reportes

Este flujo de trabajo se realiza en cada entrega al repositorio

Integración Continua

Page 19: Testing + Integración continua

Integración Continua

● Se puede realizar sin intervención humana

○ Cada fase se realiza mediante herramientas automatizadas

● Cada ciclo genera informes que son almacenados para su consulta en

base a:

○ las métricas del software,

○ las pruebas unitarias,

○ los test de integración.

● Las tareas de construcción son orquestadas y mantenidas por el servidor

de Integración continua.

Sistematización Automatización Detección temprana Errores

Page 20: Testing + Integración continua

Mejores prácticas

● Mantener un solo repositorio, con ramas.

● Automatizar la construcción

● Hacerla auto-testeable

● Todo el mundo entrega el código todos los días

● Notificaciones instantáneas

● Está permitido cometer errores

● Las pruebas se realizan en un clon de producción

● Hacer fácil la obtención de los entregables

● Visibilidad de las builds

● Automatizar el despliegue

Page 21: Testing + Integración continua

Beneficios generales

● Reduce tiempo, coste y retrabajos al evitar los “integration hells”

● Proporciona feedback rápido del impacto en el proyecto de los cambios

realizados

● El proceso comprueba la calidad del software constantemente lo que

permite asegurar la calidad del producto en base a su consistencia

● Permite evaluar la mejora/empeoramiento del producto

● Detección y notificación temprana de errores

● Permite la refactorización del código con mayores garantías

“Continuous Integration doesn’t get rid of bugs, but it does make them

dramatically easier to find and remove.”

Martin Fowler, Chief Scientist, ThoughtWorks

Page 22: Testing + Integración continua

Beneficios generales

● Los errores son detectados con mayor rapidez y solucionados con poca

inversión.

● Evita el “caos del último minuto” en la fecha de entrega

● Facilita poder revertir código a una versión estable (la última)

● Versión funcional siempre disponible para los stakeholders

● La frecuencia de las entregas fuerza al desarrollo de aplicaciones más

modulares con código menos complejo y más modular.

Page 23: Testing + Integración continua

Beneficios de las pruebas automáticas

● Fuerza la disciplina y buena práctica de probar a menudo de manera

automática

● Feedback automático y continuo del impacto en todo el sistema de

cambios localizados

● Facilita y agiliza la corrección de problemas durante el desarrollo

● Las métricas generadas dan feedback inmediato a los desarrolladores

● Todas las pruebas automáticas se convierten en pruebas de regresión

Page 24: Testing + Integración continua

Continuous delivery (entregas continuas)

● Práctica que permite tener siempre disponible un producto que cumple

con las normas de calidad impuestas

● Estabilización temprana del código. Al hacer deliver en cada push, el

código ha de ser estable.

● La aplicación está construida y lista para desplegar manualmente

● Evita cuellos de botella en puestas en marcha simultáneas

○ En algunos entornos se compilan todas las apps en la puesta en

marcha

○ La ventana de tiempo disponible es pequeña

Page 25: Testing + Integración continua

Continuous deployment (despliegues continuos)

● Práctica de realizar la puesta en marcha “en producción” de un producto

de forma automática si pasa todo el ciclo de calidad previsto

● Las pruebas automáticas deben cubrir el 100% de los casos

● Difícil de conseguir con aplicaciones con muchas dependencias externas

● Monitorización automática en producción de la puesta en marcha

● Empleado en empresas muy enfocadas a la tecnología

● El tiempo desde la programación hasta la puesta en marcha se reduce a

horas

Page 26: Testing + Integración continua

Introducción ConceptosHerramientasCI en ArquitecturaPráctica

Agenda

Page 27: Testing + Integración continua

Herramientas: Maven

● Herramienta para la gestión y construcción de

aplicaciones.

● Facilita la gestión del ciclo de construcción de

proyectos software.

● Permite la reutilización de la lógica de

construcción.

● Gestión de librerías y dependencias entre

módulos y proyectos.

● Gran cantidad de plugins disponibles.

Page 28: Testing + Integración continua

Herramientas: Subversion / GIT

● Herramienta de control de versiones y

repositorio de código fuente.

● Sistema centralizado.

● Gestión de históricos de los cambios realizados

sobre los ficheros.

● Facilita la ramificación de los proyectos.

● Permite etiquetar los proyectos y su

versionamiento.

Page 29: Testing + Integración continua

Herramientas: Nexus

● Sistema de control y almacenamiento de

librerías o artefactos.

● Permite centralizar en un único punto la

gestión de las dependencias.

● Sirve como repositorio donde instalar los

artefactos generados por los proyectos.

● Permite versionado de artefactos.

● Gestiona los dos estados de desarrollo de un

artefacto (snapshot y release).

Page 30: Testing + Integración continua

Herramientas: Nexus

Page 31: Testing + Integración continua

Herramientas: Jenkins

● Herramienta de integración continua.

● Identifica las distintas tareas en jobs.

● Mantiene un histórico de la ejecución y el

resultado de los mismos.

● Los jobs son altamente configurables,

permitiendo lanzar desde compilaciones de

aplicaciones java, android, iOs, hasta deploys

contra servidores de aplicaciones.

● Notifica a los afectados en caso de

eventualidades.

● Monitorización de resultados.

● Enorme cantidad de plugins disponible.

Page 32: Testing + Integración continua

Herramientas: Jenkins

Page 33: Testing + Integración continua

Herramientas: Jenkins

Page 34: Testing + Integración continua

Herramientas: Jenkins

Page 35: Testing + Integración continua

Herramientas: Sonarqube

● Herramienta utilizada para evaluar la calidad del

software.

● Recopila, analiza y permite visualizar las métricas de

la calidad del software.

● Realiza análisis estático del código en función de

unas reglas configurables y ampliables.

● Nos permite conocer el porcentaje de cumplimiento

de las reglas en los proyectos.

● Monitoriza la evolución de la calidad.

Page 36: Testing + Integración continua

Herramientas: Sonar

Page 37: Testing + Integración continua

Herramientas: TestLink

● Herramienta de gestión de pruebas

● Afianza la calidad del software

● Permite crear y gestionar casos de prueba

● Organiza los casos de prueba en planes de

pruebas

● Gestiona y publica los resultados de los

test

● Trazabilidad con los requisitos

Page 38: Testing + Integración continua

Herramientas: TestLink

Page 39: Testing + Integración continua

Herramientas: Sahi

● Herramienta para la automatización de

pruebas de capa vista.

● Permite la grabación de casos de prueba y

la posterior reproducción.

● Permite ampliar la funcionalidad mediante

scripts.

● Generación de informes detallados.

● Versiones para los sistemas operativos y

navegadores más conocidos.

● Integrado con Jenkins para lanzar la

ejecución de las pruebas desde las tareas.

Page 40: Testing + Integración continua

Herramientas: Sahi

Page 41: Testing + Integración continua

Herramientas gestión: Visual Management

● Herramienta de gestión de tareas.

● Panel de visualización de tareas basado

en Kanban

● Basada en metodología ágil.

● Permite tener una visión global del

estado del proyecto y responder

ágilmente ante eventualidades.

● Integrado con las herramientas

corporativas para la gestión del

proyecto (Teamforge y logbook).

Page 42: Testing + Integración continua

Herramientas gestión: Visual Management

Page 43: Testing + Integración continua

Introducción ConceptosHerramientasCI en ArquitecturaPráctica

Agenda

Page 44: Testing + Integración continua

CI en Arquitectura

Desarrollador

Page 45: Testing + Integración continua

CI en Arquitectura

Desarrollador

Control de versiones

Page 46: Testing + Integración continua

CI en Arquitectura

Desarrollador

Control de versiones

Compilación

Page 47: Testing + Integración continua

CI en Arquitectura

Desarrollador

Control de versiones

Compilación

Test Unitarios

Page 48: Testing + Integración continua

CI en Arquitectura

Desarrollador

Control de versiones

Compilación

Control de calidad

Test Unitarios

Page 49: Testing + Integración continua

CI en Arquitectura

Desarrollador

Control de versiones

Compilación

Deploy PreITG

Control de calidad

Test Unitarios

Page 50: Testing + Integración continua

CI en Arquitectura

Desarrollador

Control de versiones

Compilación

Deploy PreITG

Test Integración

Control de calidad

Test Unitarios

Análisis código

Publica documentación

Despliega aplicaciones

Instala librerías

Page 51: Testing + Integración continua

Sahi

Page 52: Testing + Integración continua

Infraestructura CI

● Los entornos de integración continua tienen detrás una infraestructura adaptada a la complejidad de las soluciones que integre.

● La complejidad puede variar desde la ejecución de los test, siendo este punto el más simple, hasta la creación completa de entornos con herramientas de aprovisionamiento.

Page 53: Testing + Integración continua

Infraestructura CI

5 Servidores29 VMs

Page 54: Testing + Integración continua

IBM

Page 55: Testing + Integración continua

Cisco

Page 56: Testing + Integración continua

Preguntas

Page 57: Testing + Integración continua

Introducción ConceptosHerramientasCI en ArquitecturaPráctica

Agenda

Page 58: Testing + Integración continua

Demo

● Proyecto FWK3 entorno local

● Tarea Jenkins asociada a proyecto

○ Commit erróneo

● Sonar FWK3

● Deploy Nexus FWK3

● Informes Generados

● Documentación publicada

Page 59: Testing + Integración continua

Práctica ejercicios Testing

https://github.com/joseripla/uvtesting

Page 60: Testing + Integración continua

Preguntas

[email protected]

Page 61: Testing + Integración continua

www.capgemini.com