<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>21projects - Consultoría tecnológica y desarrollo Web y Móvil &#187; subversion</title>
	<atom:link href="http://www.21projects.com/blog/tag/subversion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.21projects.com</link>
	<description>Projects from the 21st century</description>
	<lastBuildDate>Wed, 07 Oct 2009 13:07:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Gestión de proyectos software con Trac</title>
		<link>http://www.21projects.com/blog/gestion-de-proyectos-software-con-trac/</link>
		<comments>http://www.21projects.com/blog/gestion-de-proyectos-software-con-trac/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 06:50:26 +0000</pubDate>
		<dc:creator>Ariel Camus</dc:creator>
				<category><![CDATA[Gestión]]></category>
		<category><![CDATA[agil]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[extreme programming]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://www.21projects.com/?p=68</guid>
		<description><![CDATA[Desde hace tiempo y con la aparición de Internet el esquema de desarrollo de software de las empresas ha cambiado. Aunque algunas aún siguen trabajando con los antiguos procesos en cascada en donde se dedica el 70% del tiempo a los procesos burocráticos y de documentación,  la realidad es que hay muchas empresas nuevas que [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Desde hace tiempo y con la aparición de Internet el esquema de desarrollo de software de las empresas ha cambiado. Aunque algunas aún siguen trabajando con los antiguos procesos en cascada en donde se dedica el 70% del tiempo a los procesos burocráticos y de documentación,  la realidad es que hay muchas empresas nuevas que basan el desarrollo en equipos pequeños y ágiles.</p>
<p style="text-align: left;">Así han aparecido multitud de metodologías de desarrollo ágil como pueden ser Extreme Programming o Scrum. Parte de la filosofía de estas metodologías consiste en reducir al mínimo el proceso de documentación y evitar mantener largas reuniones para tomar las decisiones necesarias.</p>
<p style="text-align: left;">Sin embargo, que el desarrollo se haga de manera ágil no significa que se deba obviar el proceso de captura de requisitos, testeo y documentación. Por el contrario, consiste en utilizar otro tipo de técnicas que permita realizar estos procesos de manera sencilla y productiva.</p>
<p><img class="size-full wp-image-69" style="border: 0pt none;float:right;" title="trac_logo" src="http://www.21projects.com/wp-content/uploads/2009/09/trac_logo.png" alt="trac logo Gestión de proyectos software con Trac" width="214" height="61" /></p>
<p style="text-align: left;">En 21projects y en muchas otras empresas de desarrollo se utiliza una herramienta de gran valor y potencial. Se trata de Trac. En <a title="Trac-web" href="http://trac.edgewall.org/" target="_blank">la web</a> de este proyecto open source se define a la herramienta de la siguiente manera:</p>
<blockquote>
<p style="text-align: left;">Trac is an enhanced wiki and issue tracking system for software development projects. Trac uses a minimalistic approach to web-based software project management.</p>
</blockquote>
<p style="text-align: left;">
<p style="text-align: center;">
<p style="text-align: left;">Resumiendo, Trac es una herramienta que permite llevar un control de las funcionalidades y errores del código que se está implementando. Sin embargo, Trac es una herraminta mucho más completa que esto, pues está construido sobre una wiki que permite documentar todo el software sobre una única plataforma, integrando la documentación con el control de funcionalidades y errores a implementar así como también con el propio código a través de un repositorio de Subversion del cual ya se habló en un <a title="Gestión de software con Subversion" href="http://www.21projects.com/blog/gestion-de-software-con-subversion/" target="_blank">post anterior</a>.</p>
<p style="text-align: left;">Conozco mucha gente que después de haber probado Trac en su equipo de desarrolladores han dicho frases como: <em>&#8220;No se como puedo haber vivido hasta ahora sin una herramienta como Trac&#8221;</em>. Y la verdad es que, aunque no se trata de una herramienta imprescindible, sí que resulta extremadamente útil. Además de las opciones básicas de Trac, también es posible instalar nuevos plugins que cubren desde la integración de repositorios Git hasta la gestión de metodologías ágiles como Scrum.</p>
<p style="text-align: left;">¿Pero qué significa todo esto a la hora de la práctica? Lo mejor es verlo con un ejemplo. Veamos como sería el proceso de creación de un nuevo proyecto en el equipo de 21projects (Trac puede utilizarse para cualquier tipo de lenguaje, ya sea una aplicación web, desarrollo para iPhone o Android o bien para gestionar documentación, imágenes o cualquier otro tipo de contenido).</p>
<p style="text-align: left;"><strong>Captura de requisitos:</strong></p>
<p style="text-align: left;">En esta fase, nos reunimos todo el equipo de desarrolladores (y  el cliente, si se trata de un proyecto para terceros) bien en persona o utilizando un documento compartido en GoogleDocs para definir cuáles son los requisitos de la aplicación. Normalmente, primero desarrollamos los casos de uso básicos de la aplicación y a partir de ellos creamos la lista de requisitos, siempre en colaboración directa con el cliente.</p>
<p style="text-align: left;">De esta fase saldrá una lista de requisitos funcionales con una descripción de cada uno, dejando claro qué es lo que se espera y que ha de tener para que se considere que ese requisito está &#8220;hecho&#8221;.</p>
<p style="text-align: left;"><strong>Integración de los requisitos en Trac:</strong></p>
<p style="text-align: left;">A partir de este momento, procederíamos a ingresar en Trac cada uno de los requisitos como un nuevo Ticket. En Trac, cada funcionalidad a implementar o cada bug debe ser introducido como un Ticket, que estará asociado a una persona y a un Milestone del proyecto así como a una serie de propiedades adicionales como pueden ser la versión del desarrollo, el tipo de Ticket, o la severidad de este. Un Milestone es un hito de desarrollo que se propone. Dentro de Trac podemos crear tantos Milestones como queramos y ponerles una fecha límite. Así, se podría decidir crear un nuevo Milestone que representa el lanzamiento de la primera versión del producto y todos los Tickets de esta iteración serán agregados a este Milestone.</p>
<p style="text-align: center;"><strong><span style="color: #ff0000;"><a rel="attachment wp-att-82" href="http://www.21projects.com/blog/gestion-de-proyectos-software-con-trac/trac-new-ticket-interface/"><img class="size-full wp-image-82 aligncenter" style="border: 0pt none;" title="trac-new-ticket-interface" src="http://www.21projects.com/wp-content/uploads/2009/09/trac-new-ticket-interface.JPG" alt=" Gestión de proyectos software con Trac" width="580" height="454" /></a></span></strong></p>
<p style="text-align: center;"><em>Interfaz de creación de Tickets</em></p>
<p style="text-align: center;">
<p style="text-align: left;">Trás haber ingresado todos los Tickets en el sistema, cada desarrollador participante podrá decidir en qué funcionalidad va a trabajar y asignarse ese Ticket, que quedará marcado con su nombre para que los demás sepan que él está trabajando en su implementación.</p>
<p style="text-align: left;">Mientras el desarrollo esté en curso, podremos utilizar la Wiki de Trac para ir documentando todo el proceso. Aunque esta Wiki tiene una sintaxis particular que viene reflejada en <a title="documentación de Trac" href="http://trac.edgewall.org/wiki/TracGuide" target="_blank">la documentación</a> de la aplicación, sus posibilidades son muy amplias e interesantes, ya que por ejemplo, cada vez que pongamos el caracter &#8220;#&#8221; seguido de un número se creará un enlace automáticamente al Ticket que tenga asignado ese número (cada Ticket tiene un identificador numérico único).</p>
<p style="text-align: left;">En nuestro caso, utilizamos la página principal de nuestro Trac (que es una página wiki) para enlazar los diferentes documentos que utilizamos, mantener una lista de enlaces externos de interés y documentar los proyectos propios y de clientes así como las ideas de posibles proyectos futuros.</p>
<p style="text-align: center;">
<p style="text-align: center;"><img class="aligncenter size-full wp-image-121" title="inicio" src="http://www.21projects.com/wp-content/uploads/2009/10/inicio.jpg" alt="inicio Gestión de proyectos software con Trac" width="580" height="370" /></p>
<p style="text-align: center;"><em>Página principal del Trac de 21projects</em></p>
<p style="text-align: center;">
<p style="text-align: left;">
<p style="text-align: left;">De esta manera, es posible ir documentando todo el proceso de desarrollo, incluir imágenes, enlaces y crear una documentación fácil de modificar y sobre todo, muy potente gracias a las funcionalidades de Trac.</p>
<p style="text-align: left;">Cada vez que un desarrollador acabe con la implementación de un Ticket, deberá marcar ese Ticket como resuelto y trás haber subido el código al repositorio Subversion, este cambio se reflejará en Trac a través de la sección que nos permite navegar por nuestro código.</p>
<p style="text-align: left;"><span style="color: #ff0000;"><span style="color: #000000;">Aunque existen muchas otras funcionalidades que vienen con Trac por defecto y muchas más que pueden añadirse a través de nuevos plugins, os dejamos que experimentéis con esta fantástica herramienta que permite mejorar la gestión de un nuevo proyecto software tanto a nivel de código como a nivel de documentación.</span></span> Otra fantástica idea es abrir el Trac para que los usuarios u otras empresas puedan ver lo que hacemos e incluso colaborar añadiendo nuevos Tickets al encontrar un bug en la aplicación.</p>
<p style="text-align: left;">Si tenéis cualquier duda acerca de esta herramienta u os interesa utilizarla en vuestro negocio y no sabéis como empezar contactad con nosotros, estaremos encantados de ayudaros.<strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.21projects.com/blog/gestion-de-proyectos-software-con-trac/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Gestión de software con Subversion</title>
		<link>http://www.21projects.com/blog/gestion-de-software-con-subversion/</link>
		<comments>http://www.21projects.com/blog/gestion-de-software-con-subversion/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 19:50:09 +0000</pubDate>
		<dc:creator>Ariel Camus</dc:creator>
				<category><![CDATA[Gestión]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[scm]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://www.21projects.com/?p=38</guid>
		<description><![CDATA[Cuando se desarrolla software, y en especial cuando se hace en equipo, es fundamental contar con un mecanismo que permita gestionar el código que producimos.
La gestión de los cambios que se producen sobre el software se convierte en algo indispensable cuando varios programadores trabajan sobre el mismo código. El utilizar una herramienta de este tipo [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando se desarrolla software, y en especial cuando se hace en equipo, es fundamental contar con un mecanismo que permita gestionar el código que producimos.</p>
<p>La gestión de los cambios que se producen sobre el software se convierte en algo indispensable cuando varios programadores trabajan sobre el mismo código. El utilizar una herramienta de este tipo facilita la labor de integrar el código de los diferentes participantes y sobre todo, permite llevar un control de los cambios que se han realizado sobre cada uno de los componentes software.</p>
<p>Los sistemas de control de versiones y configuraciones no solo se aplican al desarrollo de software, sino también a otros campos, como por ejemplo, documentos, imágenes o páginas web. En 21projects trabajamos con varios lenguajes de programación y todos ellos conviven en nuestro sistema de control de versiones. Incluso cuando desarrollamos para iPhone o Android, donde suele intervenir un único programador, también mantenemos todo el código en nuestro repositorio central, evitando así que pueda perderse el software debido a algún fallo en disco de nuestros PCs o algún otro inconveniente.</p>
<p>En este caso, vamos a hacer una introducción a la herramienta de gestión de versiones que utilizamos en 21projects. <strong>Subversion</strong> es una herramienta open source diseñada exclusivamente para sustituir a su antecesor, <a title="cvs" href="http://es.wikipedia.org/wiki/CVS" target="_blank">CVS</a>, que presentaba algunos inconvenientes muy importantes a la hora de gestionar el software (por ejemplo, no es posible renombrar un fichero o eliminar un directorio que tenga archivos dentro). Subversion ha sido diseñado según una arquitectura cliente-servidor, en donde cada programador edita el código localmente y lo &#8220;sube&#8221; a un repositorio central, el servidor Subversion.</p>
<p style="text-align: center;"><a rel="attachment wp-att-55" href="http://www.21projects.com/blog/gestion-de-software-con-subversion/subversion_logo-384x332/"><img class="size-full wp-image-55 aligncenter" style="border: 0pt none;" title="subversion_logo-384x332" src="http://www.21projects.com/wp-content/uploads/2009/09/subversion_logo-384x332.png" alt="subversion logo 384x332 Gestión de software con Subversion" width="269" height="232" /></a></p>
<p>Para conocer ventajas e inconvenientes adicionales de Subversion os dejo al final los enlaces a la Wikipedia y a su Web oficial. Existen otras alternativas a Subversion, como <a title="git" href="http://git-scm.com/" target="_blank"><strong>Git</strong></a>, de las que hablaremos en otro post. Lo realmente importante que quería transmitir en este artículo era el uso de Subversion (aka SVN) y algunas recomendaciones personales para evitar problemas.</p>
<p>Una de las grandes incógnitas que pueden surgir a la hora de decantarse por Subversion es si instalarlo en nuestros propios servidores o bien subcontratar el servicio a una empresa que se dedique a ello. En el caso de 21projects hemos decidido subcontratarlo y por ello no os vamos a explicar como instalarlo (aunque es muy sencillo). Los motivos para haber tomado esta decisión son los siguientes:</p>
<ul>
<li>Necesidad de centrarnos en nuestro business core y no dedicar tiempo a mantener las herramientas, que como Subversion, deben facilitar nuestra labor y no suponer un problema añadido.</li>
<li>Bajo coste del servicio subcontratado.</li>
<li>Los datos guardados en el repositorio son de gran importancia para nuestro negocio, es por ello que preferimos confiar en una empresa externa que se encargue de mantener backups periódicos de la información y que pueda ofrecernos garantías.</li>
<li>Integración con otras herramientas cuyo mantenimiento e instalación no es trivial. Por ejemplo, <a title="Trac" href="http://trac.edgewall.org/" target="_blank">Trac</a> (hablaremos de esta herramienta en otro post).</li>
</ul>
<p>Es por estos motivos que en 21projects hemos decidido confiar en otra empresa y delegar la responsabilidad de su mantenimiento. En nuestro caso trabajamos con <a title="RepositoyHosting" href="http://repositoryhosting.com/" target="_blank">RepositoyHosting</a>, una empresa que ofrece un plan de precios muy sencillo y económico, con unas características más que de sobra y un plan de administración que aunque sencillo es muy cómodo. Adicionalmente, <a title="RepositoyHosting" href="http://repositoryhosting.com/" target="_blank">RepositoryHosting</a> también ofrece Trac integrado lo cual era una condición indispensable a la hora de elegir la empresa.</p>
<p>Una vez que contratado el servicio, es necesario crear un repositorio para nuestros proyectos. Un repositorio puede comprenderse como un directorio con sus respectivos subdirectorios y ficheros. En dicho repositorio se almacenará el software y podemos elegir tener un único repositorio para todos nuestros proyectos o bien crear uno nuevo por cada proyecto.</p>
<p>Antes de comenzar con el uso de Subversion, quiero comentar que para organizar los proyectos se suele asumir un convenio. Se trata de crear por cada proyecto tres directorios bajo los cuales se guardará nuestro software. La explicación de cada uno de los directorios es la siguiente:</p>
<ul>
<li><strong>Trunk</strong>: Directorio de un repositorio bajo el cual se encuentran los directorios y ficheros de nuestro proyecto.</li>
<li><strong>Tag</strong>: Directorio bajo el cual se almacenan las diferentes versiones o releases de nuestro software.</li>
<li><strong>Branches</strong>: Directorio donde se almacenan ramas de nuestro proyecto. Una rama es una desviación que se toma a partir de una versión del software para desarrollar alguna funcionalidad en paralelo con el desarrollo principal para su posterior integración. Hay empresas que trabajan realizando ramas nuevas por cada funcionalidad que se desea añadir y las hay que procuran no hacer ramas nuevas para evitar los posibles problemas de integración en un futuro. Nosotros preferimos una alternativa intermedia, procurando abrir una nueva rama cuando no es seguro que la funcionalidad a implementar se vaya a integrar con la versión principal (por ejemplo, para pruebas de concepto).</li>
</ul>
<p>Por otro lado, queda comentar los principales comandos para trabajar con Subversion:</p>
<ul>
<li><strong>Import</strong>: Comando utilizado para subir al repositorio la estructura inicial de nuestro proyecto.</li>
<li><strong>Checkout</strong>: Comando para descargar en un PC un proyecto desde un repositorio.</li>
<li><strong>Add</strong>: Comando utilizado para añadir un fichero a nuestro proyecto. No es subido al repositorio hasta que se indique con el comando &#8220;commit&#8221;. El comando add solo deja &#8220;marcado&#8221; ese fichero o directorio como parte del repositorio.</li>
<li><strong>Delete</strong>: Comando que permita marcar un fichero o directorio para ser eliminado del respositorio.</li>
<li><strong>Commit</strong>: Comando que nos permite subir al repositorio todos los cambios hechos sobre un proyecto en local.</li>
<li><strong>Update</strong>: Comando que nos permite actualizar nuestro proyecto en local desde el repositorio central.</li>
</ul>
<p>Aunque existen clientes gráficos para la comunicación con un repositorio Subversion, voy a poner un ejemplo de cómo se interactúa con un servidor Subversion desde consola.</p>
<p>Primero creamos la estructura de directorios de nuestro proyecto en local:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> miProyecto
<span style="color: #7a0874; font-weight: bold;">cd</span> miProyecto
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> trunk branches tags</pre></div></div>

<p>A continuación, subimos la estructura inicial al repositorio en el servidor central:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> import miProyecto http:<span style="color: #000000; font-weight: bold;">//</span>urlDelRepositorio<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Initial import&quot;</span></pre></div></div>

<p>Ahora podemos borrar el directorio que habíamos creado inicialmente en local:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ..
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-r</span> miProyecto<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>Finalmente, obtenemos una copia de trabajo del repositorio central:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> checkout http:<span style="color: #000000; font-weight: bold;">//</span>urlDelRepositorio<span style="color: #000000; font-weight: bold;">/</span>miProyecto<span style="color: #000000; font-weight: bold;">/</span>trunk miProyecto</pre></div></div>

<p>A partir de este momento, comenzaríamos a programar y guardar los ficheros y directorios creados bajo el directorio miProyecto. Cada nuevo fichero o directorio creado deberemos marcarlo como parte del repositorio de la siguiente manera:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> add file_or_dir_name</pre></div></div>

<p>Una vez hemos terminado de hacer cambios, deberemos reflejarlos en el repositorio central en el servidor Subversion:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> commit <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Guardando los cambios recientes, agregada la funcionalidad X&quot;</span> http:<span style="color: #000000; font-weight: bold;">//</span>urlDelRepositorio<span style="color: #000000; font-weight: bold;">/</span>miProyecto</pre></div></div>

<p>Si otros programadores van a realizar cambios sobre el código, cuando queramos volver a trabajar en el proyecto deberemos obtener todos los cambios realizados sobre este a través del siguiente comando:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> update</pre></div></div>

<p>Para finalizar con este artículo, quiero destacar las <strong>dos reglas de oro a seguir para evitar problemas propios y evitárselos a los demás</strong>. Todos deberíamos tener estas reglas impresas en letra grande al lado de nuestra pantalla hasta haberlos interiorizado:</p>
<ul>
<li><strong>Nunca harás un commit de código que no compile o tenga errores</strong>: Si lo haces, cuando otro programador haga un update su código también tendrá esos errores y por tanto no compilará.</li>
<li><strong>Siempre harás un update antes de empezar a trabajar sobre el código</strong>. De esta manera, te aseguras de estar trabajando siempre sobre la última versión del código.</li>
</ul>
<p>Enlaces:<br />
<a title="CVS-Wikipedia" href="http://es.wikipedia.org/wiki/CVS" target="_blank">CVS &#8211; Wikipedia</a><br />
<a title="Subversion-web-oficial" href="http://subversion.tigris.org/" target="_blank">SVN &#8211; Web oficial</a><br />
<a title="Subversion-wikipedia" href="http://es.wikipedia.org/wiki/Subversion" target="_blank">SVN &#8211; Wikipedia</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.21projects.com/blog/gestion-de-software-con-subversion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

