Estudio de la configuración en proyectos de software libre. 7-ZIP Autores: Caro Fernández, Rafael Mendoza Moreno, Juan Miguel Montero, Juan Francisco Olivero González, Miguel Ángel Evolución y Gestión de la Configuración. Proyecto 7-Zip Índice 1. Resumen 2. Introducción 3. Gestión del Código Fuente 3.1. Ejercicio 3.2. Ejercicio 4. Gestión de la Construcción 4.1. Ejercicio 5. Gestión de Entregables 5.1. Ejercicio 6. Gestión de Incidencias y Depuración 6.1. Ejercicio 7. Gestión de la Variabilidad 7.1. Ejercicio 8. Gestión de la Integración Continua 8.1. Ejercicio 9. Mapa de herramientas 10. Conclusiones 11. Bibliografía 12. Anexos 2 Evolución y Gestión de la Configuración. Proyecto 7-Zip 1. Resumen El siguiente documento recoge información sobre el desarrollo, construcción y distribución del proyecto 7zip y pretende ser una guía de mejora para la gestión de su configuración. En concreto, se va a revisar el uso de herramientas que permitan al equipo de desarrollo llevar a cabo tareas de gestión de forma más dinámica y organizada. Para llevar a cabo esto se tendrán en cuenta la forma en la que se gestionan áreas tales como: código fuente, construcción, entregables, incidencias, depuración, variabilidad e integración y despliegue continuos. A partir de los contenidos vistos en la asignatura se procederá a recomendar a través de este documento, a continuar con el uso de las herramientas u ofrecer un cambio a otras distintas que se ajusten mejor a las necesidades del equipo de desarrollo. Para explicar el funcionamiento e integración de las herramientas que se expongan se ofrecerá un mapa de herramientas, y las relaciones que se podría encontrar entre ellas. Se ofrecerá una pequeña guía, ejemplificando los contenidos prácticos de la asignatura y proponiendo ejercicios relacionados con la gestión de la configuración que permiten visualizar de forma genérica cómo podrían llevarse estas acciones a cabo en cada uno de los apartados significativos de este documento. Por último se expondrán las conclusiones obtenidas sobre el proyecto y el documento. 3 Evolución y Gestión de la Configuración. Proyecto 7-Zip 2. Introducción El proyecto sevenZip ha desarrollado la aplicación “7zip”. Esta aplicación, ha sido desarrollada aparentemente en solitario por el programador Igor Pavlov. Tiene como objetivo ofrecer a los usuarios una herramienta de compresión y descompresión de archivos de forma gratuita y con una amplia variedad de formatos disponibles. El software compite directamente con otras herramientas ampliamente conocidas como WinZip o WinRAR. Ofrece una interfaz gráfica bastante amigable con la que poder trabajar con la funcionalidad de la aplicación. La versión actual del software es 9.22 a fecha de 02-03-2013. El proyecto es de código abierto y aloja su código en la siguiente web: http://sourceforge.net/projects/sevenzip/files/. Su código está escrito en lenguajes C y C++, y está compilado para su explotación en sistemas Microsoft que usen Windows. Alternativamente, desarrollan una versión para sistemas Unix y MacOs, es conocida como p7zip. La versión del software en esta plataforma es la 9.20.1 a fecha de 28-05-2013. Este documento está estructurado con los siguientes bloques: Resumen e Introducción: Resumen el proyecto presentado, explica brevemente las funcionalidades de la aplicación, las plataformas para las que trabaja, la última versión lanzada, y describe al grupo de desarrolladores. Gestión del Código Fuente: Explica las técnicas y herramientas que se han empleado para gestionar el código fuente, esto incluye la gestión de las ramas y parches. Se describe también otros aspectos organizativos como la aprobación de cambios, roles existentes, o el formato de los archivos fuente en el código. Gestión de la Construcción: Explica las técnicas y herramientas que se emplean en la construcción del proceso. Para ello se describe el uso de estas herramientas y configura cada cuánto se realiza una construcción, entre otras. Gestión de Entregables: Explica qué elementos serán entregados a los clientes, y cómo son generados. Se explicará también cómo se identifican los distintos entregables, su ubicación y qué rol o roles del proyecto se involucran en este aspecto. Gestión de Despliegue: Explica los mecanismos de despliegue y los procesos relacionados. Se describirán también las plataformas en las que se lleva a cabo estas tareas y qué herramientas se involucran en las mismas. 4 Evolución y Gestión de la Configuración. Proyecto 7-Zip Gestión de Incidencias y Depuración: Explica los mecanismos de depuración empleados en el desarrollo de la aplicación. Se describe cómo se llevan a cabo estos cambios, y cómo se gestionan. Expone también quién o quiénes son los responsables de tomar una decisión de acuerdo a la incidencia reportada. Gestión de la Variabilidad: Explica los mecanismos empleados, o que están en potencia de usarse para gestionar la variabilidad en el proyecto Gestión de la Integración o Despliegue Continuos: Explica la existencia de alguno de estos mecanismos, y en caso de no existir, define cómo podría llegar a incluirse. Se explicará posteriormente en un mapa de herramientas cómo las distintas herramientas se interconectan para poder gestionar el código eficientemente. El documento finaliza con una conclusión en la que se le da una valoración global de la evolución y gestión de la configuración llevada a cabo en el proyecto. También se puede encontrar información de interés como el diario de grupo o datos de conexión a los servicios en los anexos. 5 Evolución y Gestión de la Configuración. Proyecto 7-Zip 3. Gestión del Código Fuente Para explicar la gestión del código fuente, empezaremos explicando las herramientas empleadas para la gestión. El código fuente es gestionado con el soporte ofrecido por “SourceForge.net”. Sourceforge actúa como un repositorio centralizado para software libre utilizado por más de 3 millones de desarrolladores, lo cual es un entorno propicio para la obtención de feedback y de otros desarrolladores que quisieran participar con nosotros aportando ideas. Sourceforge ofrece unos repositorios, que suponemos que el desarrollador emplea. Sólo tenemos acceso a la fuente estable. No existe una gestión de proyectos gestionada por repositorios accesible al público. El desarrollador pone a disposición únicamente versiones estables y finales que pertenecen siempre a la rama principal de desarrollo. El control de cambios y bugs se reportan en una wiki. El sistema funciona mediante la expedición de tickets, entradas que permiten a los usuarios sugerir o reportar cambios. Los posibles parches que se pudiesen aplicar se suben a ésta con la comprobación del administrador de la wiki, que suponemos es el desarrollador de la aplicación. Sourceforge proporciona unas opciones configurables a los desarrolladores que usan sus servicios. Entre otras opciones están el uso de GIT, SVN y Mercurial. No obstante, no es posible saber de cuál está empleando el autor de 7zip ya que tiene restringido el acceso a la visión de las opciones que emplea. Sería lógico suponer que, en caso de usar alguno de las opciones mencionadas, ésta fuese GIT, ya que tendría la comodidad de trabajar sin conexión. Dado que Igor Pavlov es el único desarrollador del proyecto 7zip, y no consideramos necesaria la obligación de hacer actualizaciones en todas las ocasiones a un repositorio externo, GIT se adapta mejor a su desarrollo que herramientas SVN. Dado que Igor Pavlov es el único desarrollador, aparentemente no existe un sistema de aprobación de cambios, ya que no parece necesario en este proyecto. Esto también implica que no sea necesaria una asignación de roles para el proyecto. Existe un archivo en el cual se explica y expone el formato y las pautas que debe seguirse en el código fuente, dicho archivo es el llamado “7zFormat.txt”, que incluiremos como anexo de este documento. 6 Evolución y Gestión de la Configuración. Proyecto 7-Zip Mejoras añadidas: Para ayudar a la creación y mejora de la aplicación, hemos creado un repositorio GIT en Sourceforge y hemos añadido GIT a la máquina virtual. Esto permitirá al autor tener un historial de los cambios realizados. Permitiremos que cualquiera pueda leer del repositorio, para así poder recibir parches y ayuda de otros usuarios. 3.1. Ejercicio: Simulación de corregir un bug, y hacer commit. Una vez localizado un bug en la aplicación, los pasos para arreglarlos serían: 1- Editar el fichero donde se encuentre el error 2- Añadir el fichero al repositorio local GIT con el comando “git add <ruta del fichero> 3- Realizar commit de los cambios con la orden “git commit -a” 4- Añadimos los cambios al fichero remoto utilizando “git push origin master” 5- Tras esto nos pedirá la contraseña del administrador del repositorio. La introducimos y se enviarán los cambios. 3.2. Ejercicio: Obtener código del repositorio. Si lo que deseamos hacer es conseguir una copia del repositorio alojado en Sourceforge, lo que debemos hacer es: 1- Desde consola, irnos a la carpeta donde queramos que se cree la copia del proyecto. 2- Introducir el comando de GIT “git clone git://git.code.sf.net/p/egctest/code”. A través de esa url descargará los datos del proyecto. 7 Evolución y Gestión de la Configuración. Proyecto 7-Zip 4. Gestión de la construcción En la gestión para la construcción se analizan tareas como la compilación del código. Para este proyecto se han redactado algunos requisitos para la construcción del mismo. Dado que no existe documentación relativa a este campo, hemos optado por proponer herramientas que nos faciliten la labor de la construcción de este software. Para ello necesitaremos las siguientes herramientas: a. Visual Studio 2010 Express Edition with SP1 http://www.microsoft.com/eses/download/confirmation.aspx?id=23691 b. Windows SDK 7.0 for x64 (GRMSDKX_EN_DVD.ISO) (opcional) http://download.microsoft.com/download/2/E/9/2E91 1956-F90F-4BFB-8231E292A7B6F287/GRMSDKX_EN_DVD.iso c. Windows DDK 7.1 (GRMWDK_EN_7600_1.ISO) (opcional) http://download.microsoft.com/download/4/A/2/4A25 C7D5-EFBE-4182-B6A9AE6850409A78/GRMWDK_EN_7600_1.ISO d. 7zip.exe (http://downloads.sourceforge.net/sevenzip/7z920.exe) e. Código fuente de 7zip. (7z922.tar.bz2) Una vez hayamos obtenido las herramientas anteriores procederemos a la instalación del Visual studio 2010. A continuación instalaremos 7zip.exe y lo utilizaremos para descomprimir el código fuente descargado. Estas herramientas nos permitirán trabajar con el código. Ya que el código está escrito en C y C++ el Visual Studio nos proporcionará toda la gestión y configuración necesaria, así como bibliotecas y librerías. 8 Evolución y Gestión de la Configuración. Proyecto 7-Zip 4.1. Ejercicio: Compilar el código Procederemos a compilar el código de 7zip. Para ello haremos uso de lo instalado anteriormente. Lo primero que debemos hacer es incluir las variables de entorno de visual studio para poder utilizarlas en la línea de comandos de windows. Para ello abriremos una consola de Windows e introduciremos: "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat". Una vez incluidas las variables procederemos a la compilación del código, nos dirigiremos con la consola al lugar donde se encuentre el código (cd “ruta del código\CPP\7zip”) e MY_STATIC_LINK=1” introduciremos la orden “nmake NEW_COMPILER=1 Tras esto, comenzará la compilación. Tardará varios minutos tras lo cual se crearán los ficheros .exe para la utilización del programa. 4.2. Ejercicio: Uso de 7zip El fichero que utilizaremos para comprimir es el que se crea en la ruta “CPP\7zip\Bundles\Alone\O\7za.exe”. Al ejecutarlo por consola podremos comprimir y descomprimir ficheros. Los comandos necesarios para el manejo de esta aplicación aparecerán en consola. 9 Evolución y Gestión de la Configuración. Proyecto 7-Zip 5. Gestión de entregables La gestión de entregables es otro ámbito que carece de documentación al igual que la mayoría de este proyecto. Los entregables ofrecidos hasta la fecha están compuestos por un ejecutable instalador de la aplicación, y el código fuente del mismo en formato de archivo comprimido. Los archivos descargables se pueden encontrar en la página web alojada en Sourceforge asignada al proyecto y son anunciados en el foro de Sourceforge. http://sourceforge.net/p/sevenzip/discussion/45797/thread/9d1f5836 Para la distribución se utiliza el propio servidor de Sourceforge, que, al mismo tiempo ofrece la opción de descarga de archivos directamente desde la página principal del proyecto. No se describe alguna asignación de roles para la entrega del proyecto 7zip. Se le supone que Igor es el único desarrollador y miembro del equipo. La numeración, pese a ser aparentemente poco organizada de cara al usuario externo al proyecto, mantiene ciertos patrones: Numeración: x.y El primer valor representaría la versión del producto. No está claro cuándo se decide aumentar esta numeración. El segundo valor incrementa con mayor frecuencia. Se ve incrementada cuando se le añade cierta funcionalidad al producto, pero que no puede conformar una nueva versión completa. También se ve incrementada cuando se resuelven bugs. Los entregables siguen una numeración 7-Zip 9.30. El desarrollador también le agrega a veces la etiqueta “beta” o “alpha”, y la mantiene durante varias versiones del producto, quizás como indicio de que no considera que la versión esté libre de errores. 5.1 Ejercicio Simular un entregable en Sourceforge. Véase el anexo IV 10 Evolución y Gestión de la Configuración. Proyecto 7-Zip 6. Gestión de incidencias y depuración Las incidencias en este proyecto se gestionan empleando el sistema de “Tickets” que ofrece la plataforma Sourceforge. Está dividida en tres partes: patches, bugs y “Feature Request”. Cualquier usuario puede reportar problemas, para ello deberá registrarse en “Sourceforge” y enviar un correo a “45797@discussion.sevenzip.p.re.sf.net” incluyendo la siguiente información: 1. Para cada Equipo implicado: a. La versión y el tipo de 7zip (32-bit / 64-bit) b. La versión y el tipo de Windows (32-bit / 64-bit) c. El tipo de CPU. d. El tamaño de tu memoria RAM. 2. Una descripción de su problema. El administrador de la wiki validará nuestra petición y abrirá una discusión en https://sourceforge.net/p/sevenzip/bugs/, donde se expondrán las posibles soluciones, y sus resultados. Si el problema es resuelto se cerrará el tema. Los Patch correspondientes a la solución parcial o completa de estos problemas se podrán encontrar en https://sourceforge.net/p/sevenzip/patches/ y posteriormente con la actualización de versión del programa. Según se desprende de la información publicada en la web del proyecto, la única persona responsable de la realización de estas tareas es Igor. No existe más documentación sobre cambios y aplicaciones de patches que la mostrada en la web, por lo que podemos suponer que la postura que adopta el desarrollador ante un cambio depende de su opinión personal sin ningún criterio fijo público. 6.1. Ejercicio En el anexo III se puede encontrar una guía en la que se detalla paso a paso la creación de un ticket, la creación de una respuesta al mismo, y la aceptación de ese ticket por parte del desarrollador o persona autorizada. 11 Evolución y Gestión de la Configuración. Proyecto 7-Zip 7. Gestión de la variabilidad En el proyecto 7zip no parecen utilizarse ninguno de los principios de gestión de la variabilidad impartidos en clase. El programa, una vez instalado, está completo y no se da elección a alterar el contenido en su instalación. Por otra parte, no sabemos si el desarrollador está utilizando, internamente, algún tipo de gestión de la variabilidad para la creación de nuevas versiones. Pero parece no ser así si observamos la escasa documentación disponible sobre las versiones lanzadas. Una posible aproximación a la gestión de la variabilidad podría ser dar la opción al usuario, en el proceso de instalación, de incluir o no ciertos paquetes en el programa, como podrían ser, por ejemplo, el correspondiente a la descompresión de .rar. En la variabilidad de cara al desarrollo, el desarrollador podría crear una línea base para el producto sobre la cual añadir funcionalidades, no obstante, dado que el proyecto solo consta del producto 7zip, la gestión de la variabilidad no tendría gran utilidad. Podría llegar utilizarse para la variación de las plataformas en las que está o estará disponible en un futuro el programa 7zip. 7.1. Ejercicio: Mostrar cómo se gestionaría la variabilidad mediante un esquema en el hipotético caso de que se podría modularizar el programa. Véase el anexo V 12 Evolución y Gestión de la Configuración. Proyecto 7-Zip 8. Integración continua La integración continua pretende integrar los distintos componentes de un proyecto. En este proyecto la integración continua si se llevase, lo hace en privado y no muestra documentación ni ha divulgado información sobre su proceso. Este proyecto se alimenta de otros proyectos para poder realizar su función correctamente. Necesita de otros compilados para poder trabajar con determinados tipos de archivos, como el WinUNRAR. A pesar de ello, no le es necesario mecanismos de integración continua, pues estos proyectos no le pertenecen al autor de 7zip. Él sólo se aprovecha de los entregables disponibles publicados. No hay documentación disponible sobre el uso de éstas herramientas de terceros, pero podemos suponer que la integración la realiza tras una batería de pruebas, comprobando que en cada nueva versión, el uso de estas aplicaciones no ha producido incompatibilidades con su desarrollo. Para poder visualizar una tarea de integración continua nosotros emplearemos Jenkins para que, automáticamente, el código sea recogido del repositorio y compilado. De este modo el desarrollador ahorra tiempo en la realización de estas tareas. 8.1. EJERCICIO: Configuración de Jenkins Véase el anexo VI 13 Evolución y Gestión de la Configuración. Proyecto 7-Zip 9. Mapa de herramientas Para la gestión del proyecto 7Zip se han empleado herramientas de ayuda tanto online como de uso local. Contamos con la herramienta Sourceforge, con la que hemos cubierto el repositorio GIT y la gestión de incidencias. Aparte, también permite alojar los archivos entregables y permite que la aplicación sea accesible para todos. La vinculación al repositorio se realiza mediante consola gracias a GIT. El repositorio pertenece a Sourceforge, permitiendo trabajar en él y permitiendo que todo el que quiera pueda descargarse el código de forma sencilla. También, a nivel local hemos utilizado Jenkins como ayuda para la integración continua y Visual Studio para la compilación. Jenkins permite gestionar la integración continua y comprobar errores. Está vinculado al repositorio GIT para poder trabajar con la última versión de la aplicación disponible. Esto permite realizar pruebas periódicamente con los datos del repositorio. Visual Studio C++ provee de todo lo necesario para poder compilar la aplicación de 7zip. No se utiliza su interfaz gráfica, sino que se llamará a su funcionalidad por consola. 14 Evolución y Gestión de la Configuración. Proyecto 7-Zip 10. Conclusiones La principal dificultad encontrada a la hora de evaluar la gestión de la configuración de éste proyecto es la falta de documentación por parte del creador del proyecto. Pese a la libertad de elegir proyecto, el desconocimiento de cómo se desarrollaba el mismo ha jugado un poco en nuestra contra. Sería beneficioso para los siguientes alumnos que cursen la asignatura que se acotasen los proyectos de software libre que se pueden elegir sobre la que realizar este trabajo. Por otra parte, hemos podido comprobar la importancia de la gestión de la configuración en un proyecto, tal y como los expertos con los que hemos tratado suelen asegurar. Dado que el proyecto 7zip tiene una carencia casi total de datos sobre la gestión publicada, nos ha resultado muy difícil ser capaces de estudiar y elaborar este informe. Está claro que no podemos obligar a todos los desarrolladores a seguir las mismas pautas, y más teniendo en cuenta el hecho de que el equipo de desarrolladores de 7zip, como ya se ha dicho en el documento, sólo cuenta, oficialmente, con un miembro. No obstante, si se tiene visión de futuro y ambición con respecto al proyecto que se tiene entre manos, pensamos que es aconsejable seguir los estándares establecidos para la elaboración de un código y una documentación aceptable, comprensible y reutilizable. Ya que no solo ayudará a la gestión del proyecto, sino que además proporcionará a futuros desarrolladores una base fiable y comprensible para continuar el proyecto o realizar uno similar. 15 Evolución y Gestión de la Configuración. Proyecto 7-Zip 11. Bibliografía 7-Zip | 7-Zip | SourceForge.net Manual Git | Página web de la asignatura | http://www.7-zip.org/ http://sourceforge.net/projects/sevenzip/ http://git-scm.com/doc http://1984.lsi.us.es/wiki-egc/index.php 16 Evolución y Gestión de la Configuración. Proyecto 7-Zip 12. Anexos Anexo I: Diario de Grupo. 25/11/2013 - Comienzo elaboración de documentación del proyecto. Se preparan los archivos en los que se trabajarán en grupo. 29/11/2013 - Reunión del grupo. Se reparten las tareas derivadas de éste proyecto entre los componentes del grupo. 02/12/2013 - Ampliación de contenidos en el documento. La estructura principal del documento es modificada para dar lugar a nuevos contenidos no previstos. 19/12/2013 - Reunión del grupo. Ampliación de contenidos en el documento para adecuarlo a los ejercicios relacionados con la máquina virtual. 20/12/2013 - Revisión de ejercicios. Se revisan los ejercicios propuestos y se redactan soluciones. También se solucionan problemas con la máquina virtual y se prepara correctamente para el proyecto. 22/12/2013 – Reunión de finalización. Se reúne el equipo de trabajo, se solucionan fallos en el documento y se retocan los apartados. 23/12/2013- Reunión para realizar entrega. Se reúne el equipo de trabajo para finalizar y subir el proyecto. Debido a que el equipo no llega a consenso para entregar, se pospone un día la entrega. 24/12/2013 – Entrega de la práctica. Repaso del documento y posterior subida a Opera. 17 Evolución y Gestión de la Configuración. Proyecto 7-Zip Anexo II: Datos para realizar conexión. Acceso al email: GMX.es Username: egc1314@gmx.es Password: egc20132014 Sourceforge: Sourceforge.es Username: egc-20132014 Password: egc20132014 Jenkins http://localhost:8080 Username: egc-20132014 Password: egc20132014 18 Evolución y Gestión de la Configuración. Proyecto 7-Zip Anexo III: Guía de creación y aceptación de un ticket. 1-Resumen (Página que aparece automáticamente al buscar el proyecto). 2-Vista de los tickets existentes. 19 Evolución y Gestión de la Configuración. Proyecto 7-Zip 3-Vista de creación de un nuevo ticket. 4-Una vez rellenado el formulario, pulsamos el botón “Save” y el ticket quedará registrado. 20 Evolución y Gestión de la Configuración. Proyecto 7-Zip 5-Vista detallada del ticket, incluyendo comentarios y la posibilidad de crear uno. 6-Una vez añadidos los datos del formulario, pulsamos en “Post” y el mensaje queda registrado. 21 Evolución y Gestión de la Configuración. Proyecto 7-Zip 7-De nuevo, la vista detallada del ticket (donde vemos el mensaje posteado). 8-Un desarrollador puede marcar un ticket como aceptado. 22 Evolución y Gestión de la Configuración. Proyecto 7-Zip 9-Vista general de los tickets donde aparece el ticket aceptado. 23 Evolución y Gestión de la Configuración. Proyecto 7-Zip ANEXO IV Una vez compilado el código, utilizando la herramienta Sourceforge procederemos a añadir un entregable. Lo primero que haremos será crear una carpeta con el número de versión. Para ello nos dirigimos al apartado “Files” del proyecto en Sourceforge y creamos la carpeta con “Add Folder” Seguidamente entramos en la carpeta y con “Add File”, seleccionamos los archivos a subir. 24 Evolución y Gestión de la Configuración. Proyecto 7-Zip ANEXO V Siguiendo el modelo OVM se ha esquematizado cómo podría el desarrollador modularizar parte de su código. Se ejemplifican tres “Variation Points”, con algunas variantes posibles. Se toma como opciones el formato de archivo con el que podría tratar, el tipo de archivo y el tipo de compresión con el que podría trabajar. Distinguimos entre varios formatos ampliamente conocidos, algunos tipos de archivos dependiendo de si éstos son únicos o están particionados, así como si la descompresión necesita de clave o está automatizada. 25 Evolución y Gestión de la Configuración. Proyecto 7-Zip ANEXO VI Se han seguido los siguientes pasos para la configuración de Jenkins: 1234- Instalación de Jenkins desde la página web http://jenkins-ci.org/ Activación de la seguridad y creación de un usuario Instalación del plugin de GIT (Jenkins GIT plugin 2.0) Creación de una tarea, correspondiente al proyecto. Como podremos comprobar en la siguiente imagen, se configura la URL del repositorio GIT correspondiente. 26 Evolución y Gestión de la Configuración. 5- Proyecto 7-Zip Configuración de las pruebas Las pruebas se realizarán una vez al mes y la prueba consistirá en compilar el proyecto mediante comandos de Windows. Las pruebas son totalmente personalizables. El creador de la aplicación podría cambiarlas por otras que tuviesen un mayor peso en la integración o que estén relacionadas con partes concretas del proyecto. 27