Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Taxonomías del softwarePatrones, estilos y tácticas
Jose Emilio Labra GayoCurso 2020/2021
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Taxonomías del softwareConstrucción y mantenimiento
Gestión de configuracionesModularidad
Descomposición en tiempo de desarrolloTiempo de ejecución
Componentes y conectoresIntegraciónDisposición
Empaquetamiento, distribución, despliegueEntorno de negocio y empresa
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Construcción y mantenimiento del software
Jose E. Labra GayoCourse 2018/2019
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o Construcción y mantenimientoSoftwareGestión de configuraciones
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Software: ¿producto ó servicio?Software as a Product (SaaP):
Software entregableModelo comercial: software vendido a clientesDistribuido o descargado
Ejemplo: Microsoft OfficeSoftware as a Service (SaaS):
Software desplegadoModelo comercial: los clientes se suscribenNormalmente disponible en alguna URL
Ejemplo: Google docs
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o Gestión de configuraciones softwareGestión de la evolución del software
Gestionar los aspectos de construcción de softwareEspecialmente, evolución y cambio del software
Aspectos:Identificar líneas base (baseline) e ítems de configuración
Baseline: Un producto sujeto a gestiónContiene ítems de configuración: documentos, ficheros de
código, etc...Control y auditoria de configuraciones
Sistemas de control de versionesGestión y automatización de la construcciónTrabajo en equipo y colaboraciónSeguimiento de defectos e incidencias
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Construcción de softwareRepaso a metodologías
Tradicionales, iterativas, ágiles,...Herramientas de construcción
Lenguajes, herramientas de construcción, etc.
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Incremental piecemealCrecimiento según necesidadCodificar sin considerar la arquitecturaSoftware de usar y tirarLimitaciones presupuestarias
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Propuesto en años 70
Cascada
Análisis de requisitos
Diseño de software y sistema
Implementación y pruebas unitarias
Pruebas integración y
sistema
Despliegue y mantenimiento
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Modelo en V
Requisitos
Análisis
Diseño
DiseñoObjetos
PruebasUnitarias
PruebasIntegración
PruebasSistema
PruebasAceptación
Tiempo
Nivelde detalle
Bajo
Alto
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Big Design Up FrontAntipatrón de modelos tradicionales
Demasiada documentación que nadie leeDocumentación diferente al sistema desarrollado
Arquitectura degradadaSistemas que no son usados
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Modelos iterativos
Basado en prototiposEvaluación de riesgos
Requisitos
Análisis
Diseño
Prueba
Despliegue
Valoración
Iteración 1
Requisitos
Análisis
Diseño
Prueba
Despliegue
Valoración
Iteración 2
Requisitos
Análisis
Diseño
Prueba
Despliegue
Valoración
Iteración 3
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
RUP (Rational Unified Process)
Fuente: Wikipedia. http://es.wikipedia.org/wiki/Archivo:Rup_espanol.gif
Uno de los modelos iterativos más utilizadosProceso iterativo
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ÁgilesNumerosas variantes
RAD (www.dsdm.org, 95)SCRUM (Sutherland & Schwaber, 95)XP - eXtreme Programming (Beck, 99)Feature driven development (DeLuca, 99)Adaptive software development (Highsmith, 00)Lean Development (Poppendieck, 03)Crystal Clear (Cockburn, 04)Agile Unified Process (Ambler, 05). . .
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágilesManifiesto ágil (www.agilemanifesto.org)
Individuos e interacciones sobre
Herramientas y procesos
Software quefuncione Documentaciónsobre
Colaboracióncon cliente
sobre Negociación decontrato
Responder alcambio
sobre Seguimiento deun plan
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágilesRealimentación
Ajustes constantes en el códigoMinimizar riesgo
Software en intervalos cortosIteraciones de horas o díasCada iteración pasa todo el ciclo de desarrollo
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágilesAlgunas prácticas (XP)
1. Planificaciones cortas2. Pruebas 3. Programación en parejas (revisiones de código)4. Refactorización5. Diseño simple6. Propiedad de código compartida7. Integración continua8. Cliente en lugar de desarrollo9. Entregas pequeñas10.Horarios normales11.Estándares de codificación
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágiles
1. Planificaciones cortasDespués de cada iteración, volver a planificarRequisitos mediante historias de usuario
Descripciones breves (Tamaño tarjeta)Objetivos priorizados por clientesRiesgo y recursos estimados por desarrolladores
Historias de usuario = pruebas aceptaciónPreparación para el cambio
Plan original
Plan actual
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágiles2.- Utilización de pruebas
Escribir pruebas incluso antes del códigoInicialmente el código va a fallarObjetivo: pasar las pruebasResultado:
Batería de pruebas automáticas (test-suite)Facilita la refactorización
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Diferentes tipos de pruebasPruebas unitarias
Probar cada unidad separadamentePruebas de integración
Smoke testingPruebas de aceptación
Pruebas con historias de usuarioPruebas de capacidad/rendimiento
Pruebas de cargaPruebas de regresión
Chequear que los cambios nuevos no introducen nuevos errors, o regresiones
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágiles2.- Pruebas
Tipos de pruebas
Pruebas de aceptaciónFuncionales
DemostracionesPruebas usabilidad
Pruebas exploración
Pruebas aceptación no funcional(capacidad, seguridad,…)
Pruebas unitariasPruebas integración
Pruebas sistema
Automáticas Manuales
Automáticas Manuales/ Automáticas
Sopo
rte
al d
esar
rollo
Critica al proyecto
Dirigidas al negocio
Dirigidas a tecnología
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágiles
2. PruebasBehaviour-driven development (BDD)
Pruebas a partir de historias de usuarioDeben escribirse junto con cliente
Herramientas: Cucumber, JBehave, Specs2,...Sirven como contratoMiden el progreso Feature: Buscar cursos
Para mejorar el uso de los cursosLos estudiantes deberían ser capaces de buscar cursos
Scenario: Búsqueda por asuntoGiven hay 240 cursos que no tienen el asunto “Biología”And hay 2 cursos A001, B205 que tienen el asunto “Biología" When Yo busco el asunto “Biología"Then Yo debería ver los cursos:
| Código || A001 || B205 |
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágiles2. PruebasPrincipios FIRST
F - FastLa ejecución de pruebas debe ser rápida
I - Independent: Los casos de prueba son independientes entre sí
R - Repeatable: Tras ejecutarlos N veces, el resultado debe ser el mismo
S - Self-checkingSe puede comprobar si se cumplen automáticamente, sin
intervención humanaT - Timely
Pruebas escritos al mismo (o antes) tiempo que código
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Dobles de pruebasObjetos Dummy:
Se pasan pero no se utilizanObjetos falsos (fake):
Tienen implementación parcialStubs:
Respuestas precocinadas a ciertas preguntasEspías: son stubs que pueden registrar cierta
información para depuraciónMocks: simulan comportamiento de otros objetos
Programados con ciertas expectativas sobre qué tipo de llamadas deben recibir
Fixtures. Elementos fijos de soporte a las pruebasEj. Bases de datos con ciertas entradas, determinados
ficheros, etc.
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Entornos
Entorno de ensayo (staging) también se utiliza en ocasiones
Entorno de desarrollo
Entorno de pruebas
Entornode producción
Servidorpruebas
Servidorintegración
Controlde versiones
Servidor producciónGranja servidores
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágiles
3. Programación en parejas2 ingenieros software trabajan juntos en un
ordenadorEl conductor maneja el teclado y crea implementaciónEl observador identifica fallos y da ideas
Los roles se intercambian cada cierto tiempoPull requests: antes de aceptar cambios, el
código puede ser revisado
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágiles4. Diseño simple
Reacción a Big Design Up FrontDiseño más simple que funcione
Documentación automatizadaJavaDoc y similares
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágiles5. Refactorización
Mejorar diseño sin cambiar la funcionalidadSimplificar código (eliminar código duplicado)Buscar activamente oportunidades de abstracción
Pruebas de regresiónSe basa en la batería de pruebas
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágiles6. Propiedad colectiva del código
El código pertenece al proyecto, no a un ingeniero particular
A medida que los ingenieros desarrollan, deben poder navegar y modificar cualquier claseAunque no la hayan escrito ellosEvitar fragmentos de una única persona
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágiles7. Integración continua
Cada pareja escribe sus propios casos de prueba y trabaja para satisfacerlosPasar 100% de casos de pruebaIntegrar
El proceso debe realizarse 1 ó 2 veces al díaObjetivo: evitar integration hell
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Integración continuaMejores prácticas:
Mantener repositorio de códigoAutomatizar la construcciónHacer que la construcción pueda probarseTodo el mundo realiza commits a línea baseTodo commit es construidoMantener la construcción rápidaProbar en una replica del entorno de producciónFacilitar la obtención de los últimos entregablesTodo el mundo puede ver los resultados de la última
construcciónAutomatizar despliegue
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Integración continuaHerramientas
Hudson, Jenkins, Travis, Bamboo
Integracióncontinua
Interfazweb
Informes
checkout/commit
Repositorio central
de código
Equipo de desarrollo
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Cliente en lugar de desarrolloCliente disponible para clarificar historias de
usuarios y tomar decisiones críticas de negocioVentajas
Desarrolladores no realizan suposicionesDesarrolladores no tienen que esperar para
decisionesMejora la comunicación
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Entrega continua - continuous delivery
Pequeñas releasesTan pequeñas como sea posible ofreciendo valor
al usuarioObtener realimentación temprana del cliente
Modelos de entregaEntregar algo cada cierto tiempo (noche/semana/...)Entrega continua y automatizada
Delivery pipeline
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágiles10. Horarios normales
40h/semana = 40h/semanaEvitar horas extraProgramadores cansados escriben código pobre
A largo plazo ralentiza el desarrollo
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágiles
11. Código limpioFacilitar modificación de código por otras personasUtilizar buenas prácticas
Estilos y normas de codificaciónEvitar code smells
Manifiesto software craftmanshipLibros (Robert C. Martin)Clean CodeClean architecture
Fuente: Clean Code. Robert Martin
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Métodos ágiles
VariantesScrum
Gestión de proyectos/personas
División de trabajo en sprintsReunión diaria de 15'Backlog del producto
KanbanModelo lean (esbelto)
Desarrollo Just in TimeLimitar cargas de trabajo
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Gestión de configuracionesDiferentes versiones de software
Funcionalidades nuevas o diferentesCorrección de bugsNuevos entornos de ejecución
Gestión de configuraciones: gestión de la evolución del softwareCambios del sistema = actividades en equipoCostes y esfuerzo necesarios
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Control de versionesSistemas que gestionan las diferentes versiones
del softwareAcceso a todas las versiones del sistema
Facilidad para volver atrásDiferencias entre versiones
Código colaborativoFacilidad para gestión de ramificacionesMetadatos
Autor de la versión, fecha actualización, etc.
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Baseline
Baselines (línea de referencia): Software que es sometido a gestión de configuraciones.
Versión1.0
Windows
Versión1.5
Sun
Versión1.5
Linux
Versión2.0
Windows
Versión2.5 Escritorio
Linux
Versión2.5 Escritorio
Servidor
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Releases y versionesVersión: instancia de un sistema funcionalmente
distinta de otras instanciasRelease (entregable): instancia de un sistema
que es distribuida a usuarios externos al equipo de desarrollo.Puede ser considerado un producto final
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Nombres habituales de versionesPre-alfa
Antes de las pruebasAlfa
En pruebasBeta (o prototipo)
Pruebas por usuariosBeta-tester: usuario que hace pruebas
Release-candidateVersión beta que podría ser producto final
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Otros esquemas de nombres
Utilizar algunos atributosFecha, creador, lenguaje, cliente, estado,...
Nombres reconociblesGanimede, Galileo, Helios, Indigo, Juno,...Precise Pangolin, Quantal Quetzal,...
Versioneado semántico (http://semver.org)MAJOR.MINOR.PATCH (2.3.5)
MAJOR: cambios incompatibles con versión anteriorMINOR: nueva funcionalidad compatible con versión anteriorPATH: Reparación de bugs compatible con versión anterior
Versión 0 (inestable)Pre-release: 2.3.5-alpha
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Publicación de entregables
Una release supone cambios de funcionalidadPlanificación
Publicar una release no es baratoLos usuarios no suelen querer nuevas releasesFactores externos:
Marketing, clientes, hardware, ...Modelo ágil: releases my frecuentes
Utilizando integración continua se minimiza el riesgo
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Publicación de entregablesUna release no es sólo software
Ficheros de configuraciónFicheros de datos necesariosProgramas de instalaciónDocumentaciónPublicidad y empaquetamiento
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Continuous delivery
Continuous delivery/entrega continuaEntregas rápidas para obtener feedback lo antes
posibleUtilización de TDD e integración continuaDeployment pipeline (canal de despliegue)
Ventajas: Afrontar el cambioMinimizar riesgos de integración
Filosofía Wabi-sabiAceptar la imperfecciónSoftware no finalizado: Suficientemente bueno (Good enough)
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
DevOps
Unir development y operationsCambio cultural en el que el mismo equipo afronta las
fases:Codificar (code): Desarrollo y revisión de código, Integración
continuaConstruir (build): Control de versiones, construcciónProbar (test) Empaquetar: Gestión de artefactosRelease: automatización de versionesConfigurar y gestionarMonitorizar: Rendimiento, experiencia del usuario
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Lenguajes de construcciónLenguajes de configuración
Definiciones de recursos (Json, XML, Turtle)Ejemplos: .travis.yml, package.json, pom.xml
Lenguajes de scriptingEscritos shell/batch
Lenguajes de programación Ejemplos: Java, Javascript,...
Lenguajes visualesEjemplos: scratch, blender, ...
FormalesEjemplos: B-trees, Z language, OCL, ...
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Program
Aspectos de codificaciónConvenciones de nombres
Importantes para otros programadores, mantenimiento...
Clases, tipos, variables, constantes con nombre...Gestión de erroresOrganización código fuente
Paquetes, directorios...Dependencias
Librerías importadasDocumentación del código
Javadocs, jsdoc...
Programador
Programa
Ordenador
Otros programadores& personas mantenimiento
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
PruebasPruebas unitariasIntegraciónCapacidadRegresión. . .Recomendación:
Separar código de pruebas y dependencias de código de producción
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Construcción para reutilizaciónParametrización
Añadir parámetrosBad smell: números mágicos en código
Ficheros y recursos de configuraciónCompilación condicionalEncapsulación
Separar interfaz de implementaciónBad smell: partes internas públicas en librerías
EmpaquetamientoAntipatrón: tareas manuales en empaquetamiento
DocumentaciónImportante: Documentación API
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Construir reutilizandoSeleccionar unidades reutilizables
Componentes externos (COTS, FOSS)Gestión de dependencias
<ver más adelante>Gestión de actualizaciones
Qué ocurre cuando otras librerías se actualizan?Temas legales
¿Realmente puedo utilizar esa librería?¿Para productos comerciales?
Cuidado con librerías GNU¿Está la librería bien mantenida?
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Herramientas de construcciónEditores de texto
vi, emacs, Visual Studio Code, Sublime,....Integrated Development Environments (IDEs)
Ejemplos: IntelliJ, EclipseConstructores de Graphical User Interface (GUI)
Android Studio UI Editor, QtEditor,... Herramientas para asegurar la calidad (QA)
Test, analysis, ...<Ver siguiente trasparencia>
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Herramientas para asegurar calidadPruebas
xUnit, marcos de pruebas (mocha)Lenguajes de aserciones (chai)Herramientas de cobertura
AsercionesPre-condiciones en métodos
Inspecciones y revisiones de códigoPull requests con revisiones de código
Herramientas de análisis de código<See next slide>
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Herramientas de análisis de códigoAnálisis estático vs dinámico
Sin ejecutar código/tras ejecutar códigoEjemplos: PMD, SonarCube,... (Codacy)
DepuradoresInteractivos vs estáticos, logging
ProfilersInformación sobre uso de recursos
Memoria, CPU, llamadas a métodos, etc.Herramientas cobertura de código
Informan qué líneas de código se han ejecutado en pruebas
Program slicingFragmento de programa (slice) que se ha ejecutado
Ejemplos: CodeSurfer, Indus-kaveri,...
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Control de versiones
DefinicionesAlmacén (repositorio): Lugar en el que se
almacenan los cambios.Baseline: Producto inicial en control de
versionesDelta: cambios de una versión respecto a la
anteriorTrunk: Tronco o rama principal de un
producto. Rama master en GitBranch (Rama): desviación de la rama
principalTag: Etiqueta de una línea de versiones
1
Baseline
4
Trunk
2
3Branchs
5
6
9
7
T1
T2
8
10
Tags merge
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Control de versiones
DefinicionesCheck-out: Copia local de trabajo de una
determinada rama o revisión.Commit: Comprometer los cambios locales
en el sistema de control de versiones.Merge (fusión) : Combinación de dos
conjuntos de cambios en uno.Estilos de ramificación: por característica, por
equipo, por versión
1
Baseline
4
Trunk
2
3Branchs
5
6
9
7
T1
T2
8
10
Tagsmerge
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Control de versiones2 tiposCentralizados
Repositorio centralizado de todo el códigoAdministración centralizadaCVS, Subversion, ...
DistribuidosCada usuario tiene su propio repositorioGit, Mercurial
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
GitSistema de control de versiones distribuidoDiseñado por Linus Torvalds (Linux)Objetivos:
Aplicaciones con gran nº de archivos de códigoTrabajo distribuidoApoyo a desarrollo no lineal (ramificaciones)
Más información:http://rogerdudler.github.com/git-guide/
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Componentes locales3 components locales:
Directorio trabajo localIndex (stage area). También llamada cacheHistorial del proeycto: Almacena versiones o commitsHEAD (versión más reciente)
HistorialcommitsProyecto
commitadd
rm
HEADDirectorio
Trabajolocal
Index/stage
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Repositorios remotos
Directoriotrabajo
local
HistorialCommits
Index/stage
Repositorioremotoorigin
push
clonefetchpull
commitadd
rm
Máquinalocal
HEAD
Conectar con repositorios remotosorigin = inicial
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Ramas (branches)Git facilita gestión ramas
Master/trunk = rama inicialOperaciones:
Crear ramas (branch)Cambiar rama (checkout)Combinar (merge)Etiquetar ramas (tag)
1
Baseline
4
Trunk
2
3Branchs
5
6
9
7
T1
T2
8
10
Tagsmerge
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Patrones de ramificaciónGit-flow
Rama develop como principalRamas por características y hotfix
Github-flowTodo en master es desplegableNo se necesita rama hotfixPromueve pull-requests
Trunk-based developmentTodo en rama principal (master)Ramificación por características
de poca duración (días)
masterdevelop hotfix-1feature-1feature-2
0.1
1.0
0.2
tags
Ramas
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Gestión de dependenciasLibrería: Colección de funcionalidades utilizadas
por el sistema que se desarrollaEl sistema depende de dicha librería
La librería puede depender de otras libreríasLa librería puede evolucionar
Versiones incompatiblesGrafo de dependencias
Grafo de dependencias de Mozilla FirefoxFuente: The purely functional deployment model. E. Dolstra (PhdThesis, 2006)
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Grafo de dependencias
Grafo G = (V,E) dondeV = vértices (componentes/paquetes)E = aristas (u,v) que indican que u depende de v
Métrica CCD (cumulative component dependency)
Suma de dependencias de todos los componentesCada componente depende de sí mismo
A
B C
D E G
En ejemplo:CCD=7+3+4+1+1+1+1=18
F
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Principio de Dependencias cíclicasEl grafo de dependencias no debería tener ciclos
Añadir un ciclo puede hacer crecer la CCDEjemplo:
CCD = 7+7+7+1+7+1+1=31
A
B C
D E GF
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Gestión de dependenciasModelos
Instalación local: las librerías se instalan para todo el sistema.Ejemplo: Ruby Gems
Incluir solamente en proyecto (control de versiones)Garantiza versión adecuada
Enlace externoRepositorio con libreríasDependencia de Internet y evolución de la librería
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Automatización de construcción
Herramientas de automatización de la construcción y el despliegueOrganizar las diferentes tareas
Compilar, empaquetar, instalar, desplegar, etc.Dependencias entre tareasDeben garantizar:
Ejecutar todos los prerrequisitosEjecutarlos una sola vez
Inicializar
Preparar datos
de prueba
Compilarcódigofuente
Compilarcódigoprueba
Ejecutar pruebas
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Automatización de la construcciónAtributos de calidad:
CorrecciónEvitar errores comunes (minimizar "bad builds")Eliminar tareas redundantes o repetitivas
Simplicidad: Gestionar complejidadAutomatización y facilidad de publicación
Disponer de histórico de releases y construccionesIntegración continua
CosteAhorrar tiempo y dinero
"Nunca envíes a un humano a realizar el trabajo de una máquina"G. Hohpe
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
¿Cuándo construir?Bajo demanda
Usuario lanza un script en línea de commandosPlanificada
Automáticamente en ciertas horasEjemplo: nightly builds
TriggeredCada commit al Sistema control de versionsServidor de integración continua enlazado con
Sistema de control de versiones
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
HerramientasMakefile (C world)Ant (Java)Maven (Java)SBT (Scala, JVM languages)Gradle (Groovy, JVM languages)rake (Ruby)npm, grunt, gulp (Javascript)etc.
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Automatización de construcción
make: Incluido en UnixOrientado a productoLenguaje declarativo basado en reglas
Cuando el proyecto es complejo, los ficheros de configuración pueden ser difíciles de depurar
Varias versiones: BSD, GNU, MicrosoftMuy popular en C, C++, etc.
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Automatización de construcciónant: Plataforma Java
Orientado a tareasSintaxis XML (build.xml)
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Automatización de construcciónmaven: Plataforma Java
Convención sobre configuraciónGestionar ciclo de vida del proyectoGestión de dependencias
Descarga automática y almacenamiento localSintaxis XML (pom.xml)
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Automatización de construcciónLenguajes empotrados
Lenguajes específicos empotrados en lenguajes interpretados de alto nivel
Gran versatilidadEjemplos: gradle (Groovy)sbt (Scala)rake (Ruby)Buildr (Ruby)…
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Nuevas herramientasPants (Foursquare, twitter)
https://pantsbuild.github.io/Bazel (Google)
http://bazel.io/Buck (Facebook)
https://buckbuild.com/
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Maven
Herramienta de automatización de construcciónDescribe cómo construir el softwareDescribe dependencias del softwarePrincipio: Convención sobre configuración
Jason van ZylCreador Maven
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
MavenFases típicas de construcción:
clean, compile, build, test, package, install, deploy
Idenfiticación de módulo3 coordenadas: Grupo, Artefacto, VersiónDependencias entre módulos
Configuración: fichero XML (Project Object Model)pom.xml
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
MavenAlmacenes de artefactos
Guardan diferentes tipo de artefactosFicheros JAR, EAR, WAR, ZIP, plugins, etc.
Todas las interacciones a través del repositorioSin caminos relativosCompartir módulos entre equipos de desarrollo
Local ArtifactRepository
RemoteArtifact
Repository
<usuario>/.m2/repository Maven Central
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Maven Central
Repositorio público de proyectosMás de 1 mill de GAV≈ 3000 proyectos nuevos cada mes (GA)≈ 30000 versiones nuevas al mes (GAV)*
http://search.maven.org/
* Fuente: http://takari.github.io/javaone2015/still-rocking-it-maven.html
Otros repositorios:https://bintray.com/
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
POM - Project Object ModelSintaxis XMLDescribe un proyecto
Nombre y versiónTipo de artefacto (jar, pom, ...)Localización del código fuenteDependenciasPluginsProfiles
Configuraciones alternativas para la construcciónEstructura basada en herenciaReferencia: https://maven.apache.org/pom.html
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
POM - Project Object ModelEstructura basada en herencia
Super POMPOM por defecto de MavenTodos los POM extiende el Super POM salvo que se
indique de formaexplícitaparent
Declara el POM padreSe combinan las dependencias y propiedades
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
MavenIdentificación de proyecto
GAV (Grupo, artefacto, versión)Grupo: Identificador de agrupamientoArtefacto: Nombre del proyectoVersión: Formato {Mayor}.{Menor}.{Mantenimiento}
Se puede añadir "-SNAPSHOT" (en desarrollo)
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>es.uniovi.asw</groupId><artifactId>censusesN</artifactId><version>0.0.1</version><name>censusesN</name>...
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Maven
Estructura de directoriosMaven utiliza una estructura convencional
src/mainsrc/main/javasrc/main/webappsrc/main/resourcessrc/test/src/test/javasrc/test/resources. . .
Directorio de salida: target
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
MavenCiclo de vida
3 ciclos de vida por defectocleandefaultsite
Cada ciclo de vida tiene sus fases
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Ciclo de vida "clean"Borrar código compilado3 fases
pre-cleancleanpost-clean
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Ciclo de vida "default"
Compilación y empaquetado de códigoAlgunas fases validate
initializegenerate-sourcesgenerate-resourcescompiletest-compiletestpackageintegration-testverifyinstalldeploy
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Ciclo de vida "site"Generar documentación proyecto
pre-sitesitepost-sitesite-deploy
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
MavenGestión automática de dependencias
Identificación mediante GAVÁmbito compile testprovide
Tipojar, pom, war,...
<project>...<dependencies>
<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope>
</dependency>. . .
</dependencies></project>
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
MavenGestión automática de dependencias
Las dependencias son descargadas Alojadas en repositorio local Pueden crearse repositorios intermedios (proxies)
Ejemplo: artefactos comunes de una empresaTransititivdad
B depende de CA depende de B ⇒ C también se descarga
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
MavenMúltiples módulosProyectos grandes pueden descomponerseCada proyecto crea un artefacto
Tiene su propio fichero pom.xmlEl proyecto padre agrupa los módulos
<project>...<packaging>pom</packaging><modules>
<module>extract</module><module>game</module>
</modules></project>
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Maven Plugins
Maven tiene una arquitectura basada en plugins2 tipos de plugins
BuildSe identifican en <build/>
ReportingSe identifican en <reporting/>
Lista de plugins: https://maven.apache.org/plugins/index.html
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
MavenAlgunas fases habituales
archetype:generate - Genera esqueleto de un proyectoeclipse:eclipse - Genera proyecto eclipsesite - Genera sitio web del proyectosite:run - Genera sitio web y arranca servidorjavadoc:javadoc - Generar documentacióncobertura:cobertura - Informe del código ejecutado en pruebascheckstyle:checkstyle - Chequear el estilo de codificación
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
npmNode.js Package ManagerCreado inicialmente por Isaac Schlueter
Posteriormente, empresa Npm inc.Gestor de paquetes por defecto de NodeJs
Otro gestor para NodeJs: YarnGestiona las dependenciasPermite scripts para tareas comunes
Almacén de softwarePaquetes públicos o de pago
Fichero de configuración: package.json
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Configuración npm: package.jsonFichero configuración: package.json
npm init crea un esqueleto inicialCampos: {
"name": "...obligatorio...","version": "...obligatorio...","description": "...opcional...","keywords": "...","repository": {... },"author": "...","license": "...","bugs": {...},"homepage": "http://. . .","main": "index.js","devDependencies": { ... },"dependencies": { ... }"scripts": { "test": " ... " },"bin": {...},
}
Nota: Yeoman proporciona esqueletos completos
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Paquetes npmBase de datos: http://npmjs.orgInstalación de paquetes:
2 opciones:Localnpm install <packageName> --save (--save-dev)
Globalnpm install -g <packageName>
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Dependencias npmGestión de dependencias
Paquetes locales en caché, directorio: node_modulesAcceso a módulos mediante: require('...')
Paquetes globales (instalados con opción --global)Cacheados en: ~/.npm folder
Paquetes con ámbito marcados con @
Arquitectura del SoftwareE
scu
ela
de
Inge
nie
ría
Info
rmát
ica
Un
iver
sid
ad d
e O
vied
o
Comandos y scripts npmNpm contiene numerosos comandos
start ≈ node server.jstest ≈ node server.jsls: muestra lista de paquetes instalados...
Scripts creados por el usuario: run-script <name>Definidos en sección "scripts"
Para gestionar tareas más complejasgulp, grunt
https://docs.npmjs.com/cli-documentation/