Ingeniería de Software II

Documentos relacionados
Gestión de la Configuración (SCM) Introducción a la Ingeniería de Software

Manejo de versiones 392

INGENIERÍA DE SOFTWARE ADMINISTRACION DE CONFIGURACIONES Rubby Casallas, Juan Pablo Quiroga, Andrés Yie

Gestión de la configuración en el software (SCM) Ingeniería de software Eduardo Ferreira, Martín Solari

Elementos requeridos para crearlos (ejemplo: el compilador)

Enginyeria del Software III ( ) CONTROL DE VERSIONES CON SUBVERSION. Roberto García Despatx EPS 3.15

Proceso Unificado de Rational PROCESO UNIFICADO DE RATIONAL (RUP) El proceso de desarrollo de software tiene cuatro roles importantes:

Estándares para planes de calidad de software. Escuela de Ingeniería de Sistemas y Computación Desarrollo de Software II Agosto Diciembre 2008

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología

GIT Dinahosting 3. Hola!

MANUAL COPIAS DE SEGURIDAD

La tortuga y los documentos: Tortoise + Subversion

3. GESTIÓN DE CONFIGURACIÓN DE SOFTWARE

Baires. Design - Test - Automate

Capítulo 4. Requisitos del modelo para la mejora de la calidad de código fuente

REPOSITORIOS. Ing. Ismael Castañeda Fuentes, MSc Grupo de Investigación UNBD Universidad Nacional de Colombia Marzo de 2011

+ Cómo ahorrar dinero con Software Quality

Gestión de la Configuración

Plan de estudios ISTQB: Nivel Fundamentos

Resumen ÁREA DE FACTURACIÓN::INFORMES::Pedidos Detalle Resumen ÁREA DE

K2BIM Plan de Investigación - Comparación de herramientas para la parametrización asistida de ERP Versión 1.2

GSA-P-14 CONTROL DE CALIDAD EN PROYECTOS ARCHIVÍSTICOS

**NOTA** las partes tachadas todavía no están escritas, se ira actualizando poco a poco el documento

AHORRACOM SOLUCIONES AVANZADAS S.L. Avda. de la Industria 13, Oficina Alcobendas, Madrid.

SCGDoc. SisConGes & Estrategia

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE

Jornadas de Introducción a la Ingeniería + Trabajo en Grupo = Herramientas de Gestion de Proyectos Software

Técnicas de prueba 1. FUNDAMENTOS DE LA PRUEBA DEL SOFTWARE

CONTRATAS Y SUBCONTRATAS NOTAS

SISTEMA CONTABLE PROMETEO

GUÍA DE USUARIO: GOOGLE DRIVE

Empresa Financiera Herramientas de SW Servicios

Norma ISO 9001:2015. Cuáles son los cambios presentados en la actualización de la Norma?

Unidad VI: Supervisión y Revisión del proyecto

PRU. Fundamento Institucional. Objetivos. Alcance

1. Que es un nombre de dominio? Es un conjunto de caracteres alfanuméricos utilizados para identificar una computadora determinada en Internet.

Metodología básica de gestión de proyectos. Octubre de 2003

Gestión de Configuración del Software

Introducción a los sitios de SharePoint en Office 365

Cómo ingresar a la Sucursal Electrónica?

Mantenimiento de Sistemas de Información

Marco Normativo de IT

M ucho se ha especulado en relación a los

Informática 1 Grado en Matemáticas

Transacciones y bloqueos en SQL-Server

COPPEL MANUAL TÉCNICO MCC DE SISTEMAS PROGRAMACIÓN DESCRIPCIÓN DEL PROCESO DE ARQUITECTURA DE SOFTWARE

Gestión y Desarrollo de Requisitos en Proyectos Software

Ciclo De Vida Software

CAPÍTULO 4. FORMA DE EVALUACIÓN CMM. 4.1 Evolución de los métodos de valoración del SEI

CASO PRÁCTICO Nº OBJETIVO 2. TEMAS A DESARROLLAR

Tema 12 Control de versiones

Creación de Funciones de Conducción

IAP ENTORNOS INFORMATIZADOS CON SISTEMAS DE BASES DE DATOS

Desarrollo de Sage Como modificar y mejorar el programa. Miguel Angel Marco Buzunariz Jarandilla de la Vera 1 de Junio de 2014

MANTENIMIENTO Y SOPORTE

RUP: Disciplina de Manejo de Cambios y Configuraciones

Administración de proyectos. Organizar, planificar y programar los proyectos de software

Índice 1 Instalación de la herramienta 2 Descripción de la herramienta 2 Arranque de la aplicación 3 Proyecto 4 Diagrama de clases 5

Caso práctico de Cuadro de Mando con Tablas Dinámicas

REGISTRO DE PEDIDOS DE CLIENTES MÓDULO DE TOMA DE PEDIDOS E INTEGRACIÓN CON ERP

DESARROLLO DE SOFTWARE DEFINICIÓN GENERAL DEL PROCESO GABY LORENA GUERRERO LEYDI ROCIO ERAZO PABLO FELIPE MIRANDA WALTER ALEXIS ANTE

Oracle vs Oracle por Rodolfo Yglesias Setiembre 2008

CASO PRÁCTICO Nº OBJETIVO 2. TEMAS A DESARROLLAR

Dividir automáticamente las palabras en todo un documento

INDICACIONES AL PROYECTO DE LEY

Configuración de Software

Pruebas de software la salvación, un proceso sin utilidad, trivial, simplemente una moda, o...?

Seminario Profesional MS PROJECT MODULO 2: Introducción y organización de las tareas

Introducción a LinoIt Breve guía sobre algunas de sus funcionalidades destacables.

Plataforma e-ducativa Aragonesa. Manual de Administración. Bitácora

Tema 8: Gestión de la Configuración

CVS Concurrent Versions System Manual de Usuario

Conoce los Tipos de Hosting que Existen y Elige el Mejor para tus Necesidades

APLICACIÓN PERFIL DE CONTRATANTE. MANUAL NUEVAS FUNCIONALIDADES: CORRECCIÓN DE ERRORES Y COPIAR

K2BIM Informe Final de Configuración Versión 1.0

PRUEBAS, CALIDAD Y MANTENIMIENTO DEL SOFTWARE

GUIA APLICACIÓN DE SOLICITUDES POR INTERNET. Gestión de Cursos, Certificados de Aptitud Profesional y Tarjetas de Cualificación de Conductores ÍNDICE

GeneXus BPM Suite X. Última actualización: 01 de Setiembre de 2008

Diseño orientado al flujo de datos

Roles y Características

Manual DE CONFIGURACIÓN PARA EL MANEJO DEL COMPROBANTE FISCAL DIGITAL A T R A V É S D E I N T E R N E T

INSTALACIÓN DE ORACLE 8i (8.1.7) SOBRE NT

Accede a su DISCO Virtual del mismo modo como lo Hace a su disco duro, a través de:

Gestión de Oportunidades

Project Online Introducción La voz del cliente Qué es Project Online? Características del producto

MANTENIMIENTO DEL ORDENADOR. Ponente: Javier Paricio Rodríguez

Estampador de la industria automotriz reemplaza seis sistemas independientes con un ERP completo basado en la nube

comunidades de práctica

Servicio de groupware

1.1 Aseguramiento de la calidad del software

PowerPoint 2010 Modificar el diseño de las diapositivas

Lista de la Verificación de la Gestión de la Seguridad y Salud Ocupacional 1

Tutorial: Primeros Pasos con Subversion

La Dirección Comercial

LiLa Portal Guía para profesores

SISTEMA ETAP en línea Estándares Tecnológicos para la Administración Pública

Transcripción:

Ingeniería de Software II Primer Cuatrimestre de 2009 Clase 17 - Patrones y Líneas de Cambio en SCM Buenos Aires, 1 de Junio de 2009

Línea de Cambio y sus Componentes Definición: Un codeline es la progresión del conjunto de archivos de código y otros artefactos que comprenden un producto de software a medida que este cambia a lo largo del tiempo. Cada vez que cambie un archivo, se crea una revisión en el sistema de control de versiones. Un codeline contiene todas las versiones de cada artefacto en un camino evolutivo.

Workspace poblado desde multiples líneas de cambio

Branching de un archivo y merge con el Trunk

Branching de una nueva linea de código

Diagramas de Línea de Código y Branching Start of Codeline Version Change task Branch / Merge Policy Label

Diagrama de Notación de Líneas de Código

PATRONES

Relación entre los Patrones Workspace-related patterns Codeline-related patterns

Workspace-related patterns PRIVATE WORKSPACE (6) REPOSITORY (7) PRIVATE SYSTEM BUILD (8) INTEGRATION BUILD (9) TASK LEVEL COMMIT (11) SMOKE TEST (13) UNIT TEST (14) REGRESSION TEST (15) THIRD PARTY CODELINE (10)

Codeline-related patterns MAINLINE (4) ACTIVE DEVELOPMENT LINE (5) CODELINE POLICY (12) PRIVATE VERSIONS (16) RELEASE LINE (17) RELEASE-PREP CODE LINE (18) TASK BRANCH (19)

WORKSPACE RELATED PATTERNS

Pattern language for Workspace-related patterns Private Worspace (6) Repository (7) Integration Build (8) Private System Build (8) Task Level Commit (11) Smoke Test (13) Unit Test (14) Regression Test (13)

Private Worspace (6) Propósito: poder modificar el código sin afectar el trabajo de otros, y poder gestionar la frecuencia en la cual el cambio de otros nos afecta a nosotros. El desarrollo en un entorno colaborativo implica: Escribir y probar mis modificaciones al código. Integrar mi código con el trabajo hecho por otros miembros del equipo. Integración continua vs integración deferida

Private Worspace (6) propuesta Utilizar un área privada (workspace) para controlar las versiones que son vinculadas con tu trabajo. De este modo uno tiene control sobre cuándo y cómo cambia el entorno. Actualizar el workspace Hacer cambios vinculados con mi actividad Hacer un Private System Build (8) Probar los cambios con Unit Test (14) Actualizar el workspace a la última versión de los componentes que uno no ha cambiado. Rebuild. Ejecutar un Smoke Test (13)

Repository (7) Propósito: tener un único punto de acceso para nuestros artefactos y hacer simple para el desarrollador poblar su Workspace a partir de los componentes correctos. El mecanismo para crear el private workspace debe ser repetible. Debe ser posible poblar el private workspace desde cualquier revisión.

Poblado del WS desde el repositorio Debemos poder reproducir cualquier revision Tener un único punto de acceso, o un repositorio, para el código y los artefactos relacionados. Hacer de la creación del workspace por parte del desarrollador, tan simple y transparente como sea posible.

Task Level Commit (11) Propósito: conservar consistencia entre revision history y las tareas de los desarrolladores. Identificar el nivel de tarea que queremos seguir (transacción). Tradeoff entre rollback tarea y overhead checkin. Una tarea puede ser: Problem report. Changing calls sobre un método deprecado. Refactoring. Un requerimiento de nueva funcionalidad.

CODELINE RELATED PATTERNS

Mainline (4) Propósito: mantener la cantidad de codelines activo en un numero manejable e impedir que el árbol de versiones se vuelva excesivamente ancho y muy denso. Un branch es una configuración del sistema que es derivado desde, y desarrollado independientemente de la configuración base Deseo aislar mis cambios del resto del equipo Tradeoff con el costo de integración (merge)

Merge desde multiples fuentes

Branching en cascada Derivative model Promotional model

Mainline (4) - Consejos Balancear la libertad de hacer un branch con el costo que encontraremos al resincronizar. El mainline es el home codeline. Solo en situaciones excepcionales no lo usamos para nuestro desarrollo. Reducimos así los sub-branches y controlamos que el árbol no se haga demasiado ancho. Todo branch es un dead codeline o termina en un merge contra el mainline. Cuando llegue el momento de crear un nuevo release, armar el branch desde el mainline haciendo los merge que correspondan para permitir esto.

Mainline development

Mainline (4) - Resumen Ventajas Reducimos costos de merge y re-sincornización. El mainline provee clausura al traer todos los cambios que deben persistir hacia el conjunto global de trabajo en lugar de dejar los cambios esparcidos a lo largo del árbol de branching. Limitar branching a: Customer releases. Long-lived parallel efforts Integration

Active Development Line (5) Propósito: balancear estabilidad y progreso. Para contar con progreso como equipo, requerimos identificar puntos de sincronización. Cada sincronización produce demoras al conjunto del equipo. Cada sincronización es plausible de romper la estabilidad del codeline. El aislamiento y el cambio concurrente hacen que sea posible que aunque mi espacio sea estable, no lo sean mis cambios combinados con el que fue introducido un momento antes al codeline.

Tests de larga duración hechos de manera aislada Estable pero poco flexible codeline Activa pero inestable codeline

Active dev line (5) Aspectos a considerar sobre el balance de la línea activa: Quién usa el codeline? Cuál es el ciclo de release? Qué mecanismos de test tenemos? Cuál es la evolución esperada de la misma? Cuál es el costo de romper el codeline?

Active dev line (5) - resumen Comprenda el ritmo del proyecto. Recurring, predictable, exchange of work products Cuanto mas exhaustivo el test, mayor el tiempo pre check-in. Identificar la estabilidad real requerida Existe una gran diferencia entre un codeline cercano al release que uno con gran actividad de cambio

Codeline Policy (12) Propósito: establecer el propósito del codeline de modo de entender sobre qué codeline y cuándo se debe hacer el check-in, y qué actividades de test previas son requeridas. Cada codeline tiene un propósito y una estabilidad asociada. Los desarrolladores deben entender sobre cuál de ellas trabajar, Es requerido crear una nueva cuando aparecen actividades no contempladas que ponen en riesgo los codelines existentes.

Posibles políticas de codeline Mantenimiento Código que debe persistir en futuras versiones No tenemos control de cambio pero si de check-in

Codeline Policy (12) Definir reglas de juego: El tipo de trabajo encapsulado por el codeline: desarrollo, mantenimiento, clean-up Cómo y cuándo los elementos deberían ser incorporados (check-in), extraídos (check-out), branched y merged Restricciones de acceso para individuos, roles y grupos. Relaciones esperadas de Import/export: codelines desde las cuales se espera recibir cambios, y aquellas hacia las cuales debemos propagarlos. Duración o condiciones para retirar la línea de cambio. La carga esperada de actividades y frecuencia de integración.

Codeline Policy (12) Ejemplos Development line: cambios intermedios deben incorporarse (check-in); componentes afectados deben ser buildables Release codeline: el build debe pasar el test de regresion antes del check-in; check-in limitado a bug fixes; luego del check-in el branch es congelado hasta pasar QA activities Mainline: todos los componentes deben compilar, vincularse y pasar test regresivos; nuevas funciones completadas y testeadas deben incorporarse

Release line (17) Propósito: realizar mantenimiento sobre released versions sin interferir con la actividad de desarrollo. Una vez liberado el producto, este debe evolucionar independientemente del desarrollo del mismo. Es una necesidad corregir un bug sobre un producto liberado. Los tiempos de corrección de bug no son compatibles con los tiempos de desarrollo. La calidad de código de mantenimiento no es la misma que la calidad de las futuras versiones (mainline). Los bug fixes deben ser incorporados (merge) al mainline.

Realizar un branch antes del release Haciendo todo el trabajo sobre el mainline Creando un branch cuando liberamos

Release line (17) Separar mantenimiento/release y desarrollo activo en codelines independientes. Mantener un codeline de release por versión liberada que este bajo contrato de mantenimiento. Propague bug-fixes sobre el codeline padre en cascada hacia el mainline.

Considerar usar un release principal sobre el cual gestiono diferentes clientes Merge todo bug-fix sobre el mainline.

Release-Prep Code Line (18) Propósito: estabilizar el codeline de un inminente release mientras que permitimos que comience el desarrollo sobre el nuevo release. Antes que el release esté listo para ser entregado hay una gran cantidad de trabajo por hacer de último momento. Bug-fixes de último momento. Packaging Clean-up work Considerar el momento de hacer esto puesto que el trabajo de bux-fixing debe ser acotado debido al merge posterior requerido contra el mainline.

Release-Prep Code Line (18) En lugar de hacer el branch inmediatamente despues de release, branch antes del release. Esto evita el freeze sobre el active dev line Crear una linea separada para integracion y clean-up del release y permitir que la actividad de cambio continúe sobre la active dev line. Balancear el momento de hacer el release-prep codeline. Recordar que deberemos hacer merge sobre la mainline si son bug-fixes.

Previo al Release Line debemos preparar el active dev line para la entrega

Task Branch (19) Propósito: permitir que una parte del equipo realice múltiples cambios de largo plazo al codeline sin comprometer la integridad y consistencia del mainline. Algunos de los cambios no deben ser integrados al trabajo del resto del equipo hasta que no estén completos. Tareas de gran impacto global (refactoring) Tareas que deben ser compartidas solo por parte del equipo. Tareas de largo plazo.

Task Branch (19) Utilizar task branch para promover aislación: Reducir el riesgo de inestabilidad en tareas de larga data. Utilizar policy codeline para asegurar incorporar cambios del active dev line Utilizar policy para especificar los momentos de merge-back. Utilizar task branch para actividades de integración que preveemos serán complicadas

Task Branch Update from active dev line

Gracias