<?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/"
	>

<channel>
	<title>SW Saber</title>
	<atom:link href="http://swsaber.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://swsaber.com</link>
	<description>Weblog sobre el desarrollo de Software: metodologías, paradigmas, lenguajes, herramientas, ...</description>
	<pubDate>Tue, 30 Dec 2008 18:08:03 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Fábrica abstracta</title>
		<link>http://swsaber.com/fabrica-abstracta/</link>
		<comments>http://swsaber.com/fabrica-abstracta/#comments</comments>
		<pubDate>Sun, 14 Sep 2008 13:10:01 +0000</pubDate>
		<dc:creator>Emilio González Montaña</dc:creator>
		
		<category><![CDATA[Análisis y Diseño]]></category>

		<category><![CDATA[Patrones de Diseño]]></category>

		<category><![CDATA[Fábrica abstracta]]></category>

		<category><![CDATA[Patrón de diseño]]></category>

		<category><![CDATA[Uml]]></category>

		<guid isPermaLink="false">http://swsaber.com/?p=29</guid>
		<description><![CDATA[<br/>Propósito
El propósito de este patrón de diseño es crear familias de objetos relacionados (normalmente por herencia), sin que sepamos sus clases concretas.
Diagrama de clases
A continuación tenemos un diagrama UML con el patrón de diseño Fábrica abstracta:

EHT UML v0.1 &#169;  - Emilio



    

	]]></description>
			<content:encoded><![CDATA[<br/><h3>Propósito</h3>
<p>El propósito de este patrón de diseño es crear familias de objetos relacionados (normalmente por herencia), sin que sepamos sus clases concretas.</p>
<h3>Diagrama de clases</h3>
<p>A continuación tenemos un diagrama UML con el patrón de diseño Fábrica abstracta:</p>
<p><img src="http://swsaber.com/wp-content/plugins/eht-uml/data/0eb6911b52d8ba98b9b7b37b2b5179db.png"><br>
<small><a href="http://ociotec.com/eht-uml-plugin-para-wordpress/" target="_blank">EHT UML v0.1</a> &copy;  - <a href="http://ociotec.com" target="_blank">Emilio</a></small>
</p>
<p><span id="more-29"></span></p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=SW%20Saber&amp;siteurl=http%3A%2F%2Fswsaber.com%2F&amp;linkname=F%C3%A1brica%20abstracta&amp;linkurl=http%3A%2F%2Fswsaber.com%2Ffabrica-abstracta%2F"><img src="http://swsaber.com/wp-content/plugins/add-to-any/share_save_171_16.gif" width="171" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://swsaber.com/fabrica-abstracta/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Scrum</title>
		<link>http://swsaber.com/scrum/</link>
		<comments>http://swsaber.com/scrum/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 05:30:56 +0000</pubDate>
		<dc:creator>Emilio González Montaña</dc:creator>
		
		<category><![CDATA[Metodologías]]></category>

		<category><![CDATA[Ágiles]]></category>

		<category><![CDATA[Backlog]]></category>

		<category><![CDATA[Scrum]]></category>

		<category><![CDATA[Sprint]]></category>

		<guid isPermaLink="false">http://swsaber.com/?p=3</guid>
		<description><![CDATA[<br/>Últimamente las metodologías denominadas ágiles están en boca de todos. Algunas personas piensan que este tipo de metodologías son la panacea a todos sus problemas, y no se explican cómo han podido vivir sin ellas todo este tiempo; otras sin embargo las ven como &#8220;hijas del maligno&#8221;, y no quieren oir ni hablar de nada [...]]]></description>
			<content:encoded><![CDATA[<br/><p>Últimamente las metodologías denominadas ágiles están en boca de todos. Algunas personas piensan que este tipo de metodologías son la panacea a todos sus problemas, y no se explican cómo han podido vivir sin ellas todo este tiempo; otras sin embargo las ven como &#8220;hijas del maligno&#8221;, y no quieren oir ni hablar de nada que tenga que ver con todas ellas.</p>
<p>Ante todo, aquí no entraremos en cuestiones filosóficas y temas políticos, sino que abordaremos el asunto con objetividad y sin fanatismos.</p>
<h4><span id="more-3"></span></h4>
<h3>¿Qué es Scrum?</h3>
<p style="padding-left: 30px;">Scrum es una de las denominadas metodologías ágiles, y por lo tanto es una metodología que aboga por el desarrollo que tiene en cuenta la situación cambiante de los requisitos del cliente, así como minimizar la necesidad de documentación, para comenzar cuanto antes a hacer trabajo &#8220;efectivo&#8221;.</p>
<h4 style="padding-left: 30px;">Historia</h4>
<p style="padding-left: 60px;"><a href='http://en.wikipedia.org/wiki/Scrum' target='_blank'>Scrum,</a> es un término proveniente del Rugby, que viene a significar &#8220;melé&#8221;, donde todo el equipo colabora hombro con hombro para lograr llevar el balón a lo largo del campo.</p>
<p style="padding-left: 60px;">Los primeros en hablar de Scrum (aunque el término en sí no estaba acuñado), fueron los japoneses <a href='http://en.wikipedia.org/wiki/Hirotaka Takeuchi' target='_blank'>Hirotaka Takeuchi</a> e <a href='http://en.wikipedia.org/wiki/Ikujiro Nonaka' target='_blank'>Ikujiro Nonaka</a> en el 1986. Los primeros pasos de la metodología fueron aplicados a proyectos teconológicos de desarrollo de productos electrónicos, y no fue hasta principios de los 90 cuando <a href='http://en.wikipedia.org/wiki/Ken Schwaber' target='_blank'>Ken Schwaber</a> que empezó a aplicarlo al desarrollo de Software.</p>
<h4 style="padding-left: 30px;">Metáfora</h4>
<p style="padding-left: 60px;">Los roles o partícipes en Scum vienen ilustrados por el siguiente chiste:</p>
<p style="padding-left: 90px;"><em>Un cerdo y una gallina se encuentran en la calle. La gallina mira al cerdo y dice, &#8220;Hey, ¿por qué no abrimos un restaurante?&#8221; El cerdo mira a la gallina y le dice, &#8220;Buena idea, ¿cómo se llamaría el restaurante?&#8221; La gallina piensa un poco y contesta, &#8220;¿Por qué no lo llamamos &#8220;Huevos con jamón?&#8221; &#8220;Lo siento pero no&#8221;, dice el cerdo, &#8220;Yo estaría comprometido pero tu solamente estarías involucrada&#8221;.</em></p>
<p style="padding-left: 60px;">La historia deja de manifiesto que siempre hay dos tipos de personas, los cerdos, que son los que hacen el trabajo, y las gallinas que son las que piden.</p>
<h4 style="padding-left: 30px;">Características</h4>
<p style="padding-left: 60px;">Scrum organiza el desarrollo de manera evolutiva en los denominados <strong>Sprints</strong>, que no son más que periódos de tiempo entre 15 y 30 días (definidos al principio de proyecto y luego inamovibles), en los cuales se prioriza el desarrollo en base a las necesidades del cliente.</p>
<p style="padding-left: 60px;">De un vistazo rápido, el proceo Scrum se desarrolla de la siguiente manera:</p>
<p style="padding-left: 60px;"><img class="aligncenter size-full wp-image-37" title="Proceso Scrum" src="http://swsaber.com/wp-content/uploads/2008/09/scrum-process.png" alt="" width="500" height="250" /></p>
<p style="padding-left: 60px;">Para conseguir esto se definen una serie de roles, reuniones y documentos:</p>
<p style="padding-left: 60px;">1) En Scrum hay <strong>4 roles </strong>principales: <strong>Product Owner</strong>, decide que es lo importante para el proyecto; <strong>Scrum Master</strong>, dirige el proceso; <strong>Scrum Team</strong>, son los que llevan a cabo el trabajo; <strong>Clientes</strong>, son los clientes internos o externos del producto.</p>
<p style="padding-left: 60px;">2) Se definen <strong>3 reuniones </strong>típicas: <strong>inicio de sprint</strong>, se planea que se va a hacer en el próximo sprint, <strong>diaria</strong>, donde se dice lo que se ha hecho y los puntos de bloqueo, <strong>restrospectiva</strong>, después de cada sprint.</p>
<p style="padding-left: 60px;">3) Hay <strong>3 documentos</strong> a usar: <strong>Product Backlog</strong>, es una lista de requisitos del cliente; <strong>Sprint Backlog</strong>, lo que se va a hacer en un Sprint; <strong>Burn Down</strong>, gráfica con lo que queda por hacer del Sprint actual.</p>
<p style="padding-left: 60px;">El flujo de trabajo de Scrum puede verse detallado en la siguiente ficha:</p>
<p style="padding-left: 60px; text-align: center;"><a href="http://swsaber.com/wp-content/uploads/2008/09/ficha-scrum.png"><img class="aligncenter size-medium wp-image-22" title="Ficha Scrum" src="http://swsaber.com/wp-content/uploads/2008/09/ficha-scrum-400x261.png" alt="" width="400" height="261" /></a></p>
<p style="padding-left: 60px;">
<p style="padding-left: 60px;">A continuación se detallará más en profuncidad cada uno de los términos brevemente expuestos.</p>
<h3>Roles</h3>
<p style="padding-left: 30px;">Como se comentó anteriormente hay 4 roles:</p>
<h4 style="padding-left: 30px;">Product Owner (Cerdo)</h4>
<p style="padding-left: 60px;">Es la persona encargada de mantener el <strong>Product Backlog</strong>, o dicho de otro modo el contacto con los clientes, que reflejará en dicho documento los requisitos de una manera priorizada. Esta persona tiene la perspectiva de que va a ser el producto, hacia donde se dirige, y por tanto la priorización de los requisitos.</p>
<h4 style="padding-left: 30px;">Scrum Master (Cerdo)</h4>
<p style="padding-left: 60px;">Un Scrum Master cumple <strong>3 cometidos </strong>básicos:</p>
<p style="padding-left: 60px;">1) Elimina los obstáculos que hace que el Scrum Team no avance.</p>
<p style="padding-left: 60px;">2) Cuida de que la metodología Scrum se cumpla.</p>
<p style="padding-left: 60px;">3) No es un líder del equipo, el Scrum Team se autoorganiza.</p>
<p style="padding-left: 60px;">
<h4 style="padding-left: 30px;">Scrum Team (Cerdo)</h4>
<p style="padding-left: 60px;">Es el equipo que desarrolla el producto, normalmente formado por un grupo de entre 5 ó 9 personas, donde no se diferencian por puestos, aunque si deberían complementarse en competencias (análisis, diseño, programación, &#8230;).</p>
<h4 style="padding-left: 30px;">Clientes (Gallina)</h4>
<p style="padding-left: 60px;">Los clientes son los que guiarán las prioridades de ejecución de tareas del Product Backlog, mediante la intermediación del Product Owner.</p>
<h3>Reuniones</h3>
<p style="padding-left: 30px;">Hay 3 tipos de reuniones:</p>
<p style="padding-left: 30px;"><strong>Inicio de Sprint</strong></p>
<p style="padding-left: 60px;">En esta reunión se planifica que tareas del Product Backlog se van a hacer en el próximo sprint. Para ello el Product Owner indica las tareas más prioritarias al equipo, y este le indica cuales va a hacer en el siguiente sprint.</p>
<p style="padding-left: 60px;">Una vez fijadas las tareas (requisitos) del sprint, estas no se tocan, es decir, se congelan las tareas abordadas desde el sprint.</p>
<h4 style="padding-left: 30px;">Reunión diaria</h4>
<p style="padding-left: 60px;">Llama <strong>Daily Standup</strong>, esta reunión se celebra diárimente, y tiene las siguientes características:</p>
<p style="padding-left: 60px;">1) Reunión diaria, en el mismo sitio y a la misma hora.</p>
<p style="padding-left: 60px;">2) Dura 15 minutos.</p>
<p style="padding-left: 60px;">3) Se hace de pié (así se fomenta que sólo dure 15 minutos).</p>
<p style="padding-left: 60px;">4) Se exige puntualidad (nuevamente sino no duraría 15 minutos), hay grupos Scrum que penalizan a las personas que no cumplen con esto.</p>
<p style="padding-left: 60px;">5) Todas las personas están invitadas, pero sólo los 3 roles de &#8220;cerdo&#8221; comentados anteriormente (Product Owner, Scrum Leader, Scrum Team) pueden hablar.</p>
<p style="padding-left: 60px;">Cada miembro del Scrum Team debe responder a estas preguntas:</p>
<p style="padding-left: 60px;">1) ¿Qué has hecho desde ayer?</p>
<p style="padding-left: 60px;">2) ¿Qué planeas hacer mañana?</p>
<p style="padding-left: 60px;">3) ¿Qué problemas te han surgido que te hayan impedido hacer tus tareas?</p>
<h4 style="padding-left: 30px;">Reunión Retrospectiva</h4>
<p style="padding-left: 60px;">Reunión posterior a cada Sprint, con las siguientes características:</p>
<p style="padding-left: 60px;">1) Se hace después de cada Sprint.</p>
<p style="padding-left: 60px;">2) Dura 4 horas.</p>
<p style="padding-left: 60px;">3) Se analiza que tal ha ido el Sprint, con el objetivo de mejorar el proceso para futuros Sprints.</p>
<h3>Documentos</h3>
<p style="padding-left: 30px;">Los 3 tipos de documentos Scrum son:</p>
<h4 style="padding-left: 30px;">Product Backlog</h4>
<p style="padding-left: 60px;">Características del Product Backlog:</p>
<p style="padding-left: 60px;">1) Es relativo a todo el proyecto.</p>
<p style="padding-left: 60px;">2) Mantiene una lista de requisitos o funcionalidades (wish-list) priorizada, en base a las necesidades del cliente.</p>
<p style="padding-left: 60px;">3) Cualquiera puede añadir tareas nuevas, pero sólo el Product Owner puede priorizarlas.</p>
<p style="padding-left: 60px;">4) Las estimaciones de las tareas son poco detalladas, normalmente en días.</p>
<h4 style="padding-left: 30px;">Sprint Backlog</h4>
<p style="padding-left: 60px;">Características del Sprint Backlog:</p>
<p style="padding-left: 60px;">1) Describe en detalle lo que se va a hacer durante un Sprint.</p>
<p style="padding-left: 60px;">2) Las tareas provenientes del Product Backlog se descomponen en tareas del Sprint, de modo que se estimen en horas, con un tiempo máximo de 16 horas (si las tareas son mayores, debe volver a descomponerse).</p>
<p style="padding-left: 60px;">3) No hay asignación de las tareas por parte del Product Owner o el Scrum Leader, sino que el el propio Scrum Team el que escoge que tarea va a hacer cada uno (auto organizado).</p>
<h4 style="padding-left: 30px;">Burn Down</h4>
<p style="padding-left: 60px;">El Burn Down es una gráfica que muestra las tareas pendientes de terminar durante un Sprint.</p>
<h3>Herramientas</h3>
<p style="padding-left: 30px;">La metodología Scrum no necesita de herramientas tecnológicas para llevarse a cabo, sino que más bien se apoya en utensilios de oficina como:</p>
<p style="padding-left: 30px;">1) Lista de tareas del Product Backlog, que puede estar escrita en una libreta, o en una Hoja de Cálculo.</p>
<p style="padding-left: 30px;">2) Lista de tareas del Sprint Backlog, igualemente puede ser artesanal o electrónica.</p>
<p style="padding-left: 30px;">3) Pizarra (Sprint) con Poss-its (tareas), donde las tareas (poss-its) son colocadas por el Scrum Leader (bajo el sistema priorizado del Product Backlog realizado por el Product Owner), y son los miembros del Scrum Team los que escogen cuales hacer.</p>
<h3>Conclusiones</h3>
<p style="padding-left: 30px;">Scrum es una metodología ágil, que se aplica a cualquier tipo de proyecto, no sólo a proyectos de Desarrollo Software, dado que la metodología sólo habla de cómo despachar tareas, centrándose en la importancia de sacar trabajo adelante en cada uno de los Sprint, y en la importancia de avanzar en la línea de lo que el cliente quiere, adaptándose contínuamente al cambio.</p>
<p style="padding-left: 30px;">Bajo mi punto de vista, es una metodología útil cuando los proyectos de desarrollo no sean grandes, dado que con Scrum no se tiene una gran perspectiva global del proyecto más allá de tener una lista de tareas pendientes (Product Backlog).</p>
<h4 style="padding-left: 30px;">Fusión con lo tradicional</h4>
<p style="padding-left: 60px;">Sin embargo, y teniendo en cuenta la estructura de Scrum, las desventajas podrían ser superadas si se aplica conjuntamente con una metodología más tradicional, y se usa Scrum para despachar las tareas que vayan surgiendo de otra metodología más orientada a lo &#8220;tradicional&#8221; (aquellas que descomponen el desarrollo en fases como: Requisitos, Diseño, Implementación y Pruebas).</p>
<p style="padding-left: 60px;">Aclarando un poco esto último (bajo petición de <a href="#comment-5">Juan</a>), la idea de fusionar Scrum con metodologías tradicionales, es hacer que:</p>
<p style="padding-left: 60px;">1) Las metodologías tradicionales generarán tareas, de distinta naturaleza: documentación, diseño, implementación, pruebas, &#8230;</p>
<p style="padding-left: 60px;">2) Dichas tareas sirven como tareas de entrada a Scrum (en el Product Backlog).</p>
<p style="padding-left: 60px;">3) Las tareas son despachadas mediante la aplicación de Scrum.</p>
<p style="padding-left: 60px;">Tampoco es que se esté inventando nada nuevo, sólo usamos a Scrum como una herramienta ágil, que nos permite ir realizando tareas de manera incremental (sprint).</p>
<h3>Enlaces y documentación</h3>
<p style="padding-left: 30px;">A continuación enumero algunos enlaces que pueden resultar de utilidad:</p>
<p style="padding-left: 30px;">1) <a href='http://en.wikipedia.org/wiki/Scrum' target='_blank'>Scrum</a> en la Wikipedia</p>
<p style="padding-left: 30px;">2) <a href="http://swsaber.com/wp-content/uploads/2008/09/flexibilidad-con-scrum.pdf">Flexibilidad con Scrum</a> (PDF)</p>
<p style="padding-left: 30px;">3) <a href="http://geeks.ms/blogs/jorge/archive/2007/05/09/explicando-scrum-a-mi-abuela.aspx" target="_blank">Explicando Scrum a mi abuela</a></p>
<p style="padding-left: 30px;">4) <a href="http://swsaber.com/wp-content/uploads/2008/09/plantilla-sprint.xls">Plantilla para Sprints</a> (Excel)</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=SW%20Saber&amp;siteurl=http%3A%2F%2Fswsaber.com%2F&amp;linkname=Scrum&amp;linkurl=http%3A%2F%2Fswsaber.com%2Fscrum%2F"><img src="http://swsaber.com/wp-content/plugins/add-to-any/share_save_171_16.gif" width="171" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://swsaber.com/scrum/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
