<?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>jose raya</title>
	<atom:link href="http://www.joseraya.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.joseraya.net</link>
	<description>agile software developer</description>
	<lastBuildDate>Tue, 05 Apr 2011 14:55:55 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Test Driven Development</title>
		<link>http://www.joseraya.net/test-driven-development</link>
		<comments>http://www.joseraya.net/test-driven-development#comments</comments>
		<pubDate>Mon, 04 Apr 2011 16:55:04 +0000</pubDate>
		<dc:creator>jose</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[practicas]]></category>
		<category><![CDATA[quees]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://www.joseraya.net/?p=5</guid>
		<description><![CDATA[¿Qué es? El desarrollo guiado por pruebas (TDD, Test Driven Development) se basa en la unión de dos prácticas: Test First y Refactoring. Test first consiste en escribir las pruebas antes que el código. Dicho de otra manera, no se añade comportamiento nuevo si no hay antes una prueba que lo verifique. El refactoring, a [...]]]></description>
				<content:encoded><![CDATA[<p><strong>¿Qué es?</strong><br />
El desarrollo guiado por pruebas (TDD, Test Driven Development) se basa en la unión de dos prácticas: Test First y Refactoring.</p>
<p><strong>Test first</strong> consiste en escribir las pruebas antes que el código. Dicho de otra manera, no se añade comportamiento nuevo si no hay antes una prueba que lo verifique.</p>
<p>El <strong>refactoring</strong>, a su vez, consiste en modificar la estructura (el diseño) de un sistema sin modificar el comportamiento.</p>
<p>La combinación de ambas técnicas nos permite distinguir dos &#8220;estados mentales&#8221; durante la creación de código: añadir comportamiento, en el que nos centramos en la calidad de las pruebas, y añadir estructura, en el cual nos centramos en la calidad del diseño.</p>
<p><strong>¿Para qué se hace?</strong><br />
Fundamentalmente, para escribir <strong>código limpio que funciona</strong>. La principal ventaja del código escrito mediante TDD es que sabemos que funciona y podemos demostrarlo pasando las pruebas.</p>
<p>Como resultado &#8220;secundario&#8221;, al escribir las pruebas antes que el código, nos aseguramos de que tenemos un conjunto suficientemente amplio de <strong><a href="http://es.wikipedia.org/wiki/Pruebas_de_regresi%C3%B3n">pruebas de regresión</a></strong> lo que nos permitirá ser más atrevidos durante la fase de refactoring ya que sabemos que, en caso de &#8220;romper&#8221; alguna funcionalidad, las pruebas lo detectarán.</p>
<p>Otra ventaja es que las pruebas <strong>documentan</strong> el comportamiento del código de manera inambigua y verificable (propiedades básicas de cualquier especificación) y, además, no se quedan obsoletas ya que, si cambia el código que documentan en alguno de los aspectos documetados, dejan de pasar.</p>
<p>Por último, también creo que es importante destacar el <strong>cambio de punto de vista</strong> a la hora de diseñar la interfaz pública de nuestro código (la API). Si empezamos escribiendo la implementación, lo habitual es pensar en métodos que tengan sentido desde el punto de vista de la implementación y, en cierta manera, que nos sean fáciles de implementar. En cambio, si empezamos escribiendo las pruebas, pensaremos en métodos que sean fáciles de llamar  y que tengan un conjunto claro de responsabilidades para que la prueba sea fácil de escribir.</p>
<p><strong>¿Cómo se hace?</strong></p>
<p><strong></strong>La clave está en conseguir un ritmo más o menos estable; lo que se conoce como &#8216;red-green-refactor&#8217;.</p>
<p style="text-align: center;"><a href="http://www.joseraya.net/wp-content/uploads/2011/01/RGR.png"><img class="size-medium wp-image-12 aligncenter" title="RGR" src="http://www.joseraya.net/wp-content/uploads/2011/01/RGR-300x114.png" alt="" width="180" height="68" /></a></p>
<p><strong>Red</strong> hace referencia a la escritura de la prueba para el comportamiento que queremos añadir: Al escribir la prueba ésta debe fallar (y la herramienta de pruebas suele pintar una barra roja en este caso). Si la prueba no falla, o bien está mal o el comportamiento probado no es nuevo.</p>
<p><strong>Green</strong> (verde) es el color de la barra cuando la prueba pasa; en este paso nos centramos em conseguir la implementación más simple posible del comportamiento. En cuanto pasa la prueba hay que parar de añadir comportamiento ya que éste no estaría cubierto por ninguna prueba (resistir la tentación de seguir añadiendo comportamiento es una de las cosas que más cuestan al principio).</p>
<p><strong>Refactor</strong>, el último paso, es cuando aprovechamos para &#8216;ordenar la casa&#8217; y pensar en el diseño y arquitectura. Al hacerlo después de pasar la prueba ganamos que sólo añadiremos complejidad si vemos un beneficio claro (si no lo vemos, la tendencia natural será quedarnos con el código que ya tenemos y funciona).</p>
<p>Para establecer un ritmo constante (y ser más productivos) es recomendable que el ciclo se repita con frecuencia, por lo que se aconseja avanzar a pasos pequeños (<strong>baby steps</strong>).</p>
<p><strong>¿Qué se necesita?</strong></p>
<p><strong></strong>La mayoría de entornos modernos de desarrollo incluyen algún tipo de soporte a pruebas automatizadas (al estilo de <a title="junit.org" href="http://junit.org">JUnit</a> en java). Eso sí, para que la ejecución de pruebas no sea percibida como un lastre, es vital que la ejecución de las mismas sea rápida (del orden de segundos) y cómoda (por ejemplo, como un paso más de la &#8216;build&#8217;). En este sentido, lo ideal sería contar con una herramienta de testing contínuo como <a title="Infinitest" href="http://infinitest.github.com/">infinitest</a> o <a title="JUnit Max" href="http://www.threeriversinstitute.org/junitmax/subscribe.html">junit max</a>).</p>
<p>Tradicionalmente, TDD se ha asociado a pruebas unitarias, aunque el mismo enfoque (test first + refactoring) podría aplicarse a otras pruebas como las de integración o las de aceptación. En estos casos, necesitaremos herramientas adicionales que nos faciliten la ejecución de las pruebas (preparar la base de datos, inyectar dependencias, etc.) y, además, deberemos tener en cuenta que suelen ser más lentas de ejecutar (y, por lo tanto, es más fácil que se conviertan en un lastre y las dejemos de ejecutar).</p>
<p><strong>¿Dónde puedo aprender más?</strong></p>
<p><strong></strong>Una buena manera de aprender a hacer TDD es programar en pareja con alguien que lo haya hecho anteriormente. Los <a title="Coding Dojo en Barcelona" href="http://agile-barcelona.org/category/codingdojos/">coding dojo</a> son una buena oportunidad para hacerse una idea aproximada de cómo es desarrollar así (eso sí, la experiencia dependerá mucho de la pareja escogida). En ellos, se desarrolla un ejercicio (<a title="Code Kata" href="http://codekata.pragprog.com/">code kata</a>) conocido de antemano centrándose en hacerlo de la mejor manera posible, y por eso es habitual hacerlos mediante TDD. También podemos mirar un <a title="grupo 12meses12katas en vimeo" href="http://vimeo.com/groups/12meses12katas/videos">screencast</a> como los de <a title="12meses12katas" href="http://www.12meses12katas.com/">12meses12katas</a>.</p>
<p>En cuanto a bibliografía, el primer artículo que leí sobre el tema fue &#8220;<a title="Test Infected" href="http://junit.sourceforge.net/doc/testinfected/testing.htm">Test Infected</a>&#8221; y creo que ha resistido bastante bien el paso del tiempo aunque <a title="Introduction to TDD" href="http://www.agiledata.org/essays/tdd.html">éste</a> de agiledata.org también está muy bien. A nivel de libros, tenemos la suerte de disponer del libro de Carlos Ble &#8220;<a title="Diseño ágil con TDD" href="http://www.dirigidoportests.com/el-libro">Diseño ágil con TDD</a>&#8220; (gratuito y en castellano) o el del creador de JUnit Kent Beck (<a title="TDD By Example" href="http://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530">Test Driven Development: By Example</a>). Si lo que queremos es profundizar en la materia, <a title="GOOS" href="http://www.amazon.com/Growing-Object-Oriented-Software-Guided-Tests/dp/0321503627/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1301408120&amp;sr=1-1">Growing Object Oriented Software, Guided by Tests</a> de Steve Freeman y Nat Price ofrece una visión más avanzada del uso de pruebas para dirigir el desarrollo de software.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joseraya.net/test-driven-development/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Barcelona Mobile Open Space desde dentro</title>
		<link>http://www.joseraya.net/bmos-desde-dentro</link>
		<comments>http://www.joseraya.net/bmos-desde-dentro#comments</comments>
		<pubDate>Thu, 24 Mar 2011 14:40:34 +0000</pubDate>
		<dc:creator>jose</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agilebarcelona]]></category>
		<category><![CDATA[openspace]]></category>

		<guid isPermaLink="false">http://www.joseraya.net/?p=9</guid>
		<description><![CDATA[El pasado 19 de marzo tuvo lugar el Barcelona Mobile Open Space en el citilab de Cornellà. Como asistente, poco puedo añadir a todo lo que ya se ha dicho al respecto: Fue un evento interesante, donde aprendí cosas y otros aprendieron cosas de mí, hubo muy buen ambiente y se nos pasó el día [...]]]></description>
				<content:encoded><![CDATA[<p>El pasado 19 de marzo tuvo lugar el <a title="Barcelona Mobile Open Space" href="http://agile-barcelona.org/events/barcelona-mobile-open-space-2011/">Barcelona Mobile Open Space</a> en el <a title="Citilab" href="http://www.citilab.eu/">citilab</a> de Cornellà. Como asistente, poco puedo añadir a todo lo que <a title="conclusiones bmos 2011" href="http://agile-barcelona.org/2011/03/bmos-2011-conclusiones/">ya se ha dicho</a> al respecto: Fue un evento interesante, donde aprendí cosas y otros aprendieron cosas de mí, hubo muy buen ambiente y se nos pasó el día sin darnos cuenta. Lo que quiero compartir en este post es la perspectiva desde el punto de vista de alguien que ha ayudado a &#8220;organizar&#8221; el evento.</p>
<p>Lo primero que me gustaría destacar es lo rápido que fue todo: De la propuesta inicial al evento solamente pasaron cuatro semanas. En esas cuatro semanas, nos dió tiempo a buscar el sitio (gracias a <a title="Catdroid" href="http://catdroid.org/">catdroid</a>), montar la <a title="agile barcelona" href="http://agile-barcelona.org/">web</a> y el <a title="Twitter de agile barcelona" href="http://twitter.com/agilebcn">twitter</a> de agile barcelona, <a title="bmos en 85% cocoa" href="http://agile-barcelona.org/2011/03/barcelona-mobile-open-space-en-85-cocoa/">promocionar</a> el evento en el podcast de<a title="85% cocoa" href="http://ochentaycincoporcientococoa.tumblr.com/"> 85% cocoa</a> y hasta de hacernos <a href="http://instagr.am/p/CPL19/">camisetas</a> para la ocasión. Con esto quiero decir que no hace falta mucha planificación ni preparación para <a href="http://www.agile-spain.com/que-es-como-hacer-open-space">hacer un open space</a>: estoy seguro que quienquiera que lea este post está capacitado para llevar a cabo cualquiera de las tareas que acabo de enumerar.</p>
<p>Por otro lado, no voy a negar que no genere cierta inquietud el organizar un sarao como este: Al fin y al cabo, estás liando a 120 personas (aunque al final, siendo un evento gratuito, ya sabíamos que iban a ser menos) para que dediquen un sábado (encima el día del padre) a asistir a un evento sobre el que no tienes ningún tipo de control ya que el resultado final depende totalmente de los propios participantes. No sabes quién va a hablar ni sobre qué, por lo que es inevitable que te asalten las dudas:</p>
<p>¿y si cuando digamos de empezar a nadie se le ocurren temas interesantes? es de suponer que la gente que asiste a un open tienen alguna inquietud, del mismo modo que es de suponer que esa inquietud la comparta alguna de las otras 70 personas que hay en la sala.</p>
<p>¿y si luego no hay gente que sepa de los temas que se proponen? puede pasar, pero incluso en ese caso la sesión puede ser útil: Ves que no eres el único interesado en el tema pero que no lo domina, tal vez puedas aprender algo de otro que también se ha mirado cuatro cosas</p>
<p>¿y si la gente espera un evento superprofesional con ponentes interacionales, catering, etc.? para esto está la web, donde hemos explicado el formato.</p>
<p>Al final, pasó lo que tenía que pasar: que la gente no dedica un sábado (encima el día del padre) a asistir a un open si no tiene cierta inquietud, que si juntas a 70 personas interesadas en el desarrollo para móviles en un sala, es difícil que no haya alguno que tenga alguna experiencia que compartir sobre un tema concreto y que la gente se informa antes de venir y sabe que viene a participar (aunque luego el formato no deja de sorprender).</p>
<p>Evidentemente hubo fallos, yo mismo señalé algunos en la retrospectiva, y seguramente alguien asisitió y no cumplió sus expectativas (espero que los menos) pero, en general, se puede decir que la cosa fue bien.</p>
<p>Ahora me queda la satisfacción de haber formado parte de algo bueno, de haber contribuido a que mañana alguien quiera hacer mejor su trabajo, comparta su conocimiento, confíe más en la capacidad de las personas para hacer cosas por sí mismas o, simplemente, haya pasado un día agradable y vuelva contento a casa. Y esta satisfacción compensa de sobras el pequeño esfuerzo realizado para poner en marcha el open.</p>
<p>Mi conclusión del BMOS es que si te ha gustado y quieres que haya otro open sobre el mismo tema o sobre un tema distinto, tú puedes ser quien lo ponga en movimiento ¿qué tienes que perder? A cambio, la próxima vez seras tú quien vuelva a casa al final del open cansado pero con  esa sonrisa que se te queda cuando sabes que lo has hecho bien.</p>
<p>Por último, no quiero dejar de agradecer a las personas que pusieron en marcha un carro al que me subí porque ya sabía que, si estaban ellos en él, seguro que me llevaba a un lugar donde querría estar: <a href="http://twitter.com/vgaltes">Vicenç Garcia</a>, <a href="http://twitter.com/carlosthesailor">Carlos Iglesias</a> de <a href="http://www.runroom.com/CA/">Runroom</a>, <a href="http://twitter.com/jaumejornet">Jaume Jornet</a> y <a href="http://twitter.com/juanan_sosa">Juan Antonio Sosa</a>, así como a todos los que asisiteron y contribuyeron a organizar el evento ya que, sin ellos, nada de esto habría sido posible.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joseraya.net/bmos-desde-dentro/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nueva iteración del site</title>
		<link>http://www.joseraya.net/nueva-iteracion-del-site</link>
		<comments>http://www.joseraya.net/nueva-iteracion-del-site#comments</comments>
		<pubDate>Wed, 16 Feb 2011 21:06:41 +0000</pubDate>
		<dc:creator>jose</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.joseraya.net/?p=3</guid>
		<description><![CDATA[El site anterior llevaba prácticamente un año inactivo y todo el contenido estaba disponible en la web de agilogy por lo que he decidido partir de cero y crear un nuevo site con un toque más personal que el anterior.]]></description>
				<content:encoded><![CDATA[<p>El site anterior llevaba prácticamente un año inactivo y todo el contenido estaba disponible en la web de <a href="http://www.agilogy.com">agilogy</a> por lo que he decidido partir de cero y crear un nuevo site con un toque más personal que el anterior.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joseraya.net/nueva-iteracion-del-site/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
