Estructura de SVN para Proyectos de Software

Tener una estructura ordenada de nuestro repositorio es muy importante, pues el proceso de desarrollo en concreto produce artefactos software que deben ser mantenidos, ordenados, revizados y catalogados adecuadamente.

Para quienes no utilicen un control de versiones en sus proyectos, les recomiendo que comiencen a usarlo inmediatamente pues en el software hay que ser simplista, gestionar los cambios, reutilizar lo más posible, y en la medida de lo posible que herramientas hagan nuestro trabajo [Para los estudiosos: Do not repeat yourself, Keep it simple stupid, etc].

Lo primero es entender como trabaja un control de versiones en lineas muy generales: Existe un directorio donde se alamcena una base de datos de archivos, cada desarrollador obtiene una copia de ese directorio y hace los cambios necesarios que luego sube a este directorio; Si hay más de una persona trabajando no importa pues tiene herramientas automáticas que son capaces de juntar los cambios incluso en un archivo y avisar de los conflictos. Para más información sobre control de versiones y en concreto de subversion click aqui.

Ahora que ya se sabe el beneficio de usar un sistema de control de versiones, se debe definir que estructura deberá tener este. Si bien la estructura depende del proceso de desarrollo de software que practiques, la estructura que se presenta la puedes usar como base pues formaliza los archivos y carpetas que se deben incluir.

Nomenclatura:
  • Linea base: Linea base de gestión de configuración - en nuestro caso una carpeta que contien determinados artefactos.
  • ITER: Número de la iteración en la cual fue producido el documento o modelo. No aplica a código fuente. Ejemplo: PLAN_REQ-ERS-00.doc significa el documento de especificación de requisitos de la linea base PLAN_REQ que se produjo en la iteración 0.
Tipos de archivo (de las herramientas que yo uso):
  • .zargo: Modelo UML en ArgoUML
  • .doc: OpenOffice Word Processor
  • .xml: Modelo de base de datos en DBDesigner.
  • .txt: Un editor de texto.
  • .sql: Script sql.

Cabe señalar que se trata de una estructura de directorios para un proceso de desarrollo iterativo, más info aqui

  • trunk (Directorio de desarrollo)
    • PLAN_REQ (Linea base de planificación y requisitos)
      • PLAN_REQ-CALIDAD-ITER.doc (Plan de calidad)
      • PLAN_REQ-CASOS_DE_USO_FORMATO_BREVE-ITER.doc (Casos de uso, formato breve)
      • PLAN_REQ-CONFIGURACION-ITER.doc (Plan de gestión de configuración IEEE 828)
      • PLAN_REQ-DESCRIPCION_DEL_SISTEMA-ITER.doc (Descripción del sistema)
      • PLAN_REQ-DIAGRAMA_CASOS_DE_USO-ITER.zargo (Diagramas de casos de uso)
      • PLAN_REQ-ERS-ITER.doc (Especificación de requisitos de software - IEEE 830)
      • PLAN_REQ-ESTIMACION_PLANIFICACION-ITER.doc (Estimación y Planificación del proyecto - Cocomo II, Puntos de función, cartas gantt)
    • DISEÑO (Linea base de análisis y diseño)
      • DISEÑO-CASOS_DE_USO_FORMATO_EXTENDIDO-ITER.doc (Casos de uso formato extendido - màs conocido como Fichas de casos de uso)
      • DISEÑO-CONTRATOS_DE_OPERACIONES-ITER.doc
      • DISEÑO-DIAGRAMAS_DE_SECUENCIAS_DEL_SISTEMA-ITER.zargo (Pueden obviarlo - no me gustan muchos estos diagramas)
      • DISEÑO-MODELO_CONCEPTUAL-ITER.zargo (Classes de análisis)
      • DISEÑO-DIAGRAMA_DE_CLASES-ITER.zargo (Classes de Diseño)
        DISEÑO-DIAGRAMAS_DE_INTERACCION-
        ITER.zargo (Diagramas de secuencia y comunicacion[colaboración])
      • DISEÑO-MODELO_RELACIONAL_BASE_DE_DATOS-ITER.xml
      • DISEÑO-PLAN_DE_PRUEBAS-ITER.doc
    • IMPL (Linea base de implementación)
      • IMPL-BASE_DE_DATOS-ITER.sql (Dump de la base de datos)
      • SRC (Código fuente)
    • PRUEBAS (Linea base de pruebas)
      • PRUEBAS-PRUEBAS_DEL_SISTEMA-ITER.doc
    • ENTREGA (Linea base de entrega)
      • ENTREGA-LICENCIA-ITER.txt
      • ENTREGA-MANUAL_DE_INSTALACION-ITER.doc
      • ENTREGA-MANUAL_DE_ADMINISTRACION-ITER.doc
      • ENTREGA-MANUAL_DE_USUARIO-ITER.doc
      • ENTREGA-NOTAS_DE_LA_ENTREGA-ITER.txt
  • tags(Directorio de marcas de desarollo)
    • iteraciones (Cada vez que se termina una iteración se hace una copia del trunk aquí, marcada yyyymmdd_iterITER)
    • releases (Cada vez que se lanza una versión del producto se hace una copia del tag de iteración correspondiente aquí yyyymmdd_releaseRELEASE)
  • branches (Directorio de variantes del proyecto)

Puedes descargar la estructura aqui,

Haz checkout de tu repositorio descomprime la carpeta en tu copia de trabajo y haz commit. Yo uso subEclipse, RapidSvn y subversion por terminal.

Espero les sirva.

Si tienes feedback deja comentarios o me escribes a lbarrientos@opensistemas.com.

Suerte!