© Manuel ColladoVersiones-1 Control de versiones, configuración y cambios VCS: Version Control System SCM: Software Configuration Management CMS: Configuration Management System
© Manuel ColladoVersiones-2 Contenido n Evolución del software n Control de versiones n Control de configuración n Control de cambios n Repositorio. Almacenamiento eficiente n Ejemplos de herramientas
© Manuel ColladoVersiones-3 Evolución del software n Durante el desarrollo l El desarrollo del software siempre es progresivo, incluso en el ciclo de vida en cascada l El desarrollo evolutivo consiste, precisamente, en una evolución controlada (ciclo de vida espiral, prototipos evolutivos) n Durante la explotación l Durante la fase de mantenimiento se realizan modificaciones sucesivas del producto
© Manuel ColladoVersiones-4 Control de versiones n Motivo: evolución l El software cambia con el tiempo l Es necesario controlar esta evolución l Suele ser necesario recuperar versiones antiguas n Concepto de versión (revisión) l Forma particular que adopta un objeto en un contexto dado l Desde el punto de vista de evolución, es la forma particular de un objeto en un instante dado. Se suele denominar "revisión"
© Manuel ColladoVersiones-5 Control de configuración n Concepto de configuración l Un sistema software comprende distintos componentes, que evolucionan individualmente l Hay que garantizar la consistencia del conjunto del sistema l Una 'configuración' es una combinación de versiones particulares de los componentes que forman un sistema consistente l Desde el punto de vista de evolución, es el conjunto de las versiones de los objetos componentes en un instante dado
© Manuel ColladoVersiones-6 Control de cambios n Línea base l Denominaremos así a una configuración operativa del sistema software l La evolución del sistema puede verse como evolución de la línea base n Concepto de cambio l Es el paso de una versión de la línea base a la siguiente l Puede incluir modificaciones del contenido de algún componente l Puede incluir modificaciones de la estructura del sistema, añadiendo o eliminando componentes
© Manuel ColladoVersiones-7 Variantes n Configuraciones alternativas l Un sistema software puede adoptar distintas formas (configuraciones) dependiendo del lugar donde se instale. Por ejemplo, dependiendo de la plataforma (máquina + S.O.) que la soporta, o de las funciones opcionales que haya de realizar o no l Una variante es una versión de un componente (o de la configuración global) que evoluciona por separado l Las variantes representan una variación espacial, mientras que las revisiones representan una variación temporal
© Manuel ColladoVersiones-8 Repositorio n Almacenamiento de versiones l Es habitual centralizar el almacenamiento de los componentes de un mismo sistema, incluyendo las distintas versiones de cada componente. Este almacén común se denomina REPOSITORIO l El repositorio permite ahorrar espacio de almacenamiento, evitando guardar por duplicado elementos comunes a varias versiones o configuraciones l El repositorio facilita el almacenar información de la evolución del sistema (historia), y no sólo de los componentes en sí l A veces se confunde el término 'repositorio' con el de 'línea base'
© Manuel ColladoVersiones Grafo de evolución n Revisiones sucesivas de un componente
© Manuel ColladoVersiones TRONCO: Variante principal, p.ej RAMAS: Variantes secundarias, p.ej: , DELTA: Cambios de una revisión respecto a la anterior Delta 3.2 = (3.1 3.2) Variantes
© Manuel ColladoVersiones = = “Diff-Merge”: Propagación de cambios
© Manuel ColladoVersiones Igual que propagación de cambios (o bien, no hay que hacer nada especial) Fusión de variantes
© Manuel ColladoVersiones Técnicas de almacenamiento n Deltas directos
© Manuel ColladoVersiones Técnicas de almacenamiento n Deltas inversos (RCS)
© Manuel ColladoVersiones-15 x x x x x <<1.3,1.2 y y >> <<1.2 z z z >> x x x x x <<1.3 t t t >> x x x x x Técnicas de almacenamiento n Marcado selectivo (SCCS)
© Manuel ColladoVersiones-16 Control de configuración n Evolución de un sistema l Añadir componentes l Suprimir componentes l Modificar componentes n Evolución temporal (revisiones) l Cambio a lo largo del tiempo n Evolución espacial (variantes) l Versiones simultáneas
© Manuel ColladoVersiones-17 Ejemplo de evolución de configuración
© Manuel ColladoVersiones-18 Problema de coherencia de versiones A1 A2 B2 B1 C1 C2 D2 D1 E1 Rev. 1 Rev. 2 Rev. 3 Rev. 4
© Manuel ColladoVersiones-19 Problema de coherencia de versiones A1Rev. 1 Rev. 2 Rev. 3 Rev. 4 A2 A1 B2 B1C1 C2 D1 D2
© Manuel ColladoVersiones-20 Modelo ortogonal de versiones ABCDE componentes revisiones X Y Z variantes Ejemplo de nombrado uniforme: B-X-3 B 1.2
© Manuel ColladoVersiones-21 Técnicas de nombres en configuraciones n Traducción externa l Usar un control de versiones, añadiendo el mecanismo adecuado para nombrar globalmente las versiones de componentes de una configuración dada n Nombres simbólicos (“tags”) l Usados por RCS. Una misma versión de un componente puede tener varios nombres o tags (p.ej: “Linux 2.0”, “Linux 2.1”, “Win2K 1.0”...) n Versiones de directorios l Ejemplos: CVS, ClearCase. La configuración se organiza mediante una jerarquía de directorios, cuyo contenido evoluciona
© Manuel ColladoVersiones-22 A1B1C1D1E1 A2B2 Cambio 1 Cambio 2 Línea base Desarrollo mediante cambios sucesivos n Evolución de la línea base
© Manuel ColladoVersiones-23 A1B1C1D1E1 A2B2 Cambio 1 Cambio 2 Línea base Desarrollo mediante cambios sucesivos n Evolución de la línea base
© Manuel ColladoVersiones-24 Desarrollo mediante cambios sucesivos n Evolución de la línea base A1B1C1D1E1 A2B2 Cambio 1 Cambio 2 Línea base DE3F3 Cambio 3
© Manuel ColladoVersiones-25 Desarrollo mediante cambios sucesivos n Evolución de la línea base A1B1C1D1E1 A2B2 E3F3 Cambio 1 Cambio 2 Línea base Cambio 3
© Manuel ColladoVersiones-26 Desarrollo simultáneo de cambios n Cambios 2 y 3 en desarrollo Cambio 1 Cambio 2 Línea base A1B1C1D1E1 A2B2DE3F3 Cambio 3
© Manuel ColladoVersiones-27 Desarrollo simultáneo de cambios n Cambio 2 integrado Cambio 1 Cambio 2 Línea base A1B1C1D1E1 A2B2 DE3F3 Cambio 3
© Manuel ColladoVersiones-28 Desarrollo simultáneo de cambios n Cambio 3 actualizado Cambio 1 Cambio 2 Línea base A1B1C1D1E1 A2B2 DE3F3 Cambio 3
© Manuel ColladoVersiones-29 Desarrollo simultáneo de cambios n Cambio 3 integrado Cambio 1 Cambio 2 Línea base A1B1C1D1E1 A2B2 E3F3 Cambio 3
© Manuel ColladoVersiones-30 Cambios simultáneos de un componente n Cambios 2 y 3 en desarrollo Cambio 1 Cambio 2 Línea base A1B1C1D1E1A2B2D3E3F3 Cambio 3 D2
© Manuel ColladoVersiones-31 Cambios simultáneos de un componente n Cambio 2 integrado Cambio 1 Cambio 2 Línea base A1B1C1D1E1 A2B2 D3E3F3 Cambio 3 D2
© Manuel ColladoVersiones-32 Cambios simultáneos de un componente n Cambio 3 actualizado D3’ = D3 + D2 - D1 Cambio 1 Cambio 2 Línea base A1B1C1D1E1 A2B2 D3’E3F3 Cambio 3 D2
© Manuel ColladoVersiones-33 Cambios simultáneos de un componente n Cambio 3 integrado Cambio 1 Cambio 2 Línea base A1B1C1D1E1 A2B2 E3F3 Cambio 3 D2 D3’
© Manuel ColladoVersiones-34 Ejemplos de herramientas n SCCS (Source Code Control System) l Control básico de versiones, original de UNIX n RCS (Revision Control System) l Herramienta similar, GNU n CVS (Concurrent Version System) l Control de configuración, cambios simultáneos n Subversion l Similar a la anterior, más moderna n Gnuarch, etc.
© Manuel ColladoVersiones-35 fichero,v fichero RORW co -lco ci rlog Control de versiones: herramienta RCS
© Manuel ColladoVersiones-36 Control de configuración: herramienta CVS CVSROOT add remove checkout commit (update) edit abort
© Manuel ColladoVersiones-37 Ciclo de vida de cambios: Aegis Esperando desarrollo En integración Completado En desarrollo Anular En revisión Esperando integración Nuevo cambio Inicio desarrollo Fin desarrollo Revisión aceptada Rechazo Integración aceptada
© Manuel ColladoVersiones-38 Control de cambios: herramienta Aegis Directorio decambio Directorio decambio Directorio de integración Directorio de línea base Repositorio (historia)