miércoles, 30 de marzo de 2011

Agile Coach!!

Hoy es un día muy importante en mi carrera profesional.

Hoy mi Director me ha asignado el puesto de Coach de metodología en mi empresa.

Continuo mis tareas de Jefe de Proyectos, pero me he convertido, ahora si, en un agente del cambio.

Por delante la tarea de enseñar, acompañar y aconsejar en busca de la madurez de los equipos, con especial énfasis en el manifiesto Agile y sus principios. Y las metodologías y herramientas más oportunas.

Mañana mismo tengo la primera reunión con los desarrolladores, managers y todo aquel que se apunte para presentarles en manifiesto, los principios y el primer paso en forma de tablero Kanban.

martes, 22 de marzo de 2011

Testing. No metas un Assert en un for…

Haciendo el test de un método que me ordena un DropDownList me encontré que me daba como fallido, a pesar de que visualmente si que comprobaba que ordenaba correctamente.

El código del test es algo así:

        [TestMethod()]
[HostType("ASP.NET")]
[UrlToTest("http://localhost/qclientes/")]
public void ordenarDropDownListEstadosTest()
{
/// Me traigo todos los estados y los cargo en el combo
DropDownList ddlEstados = new DropDownList();
ddlEstados.DataSource = EstadosContactoManager.GetListadoRaices();
ddlEstados.DataValueField = "id";
ddlEstados.DataTextField = "estado";
ddlEstados.DataBind();

DropDownList actual;
int indiceSiguiente = 0;
Boolean estaOrdenado = true;

/// Pruebo el método que ordena el combo por orden alfabético
actual = EstadosContactoManager.ordenarDropDownListEstados(ddlEstados);

Assert.IsNotNull(actual, "Ha devuelto un combo nulo");
Assert.IsTrue(actual.Items.Count > 0, "El número de items es 0");

/// Hago un bucle en donde compruebo que el valor del primer carácter del item sea menor o igual que el siguiente en la colección.
/// Se inicia en uno porque el primer item del combo es el de "Seleccione una opción" y, lógicamente, no está ordenado.
for (int indice = 1; indice < (actual.Items.Count - 1); indice++)
{
if (estaOrdenado)
{
indiceSiguiente = indiceSiguiente >= actual.Items.Count ? indice : indice + 1;
estaOrdenado = (int)actual.Items[indice].Text.ToUpper()[0] <= (int)actual.Items[indiceSiguiente].Text.ToUpper()[0];
}
}
Assert.IsTrue(estaOrdenado, "No está ordenado");
}


Mi primera opción fue meter el Assert.IsTrue dentro del for… pero me encontré que me está dando una excepción del propio Framework de testing. Por lo cual he creado una variable booleana que me hace la comparación a menos que aparezca algo que no está ordenado.



Y esto funciona muy bien.



Editado: El test me fallaba porque si la primera letra es en minúscula y la segunda en mayúscula los códigos ascci no coinciden con el orden visual. Por lo cual ambos caracteres los pongo en mayúscula y me quito el problema. Así mismo he quitado el uso de un substring, ya que le índice [0] me basta.

domingo, 13 de marzo de 2011

Cloud Day 2011–ALM Sessions. Lab Windows Azure.

By David Salgado.

Al llegar al evento me encontré con Víctor González, y vimos en la lejanía a David. Nos acercamos ya que le quería dar las gracias a David por su ayuda para poder venir al ALM y nos pusimos a rajar sobre un poco de todo. Me llama siempre la atención lo “Conan” que está echo David. Como para un concurso de Master del Universo. Pero como eso es poco, ahora hay una nueva “tortura” que es capaz de hacerte vomitar en 10 minutos del esfuerzo a la “patata”. Y es interesante como la conclusión es que a partir de cierto punto de dolor es cuestión de voluntad. Luchas contra tu propio cuerpo y tus sensaciones, queriendo ir un poquito más allá del limite cada vez.

Una vez echa esta reflexión sobre los sitios en donde encuentra uno perlas del conocimiento, volvamos a la siguiente sesión después de la excelente ponencia de Luís Fraile. Justo a la hora de comer. (Perdonad la foto pero es que David no se está quieto ni un segundo).

074

Primera sorpresa, la comida es un enorme catering por cortesía de Microsoft. Segundo, en el Lab de Azure éramos unos cuantos. Vamos mucho más que unos cuantos. Tercera sorpresa, Víctor tiene un gran conocimiento de Azure y me dio una clase magistral personal sobre todo el tinglado. Muy, interesante.

Así, entre escapada a coger platitos con todo tipo de viandas, Víctor me contó sobre un alucinante patrón de arquitectura de base de datos: CQRS.

Simplificando enormemente podría dar el siguiente ejemplo: Tengo un página web, tengo una tabla noSQL que los campos coinciden con los campos de la página, tengo una base de datos relacional en donde persisto la información. Al hacer una entrada en la base de datos relacionar, se lanza un evento que realiza una escritura en la tabla noSQL dejando los datos listos y preparados para ser servidos a una velocidad de rayo a la página Web. Wow!!

Tienes cierta latencia en la actualización de los datos, pero la velocidad de recuperación ha de ser brutal por necesidad.

David, nos hizo una descripción y comparativa de Azerus con otras opciones de Cloud como amazone o Google. Y me ha quedado claro que aún en mi empresa no tenemos el tipo de necesidad que nos haría útil Azure, porque es ideal para producto o servicios. Cosa que a nosotros aún nos queda en el horizonte. Pero que hay que hacerle un seguimiento muy cercano porque esto corre que vuela. Otra cosa que me quedo muy claro es que, una vez más, Microsoft hace fácil lo complejo y la facilidad de uso de Azure es una gran baza de esta Cloud.

También nos señaló las particularidades del desarrollo en la Nube. Por ejemplo, no se pueden utilizar persistencias que utilicen la memoria del servidor, porque en el momento en que haya más de una instancia dichas persistencias pierden la comunicación entre las diferentes máquinas levantadas. Para ello hay que sacar esas persistencias a la base de datos o a mecanismos no dependientes de la instancia. Así mismo, y como ejemplo, las CSS debieran estar en un repositorio diferente al de la instancia para que fueran común a todas ellas.

Vamos, que es mucho más crítica la separación en capas de las aplicaciones y que hay que tener muy en cuenta los acoplamientos entre instancias para que la arquitectura no sea un impedimento de la, por cierto, pasmosamente fácil escalabilidad en Azure.

Hay una serie de Training Kit en la red sobre Azure, pero David nos ha comentado que se van a desarrollar nuevos Kit mejorados de forma inminente.

Aún quedan las presentaciones de Boris Amenta y de Daniel Seara… (pero me da que eso mañana o luego en la tarde.)

Cloud Day 2011–ALM Sessions. Testing Exploratorio.

By Luís Fraile.
073
A Luís lo llevo siguiendo desde hace mucho tiempo. Junto con Rodrigo y Bruno, fueron los tres cantores que me introdujeron el gusanillo del TFS y ALM por allí por finales del 2007, principios del 2008. Y, hasta el momento, a Luís siempre lo había visto mostrando sus enormes conocimientos teóricos y prácticos en el área de gestión del ciclo de vida de proyectos.
 
Luego, con el tiempo y la cercanía, descubrí que es un hombre renacentista. Es decir, sabe prácticamente de todo y de prácticamente todo sabe bien. Por lo cual, y ahora que su nueva empresa es especialista en todo lo relacionado con el testing de aplicaciones, no dudé ni un segundo en irme a escuchar lo que nos iba a enseñar durante dos horas.
 
Me voy a permitir un breve inciso para darle un tirón de orejas a Microsoft en su vertiente de organizador. No se le puede quitar media hora a una ponencia de este estilo. Y menos para saltar de un interesantísimo tema técnico a uno de venta comercial puro. A mi, personalmente, me pareció mal. Un pequeño detalle que no quita valor a un excelente evento pero que, sin este feo detalle, hubiera sido perfecto.
 
Luís inició la ponencia contándonos por encima lo que significa Agile y específicamente Scrum. Para que, partiendo de la filosofía Agil, lleguemos a una automatización y optimización de las labores del testing funcional. Ojo, la charla versaba sobre Tst funcionales. Ese lado tan olvidado del test. O que a tantos les he oído decir que no son recomendables por su fragilidad. Y que a mi, personalmente, me parecen mucho más útiles que una batería de test unitarios.
 
Han sido muchos conceptos conocidos, y muchos a los que me ha abierto los ojos y por ende la curiosidad. Y entre ellos quisiera destacar los siguientes:
 
* En el equipo ideal debería existir el especialista dedicado al testing. Ya que no es una labor sencilla y necesita, además de experiencia, talento. Es curioso como hay demasiados desarrolladores que caen en “Poner al código en el centro de todo” y se piensan que con sus conocimientos basta y sobra para hacer un buen testing.
 
* En mis primeros pasos en el test funcional, lo he atacado desde las herramientas de Visual Studio. CodedUI. Pero debo de echarle una ojeada larga al Test Manager. Que es la herramienta de test. No el pequeño subconjunto que yo estaba utilizando. También desde aquí un tironcito de orejas a Microsoft por sacar la utilidad para modificar CodedUI en un Feature Pack, ya que no hay forma humana de probarlo a menos que tengas una suscripción Ultimate (que es una pasta impensable para una empresa pequeña)
 
* Aún más fuera del alcance de los mortales está el Lab Management que te permite hacer auténticas virguerías al añadirlo a la fuerza de test del Test Manager y el Visual Studio. Y digo que está fuera de los mortales porque hay que montar un pollo de dinero y de infraestructura de aúpa. Y un master para configurarlo… Pero para eso ésta TestHousing (la empresa de Luís).
 
* Con ello accedemos a virguerías como IntelliTrace. Una caja negra (como la de los aviones) que permite hacer un seguimiento exhaustivo de nuestra aplicación en preproducción (en producción no se aconseja por el gran impacto en el rendimiento) y que nos permite hacer una depuración del código publicado. Si, el código publicado, no el que tengo en desarrollo. Descompila el código y te permite hacer depuración como si fuera el de desarrollo!!.
 
* Ante la pregunta de si podíamos obtener un IntelliTrace de una máquina que no fuera de desarrollo, Luís nos comentó que si. Que tienes los servicios TestAgent y TestRunner que permite ejecutar planes de test y obtener ese chorro de información acerca del funcionamiento de la aplicación.
 
* Partiendo de una historia de usuario, se desarrolló un plan de test compuesto a su vez de test funcionales. Poniéndonos la gorra de tester creamos el test funcional que debe pasar la aplicación, localizamos un bug, lo documentamos y se lo pasamos al tfs en forma de workitem para que, poniéndonos la gorra de desarrollador, flipar en colores del detalle de la información de la causa del bug, corregirlo, lanzarlo en nuestra batería de test codeUI y cerrar el bug. Como tester revisar que esté corregido y cerrar el bug.
 
* Todo esto enlazado con integración continua. En donde me he llevado la sorpresa que tengo que ponerme con Team Build ya que ofrece un montón de ventajas en el desarrollo, aunque sea Web. Y, además, me permite utilizar MSDeploy para publicar mis web de una forma mucho más ordenada y efectiva. No como ahora que lo hago con Publish Web.
 
* Para rematar, estas pruebas se automatizan y se introducen automáticamente en una Build. Para que vayas construyendo una batería de pruebas funcionales y de regresión que, en mi opinión, dejan en un dudoso sitio a las pruebas unitarias. Aunque a mi me resulta muy útil las pruebas unitarias para desarrollar a nivel de método/clase (ojo, no es TDD, hago un mix. A veces antes, a veces después).
 
Fuera del contexto de la charla también me demostró con un simple “Ctrl + ,” la potencia oculta de los atajos de teclado, que creo que me tengo que revisar.
 
Por último, Luís ha dado una clase magistral de cómo mantener a un auditorio interesado durante casi dos horas en algo que haría dormir a las piedras si no se tiene el talento y la experiencia como el ponente. Pena que los compromisos comerciales de Microsoft cerrara con demasiada premura esta excelente ponencia.
 
Y aún quedan dos ponencias mas…
 
P.D. He encontrado él vídeo de la sesión en GlobbTV.

Cloud Day 2011–ALM Sessions. Presentación.

Primero darle las gracias a David por echarme una mano para poder ir en última instancia al evento de Microsoft. Un curioso evento en donde se mezclaron cosas tan dispares como las jornadas de ALM, las de Cloud Computing y las de Partners. Me comentaron que es a causa de ajustes de presupuesto. Que también la crisis la nota Microsoft.

Como en todos los eventos de Microsoft, es impresionante la capacidad de convocatoria de esta compañía. Mientras en Open Source o en Agile nos cuesta horrores juntar un ciento de personas para los eventos, en un acto relativamente pequeño como este… estaba “petao”. Y en lo grandes, como la presentación del 2008, aquello eran miles de personas. Como para que digan que Microsoft está en las últimas…

Si acaso, por no decir que todo es bueno, en el registro no indicaron que se iba a utilizar el pabellón contrario al de la entrada habitual al Ifema, y esto representó una larga caminata de unos 10 minutos para cruzarse toda la feria hasta llegar al punto de registro y a los salones.

Allí, por suerte, me encontré con un compañero de Madrid Dot NET – Víctor González, y así estuvimos en varias sesiones juntos y me dio una charla magistral sobre azure (pero eso ya lo contaré en su momento).

Al poco rato se inició formalmente el evento con la presentación inicial que demuestra la capacidad de comunicación de una empresa grande. Pedazo de salón lleno a rebosar, pantallas gigantes, cifras, etc. Vamos, marketing en su esencia.

066

Y al igual que en la presentación de hace casi tres años, ponente estrella para distender y romper el hielo. En este caso un muy buen humorista que nos hizo soltar más de una y de dos risas, o directamente carcajadas. Joaquín Reyes.

067

A continuación un equipo nos mostró las bondades y capacidades de Azure y de la filosofía de nube de Microsoft, dejándonos con un excelente sabor de boca con una aplicación alucinante para que el ayuntamiento controle cada uno de los “agujeros” en donde tiene plantado un árbol y que a los ciudadanos le representa una magnifica forma de perder el tiempo revisando las características de cualquiera de las 250.000 plantas identificadas.

070

En este punto solamente reseñar lo que ocurre si en un mismo salón tienes cientos de personas utilizando 3G con sus móviles… que telefónica no dio la talla y las comunicaciones iban lentísimas. Y les fastidió un cachito de demo a los excelentes ponentes.

En la siguientes entradas de esta serie, que ya estoy escribiendo, hablaré de las sesiones a las que he asistido y que, junto a las reuniones de pasillo, han conformado un día más que provechoso. Gratificante.