Contenido
Evolución del software
Control de versiones
Control de configuración
Control de cambios
Repositorio. Almacenamiento eficiente
Ejemplos de herramientas
Evolución del software
Durante el desarrollo
El desarrollo del software siempre es progresivo, incluso en el ciclo de vida en cascada
El desarrollo evolutivo consiste, precisamente, en una evolución controlada (ciclo de vida espiral, prototipos evolutivos)
Durante la explotación
Durante la fase de mantenimiento se realizan modificaciones sucesivas del producto
Control de versiones
Motivo: evolución
El software cambia con el tiempo, por diversas razones
Es necesario controlar esta evolución
Suele ser necesario recuperar versiones antiguas
Concepto de versión (revisión)
Versión es la Forma particular que adopta un objeto en un contexto dado
Desde el punto de vista de evolución, es la forma particular de un objeto en un instante dado. Se suele denominar revisión
Control de configuración
Concepto de configuración
Un sistema software comprende distintos componentes, que evolucionan individualmente
Hay que garantizar la consistencia del conjunto del sistema
Una configuración es una combinación de versiones particulares de los componentes que forman un sistema consistente
Desde el punto de vista de evolución, es el conjunto de las versiones de los objetos componentes en un instante dado
Control de cambios
Línea base
Llamaremos línea base a una configuración operativa del sistema software
La evolución del sistema puede verse como evolución de la línea base
Concepto de cambio
Un cambio es el paso de una versión de la línea base a la siguiente
Puede incluir modificaciones del contenido de algún componente, y/o modificaciones de la estructura del sistema, añadiendo o eliminando componentes
Variantes
Configuraciones alternativas
Un sistema software puede adoptar distintas formas (configuraciones) dependiendo del lugar donde se instale. Por ejemplo, dependiendo de la plataforma que la soporta (máquina + S.O.), o de las funciones opcionales que haya de realizar o no
Una variante es una versión de un componente (o de la configuración global) que evoluciona por separado
Las variantes representan una variación espacial, mientras que las revisiones representan una variación temporal
Repositorio
Almacenamiento de versiones
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
El repositorio permite ahorrar espacio de almacenamiento, evitando guardar por duplicado elementos comunes a varias versiones o configuraciones
El repositorio facilita el almacenar información de la evolución del sistema (historia), y no sólo de los componentes en sí
A veces se confunde el término 'repositorio' con el de 'línea base'
(Gp:) 1
(Gp:) 2
(Gp:) 3
(Gp:) 4
Grafo de evolución
Revisiones sucesivas de un componente
(Gp:) 1.1
(Gp:) 1.2
(Gp:) 1.3
(Gp:) 1.4
(Gp:) 2.1
(Gp:) 2.2
(Gp:) 2.3
(Gp:) 3.1
(Gp:) 3.2
(Gp:) 4.1
TRONCO: Variante principal, p.ej. 1.1-1.2…
RAMAS: Variantes secundarias, p.ej: 2.1…, 3.1…
DELTA: Cambios de una revisión respecto a la anterior
Delta 3.2 = (3.1 ® 3.2)
Variantes
(Gp:) 1.1
(Gp:) 1.2
(Gp:) 1.3
(Gp:) 1.4
(Gp:) 2.1
(Gp:) 2.2
(Gp:) 2.3
(Gp:) 3.1
(Gp:) 3.2
(Gp:) 1.5
(Gp:) 2.4
(Gp:) 3.3
2.4 = 2.3 + 1.5 – 1.4
3.3 = 3.2 + 1.5 – 1.4
Diff-Merge / Patch:
Propagación de cambios
(Gp:) 1.1
(Gp:) 1.2
(Gp:) 1.3
(Gp:) 1.4
(Gp:) 2.1
(Gp:) 2.2
(Gp:) 2.3
(Gp:) 3.1
(Gp:) 3.2
(Gp:) 4.1
(Gp:) 4.2
Igual que propagación de cambios:
(o bien de forma manual)
Fusión de variantes
4.1 = 3.2 + 2.3 – 2.3
(Gp:) 1.1
(Gp:) 1.2
(Gp:) 1.3
(Gp:) 1.4
(Gp:) 1.5
(Gp:) 2.1
(Gp:) 2.2
(Gp:) 1.2
(Gp:) 1.3
(Gp:) 1.4
(Gp:) 1.5
(Gp:) 2.1
(Gp:) 2.2
Técnicas de almacenamiento
Deltas directos
(Gp:) 1.2
(Gp:) 1.3
(Gp:) 1.4
(Gp:) 1.1
(Gp:) 2.1
(Gp:) 2.2
(Gp:) 1.2
(Gp:) 1.3
(Gp:) 1.4
(Gp:) 1.1
(Gp:) 2.1
(Gp:) 2.2
(Gp:) 1.5
Técnicas de almacenamiento
Deltas inversos (RCS)
x x x x x
x x x x x
x x x x x
x x x x x
x x x x x
Técnicas de almacenamiento
Marcado selectivo (SCCS)
Control de configuración
Evolución de un sistema
Añadir componentes
Suprimir componentes
Modificar componentes
Evolución temporal (revisiones)
Evolución espacial (variantes)
Ejemplo de evolución de configuración
(Gp:) A
(Gp:) A
(Gp:) A
(Gp:) A
(Gp:) B
(Gp:) B
(Gp:) B
(Gp:) C
(Gp:) C
(Gp:) C
(Gp:) C
(Gp:) D
(Gp:) D
(Gp:) D
(Gp:) E
(Gp:) Rev. 1
(Gp:) Rev. 2
(Gp:) Rev. 3
(Gp:) Rev. 4
Problema de coherencia de versiones
A1
A2
B2
B1
C1
C2
D2
D1
E1
Rev. 1
Rev. 2
Rev. 3
Rev. 4
Problema de coherencia de versiones
(Gp:) A1
Rev. 1
Rev. 2
Rev. 3
Rev. 4
(Gp:) A2
(Gp:) A2
(Gp:) A1
(Gp:) B2
(Gp:) B2
(Gp:) B1
(Gp:) C1
(Gp:) C1
(Gp:) C1
(Gp:) C2
(Gp:) D1
(Gp:) D2
(Gp:) D2
(Gp:) D2
Modelo ortogonal de versiones
(Gp:) A
(Gp:) B
(Gp:) C
(Gp:) D
(Gp:) E
(Gp:) componentes
(Gp:) 1
(Gp:) 2
(Gp:) 3
(Gp:) 4
(Gp:) revisiones
(Gp:) X
(Gp:) Y
(Gp:) Z
(Gp:) variantes
? Ejemplo de nombrado uniforme: B-X-3 ? B 1.2
?1.2
1.1
1.1
1.2
1.1
2.1
2.2
2.3
1.1
1.1
1.1
1.3
Técnicas de nombres en configuraciones
Control de configuración ?
control de versiones + nombrado global
Nombres simbólicos o tags
Usados por RCS. Una versión de un componente puede tener varios nombres lógicos (p.ej: Linux 2.0, Linux 2.1, Win2K 1.0 …)
Versiones de directorios
Ejemplos: CVS, ClearCase. La configuración se organiza mediante una jerarquía de directorios, cuyo contenido evoluciona
Desarrollo mediante cambios sucesivos
Evolución de la línea base
(Gp:) A1
(Gp:) B1
(Gp:) C1
(Gp:) D1
(Gp:) E1
(Gp:) A2
(Gp:) B2
(Gp:) Cambio 1
(Gp:) Cambio 2
(Gp:) Línea base
Desarrollo mediante cambios sucesivos
Evolución de la línea base
(Gp:) A1
(Gp:) B1
(Gp:) C1
(Gp:) D1
(Gp:) E1
(Gp:) A2
(Gp:) B2
(Gp:) Cambio 1
(Gp:) Cambio 2
(Gp:) Línea base
Desarrollo mediante cambios sucesivos
Evolución de la línea base
(Gp:) A1
(Gp:) B1
(Gp:) C1
(Gp:) D1
(Gp:) E1
(Gp:) A2
(Gp:) B2
(Gp:) Cambio 1
(Gp:) Cambio 2
(Gp:) Línea base
(Gp:) D
(Gp:) E3
(Gp:) F3
(Gp:) Cambio 3
Desarrollo mediante cambios sucesivos
Evolución de la línea base
(Gp:) A1
(Gp:) B1
(Gp:) C1
(Gp:) D1
(Gp:) E1
(Gp:) A2
(Gp:) B2
(Gp:) E3
(Gp:) F3
(Gp:) Cambio 1
(Gp:) Cambio 2
(Gp:) Línea base
(Gp:) Cambio 3
Desarrollo simultáneo de cambios
Cambios 2 y 3 en desarrollo
(Gp:) Cambio 1
(Gp:) Cambio 2
(Gp:) Línea base
(Gp:) A1
(Gp:) B1
(Gp:) C1
(Gp:) D1
(Gp:) E1
(Gp:) A2
(Gp:) B2
(Gp:) D
(Gp:) E3
(Gp:) F3
(Gp:) Cambio 3
Desarrollo simultáneo de cambios
Cambio 2 integrado
(Gp:) Cambio 1
(Gp:) Cambio 2
(Gp:) Línea base
(Gp:) A1
(Gp:) B1
(Gp:) C1
(Gp:) D1
(Gp:) E1
(Gp:) A2
(Gp:) B2
(Gp:) D
(Gp:) E3
(Gp:) F3
(Gp:) Cambio 3
Desarrollo simultáneo de cambios
Cambio 3 actualizado
(Gp:) Cambio 1
(Gp:) Cambio 2
(Gp:) Línea base
(Gp:) A1
(Gp:) B1
(Gp:) C1
(Gp:) D1
(Gp:) E1
(Gp:) A2
(Gp:) B2
(Gp:) D
(Gp:) E3
(Gp:) F3
(Gp:) Cambio 3
Desarrollo simultáneo de cambios
Cambio 3 integrado
(Gp:) Cambio 1
(Gp:) Cambio 2
(Gp:) Línea base
(Gp:) A1
(Gp:) B1
(Gp:) C1
(Gp:) D1
(Gp:) E1
(Gp:) A2
(Gp:) B2
(Gp:) E3
(Gp:) F3
(Gp:) Cambio 3
Cambios simultáneos de un componente
Cambios 2 y 3 en desarrollo
(Gp:) Cambio 1
(Gp:) Cambio 2
(Gp:) Línea base
(Gp:) A1
(Gp:) B1
(Gp:) C1
(Gp:) D1
(Gp:) E1
(Gp:) A2
(Gp:) B2
(Gp:) D3
(Gp:) E3
(Gp:) F3
(Gp:) Cambio 3
(Gp:) D2
Cambios simultáneos de un componente
Cambio 2 integrado
(Gp:) Cambio 1
(Gp:) Cambio 2
(Gp:) Línea base
(Gp:) A1
(Gp:) B1
(Gp:) C1
(Gp:) D1
(Gp:) E1
(Gp:) A2
(Gp:) B2
(Gp:) D3
(Gp:) E3
(Gp:) F3
(Gp:) Cambio 3
(Gp:) D2
Cambios simultáneos de un componente
Cambio 3 actualizado
(Gp:) D3 = D3 + D2 – D1
(Gp:) Cambio 1
(Gp:) Cambio 2
(Gp:) Línea base
(Gp:) A1
(Gp:) B1
(Gp:) C1
(Gp:) D1
(Gp:) E1
(Gp:) A2
(Gp:) B2
(Gp:) D3
(Gp:) E3
(Gp:) F3
(Gp:) Cambio 3
(Gp:) D2
Cambios simultáneos de un componente
Cambio 3 integrado
(Gp:) Cambio 1
(Gp:) Cambio 2
(Gp:) Línea base
(Gp:) A1
(Gp:) B1
(Gp:) C1
(Gp:) D1
(Gp:) E1
(Gp:) A2
(Gp:) B2
(Gp:) E3
(Gp:) F3
(Gp:) Cambio 3
(Gp:) D2
(Gp:) D3
(Gp:) Esperando desarrollo
(Gp:) En integración
(Gp:) Completado
(Gp:) En desarrollo
(Gp:) Anular
(Gp:) Anular
(Gp:) Anular
(Gp:) En revisión
(Gp:) Esperando integración
(Gp:) Nuevo cambio
(Gp:) Inicio desarrollo
(Gp:) Fin desarrollo
(Gp:) Revisión aceptada
(Gp:) Rechazo
(Gp:) Rechazo
(Gp:) Integración
aceptada
Ciclo de vida de cambios (Aegis)
Control de versiones: herramienta RCS
(Gp:) fichero,v
(Gp:) fichero
(Gp:) fichero
(Gp:) RO
(Gp:) RW
(Gp:) co -l
(Gp:) co
(Gp:) ci
(Gp:) rlog
Control de configuración: herramienta CVS
(Gp:) CVSROOT
(Gp:) add
(Gp:) remove
(Gp:) checkout
(Gp:) commit
(Gp:) (update)
(Gp:) edit
(Gp:) abort
Control de cambios: herramienta Aegis
(Gp:) Directorio
(Gp:) de
(Gp:) cambio
(Gp:) Directorio
(Gp:) de
(Gp:) cambio
(Gp:) Directorio de
(Gp:) integración
(Gp:) Directorio de
(Gp:) línea base
(Gp:) Repositorio
(Gp:) (
(Gp:) historia)