3. 1. Dos historias de mucho miedo
Estas son dos historias que pasaron de verdad (o no).
Gestión código fuente 3
4. 1. Dos historias de mucho miedo
Alberto Benitez Cazorla (abc@nextret.net) dejó la
empresa para ir a criar marmotas en el Pirineo.
Sus compañeros de proyecto no encontraron el código
fuente de su aplicación el día que había que hacer una
corrección urgente para ya de antes de ayer.
Cuando por fin lo encontraron, nunca supieron cual de los
tres proyectos modificados en fechas similares era el
bueno.
Gestión código fuente 4
5. 1. Dos historias de mucho miedo
Xavier Yuste Zamora (xyz@nextret.net) estuvo una
temporada en un cliente y le pidieron venir a la
central para modificar un proyecto anterior.
Al volver, su PC había sido formateado y donado a una
ONG que lo usa para las altas y bajas de una leprosería.
El código fuente había desaparecido.
Gestión código fuente 5
7. 2. ¡Tenemos una ISO-lución! O no.
La ISO-9001 dice que la copia de backup del fuente debe estar en
i:_exeExxxxxFuentes:
“¿Mentiendes?”
net use i: ntnx01home$
No C:miproyectobackup2034-13-31-laCaixaExtranet.rar
No i:_exeExxxxxDocsJava2034-13-31-laCaixaExtranet.rar
No j:TransferTeLoDejoAqui2034-13-31-laCaixaExtranet.rar
Gestión código fuente 7
8. 2. ¡Tenemos una ISO-lución! O no.
La ISO-9001 de la empresa dice que el fuente debe estar en
i:_exeExxxxxFuentes:
Problemas
Nadie lo copia.
Si se acuerdan de copiarlo, se hace manualmente.
Manual == ERRORES
Gestión código fuente 8
9. 2. ¡Tenemos una ISO-lución! O no.
La ISO-9000 de la empresa dice que el fuente debe estar en
i:_exeExxxxxFuentes:
Dudas
¿Como se relaciona con la copia local del desarrollador?
¿DONDE ESTÁ LA COPIA LOCAL?
¿Como estamos seguros que todo lo copiado es lo que debe estar?
¿Está todo lo que debe ser copiado?
¿Todo lo copiado debe estar ahí?
¿Gromenauer?
Gestión código fuente 9
11. 3. “Una nueva esperanza”
“Usa el control de código, Luke”
A. Da igual cual... ¡sólo usa alguno!
Subversion, git, hg, CVS
Visual Source Safe, aceptamos pulpo como SCM?
Google is your friend.
Busca, encuentra, lee, aprende... usa.
B. Usalo ordenadamente
Organiza y automatiza tu proyecto.
Usa servidores confiables, propios o del cliente.
Cumple con los 10 mandamientos.
Cumple las best practices de tu gestor de código.
Gestión código fuente 11
12. 3. “Una nueva esperanza”
Dale alegría a tu proyecto
La alegría de:
Que tú y todos sepan donde está cada cosa.
Que todo esté controlado y no falte nada.
Que se pueda hundir el mundo y puedas seguir.
Gestión código fuente 12
13. 3. “Una nueva esperanza”
Dale alegría a tu proyecto
Y todo en unos sencillos pasos...
Gestión código fuente 13
16. 4. Organiza. Automatiza.
X:_exeExxxxxFuentesSVN
X in { I, C }
Checkout del código fuente del proyecto.
Bajo control de versiones siempre.
SVN o nombre descriptivo. Ejemplo:
En local C: puede trabajarse en el trunk o en un branch.
En directorio de proyecto I: todo el árbol.
Gestión código fuente 16
17. 4. Organiza. Automatiza.
C:_exeExxxxxworkspace
Para agrupar proyectos relacionados y aislarlos de los que no lo son.
C:_exeExxxxxeclipse: IDE con todos los plugins del proyecto.
Gestión código fuente 17
19. 4. Organiza. Automatiza.
SlikSVN
Cliente Subversion de linea de comandos para Windows.
http://www.sliksvn.com/en/download
Gestión código fuente 19
21. 5. LOS 10 MANDAMIENTOS DEL
CONTROL DE CÓDIGO
Gestión código fuente 21
22. 5. Los 10 mandamientos del control de código.
▊ · · · · · · · · · 10%
A. Deja de usar VSS. Ya.
Está muerto. Como el pulpo Paul.
http://support.microsoft.com/lifecycle/search/default.aspx?alpha=Visual+SourceSafe
Gestión código fuente 22
23. 5. Los 10 mandamientos del control de código.
▊▊ · · · · · · · · 20%
A. Si no está en control de código no existe.
Repetir cada día este mantra:
“La única medida de progreso es código operativo bajo control, ommm”
Copias locales:
Riesgo y descontrol.
Código controlado:
Buenas prácticas.
Gestión código fuente 23
24. 5. Los 10 mandamientos del control de código.
▊▊▊ · · · · · · · 30%
A. ¡Commit pronto, commit regular… y sin remolonear!
Cada revisión con commit es un punto de recuperación.
Para esas “pequeñas pérdidas” de que las cosas funcionen.
El riesgo de pesadillas de merge crece con el tiempo.
Entropía del proyecto =
número de desarrolladores x tiempo sin hacer merge.
Enfuerza el aislamiento de funcionalidades en unidades de trabajo.
Un commit, una cosa que funciona, una parte del todo.
Gestión código fuente 24
25. 5. Los 10 mandamientos del control de código.
▊▊▊▊ · · · · · · 40%
A. Inspecciona los cambios antes de subirlos.
No subir basura.
Gestión código fuente 25
26. 5. Los 10 mandamientos del control de código.
▊▊▊▊ · · · · · · 40%
A. Inspecciona los cambios antes de subirlos.
Subir cambios reales que afecten a todo el mundo.
Gestión código fuente 26
27. 5. Los 10 mandamientos del control de código.
▊▊▊▊ · · · · · · 40%
A. Inspecciona los cambios antes de subirlos.
Revisa los ficheros uno por uno y valida los cambios.
Gestión código fuente 27
28. 5. Los 10 mandamientos del control de código.
▊▊▊▊▊ · · · · · 50%
A. Comenta el commit como si te fuese la vida en ello.
En dos semanas ni tu mismo vas a saber qué cambiaste.
Imagina que el equipo de soporte de tu código está formado por
maníacos homicidas con un hacha que saben dónde vives.
Gestión código fuente 28
29. 5. Los 10 mandamientos del control de código.
▊▊▊▊▊ · · · · · 50%
A. Comenta el commit como si te fuse la vida en ello.
Buenos comentarios de commit te salvarán el culo en un blame.
Gestión código fuente 29
30. 5. Los 10 mandamientos del control de código.
▊▊▊▊▊ · · · · · 50%
A. Comenta el commit como si te fuse la vida en ello.
Los comentarios de commit son la crónica de tu proyecto.
Gestión código fuente 30
31. 5. Los 10 mandamientos del control de código.
▊▊▊▊▊ · · · · · 50%
A. Comenta el commit como si te fuese la vida en ello.
Antipatrones de comentario:
Algunas mierdecillas...
Funciona!
Arreglados algunos jodidos errores
fix
Arreglo de un pequeño bug...
Actualizado
typo
Revision 1024!!
http://stackoverflow.hewgill.com/questions/909/338.html
( /)
(O.o)
(> <) El conejito aprueba los cambios.
Gestión código fuente 31
32. 5. Los 10 mandamientos del control de código.
▊▊▊▊▊▊ · · · · 60%
A. Sólo tu harás commit de tus cambios
Antipatrón: Desarrollador jefe que revisa los cambios ajenos y hace commit.
Eso no es control de código.
Eso es una guardería.
Gestión código fuente 32
33. 5. Los 10 mandamientos del control de código.
▊▊▊▊▊▊▊ · · · 70%
A. Versionar la base de datos no es opcional.
Apaliza al DBA hasta que lo entienda.
Dos estrategias:
Versionar un script de creación desde el cero inicial.
“Y se hizo el esquema, y se crearon las tablas, y los índices, y los stored procedures”.
Partir de crear un esquema inicial y añadir scripts de cada modificación,
versionados en un script maestro que los ejecute en orden.
“Y a la tabla de empleados le quitó una costilla, y creo la vista de departamento IT”.
Gestión código fuente 33
34. 5. Los 10 mandamientos del control de código.
▊▊▊▊▊▊▊▊ · · 80%
A. El resultado de la compilación no va al control de código
¿Si el código no sirve para compilarlo, para qué lo guardas?
Ni *.class, ni *.jar, ni *.obj, ni *.exe, ni *.gaitas.
No tiene sentido y sólo vas a fastidiar a tu equipo.
Usa las herramientas para ignorar extensiones y directorios.
Cuando incorpores ficheros, haz un clean previo del proyecto.
Guarda lo mínimo que define el proyecto.
Y si hay que guardar un resultado final:
I:_exeExxxxxEntregados
Gestión código fuente 34
35. 5. Los 10 mandamientos del control de código.
▊▊▊▊▊▊▊▊▊ · 90%
A. Tu configuración personal no le importa a nadie
Entraría en conflicto con la configuración de otros.
Depende de la tecnología.
Ejemplo Java:
pom.xml si es necesario para Maven
.project y .classpath de Eclipse no se requieren pudiendo importar el proyecto.
Gestión código fuente 35
36. 5. Los 10 mandamientos del control de código.
▊▊▊▊▊▊▊▊▊▊100%
A. Las dependencias tambien deben estar ahí.
O sólo funcionará en tu máquina.
A no ser que uses Maven u otro gestor de dependencias.
Por si las moscas, una copia en I:_exeExxxxxFuentesdependencias
Y si hace falta, versionarla.
Gestión código fuente 36
37. 5. Los 10 mandamientos: Bonus track
▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊
A. Todo commit se asocia a una unidad de trabajo del proyecto.
El comentario del commit incluye el identificador de la unidad.
El id de un bug.
El código de una funcionalidad.
Facilita encontrar todas los cambios relacionados con un tema
“¿Quién #@$%!!! tocó qué y cuándo y por qué para hacer ésto?”
Bastará con buscar el identificador de la tarea.
Gestión código fuente 37
38. 5. Los 10 mandamientos: Bonus track
▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊
A. Todo commit se asocia a una unidad de trabajo del proyecto.
Ejemplo:
Las tareas tienen un código identificativo.
Gestión código fuente 38
39. 5. Los 10 mandamientos: Bonus track
▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊
Todo commit se asocia a una unidad de trabajo del proyecto.
Ejemplo:
Encontrar cambios buscando por el código de tarea.
Gestión código fuente 39
42. 5. Los 10 mandamientos: Bonus track
▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊
¿Cosas fuera de control de código?
Si, una: Las pruebas de concepto.
Ficheros zip que con un proyecto que demuestra una solución.
Con un documento que explique por qué se hizo y como.
Crean Knowledge Base.
Gestión código fuente 42
43. 5. Los 10 mandamientos: Bonus track
▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊
Subversion best practices
Varias fuentes adicionales:
http://solowebstartup.com/top-18-subversion-best-practices
http://svn.apache.org/repos/asf/subversion/trunk/doc/user/svn-best-practices.html
Gestión código fuente 43
44. 6. EL CONTROL DE CÓDIGO
ESTÁ BAJO CONTROL
Gestión código fuente 44
45. 6. Control bajo control
#chucknorrisfacts
Gestión código fuente 45
46. 6. Control bajo control
StatSVN
http://www.statsvn.org/
So, what is StatSVN? Great statistics for SVN!
StatSVN retrieves information from a Subversion repository and generates
various tables and charts describing the project development, e.g.
Timeline for the lines of code
Lines of code for each developer
Activity by Clock time
Authors Activity
Author activity per Module
Author Most Recent Commits with links to ViewVc
Stats per directory
File count
Average file size
Largest files
Files with most revisions
Directory Sizes
Repository Tags Number of LOC per version.
Repository tree with file count and lines of code
LOC and Churn the evolution of LOC and the amount of change per day
Repo Map the dynamic hierarchical view of your repo for the last 30 days
Gestión código fuente 46
47. 6. Control bajo control
http://www.statsvn.org/demo/ruby/
Gestión código fuente 47
48. 6. Control bajo control
http://www.statsvn.org/demo/ruby/
Gestión código fuente 48
50. 7. ¿Dónde está el Subversion?
Varias opciones:
Usar el del propio cliente.
Caso de las organizaciones que controlan su código de cerca.
Ejemplo: UOC
Gestión código fuente 50
51. 7. ¿Dónde está el Subversion?
Varias opciones:
Usar un hosting externo.
Caso de cliente que quiera su propio repositorio sin infrastructura propia.
Ejemplo de hosting: xp-dev.com, unfuddle.com.
Facilitan algunas herramientas extra de gestión de proyecto:
Timeline.
Tickets.
Wiki.
Gestión código fuente 51
52. 7. ¿Dónde está el Subversion?
Varias opciones:
Acceder al Area 51 de NexTReT.
http://area51.nextret.net/ desde red interna.
http://area51.nextret.net:xxxx/ desde Internet (seguridad y/o IP reciclada).
Autenticación con login/password de red corporativa.
Gestión código fuente 52
53. 7. ¿Dónde está el Subversion?
Varias opciones:
Acceder al Area 51 de NexTReT.
Un repositorio por año /repo12
Un directorio raíz por proyecto /Exxxxx
Pedir a dsv@nextret.net (futuro: sau)
StatSVN on the way…
Gestión código fuente 53
55. 8. Integración continua
La integración continua es la ejecución de todas estas tareas…
Obtener la última versión del código del proyecto.
Compilarlo y generar binarios.
Realizar pruebas unitarias y de integración.
Correr análisis de métricas de calidad del código.
Enviar correos con informes.
… cada vez que un desarrollador hace commit de un cambio.
¿Cada vez que se envía un commit?
¡¿A MANO?!
¡Un momento!
Gestión código fuente 55
57. 8. Integración continua
“Throughout human history,
we have been dependent on machines to survive.”
Gestión código fuente 57
58. 8. Integración continua
La integración continua
Permite asegurar
continuamente
de forma automatizada
que los cambios que lleva cada uno de los desarrolladores en un equipo
de trabajo no presenta problemas de integración con el código del resto
del equipo.
Es una de las prácticas propuestas por las metodologías ágiles.
El objetivo es trasladar la variable del esfuerzo de integración
de la parte final del desarrollo para repartirlo a lo largo de todo
el proyecto.
Gestión código fuente 58
59. 8. Integración continua
Ventajas
Minimizar los tiempos y la problemática de la integración en los equipos
de desarrollo.
Automatizar la construcción y paso de pruebas en cada cambio realizado
en el repositorio de código
Mejora la eficiencia del equipo de desarrollo.
Automatizar herramientas de análisis de calidad del código, como Sonar,
Checkstyle, PMD, Cobertura, etc…
Automatizar pasos a entornos de pruebas, como entornos de
preproducción.
Se identifican errores de entorno en fases tempranas.
Automatizar tareas de gestión de la configuración, como etiquetado de
versiones de desarrollo
Minimiza el tiempo de realimentación con el cliente.
Hacer visible al equipo de desarrollo el estado del proyecto.
Aumentar la confianza en el código entregado al repositorio.
Gestión código fuente 59
60. 8. Integración continua
Requiere que el build del sistema esté automatizado y pueda
ejecutarse con un único comando
Implica gestionar las dependencias.
La mejor herramienta de gestión de dependencias es Maven.
Beneficios de Maven:
Gestión automática de dependencias:
Artefactos públicos/privados y otros frameworks (Spring, JPA, JSF...)
Ciclo de vida repetible:
Construcción, pruebas, empaquetado, despliegue, etc..
Independiente del IDE de desarrollo empleado.
Mejora la carga de los entornos de desarrollo locales y reduce el
tiempo de creación inicial y configuración de dichos entornos.
Habilita la creación de repositorios corporativos de dependencias y
artefactos, mejorando la organización interna.
Gestión código fuente 60
61. 8. Integración continua
Self-test del código
Implica que el código desarrollado tenga siempre al menos pruebas
unitarias que cubran el mayor porcentaje posible del mismo.
Es posible aplicando metodología TDD: Test Driven Development.
TDD garantiza que el juego de pruebas evoluciona acorde a la evolución
del sistema, al ser necesario plantear la prueba antes del componente a
desarrollar.
La integración continua potencia sus beneficios al garantizar la ejecución
automática de ese juego de pruebas de forma continua.
Gestión código fuente 61
62. 8. Integración continua
Self-test del código
El punto de partida son los frameworks XUnit, que permiten reducir el
esfuerzo en la creación de los componentes de prueba:
Test Unitarios: Ej: JUnit.
Test de Integración: Ej: DBUnit.
La integración continua permite también automatizar:
Pruebas de rendimiento, Ej: JMeter, JUnitPerf.
Pruebas automáticas de interfaz de usuario, Ej: Selenium, Sahi, Watir.
El punto de partida son los frameworks XUnit, que permiten reducir el
esfuerzo en la creación de los componentes de prueba:
Test Unitarios: Ej: JUnit.
Test de Integración: Ej: DBUnit.
La integración continua permite también automatizar:
Pruebas de rendimiento, Ej: JMeter, JUnitPerf.
Pruebas automáticas de interfaz de usuario, Ej: Selenium, Sahi, Watir.
Gestión código fuente 62
63. 8. Integración continua
Entrega continua de cambios
Es necesario establecer un punto único como repositorio del sistema en
desarrollo, con la estructura adecuada, normalmente:
Rama principal con la versión actual en desarrollo. (HEAD / trunk)
Rama de mantenimiento de la última versión en producción.
Los miembros del equipo de desarrollo deben entregar sus cambios cada
vez que esos cambios sean correctos y pasen las pruebas asociadas en
su entorno local, afrontando antes la integración con cambios conflictivos
de otros miembros del equipo
En todo momento, el servidor de integración continua construye de
forma completa el sistema en cada cambio del repositorio, avisando
de los errores a los autores de los cambios entregados.
Gestión código fuente 63
64. 8. Integración continua
Servidor de integración continua
Existen múltiples implementaciones disponibles: Hudson, Continuum,
Cruise Control...
Detectar cambios y descargar el código desde el repositorio de
versiones.
Lanzar la construcción del sistema, y la ejecución de las pruebas.
Ejecutar automáticamente herramientas de análisis de la calidad del
código.
Publicar los artefactos generados en la construcción.
Etiquetar el código tras una construcción exitosa.
Ante errores, notificar al equipo de desarrollo de los mismos.
Gestionar el histórico de construcciones y de estadísticas de pruebas.
Gestión código fuente 64
68. 8. Integración continua
Métricas
Es importante disponer de herramientas que permitan automatizar
análisis de código para gestionar:
Nomenclaturas requeridas por arquitectura y metodología.
Buenas prácticas.
Código repetido.
% de código cubierto por pruebas.
Parámetros de complejidad de clases y métodos.
% de código comentado.
Evolución de las métricas a lo largo del tiempo.
Gestión código fuente 68
77. Epílogo
El código fuente de xyz@nextret.net apareció de casualidad
En un backup de un servidor virtual a punto de ser borrado.
A tiempo de no tener que tomar decisiones drásticas.
Gestión código fuente 77
78. Epílogo
Las marmotas de abc@nextret.net se han hecho famosas
Si el 2 de febrero la marmota ve cajas de pizzas en tu oficina,
el proyecto no cumplirá los plazos de entrega .
Gestión código fuente 78
79. Epílogo
Ningún pulpo fué maltratado en la elaboración de este documento.
Gestión código fuente 79
80. Cuando volver a casa y olvidarse de todo significa, literalmente eso.
Nadie sabe cuando va a surgir un problema, aunque está claro que son inevitables.
Sin embargo, resolverlos es precisamente una de nuestras especialidades.
Y será una de las que más aprecies. Pregúntale a nuestros clientes.
Paseo Bonanova, 9 - 08022 Barcelona - T. 932 541 530
www.nextret.net - info@nextret.net
Fortuny, 3 - 28010 Madrid - T. 917 021 645