web 2.0

viernes, 25 de junio de 2010

Presentando JUnit y Selenium

Vengo en el ADO, voy para Pachuca y la película esta aburrida, así que aqui vamos.

El día de hoy en el trabajo realice una presentación al equipo de desarrollo de la Gerencia para la que trabajo, el tema en cuestión fue "Pruebas Unitarias". Podría decir que al menos desperte una cierta curiosidad entre los desarrolladores, aunque me temo que esa curiosidad les dure muy poco.

Durante la platica mencione a JUnit y a Selenium IDE como dos grandiosas herramientas. Lo más difícil de explicar y hacer notar su utilidad fue JUnit, lo más fácil fue Selenium. Al final de la presentación se toco el tema de "diseño del sistema" o Arquitectura... Ese era el momento ideal para hablarles de TDD y sus ventajas no como una buena práctica de testing sino como un excelente marco para guiar al equipo por un buen diseño, después de todo su nombre lo dice (Test Driven Development), pero bueno, me detuve en primera x que soy un niño en ese tema y aun continuo un camino de aprendizaje y en segunda por que considero que si el equipo no realiza pruebas unitarias y yo comienzo a decirles que primero hay que programar una prueba para algo que aun no existe, seguramente me hubieran tirado más de a loco.

No cabe duda que es por demás interesante la implementación de buenas prácticas en un proceso de software y más aún cuando se le da un enfoque agile. No perdi la oportunidad para mencionar de pasada a eXtreme Programming y Scrum, claro que ni siquiera mencione bien para que son ya que no queria parecer ñoño, pero deje plasmadas dichas palabras en las diapositivas.... espero que algún curioso pueda investigar sobre Scrum y XP!!!

Ya les platicare posteriormente como nos va en este camino que recién inicio... si, la idea es comenzar a implementar prácticas ágiles muy sencillas.

Saludos!!

lunes, 21 de junio de 2010

2 Herramientas: Monitor de Logs y Screenshot Tool

Les voy a presentar 2 sencillas pero muy útiles herramientas que podemos utilizar en nuestro trabajo diario como Desarrollador de Software:


  1. Tail for Win32:  Tail es un programa para monitorear los cambios que ocurren en tiempo real en archivos de texto. Con Tail podremos monitorear los archivos de Log del Servidor de Aplicaciones o de nuestra aplicación Java/.NET/etc., que tengan un archivo de Log usando por ejemplo Log4J. Algunas cosas interesantes y bastante sencillas son el hecho de poder definir keywords y Tail en tiempo real nos mostrará la salida del Log marcando de colores aquellas keywords que hayamos definidio previamente.


2. GreenShot: Cuantas veces como desarrolladores nos vemos en la necesidad de aclarar rápidamente a un usuario algunas opciones del Sistema, incluso imprimiendo capturas de pantalla y poniendo flechas y texto para un mayor entendimiento por parte del usuario. GreenShot es casi un clon de Snagit, a diferencia que GreenShot es Open Source. Su uso es tan sencillo que basta con presionar la tecla "Impr Pant" e inmediatamente podremos seleccionar una sección de pantalla y listo!! Podremos ver la sección que hemos recortado en el editor de GreenShot en caso de que necesitemos agregar flechas, marcar algún texto, etc., o en su defecto omitir dicho editor y pegar la sección de imagen que hemos recortado en nuestro correo electrónico, listo para ser enviado! En menos de 5 segundos tenemos una útil captura de pantalla y ya no será necesario abrir el no tan útil MS Paint.


domingo, 6 de junio de 2010

¡¡¡El cliente no sabe lo que quiere!!!

Cuando usted era un jovenzuelo (como yo al momento de escribir este artículo), cuando comenzaba a realizar su vida propia y comenzó a ganar un poco de dinero, seguramente por su mente paso el comprar un automóvil, cuentas bancarias, etc., y si usted al igual que yo, llego a la ciudad originario de provincia, al inicio muchas cosas le son desconocidas, usted sabía que quería tener un automóvil, pero no tenia muy claro que tipo de auto le convenía ni con que características.

  • ¿Qué tipo de motor?
  • ¿Que tipos de frenos? ¿de disco, de tamborantiblockiersystem?
  • ¿Que tipo de suspensión? 
  • Velocidad máxima, tiempo de aceleración.
  • Costo de mantenimiento y refacciones.
  • Costo de tenencia (en México).
Usted disponía de un presupuesto, y para aclarar todas sus dudas, lo mejor era consultarlo con los expertos de las agencias o incluso con sus mismos amigos... Si usted estaba convencido que quería un Automóvil pero no tenia claro los tipos de características que hacen atractivo a un automóvil según su presupuesto, ¿podríamos concluir que usted no sabia lo que quería?... Pues SÍ, aunque también podría ser NO.

En el desarrollo de Software estamos muy acostumbrados a gritar la frase "El cliente no sabe lo que quiere" siempre que algo sale mal y desafortunadamente la indecisión en el desarrollo de software es más compleja que el ejemplo del auto. En un inicio el cliente sabe que necesita automatizar sus procesos de negocio y hacerlos más efectivos y dinámicos, que le permita una toma de decisiones más certera, pero pese a lo anterior, tiene muchas dudas de el alcance y hasta donde la tecnología le puede ayudar, y esto es parte de la naturaleza de trabajar con cosas abstractas e intangibles. 

Bajo la mirada de la filosofía ágil, el cambio de requerimientos es algo natural al cual debemos adaptarnos, de ahí que en Scrum se recomiende hacer entregas con valor de negocio mínimo cada 2 semanas hasta 1 mes como máximo, de esta forma el cliente podrá ir validando, refinando  y agregando nueva funcionalidad con una idea mucho más clara a lo largo de la duración del proyecto y de ningún modo tendrá que vaciar sus requerimientos en largos e inútiles documentos que inevitablemente cambiaran con el tiempo, además de crear una mala relación entre cliente-consultora.

Requerimos un cambio de filosofía, dejar de pensar que el cliente es quien comete los errores, el cliente al igual que nosotros no tiene muy claro lo que quiere, dado que no es experto en tecnología y en un principio no esta consciente de todas las cosas que la tecnología le puede ayudar, esto último lo va descubriendo conforme puede ir probando funcionalidad. La comunicación Equipo de Trabajo - Cliente es importante para el éxito de un proyecto, olvidémonos de la vieja comunicación Cliente - Líder/Gerente - Equipo de trabajo... En este ámbito, los puentes en la comunicación no sirven, bajo NINGUNA circunstancia, NO HAY EXCUSA para hacerlo.

Más vale el desarrollo iterativo y adaptarse al cambio, la frase "¡¡¡El cliente no sabe lo que quiere!!!" debe ser cosa del pasado, debemos saber convivir con el cambio, negociar tiempos de entrega, de esta forma tendremos a un cliente más contento que al estar culpándolo por los cambios.




miércoles, 2 de junio de 2010

DB4O: Una Base de Datos Orientada a Objetos

DB4O es una Base de Datos Orientada a Objetos que cumple muy bien su función, persistir datos de aplicaciones de pequeña y mediana escala.

Los modelos Relacional y Orientado a Objetos son ciertamente incompatibles, en términos simples, al desarrollar una aplicación con Base de Datos no almacenamos objetos, si bien nos va, utilizando un patrón de diseño DAO podemos "abstraer" un poco la complejidad de la persistencia en la capa web y pasarla a una capa de persistencia para que sea otra persona quien la implemente, o mejor aún, de una forma más sofisticada emplear un Framework ORM como Hibernate. Pero en el peor de los casos, al trabajar con una BD Relacional utilizamos variables escalares y enviamos sus valores a la BD.

Sin entrar en polémica sobre la utilización o no utilización de SQL embebido código de un Lenguaje de alto nivel  o la utilización de un ORM, es bueno considerar a DB4O como una alternativa real y potente para muchos de los proyectos que podamos desarrollar.

Su utilización es tan fácil que para abrir una conexión basta hacer algo como:

ObjectContainer db = Db4o.openFile(DB4OFILENAME);

Y para persistir información basta con escribir:

db.store(usuario);
db.close();

Sin mapeos, ni XML, ni SQL, ni concatenación de variables a String que contiene SQL!! Basta con crear el objeto y emplear el método save.



Existe una versión de DB4O para Java y una más para C#, mismas que pueden descargarse de la página oficial.Para nuestro ejemplo en Java basta con agregar a nuestro entorno de programación (Eclipse, NetBeans, etc) el archivo db4o-7.4.88.12908-java5.jar.

Al descargar la librería de la página oficial, nos vendrá con una completa documentación, incluido un muy buen tutorial en ingles y español sobre su utilización.

Un sencillo y austero ejemplo en NetBeans se puede descargar de aquí