<?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>Softqanetwork.com &#187; Integración Continua</title>
	<atom:link href="http://www.softqanetwork.com/category/integracion-continua/feed" rel="self" type="application/rss+xml" />
	<link>http://www.softqanetwork.com</link>
	<description></description>
	<lastBuildDate>Thu, 03 May 2012 23:41:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Mejora la calidad a través de tus &#8220;Builds&#8221;</title>
		<link>http://www.softqanetwork.com/mejora-la-calidad-a-traves-de-tus-builds</link>
		<comments>http://www.softqanetwork.com/mejora-la-calidad-a-traves-de-tus-builds#comments</comments>
		<pubDate>Tue, 09 Jun 2009 10:52:19 +0000</pubDate>
		<dc:creator>Javierpello</dc:creator>
				<category><![CDATA[Integración Continua]]></category>

		<guid isPermaLink="false">http://www.softqanetwork.com/?p=529</guid>
		<description><![CDATA[Las mejoras de nuestro producto de software deben considerarse en cada una de las fases del &#8220;Software Development Life Cycle&#8221; (SDLC), desde la toma de requisitos hasta el &#8220;Deployment&#8221;. En esta ocasión me gustaría centrarme en como podemos mejorar la calidad de nuestros Builds considerando unas sencillas &#8220;Best Practices&#8221;: Mantén todo tu código en un [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.softqanetwork.com%2Fmejora-la-calidad-a-traves-de-tus-builds"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.softqanetwork.com%2Fmejora-la-calidad-a-traves-de-tus-builds&amp;source=softqanetwork&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignnone size-full wp-image-534" style="float: left" title="ass" src="http://www.softqanetwork.com/wp-content/uploads/2009/06/ass.gif" alt="ass" width="129" height="91" />Las mejoras de nuestro producto de software deben considerarse en cada una de las fases del &#8220;Software Development Life Cycle&#8221; (SDLC), desde la toma de requisitos hasta el &#8220;Deployment&#8221;. En esta ocasión me gustaría centrarme en como podemos mejorar la calidad de nuestros Builds considerando unas sencillas &#8220;Best Practices&#8221;:</p>
<ul>
<li> <strong>Mantén todo tu código en un repositorio común</strong>.  Existen muchas herramientas Open Source, como por ejemplo el Subversion.</li>
<li><strong>Realiza un Build completo todos los días</strong>. Muchas veces se realizan a lo largo del día una sería de Buids incrementales (ya que son más rápidos), pero esto puede ocasionar problemas.  Por eso es recomendable hacer un build completo todas las noches (Nightly Build).</li>
<li><strong>Automatiza tus Builds</strong>. Usa scripst para automatizar todo el proceso, conseguirás un proceso repetible y evitas fallos derivados de procesos manuales. <span id="more-529"></span></li>
<li><strong>Incluye tus test unitarios como parte del sistema de Builds</strong>. Una vez el build haya terminado, lanza tus pruebas unitarias. Si algo se ha roto lo podrás idetificar rápidamente. Puedes introducir también herramientas de chequeo de código como el PMD, find bugs or checkstyle.</li>
<li><strong>Haz análisis y medición de la covertura del código (code coverage)</strong>. Te ayudará para saber que la cobertura de tus test unitarios, ayudándote a incrementar el número de test unitarios para mejorar la cobertura&#8230;mejorando así la calidad final de tu producto (evalúa la eficacia de tu código).</li>
<li><strong>Realiza pruebas funcionales una vez terminado todo el proceso de Build</strong>. Una vez el proceso ha terminado, puedes hacer un Sanity Test de la funcionalidad utilizando una de las muchas herramientas que hay en el mercado, como por ejemplo Selenium&#8230;o bien puedes utilizar QTPro o Silktest. De esta manera tendrás una mayor seguridad de que los cambios introducidos no hay roto ninguna de las funcionalidades más importantes para negocio.</li>
<li><strong>Y finalmente, podrías realizar auditorias periódicas de código</strong>. Introdúcelo dentro de tu proceso de build, te ayudará para saber si tu código cumple con los estándares de codificación establecidos por la empresa.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.softqanetwork.com/mejora-la-calidad-a-traves-de-tus-builds/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integración continua con CruiseControl</title>
		<link>http://www.softqanetwork.com/integracion-continua-con-cruisecontrol</link>
		<comments>http://www.softqanetwork.com/integracion-continua-con-cruisecontrol#comments</comments>
		<pubDate>Thu, 21 Jun 2007 22:01:16 +0000</pubDate>
		<dc:creator>Javierpello</dc:creator>
				<category><![CDATA[Integración Continua]]></category>

		<guid isPermaLink="false">http://softqanetwork.com/?p=45</guid>
		<description><![CDATA[¿Te gustaría construir, testear y &#8220;deployar&#8221; tu software de forma estable y fiable? Tal vez la integración continua te pueda ayudar. La Integración continua (continuous integration en inglés) es un proceso automático que permite comprobar continuamente que todos los cambios realizados por cada uno de los desarrolladores, no producen problemas de integración con el código [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.softqanetwork.com%2Fintegracion-continua-con-cruisecontrol"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.softqanetwork.com%2Fintegracion-continua-con-cruisecontrol&amp;source=softqanetwork&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><font face="Arial" size="2">¿Te gustaría construir, testear y &#8220;deployar&#8221; tu software de forma estable y fiable? Tal vez la integración continua te pueda ayudar. La Integración continua (continuous integration en inglés) es un proceso automático que permite comprobar continuamente que todos los cambios realizados por cada uno de los desarrolladores, no producen problemas de integración con el código del resto del equipo. Se pierde mucho tiempo integrando todo nuestro código, y sobre todo, pasar del entorno de desarrollo al de producción. Esto nos permite construir nuestro código desde las fuentes, simular nuestro entorno de producción y realizar algunas pruebas que garanticen su estabilidad.</font></p>
<p><span id="more-45"></span> <font face="Arial" size="2"><span style="color: #ff8000" id="b81"><strong>¿Que herramientas puedo usar?</strong></span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b82",127,127,127,255,255,255,6,6,6);</script><font face="Arial" size="2"><span style="color: #7f7f7f" id="b82"><strong><u><br />
</u></strong></span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b77",0,0,0,255,255,255,12,12,12);</script><font face="Arial" size="2"><span style="color: #000000" id="b77">Para realizar Integración continua podemos encontrar herramientas tanto comerciales como Open Source. Algunas de las más conocidas son el CruiseControl (Open Source), AntHill (Comercial/Open Source) y el DamageControl. Yo personalmente sólo he trabajado con el framework de CruiseControl, por lo cual será del que hable en las siguientes líneas&#8230;</span></font></p>
<p><font face="Arial" size="2">El CruiseControl al fin y al cabo es un framework que nos ayudará a automatizar nuestros procesos Java. Para ello utilizaremos la herramienta Ant (ANT es un framework para realizar scripts), que nos permite llevar a cabo la mayoría de las tareas que realizamos de forma manual.<br />
</font><script type="text/javascript">llamadas[llamadas.length]= new Array("b83",127,127,127,255,255,255,6,6,6);</script><font face="Arial" size="2"><span style="color: #7f7f7f" id="b83"><br />
</span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b84",255,128,0,255,255,255,0,6,12);</script><font face="Arial" size="2"><span style="color: #ff8000" id="b84"><strong>¿Que se necesito para instalar el CruiseControl?</strong></span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b85",127,127,127,255,255,255,6,6,6);</script><font face="Arial" size="2"><span style="color: #7f7f7f" id="b85"><br />
</span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b78",0,0,0,255,255,255,12,12,12);</script><font face="Arial" size="2"><span style="color: #000000" id="b78">Lo primero y más importante es tener una máquina dedica a la integración continua, a poder ser, que tenga las mismas características que la maquina que tendremos en producción. También es muy importante que tengamos un repositorio de control de versiones dedicado a nuestra integración.</span></font></p>
<p><font face="Arial" size="2"><span style="color: #ff8000" id="b100"><strong>¿Se verá afectado el equipo?</strong></span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b101",127,127,127,255,255,255,6,6,6);</script><font face="Arial" size="2"><span style="color: #7f7f7f" id="b101"><br />
</span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b87",0,0,0,255,255,255,12,12,12);</script><font face="Arial" size="2"><span style="color: #000000" id="b87">Como ya había comentado con anterioridad, la implantación de un sistema de integración continua con llevará un serie de cambios y mucha disciplina. En muchos proyectos no se es consciente de que se trabaja en equipo hasta que llega el momento de la integración final.</span></font></p>
<p><font face="Arial" size="2">La integración continua hace que nuestro desarrollo sea incremental. Los nuevas funcionalidades se añadirán, evitando que las anteriores dejen de funcionar. Cuando el conjunto de funcionalidades de nuestro sistema ofrezca la posibilidad de tener un software coherente con nuevas posibilidades, entonces en ese caso deberemos crear una nueva versión.</font></p>
<p><script type="text/javascript">llamadas[llamadas.length]= new Array("b102",255,127,0,255,255,255,0,6,12);</script><font face="Arial" size="2"><span style="color: #ff7f00" id="b102"><strong>Daily Build</strong></span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b88",0,0,0,255,255,255,12,12,12);</script><font face="Lucida" size="2"><span style="color: #000000" id="b88"><br />
</span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b89",0,0,0,255,255,255,12,12,12);</script><font face="Arial" size="2"><span style="color: #000000" id="b89">Uno de los objetivos principales de la integración continua es realizar continuamente integraciones, proceso muy útil para los desarrolladores ya que cuanto más amenudo se realicen antes se identificarán posibles defectos.</span></font></p>
<p><font face="Arial" size="2">Pero, además, podemos usar el CruiseControl para hacer Daily Builds. Para ello schedularemos una hora determinada del día (preferiblemente por la noche) para ejecutar la integración.</font></p>
<p><font face="Arial" size="2">Como había comentado al principio, el objetivo de este tipo de herramientas es automatizar tareas que hacemos manualmente. Por eso, si realizamos frecuentemente pruebas funcionales automáticas, podríamos añadir estas pruebas como tarea a nuestro Daily build. De esta forma, no sólamente se integrará todo nuestro código, se ejecutarán las pruebas unitarias, inpección de código, etc&#8230;sino que además diariamente ejecutaremos también toda nuestra batería de pruebas automaticas.</font></p>
<p><font face="Arial" size="2">En nuestro caso, hemos integrado nuestras pruebas funcionales automatizadas con SilkTest a nuestro Daily build. Pero bueno, otras herramientas como selenium se pueden añadir como tarea facilmente en nuestro CruiseControl:</font></p>
<p><script type="text/javascript">llamadas[llamadas.length]= new Array("b90",0,0,0,255,255,255,12,12,12);</script><font face="Arial" size="1"><span style="color: #000000" id="b90"><em>&lt;selenium<br />
browserExe=&#8221;C:Program FilesInternet Exploreriexplore.exe&#8221;<br />
testSuiteUrl=&#8221;http://localhost/Selenium/TestRunner.html?auto=true&amp;resultsUrl=testsHandleResults.php&#8221;<br />
maximumWaitTimeInSeconds=&#8221;100&#8243;<br />
resultsFile=&#8221;Selenium	estsTestSummary.xml&#8221;<br />
failonerror=&#8221;false&#8221;<br />
/&gt;</em></span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b91",0,0,0,255,255,255,12,12,12);</script><font face="Arial" size="2"><span style="color: #000000" id="b91"><em><br />
</em></span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b92",0,0,0,255,255,255,12,12,12);</script><font face="Lucida" size="2"><span style="color: #000000" id="b92"><br />
</span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b103",255,127,0,255,255,255,0,6,12);</script><font face="Arial" size="2"><span style="color: #ff7f00" id="b103"><strong>Conclusión</strong></span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b93",0,0,0,255,255,255,12,12,12);</script><font face="Lucida" size="2"><span style="color: #000000" id="b93"><br />
</span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b94",0,0,0,255,255,255,12,12,12);</script><font face="Arial" size="2"><span style="color: #000000" id="b94">La integración continua nos puede ayudar a mejor la calidad de nuestro proyecto, ayudándonos a identificar de manera temprana posibles problemas.</span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b95",0,0,0,255,255,255,12,12,12);</script><font face="Lucida" size="2"><span style="color: #000000" id="b95"></span></font></p>
<p><script type="text/javascript">llamadas[llamadas.length]= new Array("b104",255,127,0,255,255,255,0,6,12);</script><font face="Arial" size="2"><span style="color: #ff7f00" id="b104"><strong>Referencias</strong></span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b96",0,0,0,255,255,255,12,12,12);</script><font face="Lucida" size="2"><span style="color: #000000" id="b96"><br />
</span></font><script type="text/javascript">llamadas[llamadas.length]= new Array("b97",0,0,0,255,255,255,12,12,12);</script><font face="Arial" size="2"><span style="color: #000000" id="b97"><em>- &#8220;Pragmatic Project Automation: How to Build, Deploy, and Monitor Java Apps&#8221; </em>by Mike Clark</span></font></p>
<p><font face="Arial" size="2">- Martin Fowler &#8211; </font><script type="text/javascript">llamadas[llamadas.length]= new Array("b98",0,0,0,255,255,255,12,12,12);</script><font face="Arial" size="2"><span style="color: #000000" id="b98"><em><u>http<a href="http://www.martinfowler.com/" target="_blank">://www.martinfowler.com</a></u></em></span></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.softqanetwork.com/integracion-continua-con-cruisecontrol/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

