Presentación PDF

Anuncio
Testing + Integración continua
Agenda
Introducción Conceptos
Herramientas
CI en Arquitectura
Práctica
Agenda
Introducción Conceptos
Herramientas
CI en Arquitectura
Práctica
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
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
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
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
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
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
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
App
Mod. 1
Mod. 1
Mod. 2
Mod. 2
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
App
App
Mod. 1
Mod. 1
Mod. 1
Mod. 2
Mod. 2
Mod. 2
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.”
Conceptos
●
Mediante las herramientas adecuadas se pueden automatizar
App
a=3 b=4
res = 7
Conceptos
●
Mediante las herramientas adecuadas se pueden automatizar
App
a=3 b=4
res = 7
App
a=3 b=4
res = 7
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%”
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?
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)
Integración Continua
Control de versiones
Equipos de
desarrollo
Análisis de código
Construcción automática
Provisionamiento y
despliegue de la aplicación
Reportes
Tests Integración
Tests funcionales
Tests unitarios
Este flujo de trabajo se realiza en cada entrega al repositorio
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
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
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
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.
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
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
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
Agenda
Introducción Conceptos
Herramientas
CI en Arquitectura
Práctica
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.
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.
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).
Herramientas: Nexus
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.
Herramientas: Jenkins
Herramientas: Jenkins
Herramientas: Jenkins
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.
Herramientas: Sonar
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
Herramientas: TestLink
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.
Herramientas: Sahi
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).
Herramientas gestión: Visual Management
Agenda
Introducción Conceptos
Herramientas
CI en Arquitectura
Práctica
CI en Arquitectura
Desarrollador
CI en Arquitectura
Control de versiones
Desarrollador
CI en Arquitectura
Control de versiones
Desarrollador
Compilación
CI en Arquitectura
Control de versiones
Desarrollador
Compilación
Test Unitarios
CI en Arquitectura
Control de versiones
Desarrollador
Compilación
Test Unitarios
Control de calidad
CI en Arquitectura
Control de versiones
Desarrollador
Compilación
Test Unitarios
Control de calidad
Deploy PreITG
CI en Arquitectura
Control de versiones
Desarrollador
Análisis código
Compilación
Publica
documentación
Test Unitarios
Control de calidad
Despliega
aplicaciones
Deploy PreITG
Instala librerías
Test Integración
Sahi
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.
Infraestructura CI
5 Servidores
29 VMs
IBM
Cisco
Preguntas
Agenda
Introducción Conceptos
Herramientas
CI en Arquitectura
Práctica
Demo
● Proyecto FWK3 entorno local
● Tarea Jenkins asociada a proyecto
○ Commit erróneo
● Sonar FWK3
● Deploy Nexus FWK3
● Informes Generados
● Documentación publicada
Práctica ejercicios Testing
https://github.com/joseripla/uvtesting
Preguntas
jplapons@capgemini.com
www.capgemini.com
Descargar