<?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>Mi espacio &#187; Software QA</title>
	<atom:link href="http://www.manuelrecena.com/blog/archives/category/software-qa/feed" rel="self" type="application/rss+xml" />
	<link>http://www.manuelrecena.com/blog</link>
	<description>Donde escribo sobre cosas que forman parte de mi vida profesional</description>
	<lastBuildDate>Sun, 05 Feb 2012 21:20:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Miras el piloto rojo de la lavadora?</title>
		<link>http://www.manuelrecena.com/blog/archives/1000</link>
		<comments>http://www.manuelrecena.com/blog/archives/1000#comments</comments>
		<pubDate>Fri, 28 Jan 2011 15:22:59 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Software QA]]></category>
		<category><![CDATA[entregables]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=1000</guid>
		<description><![CDATA[Esta será una de esas entradas cortas que escribo simplemente para hacer referencia a ella en el futuro. Cuando nos compramos un electrodoméstico, ya sea una lavadora, un frigorífico o un lavavajillas, procuramos que vengan a casa, lo instalen y nos muestren que lo que hemos comprado funciona. Luego tenemos el manual de instrucciones que muy poca [...]]]></description>
			<content:encoded><![CDATA[<p>Esta será una de esas entradas cortas que escribo simplemente para hacer referencia a ella en el futuro. Cuando nos compramos un electrodoméstico, ya sea una lavadora, un frigorífico o un lavavajillas, procuramos que vengan a casa, lo instalen y nos muestren que lo que hemos comprado funciona. Luego tenemos el manual de instrucciones que muy poca gente lee y que nos permite sacarle el máximo partido al electrodoméstico.</p>
<p>Pues bien, cuando nos están mostrando que aquello funciona si vemos que un sospecho piloto con la etiqueta <strong><span style="color: #ff0000;">error</span></strong> se pone rojo, lo normal es que preguntemos: <em>¿Qué significa ese piloto?</em> <em>¿Estás usted seguro que funciona?</em> <em>Si no funciona no lo quiero, se lo tiene usted que llevar y me trae uno nuevo, con su embalaje original</em>.</p>
<p>Lo que quiero decir es que cuando nos entregan algo nuevo no es normal que los LCDs o los indicadores informen de que algo no está funcionando bien y que hay problemas. ¿Por qué cuando se hace la entrega de un software (desarrollado a medida, llave en mano) no hacemos lo mismo? En este caso, en su defecto tenemos algo muy básico pero no por ello menos efectivo que son los logs. No quiere decir esto que los logs sean algo en lo que debamos centrarnos exclusivamente pero sí que son suficientes para decirle al proveedor, <em>&#8220;Sr. Jefe de Proyecto, este entregable no lo aceptamos hasta que esos problemas que ahí se indican no estén resueltos&#8221;</em>.</p>
<p>Está claro que un entorno de despliegue dotado de herramientas de monitorización se agradece y es un lujo, pero a veces me conformaría con que el servidor de aplicaciones o el servidor web tenga los logs configurados convenientemente. También podemos prestar atención a las distintas opciones que nos brindan los distintos stacks tecnológicos. En Java tenemos muchas herramientas, pero también las tenemos en PHP o Python.</p>
<p>Y también me gustaría decir:</p>
<blockquote><p>Empresas que en su sitio web pone que están certificadas en CMMi nivel 3 y sin embargo ponen path absolutos en medio de scripts de PHP ;(</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/1000/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Qué sistema de versionado usas?</title>
		<link>http://www.manuelrecena.com/blog/archives/816</link>
		<comments>http://www.manuelrecena.com/blog/archives/816#comments</comments>
		<pubDate>Sat, 26 Sep 2009 12:03:06 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Software QA]]></category>
		<category><![CDATA[version-naming]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=816</guid>
		<description><![CDATA[Version Naming, Software Versioning o Sistemas de Versionado, es lo que se conoce como el proceso con el que identificamos de forma única el estado de los fuentes de un proyecto. Obviamente puede hacerse extensible no sólo al software, sino también a un documento de texto. Según los sistemas de gestión de la calidad debe [...]]]></description>
			<content:encoded><![CDATA[<p>Version Naming, <a title="Referencia a una página de la wikipedia" href="http://en.wikipedia.org/wiki/Software_versioning" target="_blank">Software Versioning</a> o Sistemas de Versionado, es lo que se conoce como el proceso con el que identificamos de forma única el estado de los fuentes de un proyecto. Obviamente puede hacerse extensible no sólo al software, sino también a un documento de texto. Según los sistemas de gestión de la calidad debe incluirse un histórico de cambios.</p>
<p>¿Qué objetivos pretende cubrir un sistema de versionado?</p>
<ol>
<li><strong>Identificar</strong> de forma sencilla el estado de los fuentes. Esa identificación estará asociada a un instante de tiempo</li>
<li>Establecer una codificación que permita <strong>distinguir</strong> unas versiones de otras</li>
<li><strong>Informar</strong> sobre qué contiene la versión</li>
</ol>
<p>Existen muchas propuestas y cada una de ellas se adecua a unas necesidades. Nosotros hasta la fecha usábamos una muy conocida basada en:</p>
<ul>
<li>alpha</li>
<li>beta</li>
<li>Releases Candidate</li>
<li>X.Y.Z</li>
</ul>
<p>La versión <em>alpha</em> es una versión completa desde un punto de vista funcional. El equipo de proyecto debería ser capaz de justificar que los requisitos y expectativas detectadas se han alcanzado. Los que nos dedicamos a esto sabemos que es prácticamente imposible, especialmente en proyectos de más de 6 meses. La entrega oficial de una versión es un punto de inflexión en la relación entre el cliente y el proveedor. Está claro que el proveedor le está transmitiendo al cliente que para el proyecto se encuentra en su etapa final y que es el momento de ir cerrando los temas pendientes (artefactos documentales, sesiones de formación, etc).</p>
<p>La versión <em>beta</em> constituye otro momento importante en la vida del proyecto. Tras la entrega de la versión <em>alpha</em> se recoge comentarios, opiniones, peticiones de cambio, &#8220;<em>&#8230;es que yo pensaba, yo creía que&#8230;</em>&#8221; (por ambas partes), el departamento de sistemas añade sus &#8220;<em>&#8230;esto lo quiero así, si hibernate te genera el DDL eso me da igual&#8230;</em>&#8220;, y evidentemente si no quieres que el proyecto se te vaya en costes, negocias. Personalmente creo que es una -falsa- negociación porque como proveedor comienzas a ver el final y tu mayor deseo es implantar el proyecto y verlo como ayuda a los verdaderos usuarios finales.</p>
<p>Y luego vienen las versiones RCx, que junto con la versión beta, modelan las distintas iteracciones cliente-proveedor. Así, hasta llegar a la versión 1.0.0 donde se hace entrega oficial de los fuentes y corresponde con la versión que pasa a producción. A partir de ahí, comienza el soporte y mantenimiento que dará lugar a:</p>
<ul>
<li>1.0.Z: Resolución de incidencias sobre la versión 1.0.0</li>
<li>1.Y.0: Si aumenta la Y, la Z se pone a cero e implica que se han incorporado mejoras y probablemente resolución de incidencias</li>
<li>Z.0.0: Conlleva lo anterior pero además implica cambios importantes a múltiples niveles (diseño, funcionalidades, UI, etc..)</li>
</ul>
<p>Esto es, de forma muy resumida, lo que venimos usando desde hace 2 años. Muy relacionado con otras prácticas de nuestra metodología nos hemos visto obligados a realizar una pequeña modificación e incorporar el concepto <em>Partial Delivery</em>:</p>
<ol>
<li>No están reflejadas en el <a title="Referencia a la Wikipedia sobre este término" href="http://es.wikipedia.org/wiki/Roadmap" target="_blank">roadmap</a> del proyecto, no constituyen ningún hito</li>
<li>Normalmente vienen originadas por una petición externa al equipo de proyecto</li>
<li>Están referenciadas en la herramienta de gestión de proyecto</li>
<li>Se podrían haber sustituido por conceptos como revisión propios de los <a title="Información relacionada (Wikipedia)" href="http://en.wikipedia.org/wiki/Revision_control" target="_blank">S.C.M.</a> pero resulta más sencillo trabajar con <em>alpha-PD1</em> que con rev657.</li>
</ol>
<p>Por aclarar algunos puntos:</p>
<ol>
<li>En nuestro entorno de despliegue, y como parte de las actividades de integración continua, el estado de los fuentes es referenciado como 1.0.0-SNAPSHOT-r2203 o 1.0.0-DEV-r2203. Para la revisión usamos <a title="Referencia a una entrada de este blog" href="http://www.manuelrecena.com/blog/archives/665" target="_blank">buildNumber</a>.</li>
<li>Sólo versionados aquello que necesitamos referenciar.</li>
</ol>
<p>En ciertos proyectos, por su diseño y base tecnológica, incorporamos otras prácticas. Por ejemplo, en aquellos con un alto índice de modularidad  cada módulo mantiene su propio versionado y las entregas incluyen un documento (o MasterBuild) en el que se detalla o define la entrega. Como ejemplo podemos ver aquellos que se basan en OpenCms o Drupal.</p>
<p>Y tú, ¿Cómo llevas a cabo este proceso?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/816/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>QABox, el diablo está en los detalles</title>
		<link>http://www.manuelrecena.com/blog/archives/645</link>
		<comments>http://www.manuelrecena.com/blog/archives/645#comments</comments>
		<pubDate>Tue, 19 May 2009 16:57:30 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Mis proyectos]]></category>
		<category><![CDATA[Software QA]]></category>
		<category><![CDATA[qabox]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=645</guid>
		<description><![CDATA[La verdad es que ha costado, pero por fin, puedo anunciar el nacimiento de QABox. Aun tenemos que resolver ciertos aspectos técnicos pero eran tantas las ganas que no hemos podido esperar más. Espero y deseo que en breve, tengáis nuevas noticias con respecto a esta iniciativa.]]></description>
			<content:encoded><![CDATA[<p>La verdad es que ha costado, pero por fin, puedo anunciar el nacimiento de <a title="Sitio web de QABox" href="http://www.qabox.org" target="_blank">QABox</a>. Aun tenemos que resolver ciertos aspectos técnicos pero eran tantas las ganas que no hemos podido esperar más. Espero y deseo que en breve, tengáis nuevas noticias con respecto a esta iniciativa.</p>
<p><a href="http://www.qabox.org"><img class="alignnone" src="http://qabox.org/sites/all/themes/qabox/logo.png" alt="" width="64" height="65" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/645/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ponencias ExpoQA 2008</title>
		<link>http://www.manuelrecena.com/blog/archives/472</link>
		<comments>http://www.manuelrecena.com/blog/archives/472#comments</comments>
		<pubDate>Thu, 08 Jan 2009 00:22:46 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Software QA]]></category>
		<category><![CDATA[expoqa]]></category>
		<category><![CDATA[transparencias]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=472</guid>
		<description><![CDATA[Hace unos instantes he recibido un correo de la organización de ExpoQA diciendo que han publicado el material de las ponencias.]]></description>
			<content:encoded><![CDATA[<p>Hace unos instantes he recibido un correo de la organización de <a title="Sitio web de ExpoQA" href="http://www.expoqa.com" target="_blank">ExpoQA</a> diciendo que han publicado el <a title="Sitio web de ExpoQA" href="http://www.expoqa.com/ponencias2008.html" target="_blank">material de las ponencias</a>.</p>
<p><a href="http://www.expoqa.com"><img class="alignnone size-full wp-image-404" title="Logotipo de expo:QA" src="http://www.manuelrecena.com/blog/../resources/logo_expoqa.gif" alt="Logotipo de expo:QA" width="221" height="67" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/472/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>expo:QA, V Jornadas Profesionales de Calidad y Testing de Software</title>
		<link>http://www.manuelrecena.com/blog/archives/403</link>
		<comments>http://www.manuelrecena.com/blog/archives/403#comments</comments>
		<pubDate>Thu, 06 Nov 2008 09:26:33 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Software QA]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[expoqa]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=403</guid>
		<description><![CDATA[Como ya hiciera el año pasado, este año asistiré a una nueva edición de expo:QA. Este año espero escribir una pequeña crónica de los dos días que asistiré. El programa de este año -parece- que incluye contenidos más cercanos a nuestro día a día. El año pasado me quedé con mal sabor de boca, especialmente [...]]]></description>
			<content:encoded><![CDATA[<p>Como ya hiciera <a title="Referencia a una entrada de este blog" href="http://www.manuelrecena.com/blog/archives/105" target="_blank">el año pasado</a>, este año asistiré a una nueva edición de <a title="Sitio web de expo:QA" href="http://www.expoqa.com" target="_blank">expo:QA</a>. Este año espero escribir una pequeña crónica de los dos días que asistiré. El programa de este año -parece- que incluye contenidos más cercanos a nuestro día a día. El año pasado me quedé con mal sabor de boca, especialmente porque todo el aseguramiento de la calidad consistía en adquirir herramientas carísimas y las experiencias reales brillaron por su ausencia, y las que hubo, pertenecían a sectores (industriales, banca, etc&#8230;) que se escapan de mi alcance.</p>
<p><a href="http://www.manuelrecena.com/blog/../resources/logo_expoqa.gif"><img class="alignnone size-medium wp-image-404" title="Logotipo de expo:QA" src="http://www.manuelrecena.com/blog/../resources/logo_expoqa.gif" alt="" width="221" height="67" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/403/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lecciones aprendidas</title>
		<link>http://www.manuelrecena.com/blog/archives/369</link>
		<comments>http://www.manuelrecena.com/blog/archives/369#comments</comments>
		<pubDate>Sat, 11 Oct 2008 16:37:00 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Ingeniería del software]]></category>
		<category><![CDATA[Opiniones y reflexiones]]></category>
		<category><![CDATA[Software QA]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=369</guid>
		<description><![CDATA[Recientemente hemos entregado a un cliente una aplicación software dentro de un proyecto que está a punto de terminar. Sólo queda cerrar algunos flecos que no dependen directamente de nosotros, sino del propio cliente. El proyecto era pequeño: 5 meses en total 4 meses desarrollando la aplicación 1 Jefe de proyecto, 1 desarrollador del lado [...]]]></description>
			<content:encoded><![CDATA[<p>Recientemente hemos entregado a un cliente una aplicación software dentro de un proyecto que está a punto de terminar. Sólo queda cerrar algunos flecos que no dependen directamente de nosotros, sino del propio cliente. El proyecto era pequeño:</p>
<ul>
<li>5 meses en total</li>
<li>4 meses desarrollando la aplicación</li>
<li>1 Jefe de proyecto, 1 desarrollador del lado del cliente, 2 desarrolladores JEE y 1 asegurador de la calidad</li>
</ul>
<p>Para la construcción hemos contado con:</p>
<ul>
<li>Marco tecnológico Java: Spring framework, Eclipse Birt, Hibernate</li>
<li>ExtJS</li>
<li>DEIN &#8211; Ecosistema Software (de esto ya os hablaré)</li>
</ul>
<p>Me gustaría contar algunas lecciones que hemos aprendido:</p>
<ol>
<li>Nos es conveniente homogeneizar los entornos de desarrollo local de todos los miembros del equipo. Aunque el cliente nos indique cuál es su entorno de producción y eso quede reflejado en los requisitos no funcionales del análisis, es altamente aconsejable la disparidad. Es una forma muy simple se disminuir riesgos y asegurar un mayor nivel de calidad. Concretamente en este proyecto hemos usado:
<ol>
<li>Ubuntu, Eclipse, Jetty, JDK 1.5 (entorno de desarrollo local)</li>
<li>Windows XP, Eclipse, Tomcat JDK 1.6 (entorno de desarrollo local)</li>
<li>Debian, Tomcat, Apache, JDK 1.5 (entorno de despliegue virtualizado que DEIN proporciona)</li>
</ol>
</li>
<li>Las tareas de análisis nunca terminan. Cuando el analista decide que hay una versión estable de los requisitos y se ponen en marcha las tareas de implementación, se activa un proceso iterativo entre el diseño-implementación y el análisis. El objetivo final para el cliente es que lo que le entreguemos satisfaga sus espectativas, sin embargo, nosotros compartimos ese mismo objetivo y además tenemos que asegurarnos de que lo construido y lo analizado está sincronizado y se corresponden. ¿Por qué? Porque aunque sean desarrollos a medida (llave en mano) es probable que surjan ampliaciones, revisiones, etc. y por eso mismo tenemos que ser consecuentes con lo que hacemos. No es la primera vez que me encuentro un documento de análisis perfectamente maquetado con una página inicial en la que se indica que lo validó tal persona hace un año y recientemente se ha publicado una versión.</li>
<li>Es importantísimo hacerle ver al cliente cuánto cuestan los cambios y todo lo que adicionalmente solicita. Entiendo que es una tarea complicada, pero ahí está la destreza de un buen jefe de proyecto. Lo que no podemos hacer es admitir cambios y mejoras durante la evolución del proyecto con el fin de mejorar la experiencia de los usuarios finales, y que luego, cuando el proyecto está terminando te inunden en procesos eternos llenos de burocracia.</li>
<li>En tu planificación prioriza al máximo el obtener una primera release que puedas mostrar a los usuarios finales. Haz todas las entregar parciales que puedas y la disponibilidad del cliente permita. En este proyecto concretamente, el cliente ha tenido la oportunidad de ver todos los avances de forma diaria. DEIN se encargaba se desplegar todas las noches un SNAPSHOT del proyecto en el entorno de despliegue, que por supuesto estaba disponible para el cliente.</li>
<li>Establece sesiones de trabajo (preferiblemente, semanalmente) con todos los miembros del equipo. Aprovecha esta sesiones de trabajo para hacer una puesta en común de perspectivas, dudas, aclaraciones, consideraciones, propuestas, etc&#8230;</li>
<li>Procura que todos tus proyectos tengan algo de I+D+I. Disponer de un departamento <strong>de verdad</strong> de I+D+I no es sencillo y requiere inversión, pero cuando no se tiene esa opción, algo debemos hacer. Cuidado con los experiementos en proyectos pequeños, es muy sencillo incumplir en la planificación si algo no sale todo lo bien que esperábamos.</li>
</ol>
<p>Supongo que la lista podría continuar, pero son los que puedo contar y pueden ser útiles. En cuanto me autoricen, publicaré algunas capturas de pantalla (y con suerte un screencast) sobre el proyecto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/369/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Cuidando los pequeños detalles con las propiedades de subversion</title>
		<link>http://www.manuelrecena.com/blog/archives/358</link>
		<comments>http://www.manuelrecena.com/blog/archives/358#comments</comments>
		<pubDate>Thu, 09 Oct 2008 21:11:06 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Software QA]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=358</guid>
		<description><![CDATA[Aquellos que me soportan todos los días en el trabajo saben que soy un maniático de los detalles. Soy de las personas que sufre si los fuentes de un proyecto no están correctamente tabulados o si los terminadores de línea no son los correctos. Sí, sí, lo sé, Opina 1.x me hace sufrir, pero poco [...]]]></description>
			<content:encoded><![CDATA[<p>Aquellos que me soportan todos los días en el trabajo saben que soy un maniático de los detalles. Soy de las personas que sufre si los fuentes de un proyecto no están correctamente tabulados o si los terminadores de línea no son los correctos. Sí, sí, lo sé, <a title="Repositorio (SCM) con la rama 1.x de Opina" href="https://svn.ebabel.info/repos/opina/branches/1.x/" target="_blank">Opina 1.x</a> me hace sufrir, pero poco a poco lo voy organizando todo, especialmente en <a title="Repositorio (SCM) con la rama 2.x de Opina" href="https://svn.ebabel.info/repos/opina/branches/2.x/" target="_blank">Opina 2.x</a>.</p>
<p>Algo que debe formar parte de todo buen <a title="Referencia a una entrada de este blog" href="http://www.manuelrecena.com/blog/archives/219" target="_blank">ecosistema software</a> que se precie es un conjunto de buenas prácticas que recomienden cómo debemos usar las herramientas que lo forman. En este caso hablaremos de <a title="Referencia a una entrada de este blog" href="http://www.manuelrecena.com/blog/archives/81" target="_blank">subversion</a>, el sistema de control de versiones que uso. Gracias a las propiedades de subversión podemos controlar:</p>
<ol>
<li>Los terminadores de línea</li>
<li>Los tipos <em>mime</em> de los archivos</li>
<li>Los archivo que siempre ignoramos y que proyecto tras proyecto tenemos que ignorar. ¿El directorio /target tal conocido por aquellos que usan Maven? ¿El directorio /build?</li>
</ol>
<p>Pues bien, para evitar que cada vez que se añada un archivo tengamos que configurar sus propiedades svn, que mejor forma que tener todas esas propiedades bien definidas en un archivo y que se usen en el ecosistema.</p>
<p>A continuación se muestra el archivo de configuración que estoy usando en Opina para las propiedades svn:</p>
<pre>#
# Opina: gestor de encuestas
# Copyright (C) 2005-2008 Opina Development Team
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of version 2 of the GNU General Public
# License as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA
#
# $Id: opina-svn-properties 1842 2008-10-09 19:46:18Z recena $
#

[auto-props]
*.sh         = svn:executable;svn:eol-style=native;svn:keywords=Id
*.bat        = svn:mime-type=text/plain;svn:eol-style=CRLF
*.bmp        = svn:mime-type=image/bmp
*.class      = svn:mime-type=application/java
*.doc        = svn:mime-type=application/msword
*.exe        = svn:mime-type=application/octet-stream
*.gif        = svn:mime-type=image/gif
*.gz         = svn:mime-type=application/x-gzip
*.jar        = svn:mime-type=application/java-archive
*.jpg        = svn:mime-type=image/jpeg
*.jpeg       = svn:mime-type=image/jpeg
*.pdf        = svn:mime-type=application/pdf
*.png        = svn:mime-type=image/png
*.tgz        = svn:mime-type=application/octet-stream
*.tif        = svn:mime-type=image/tiff
*.tiff       = svn:mime-type=image/tiff
*.zip        = svn:mime-type=application/zip
*.txt        = svn:mime-type=text/plain;svn:eol-style=native;svn:keywords=Id
*.xml        = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Id
*.xsd        = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Id
*.xsl        = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Id
*.wsdl       = svn:mime-type=text/xml;svn:eol-style=native;svn:keywords=Id
*.htm        = svn:mime-type=text/html;svn:eol-style=native;svn:keywords=Id
*.html       = svn:mime-type=text/html;svn:eol-style=native;svn:keywords=Id
*.css        = svn:mime-type=text/css;svn:eol-style=native;svn:keywords=Id
*.js         = svn:mime-type=text/plain;svn:eol-style=native;svn:keywords=Id
*.jsp        = svn:mime-type=text/plain;svn:eol-style=native;svn:keywords=Id
*.txt        = svn:mime-type=text/plain;svn:eol-style=native;svn:keywords=Id
*.java       = svn:mime-type=text/plain;svn:eol-style=native;svn:keywords=Id
*.properties = svn:mime-type=text/plain;svn:eol-style=native;svn:keywords=Id
*.sql        = svn:mime-type=text/plain;svn:eol-style=native;svn:keywords=Id</pre>
<p>Una vez que tenemos configuradas nuestras propiedades tenemos que hacer dos cosas:</p>
<ol>
<li>Indicarle a nuestro cliente de subversion que estas propiedades existen y tienen esos valores</li>
<li>Indicarle a nuestro cliente de subversion que las tenga en cuenta.</li>
</ol>
<p>En mi caso uso subversive como cliente de subversion, es un plugin para Eclipse. Para importar estas propiedades hacemos lo siguiente: Windows &gt; Preferences &gt; Team &gt; SVN &gt; Properties Configuration &gt; Automation properties &gt; import. Una imagen mejor, ¿no?</p>
<p><a href="http://www.manuelrecena.com/resources/eclipse-svn-properties.png"><img class="alignnone size-medium wp-image-362" title="Captura de pantalla de Eclipse importando propiedades de subversion" src="http://www.manuelrecena.com/blog/../resources/eclipse-svn-properties-300x180.png" alt="" width="300" height="180" /></a></p>
<p>Ahora debemos localizar el archivo de configuración que el cliente usa:</p>
<pre>~/.subversion/config (Linux)
%USERPROFILE%\Application Data\Subversion\config (Windows)</pre>
<p>Ahora cambiados dos propiedades en ese archivo de configación</p>
<pre>global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store build dist target
enable-auto-props = yes</pre>
<p>Espero que esto ayude un poco a aquellos desarrolladores que son un poco despistados y se olvidan de configurar convenientemente las propiedades svn. Ahora el siguiente paso es hacer <a title="Referencia a la documentación de subversion" href="http://svnbook.red-bean.com/nightly/en/svn-book.html#svn.reposadmin.create.hooks" target="_blank">hook</a> (pre-commit) que se encargue de que las cosas están bien configuradas, y en caso contrario, envíe un correo al QA para repartir collejas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/358/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tests que no deben faltar</title>
		<link>http://www.manuelrecena.com/blog/archives/157</link>
		<comments>http://www.manuelrecena.com/blog/archives/157#comments</comments>
		<pubDate>Mon, 09 Jun 2008 11:00:54 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Software QA]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/blog/?p=157</guid>
		<description><![CDATA[Después de 8 años vinculado al desarrollo de software tengo que reconocer que cualquier instalación de una nueva versión de un software supone un reto y no está exento de sorpresas. El diseño e implementación de tests son actividades muy importantes y necesarias en el ciclo de vida de un proyecto software. Estas actividades forman [...]]]></description>
			<content:encoded><![CDATA[<p>Después de 8 años vinculado al desarrollo de software tengo que reconocer que cualquier instalación de una nueva versión de un software supone un reto y no está exento de sorpresas.</p>
<p>El diseño e implementación de tests son actividades muy importantes y necesarias en el ciclo de vida de un proyecto software. Estas actividades forman parte de una disciplina denominada <strong>aseguramiento de calidad del software</strong>. Recientemente he llegado a la conclusión de que son esos pequeños detalles, que normalmente se dejan pasar por alto, los que más tiempo nos hacen perder a la hora de realizar un paso a producción. Realizar un paso a producción tiene sus connotaciones, y una de ellas es que normalmente o se realizan en las instalaciones del cliente o las realiza el propio cliente. Podríamos considerar en lugar del cliente, al usuario final para así dejar a un lado la parte empresarial de la profesión.</p>
<p>Con intención de recoger esos tests que nos adviertan de esos pequeños detalles, he preparado el siguiente listado de tests que incluiré por regla general en mi plan de tests para proyectos Java:</p>
<ol>
<li>Comprobar que la <strong>JVM</strong> que hay configurada en el sistema operativo es válida según el catálogo de requisitos no funcionales. Eso no evitará que si nuestra aplicación se despliega sobre un contenedor o servidor de aplicaciones, éste esté configurado con una JVM distinta a la del S.O., pero esta situación es menos frecuente.</li>
<li>Si nuestra aplicación necesita una <strong>base de datos</strong>, comprobar que la configuración es correcta y que la versión y base de datos están recogidas en el catálogo de requisitos no funcionales.</li>
<li>Realizar una comprobación como la anterior para servicios como <strong>directorio activo</strong>, <strong>correo electrónico</strong>, etc. De esta forma, podremos descartar problemas de integración con sistemas externos a nuestro software.</li>
<li>Si nuestro software necesita escribir en el <strong>sistema de ficheros</strong>, comprobar que disponemos de los permisos correspondientes.</li>
<li>Si nuestro software necesita acceder a internet o fuera de una red de área local, realizar la correspondiente comprobación.</li>
</ol>
<p>Estos tests son muy simples pero nos ayudarán a detectar posibles problemas de integración con el entorno donde nuestro software se tiene que instalar. ¿Alguna sugerencia para añadir a estas pruebas de carácter muy básico?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/157/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Transparencias sobre JUnit 4</title>
		<link>http://www.manuelrecena.com/blog/archives/130</link>
		<comments>http://www.manuelrecena.com/blog/archives/130#comments</comments>
		<pubDate>Sun, 20 Apr 2008 11:00:09 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Software QA]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/wordpress/archives/130</guid>
		<description><![CDATA[Hace algunas semanas conocí el blog de John Ferguson Smart. Llegué a él de casualidad, como otras muchas veces mientras navegamos por la red en busca de información. Me sorprendió gratamente al ver que era el autor del libro Java Power Tools. Cuando vi el índice del libro me gustó mucho porque en él se [...]]]></description>
			<content:encoded><![CDATA[<p>Hace algunas semanas conocí el <a title="Referencia al blog de John Ferguson" href="http://weblogs.java.net/blog/johnsmart/" target="_blank">blog de John Ferguson Smart</a>. Llegué a él de casualidad, como otras muchas veces mientras navegamos por la red en busca de información. Me sorprendió gratamente al ver que era el autor del libro Java Power Tools. Cuando vi el índice del libro me gustó mucho porque en él se habla de todas esas herramientas, buenas prácticas, metodologías y procesos que forman parte de mi trabajo.</p>
<p>John tiene una empresa llamada Wakaleo Consulting en la que ofrece servicios profesionales sobre:</p>
<ul>
<li>Software Development Environment</li>
<li>Enterprise Java Kickstart</li>
<li>Training, Mentoring and Coaching</li>
</ul>
<p>Hace algún tiempo <a title="Referencia a una entrada anterior" href="http://www.manuelrecena.com/blog/archives/52-Soporte,-formacion-y-consultoria-para-Maven-y-sus-alrededores.html">comentaba</a> algo sobre aquellas empresas que ofrecen servicios muy especializados sobre procesos de construcción de software, metodologías, buenas prácticas, herramientas como Maven, PMD, etc. Pues Wakaleo parece ser otra de ellas. Me sigo preguntando si estas empresas tienen cabida en el mercado español&#8230;</p>
<p>John ha publicado las <a title="Referencia a las transparencias sobre JUnit" href="http://www.wakaleo.com/news/39-news/129-talk-on-junit-44-for-the-wellington-jug" target="_blank">transparencias</a> que ha usado en una de sus últimas ponencias en las que habla sobre JUnit.</p>
<p>La verdad es que en la nueva versión de <a title="Sitio web sobre Opina" href="http://trac.ebabel.info/projects/opina" target="_blank">Opina</a> comenzamos a usar JUnit 4 pero ahora estamos evaluando TestNG y el cambio me ha gustado mucho. Personalmente no fui el promotor del cambio, sino mi compañero José María. Todo vino a raíz de necesitar hacer una provisión de datos en la que hemos usando XStream y poder configurar el orden en el  que se ejecutan las pruebas. Con independencia de que también hemos organizado las pruebas en grupos para darle forma a las operaciones CRUD que usamos en nuestras pruebas unitarias.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/130/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Qué &#8220;distribuibles&#8221; preparas para tus proyectos?</title>
		<link>http://www.manuelrecena.com/blog/archives/125</link>
		<comments>http://www.manuelrecena.com/blog/archives/125#comments</comments>
		<pubDate>Wed, 19 Mar 2008 22:46:00 +0000</pubDate>
		<dc:creator>Manuel Jesús Recena Soto</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Software QA]]></category>

		<guid isPermaLink="false">http://www.manuelrecena.com/wordpress/archives/125</guid>
		<description><![CDATA[Antes de comenzar me gustaría comentar que la palabra distribuible está entre comillas porque la RAE parece que no la reconoce, sin embargo, creo que mucha gente la usamos. Este pequeño post lo he clasificado dentro de las categorías Herramientas y Software QA que tengo definidas en mi blog. Lo que justifica este hecho es [...]]]></description>
			<content:encoded><![CDATA[<p>Antes de comenzar me gustaría comentar que la palabra <strong>distribuible</strong> está entre comillas porque la <a title="Stio web de la Real Academia Española" href="http://www.rae.es" target="_blank">RAE</a> parece que no la reconoce, sin embargo, creo que mucha gente la usamos. Este pequeño post lo he clasificado dentro de las categorías <a title="Post publicados en la categoría de Herramientas" href="http://www.manuelrecena.com/blog/categories/9-Herramientas" target="_blank">Herramientas</a> y <a title="Post publicados en la categoría de Software QA" href="http://www.manuelrecena.com/blog/categories/15-Software-QA" target="_blank">Software QA</a> que tengo definidas en mi blog. Lo que justifica este hecho es que hablaré de Apache Maven y sobre cómo mejorar ciertos procesos típicos en la vida de un proyecto software. Para ello hablaré de los &#8220;distribuibles&#8221;, empaquetados, ensamblados o como se quieran llamar a esas estructuras (comprimidas o no) de directorios y archivos que se usan dentro del marco tecnológico JAVA como son los JAR, WAR, AAR, EAR, etc.</p>
<p>En esas estructuras de directorios normalmente encontramos ficheros compilados (p.e, .class), archivos de propiedades (p.e, .properties), archivos de configuración (p.e, .xml), recursos gráficos (p.e, .png), metainformación (p.e, manifest.mf) y algunos otros más. Personalmente me gustaría destacar todos aquellos archivos que formen parte de la configuración de una aplicación. Las configuraciones más comunes son las referentes a la conexión de base de datos, sistema de correo, sistemas LDAP, etc.</p>
<p>Una muy buena aproximación para mejorar la facilidad de mantenimiento, automatización y personalización de estos &#8220;distribuibles&#8221; es usar Maven y sacarle partido <a title="Referencia a los plugins de Maven" href="http://maven.apache.org/plugins/maven-ear-plugin/" target="_blank">a</a> <a title="Referencia a los plugins de Maven" href="http://maven.apache.org/plugins/maven-jar-plugin/" target="_blank">los</a> <a title="Referencia a los plugins de Maven" href="http://maven.apache.org/plugins/maven-war-plugin/" target="_blank">distintos</a> plugins que existen (packaging types / tools) y la gestión de perfiles. Con esto podremos conseguir generar el WAR de nuestra aplicación web configurado para el entorno de producción de nuestro cliente. Bastará con realizar un proceso como el siguiente:</p>
<ol>
<li>Realizar un export del sistema de control de versiones correspondiente a la versión que se desee, que entiendo que estará etiquetada en directorio tags de nuestro repositorio.</li>
<li>Dar de alta un perfil con la configuración del entorno que nuestro cliente nos ha facilitado.</li>
<li>Ejecutar algo similar a: <span style="font-family: courier new,courier;">mvn package -P oracle -Denv=client-dev</span></li>
<li>Desplegar, manual o automáticamente, nuestro WAR (artefacto) donde corresponda.</li>
</ol>
<p>Doy por supuesto que los miembros del equipo de desarrollo estarán muy familiarizados con la generación de estos distribuibles, sin embargo, son otros perfiles los que, durante el desarrollo del proyecto y/o tras su finalización, tendrán que continuar con su soporte, mantenimiento y evolución. Un ejemplo con el que muchos se pueden sentir identificados es el típico proyecto de llave en mano para un cliente que nos encarga algo a medida. En ese contexto, si el cliente nos demanda que le enviemos un SNAPSHOT para que su personal vaya haciendo pruebas, <strong>¿Qué &#8220;distribuible&#8221; preparamos?</strong></p>
<p>Es muy frecuente que si se trata de un proyecto software, haya sido un departamento, área o división de desarrollo quien nos haya realizado el encargo. Con esto quiero decir, que el perfil que va a recibir nuestro &#8220;distribuible&#8221; es probable que con unas <a title="Referencia a la guía de Maven que se emplea en Opina" href="http://trac.ebabel.info/projects/opina/wiki/Development/MavenGuide" target="_blank">simples instrucciones</a> sea capaz de generar el &#8220;distribuible&#8221; apropiado a partir de un export del repositorio. Ahora bien, no basta con hacer un export, comprimirlo y enviarlo al cliente con las instrucciones, entre otras porque en el repositorio es muy probable que haya información sobre nuestros entornos de desarrollo, múltiples perfiles configurados o simplemente, información que no es útil para el cliente y que únicamente provoca ruido. Con lo cual, parece razonable pensar que vamos a necesitar <strong>un &#8220;distribuible&#8221; con las fuentes de nuestro proyecto</strong> que, acompañadas de una guía de instalación y configuración, permitan que el propio cliente pueda ir asumiendo estas tareas que tarde o temprano serán de su plena responsabilidad.</p>
<p>La opción planteada me parece lógica. El cliente nos demanda las fuentes del proyecto, nosotros se las entregamos con los archivos justos y precisos que necesitan para la configuración, pruebas unitarias/integración y la posterior generación del WAR, JAR, AAR o el que corresponda, que se desplegará en el entorno correspondiente.</p>
<p>Con la intención de dar un pasito más y pensando en los perfiles del departamento, área o división de infraestructuras, creo que agradecerán si les ahoramos hacer un export, tener instalado maven, tener instalado el JDK correspondiente y otros pequeños detalles que pueden hacer que algo fácil y mecánico, se retrase durante días. En prácticamente todas empresas e instituciones que conozco es el personal de sistemas o infraestructuras quien verdaderamente realizara los despliegues en los entorno de producción, por lo tanto, nos interesa facilitar al máximo las cosas.</p>
<p>Entiendo que para un administrador de sistemas le resultará más cómodo descomprimir un archivo comprimido (zip, tar.gz, etc.), editar el archivo de configuración que estará documentado en la correspondiente guía de la que antes hablaba y colocar la estructura de directorios y archivos en el lugar correspondiente para su despliegue. Este nuevo caso nos encontramos con que necesitamos preparar <strong>un &#8220;distribuible&#8221; con los binarios de nuestro proyecto</strong>.</p>
<p>Son muchas las circunstancias que puede hacer que el administrador del servidor de aplicaciones del cliente necesite volver a desplegar una aplicación determinada, como por ejemplo, cambios en la configuración de red, DNS, modificaciones en las credenciales (usuarios/contraseñas), migraciones, etc, <strong>¿En todas esas situaciones es necesario que haya un desarrollador presente?</strong> Si las cosas se hacen bien, podemos ahorrarnos mucho trabajo. Tengo que reconocer que la realidad es otra, pero lo bueno es saber que existen otras formas de hacer las cosas.</p>
<p>Para concluir me gustaría añadir que aparte de lo que podamos generar en nuestra fase de empaquetado (package) y que además lo tenemos automáticamente con Maven, es muy recomendable preparar al menos otros dos &#8220;distribuibles&#8221; adicionales, uno con los fuentes y otro con los binarios. Para ello es de gran utilidad el plugin de <a title="Referencia al plugin de Maven" href="http://maven.apache.org/plugins/maven-assembly-plugin/" target="_blank">Maven Assembly</a>. Como me he extendido demasiado, aprovecharé otro post para poner algún ejemplo con este plugin. En Opina lo usamos para generar <a title="Descargar opina-1.0.8 en formato ZIP" href="http://www.ebabel.info/opina/downloads/opina-bin-1.0.8.zip" target="_blank">opina-bin-1.0.8.zip</a>, que es el binario de la versión 1.0.8 de Opina que está listo para ser descargado, descomprimido, configurado y desplegado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.manuelrecena.com/blog/archives/125/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

