El dilema del conocimiento pasado

Gran parte de mi desarrollo profesional lo hice trabajando con tecnología Microsoft (C#, Asp.Net, Sql Server, SharePoint, Biztalk, etc, etc) pero desde hace unos dos/tres años di un giro y comencé a trabajar con tecnologías «abiertas» (por llamarlas de alguna forma genética), principalmente Ruby, Smalltalk y últimamente Grails.

Hoy por hoy soy más «feliz» trabajando con tecnologías abiertas que con tecnología Microsoft, pero paradójicamente conozco mucho más de tecnología Microsoft que del resto. Al mismo tiempo me parece una picardía «tirar por la borda» todo ese conocimiento y experiencia acumulado durante años.

En fin, ya puse a descargar Visual Studio 2012.

Continuous Delivery, aplicaciones legacy, TestNG y SeleniumIDE

Una cuestión clave en todo contexto de continuous delivery son las pruebas automatizadas. De poco sirve pasar «rápido» entre ambientes, si no podemos garantizar cierta calidad de lo que estamos poniendo en cada ambiente.

Cuando uno construye aplicaciones desde cero, es relativamente fácil generar pruebas automatizadas. El uso de técnicas como BDD y TDD junto con algunos patrones de diseño permiten generar aplicaciones testeables y con alto nivel de cobertura.

Pero no siempre trabajamos sobre aplicaciones nuevas. En ocasiones nos toca trabajar con aplicaciones ya existentes, que muchas veces no cuentan con pruebas y que han sido desarrolladas sin tener en cuenta la testeabilidad. En los contextos ágiles a este tipo de aplicaciones se les suele llamar aplicaciones legacy.

Por suerte son pocos los proyectos, en los que trabajando como programador, he tenido aplicaciones legacy. Sin embargo, trabajando como consultor, me he cruzado bastante a menudo con clientes llenos de este tipo.

Mi estrategia para trabajar con aplicaciones legacy es comenzar haciendo algunas pruebas funcionales que cubran los principales flujos de la aplicación. Y luego a gradualmente comenzar a modificar la aplicación haciendola testeable y agregando distintos tipos de tests según sea posible.

Una combinación de herramientas que me ha resultado interesante para hacer pruebas funcionales es SeleniumIDE + TestNG.

Selenium IDE es una herramienta de automatización de pruebas del tipo Record & Play que funciona integrada con el explorador FireFox y permite que uno vaya recorriendo la aplicación y poniendo aserciones en determinados puntos. Luego la misma herramienta permite reproducir la prueba grabada. Si bien a primera vista la estrategia puede parecer muy interesante, la realidad es que no es tan simple. De hecho este tipo de herramientas de automatización de pruebas ha tenido varias críticas (algunas de las cuales comparto), por diversos motivos que han sido tratados, entre otros, por George Meszaros.

Por su parte TestNG, es una herramienta al estilo JUnit, pero a diferencia de esta, tiene un foco más amplio que la prueba unitaria y por ello provee algunas funcionalidades muy útiles para hacer pruebas funcionales.

A partir de estas dos herramientas, mi estrategia es:

  1. Diseñar la prueba y crear la «cáscara» de la prueba con TestNG
  2. Grabar la prueba con Selenium IDE
  3. Exportar el script resultante a Java
  4. Tomar el código del script Java generado y usarlo para completar la cáscara creada con TestNG
  5. Ajustar la configuración del driver de test (pues si bien por default viene FireFox, uno podría querer/necesitar probar con otro browser)
  6. Ajustando el código de prueba en TestNG tomando en cuenta la particularidades de la prueba
  7. Ejecutar las pruebas con TestNG

Dos cuestiones importantes a considerar para utilizar este enfoque y que son las que abarca el punto 5 son:

  1. Es posible que para ejecutar las pruebas sea necesario contar con un estado particular de la aplicación que puede no ser trivial de generar
  2. Es muy común que los datos de tests requieran cierto grado de «dinamismo». Aquí puede resultar muy útil la funcionalidad de TestNG que permite definir sets de datos de prueba.

Bien, esto es todo por el momento.

Como siempre, si tienen alguna consulta/inquietud, no duden en escribirme.

Algunas ideas sobre cobertura de la prueba

Ayer recibí una consulta sobre este tema y estaba convencido que ya tenia algo escrito al respecto. Me puse a buscar me encontré con este post que había escrito hace ya más de un año, pero nunca había publicado no recuerdo por qué.

Continuando con este post que hice hace un tiempo, hoy quiero compartir algunos pensamientos. Personalmente creo que es importante tener un alto grado de cobertura, pero no hay que perder de vista que la cobertura sólo indica que el código ha sido ejercitado, pero nada dice de cuan bien (o cual mal) ejercitado. Precisamente hace unos dias Carlos me compartió este artículo donde se hace especial incapié en este punto.

Como lo indica este artículo que compartí anteriormente, existen distintos tipos de cobertura. Puntualmente la forma de cobertura que yo describí entra en lo que se describe como statement coverage y que es lo que mide la gran mayoria de las herramientas.

Pero esto sólo, es una herramienta insuficiente y si uno no analiza los resultados con criterio, podria llegar a engañarse facilmente.

Es cierto que de no tener  pruebas, a tener pruebas que ejerciten el 80% del código, es una mejora muy importante, pero de ahí a «confiarnos» en la calidad de nuestro código, hay aún un trecho interesante por recorrer y posiblemente sea el trecho más complejo. Es más, dado el esfuerzo que puede implicar ese 20% restante, puede que resulte más conveniente, concentrarse simplemente en las partes del código que suelen tener acarreados más defectos.

Continuará…

Curso de Startup Engineering: Semana 1

Hola, hoy completé todas las tareas correspondientes a la primer semana de este curso que estoy haciendo en Coursera. Me está resultando muy interesante, no por las cuestiones técnicas (que por el momento son muy básicas) sino por las cuestiones más «de negocio y estrategia».

Si a alguien le interesa sumarse a este curso, aún está a tiempo, dado que la debido a la gran cantidad de gente registrada en los últimos dias, se ha extendido el plazo de entrega de la primera tarea hasta el 3 de Julio.

La respuesta está en los billetes

Cada vez que la selección Argentina de futbol juega un partido por la eliminatorias, no deja de llamarme la atención la ausencia de jugadores de tez morena en el equipo Argentino, un hecho muy común en otros paises de la región.

Ayer mientras miraba el partido de Argentina vs. Colombia, caí en la cuenta que la respuesta está en los billetes. Bueno, no en todos los billetes, sino particularmente en los de 2, 50 y 100 pesos Argentinos. Por si no los tienen presentes, estos billetes tienen las figuras de Mitre, Sarmiento y Roca respectivamente, tres individuos considerados «próceres» según la historia oficial.

Puede que el lector, a pesar de ser argentino, aún no encuentre la relación entre la ausencia de morenos en Argentina y estos 3 personajes. Ocurre que como es natural, en las escuelas se estudia la «historia oficial», curiosamente escrita en parte por los mismos Mitre y Sarmiento, ¡ja!.

Resulta que las ideas difundidas por estos tres individuos han atentado del mismo modo contra los morenos, los habitantes nativos de estas tierras y los gauchos. No voy a entrar en mucho detalle sobre estas ideas, sino que simplemente voy a apuntar al lector en la dirección indicada para que pueda ahondar en la respuesta.

Comencemos por Sarmiento. En la escuela nos enseñan que es «el padre del aula» y de hecho, el dia de maestro conmemora la muerte de Sarmiento. Es cierto, hizo mucho por la educación, no se lo puede negar. Pero lo que no nos cuentan en la escuela son las ideas de Sarmiento más allá de la educación, y menos aún aquellas que él mismo escribió en su libro Facundo. No voy a entrar en detalle sobre lo que dice el libro, pues me causa una gran malestar, pero invito a que el lector lo lea y si luego de eso le quedan dudas, lo invito a que lea el Manual de Zonceras de Arturo Jaureche.

Mitre, «un salvaje unitario» diria Rosas. No estoy muy seguro de esta afirmación, no sé cuán unitario era, ¡ja!, pero sin duda era salvaje. Obviamente, no salvaje a nivel modales sino a nivel ideas, basta mencionar su aporte en la aberrante Guerra de la Triple Alianza contra Paraguay, posiblemente la principal causal de la ausencia de morenos en nuestro país.

Finalmente Roca, el responsable de la Campaña del desierto, o tal vez debiéramos decir: el genocida de los habitantes originarios.  Listo, con esto ya no hace falta decir más nada al respecto de Roca.

Lo curioso es que estos 3 individuos fueron presidentes Argentinos, ¿cómo fue esto posible? Muy simple, fue en un período en que sólo una parte de la población votaba y al mismo tiempo el voto no era secreto, lo cual se prestaba a toda clase de irregularidades.

Y como si fuera poco, en los 90, con el cambio de moneda, al gobierno de aquella época se le ocurre «honrar» a estas personas poniéndolos en los billetes de curso legal, ¡bingo!

Ser programador != escribír código en lenguaje X

Todo comenzó con un aviso de búsqueda de programadores de los amigos de 10 Pines en foro-agiles.

En 10 Pines (Bs As) estamos buscando programadores para proyectos desafiantes, nacionales y para empresas en el extranjero. Los requisitos son los siguientes:…

A dicho mensaje le siguió uno de @ajlopez:

«…hace tiempo que no veia un anuncio pidiendo programadores. Siempre piden «programadores ruby», «programadores java», etc… Al fin alguien vio la luz, y pide programadores…»

Esto me hizo acordar a una charla que suelo tener con mis alumnos al comienzo de cada cuatrimestre. Ser programador es mucho más que ser capaz de escribir código en un determinado lenguaje. Hay ciertas cuestiones como capacidad de resolución de problemas, poder de abstracción, actitud de aprendizaje contínuo y profesionalismo, que diferencian a un programador de una persona que simplemente escribe código. Son justamente esas cuestiones las que intentamos transmitir en la universidad.

Lecturas 2012

ups: este mail me quedó colgado como borrador y me olvidé de publicarlo. Bueno, más vale tarde que nunca.

Comencé el año leyendo Hechicero, el tercer libro de la saga Rio Sagrado de Wilburg Smith. Excelente igual que los dos tomos anteriores.

Luego leí el primer libro de Game of Thrones que lo tenia en mi biblioteca desde mi viaje a Europa. También excelente, con unos giros inesperados.

El siguiente libro fue de un autor argentino llamado Guillermo Martinez, el título del libro: Acerca de Roederer. Me gustó y le dediqué un post en su momento.

Por último terminé la serie de Los Reyes Malditos de Maurice Druon. La comencé a leer hace unos 4 años, lei rápidamente el primer libro y dejé el segundo a la mitad para retomarlos años después y me lei 5 libros seguidos. Resulta que habia comenzado a leer la serie con la expectativa de espaditas, estrategia militar, etc, pero me encontré con intrigas políticas en las corte de Francia. Una vez que acomodé el nuevo panoroma, me resultó entretenido.

En el thread técnico lei bastantes menos libros, pero muchos artículos, blogs y capítulos sueltos de determinados libros entre los que se encuentran:

En otro post les cuento el backlog de lecturas para 2013.

De las grandes bandas a los (no tan) grandes solistas

Esta tarde estaba escuchando en  la radio un reportaje que hacía Juan Di Natale a Palo Pandolfo a propósito de su nuevo disco. Siempre he sentido un cariño especial por Palo, pues fue el líder de Los Visitantes, una de las bandas que más seguí durante mi adolescencia, allá por  la década del ’90. Luego de la disolución de Los Visitantes, Palo formó parte de diversas agrupaciones y hoy en la entrevista conocí la última: Palo y La Hermandad.

Esto me llevó inmediatamente a pensar en otros casos de artistas que también pasaron de bandas «tradicionales» a formaciones del tipo «solista + grupo».  Ejemplos: Indio y Los Fundamentalistas, Ciro y Los Persas, Skay y Los Seguidores de la Diosa Kali, Juanse y Las Fieras Lunáticas, Flavio y La Mandinga, etc, etc.

Y casi sin darme cuenta me encontré pensando en las bandas de convocatoria masiva de los ’90, Los Rendondos, Soda Stereo, La Renga, Los Piojos, Los Cadillacs, etc.  ¡Uau!  Parece como que varias de aquellas grandes bandas han dado lugar a nuevas formaciones caracterizadas por «El solista compositor» y «el grupo de músicos acompañantes». ¿Individualismo?