Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Punto de partida
● ADME es una entidad financiera, con miles de clientes y con proyección a crecimiento
● Poseen proyectos cascada, y tienen iniciativas de equipos ágiles
● Utilizan SVN actualmente. Preferirían conservarlo, pero están abiertos al cambio
Valoraciones principales
●
Funcionalidad
● Costos
● Soporte de la plataforma
● Seguridad
● Curva de aprendizaje
Alternativas a comparar
● Git
● SVN
● Mercurial
SVN
Sistema de control de versiones centralizado, es decir, opera bajo el
modelo de tener un repositorio central, de donde desarrolladores
toman archivos, hacen actualizaciones y envían cambios.. Gratis y
open source, opera bajo la licencia apache.
Caracteristicas:
● Modelo de repositorio cliente servidor
● Directorios versionados.
● Operaciones de copiar, pegar y mover también versionadas.
● Commits atómicos.
● Symbolic links versionados..
● Branching independiente del tamaño de los archivos.
● Otros features , como seguimiento de merges, autorización en base a rutas, bloqueo
de archivos, operaciones de servidor, etc.
Pros
Contras
● Posee bugs en el nombramiento de archivos y carpetas
● Pocos comandos para manejo de repositorio
● Baja velocidad en comparación a otros
● Modelo de branching tedioso
● Requiere conexión con el main server en todo momento
● Poco amigable para proyectos open source
Git
Control de versiones descentralizado creado en el 2005. Como no hay un
servidor centralizado, los conceptos originales de Git era hacerlo rápido,
distribuido, y que desafiaba las convenciones y prácticas utilizadas en CVS.
Fue desarrollado principalmente para desarrollar el kernel de Linux.
Caracteristicas
● Open source
● Gran soporte para desarrollo no lineal.
● Modelo de repositorios distribuidos.
● Compatible con protocolos HTTP, SSH, FTP, etc.
● Eficiente en el manejo de proyectos pequeños y grandes
● Autenticación criptográfica
Pros
● Rendimiento rápido y eficiente
● Multiplataforma
● Los cambios de codigo son facilmente seguidos.
● Fácilmente mantenible y robusto
● Excelente CLI
● Gran set de herramientas visuales
Contras
Mercurial
Es un sistema de control de versiones distribuidos gratis. Fue originalmente
creado para competir contra Git en la gestión del kernel de Linux. Es uno de los
sistemas de control de versiones más utilizados en la industria
Características
Pros
● Rápido y poderoso
● Facil de aprender
● Ligero y portable.
● Conceptualmente simple
Contras
● Funcionalidad
● Curva de aprendizaje
● Popularidad en el mercado
● Seguridad
● Costos
● Soporte
● Seguridad
Funcionalidad
GIT > Mercurial > SVN
Git es el líder indiscutible en esta categoría, en gran parte gracias a la intención de su creación:
el kernel de linux. Git posee la mayor cantidad de comandos (164) y formas de realizar
operaciones entre estos 3 VCS. Su extensiva documentación y soporte de la comunidad ha
llevado a distintos flujos de trabajo y mejores prácticas. Mercurial y SVN le siguen y, como
veremos en mas detalle próximamente, no es de sorprendernos, ya que también sus curvas de
aprendizaje son mas sencillas.
Curva de aprendizaje
SVN > Mercurial > Git
SVN tiene un repositorio central, lo que hace que sea más fácil para los gerentes tener un
enfoque más descendente para el control, la seguridad, los permisos, etc. La lista de comandos
es menor con respecto a las 2 otras opciones. Como fue detallado anteriormente, SVN nace
para mejorar los fallos de CVS, que ya de por sí era simple comparado con las otras
alternativas. Entre mercurial y Git, el factor que coloca a Git por debajo es la cantidad de
opciones que se tienen con cada comando, mientras que el approach de Mercurial es el
elemental de una terminal: cada comando realiza 1 sola función, y la realiza de manera
efectiva.
Seguridad
SVN > Git > Mercurial
La principal razón por la que SVN es superior en este aspecto es por su aspecto fundamental:
es un sistema de control de versiones centralizado: Los permisos, protocolos de seguridad,
accesos, reglas, parte de un mismo punto. Es más sencillo y efectivo. Otra gran característica
de SVN en relación a seguridad e integridad es la modalidad de atomic commits: los cambios
sólo se efectúan sólo cuando un proceso completo tiene éxito, similar a los procesos bancarios.
Popularidad en el mercado
Git > SVN > Mercurial
Costos
Ya que las 3 herramientas de version control son gratis y open source, los costos están
relacionadas a las plataformas utilizadas con las que se asocia.
Analizamos 3 plataformas de VC, ambas con soporte para las 3 VCS. En el caso de SVN y
mercurial es a través de mirrors.
Github
Bitbucket
Gitlab
Para el nivel y la categoría de un centro financiero como lo es ADME, deben considerarse las
opciones enterprise/premium. La decisión de costo beneficio es independiente del sistema de
control de versiones, por lo que esta recomendación será dada junto con el veredicto final.
Soporte
En términos de documentación y comunidad:
En términos de plataforma:
GIT > el resto , por su soporte nativo en los mayores ofertantes.
Veredicto final
Razones:
En caso de hacer correcciones a una rama de release, podemos traer esos cambios a master,
pero a través de cherry-picking con git.
Versionamiento semántico
Qué es? E
s una estrategia diseñada para gestionar las distintas versiones que puede tener
un software.
En qué consiste? S
eguir un modelo de 3 números: MAYOR.MENOR.PATCH
1. Software utilizando versionamiento semántico DEBE declarar un API público. Puede ser en
código o en documentación,pero debe ser exhaustivo y comprensivo.
2. Las versiones deben tener el formato MAYOR.MENOR.PATCH , utilizando números naturales,
sin saltarse números. Ejemplo -> 1.9.0 -> 1.10.0 -> 1.11.0
3. Una vez lanzada una versión, el contenido de esta NO PUEDE cambiar. Cualquier cambio
adicional debe ser lanzado en una siguiente versión.
4. Todo código que esté en una versión MAYOR 0 no debe considerarse estable, y puede
cambiar en cualquier momento.
5. Versiones 1.0.0 define el api público. La forma en la que las versiones siguientes cambias
es en base a este API.
6. Las versiones PATCH Z (x.y.Z | x > 0) DEBEN ser incrementadas solo si se introduces bug
fixes que son compatibles con versiones anteriores.
7. Versiones MENORES Y (x.Y.z | x > 0) DEBEN ser incrementadas solo si se introducen nuevas
funcionalidades al API público compatibles con versiones anteriores.
8. Versiones MAYORES X (X.y.z | X > 0) DEBEN ser incrementadas cuando se agreguen
cambios que no es compatible con versiones anteriores.
Referencia base:
https://docs.microsoft.com/en-us/azure/devops/learn/devops-at-microsoft/use-git-microsoft
https://docs.microsoft.com/en-us/azure/devops/repos/git/git-branching-guidance?view=azure-d
evops
https://semver.org/
Team lead
Como parte del equipo de desarrollo, se encarga de desarrollar funcionalidades o dar
mantenimiento a software desarrollado. También se encargará de aprobar cambios y unión de
ramas. Permisos:
● Crear ramas
● Eliminar ramas
● Ver ramas
● Editar ramas
● Push ramas
● Merge ramas
Developer
Como parte del equipo de desarrollo, se encarga de desarrollar funcionalidades o dar
mantenimiento a software desarrollado. A diferencia del team lead, un developer no podrá
aprobar cambios ni unir feature branches a la rama principal. Permisos:
● Crear ramas
● Ver Ramas
● Editar Ramas
● Push a ramas
Project Manager
Encargado de seguir la gestión del proyecto. Este usuario puede crear , modificar y, en caso de
ser necesario, eliminar proyectos y subproyectos. Da seguimiento a las tareas de Azure
DevOps,. Permisos
● Creación de proyectos
● Ver proyectos
● Editar proyectos
● Borrar proyectos
Configuration Manager
Da soporte a los equipos de trabajo en la configuración de items de proyectos. Prepara
documentación y mantiene la base de datos de CM, hace reviews de procesos y cambios,
mantiene la calidad de datos de la base de datos de CM. Al igual que el Team Lead, este puede
aprobar cambios y autorizar uniones a la rama principal. Responsabilidades:
● Ver repositorios
● Crear repositorios
● Editar repositorios
● Eliminar repositorios
● Merge de ramas