Desarrollo de Software

WebTest Fixtures, FitNesse, Selenium y Autenticación de Windows Integrada

0

Como parte de uno de los últimos coachings en implementación de Scrum en un equipo de desarrollo de software, se decidió implementar ATDD y para ello utilizamos FitNesse para la escritura y preparación de las pruebas y Selenium para la ejecución de las mismas.

Para poder vincular FitNesse con Selenium, utilizamos WebTests Fixtures (gracias Gojko et al.)

La sorpresa que nos esperaba era una aplicación web desarrollada en .NET con Autenticación de Windows Integrada. Quien haya pasado por esto, sabrá que no hay mucha información online que nos permita resolver el problema. Salvo un par de modificaciones al core de WebTest y unos cuantos posts aislados, no podemos dar con una fuente unificada para solucionar este problema.

Desde el principio teníamos claro que no queríamos modificar el código de las herramientas de test que empleamos, para darles la posibilidad de ser actualizadas a medida que salgan nuevas versiones sin grandes problemas, por lo tanto, la solución debía ir por fuera.

Luego de investigar un tiempo, decidimos que la mejor opción era hacer que Selenium ejecute una instancia de Firefox lo suficientemente configurada para que la Autenticación Integrada de Windows no sea un problema.

Contexto

Tanto FitNesse como Selenium están instalados y corriendo como servicios en un servidor windows. La versión de FitNesse es la que viene con el download de WebTest Fixtures, mientras que la versión de Selenium es la más reciente, puesto que la que viene con WT soporta hasta Firefox 2, no 3.

Solución

En principio debemos crear un profile nuevo de Firefox con una determinada configuración para que las credenciales del usuario bajo el cual el servicio de Selenium está corriendo sean enviadas a la aplicación web de forma transparente, sin pop-ups ni alertas que impidan a Selenium realizar su trabajo. Luego debemos configurar a selenium para que levante ese perfil específico de Firefox, y no otro.

Creación del Perfil en Firefox

Para crear un nuevo perfil para firefox es importante estar logueado con el usuario bajo el cual el servicio de Selenium está corriendo. Una vez dentro del sistema se deben seguir estos pasos (NOTA: se asume Windows):

  1. Ejecutar:
    firefox.exe -ProfileManager
  2. Hacer click en “Crear Perfil”
  3. Poner un nombre al perfil. En nuestro caso utilizamos “WEBTEST-FFPROFILE-IWA”
  4. Seleccionar una carpeta. En nuestro caso utilizamos “C:\webtest\WEBTEST-FFPROFILE-IWA”
  5. Hacer click en “Fin”
  6. Seleccionar “No preguntar al iniciar”

Configuración del Perfil en Firefox

  1. Continuando desde el paso anterior, seleccionar el perfil recientemente creado y hacer click en “Iniciar Firefox”
  2. Ir a “Ver->Toolbars” y desactivar “Marcadores”
  3. Hacer click derecho sobre el toolbar y seleccionar “Personalizar”
  4. Seleccionar “Usar Iconos Pequeños” y aceptar
  5. Ir a “Herramientas->Opciones”
  6. En el Tab “Principal” setear “about:blank” como homepage y desactivar “Mostrar Descargas”
  7. En el Tab “Perstañas” seleccionar nueva ventana para nuevas páginas y desactivar todos los alertas
  8. En el Tab “Contenidos” desactivar el bloqueo de Pop-Ups
  9. En el Tab de “Privacidad” desactivar todas las opciones del Historial
  10. En el Tab de “Seguridad” desseleccionar las opciones de seguridad y en “Configuración…” desactivar las alertas
  11. En el Tab “Avanzado” desactivar “desplazamiento automático” del subtab “General” y desactivar alertas y motores de búsqueda del tab “Actualizaciones”
  12. Ir a “Herramientas->Complementos” e instalar Firebug, Selenium IDE y ScreenGrab
  13. En la barra de direcciones escribir “about:config”
  14. Crear la entrada lógica (boolean) “extensions.update.notifyUser” –> falso
  15. Crear la entrada lógica (boolean) “extensions.newAddons” –> falso
  16. Modificar la entrada “network.automatic-ntlm-auth.trusted-uris” e ingresar el dominio del servidor donde queremos probar la aplicación web
  17. Modificar la entrada “network.ntlm.send-lm-response” y darle un valor de “verdadero”

En este punto ya debemos tener el perfil de Firefox correctamente configurado.

Configuración de Selenium para tomar el perfil de Firefox Creado

Modificar el archivo batch que ejecuta Selenium (en el raíz de WebTest) e incluir este parámetro detrás del llamado al JAR: “-firefoxProfileTemplate C:\webtest\WEBTEST-FFPROFILE-IWA” (cambiar C:\webtest\WEBTEST-FFPROFILE-IWA por la dirección de tu carpeta donde guardaste el perfil de Firefox creado recientemente.

Listo, los tests ya deberían ejecutarse satisfactoriamente bajo la Autenticación de Windows Integrada.

Espero te sirva si en algún momento te topás con este problema.

Programador no significa Desarrollador

4

A menudo me encuentro frente a situaciones donde se confunde “programador” con “desarrollador”, o más aún, “desarrollador” con “programador”.

Antes de seguir, aclaro que mi postura es la de definir al programador como aquel que no se especializa en otra cosa que no sea codificar nuevas funcionalidades en función de diseños recibidos. No contribuye a escribir o entender las especificaciones. Ni se le ocurre escribir pruebas automatizadas. No colabora para mantener el build actualizado. Ni que hablar de las pruebas. No ayuda al cliente a comprender sus necesidades ni a resolver sus problemas. Se dedica solo a eso, a escribir código.

La tendencia actual del desarrollo de software y las metodologías ágiles está comprendiendo cada vez más la necesidad de contar con equipos multidisciplinarios, o en otras palabras, personas que contribuyan de distintas maneras al objetivo buscado, en lugar de personas que solo se especialicen en una parte del proceso y que no tengan una visión completa de él.

De esta manera, todos son igual de responsables por alcanzar los logros y la existencia de fracasos (si la hubiera). La solución más razonable que algunas organizaciones están ofreciendo frente a los contextos de negocios cambiantes es aumentar la flexibilidad. Incluso es lógico deducir que el hecho de contratar solo especialistas en determinadas áreas generará muchos mayores costos económicos e incluso de comunicación dentro del equipo, lo que puede atentar contra el desarrollo exitoso del producto.

¿Qué se espera de un desarrollador? El desarrollador es básicamente quien aunque no hace TODO al mismo tiempo (eso sería un absurdo), conoce el proceso de principio a fin y por eso logra detectar “a tiempo” cualquier “contratiempo” que pudiera surgir. En otras palabras, sería como esas nuevas cámaras digitales que obtienen una imagen panorámica que ofrece una visión completa de la escena fotografiada.

Entre las tareas de un desarrollador se encuentran:

  • Entender el negocio y los objetivos que se están persiguiendo
  • Colaborar con el Product Owner para identificar las historias de usuario y sus criterios de aceptación
  • Ser parte protagonista a la hora del armado y mantenimiento del entorno de trabajo
  • Garantizar las prácticas ágiles de desarrollo de software como Integración Continua, TDD, ATDD
  • Participar en el diseño de la solución, tanto lógico como arquitectónico

Por un mundo mejor, las responsabilidades del desarrollo del producto deben estar compartidas entre todos los involucrados en el proyecto, con la salvedad de que el Product Owner no requiere, en la mayoría de los casos, tener conocimientos técnicos. Sí, percibo que la siguiente pregunta es: ¿y el Scrum Master? Mi respuesta es otra pregunta ¿Cómo podría el Scrum Master remover impedimientos y garantizar al equipo un adecuado entorno de trabajo si no tiene los conocimientos técnicos necesarios de los desarrolladores? Cito:

“Un conocimiento íntimo y detallado de cómo algo funciona incrementa las posibilidade de que el líder ayude al equipo a descubrir las cuestiones técnicas más sutiles que deban ser tratadas” (LaFasto & Larson, When teams work best, 2001, p. 133).

En el fondo, aunque el equipo sea el encargado principal de desarrollar el producto y naturalmente es quien mejor conoce su desarrollo, el Scrum Master no debería desconocer los aspectos del desarrollo y en algunos casos, hasta debería ser quien mejor los conozca si es que se quieren evitar problemas de comunicación, interpretación y estimación; pero sobre todo, si se pretende alcanzar un objetivo exitoso.

Volviendo al comienzo: lo que necesitamos son verdaderos desarrolladores, personas que cuenten con las herramientas y prácticas necesarias para lograr un proceso de desarrollo exitoso y un producto de alta calidad. Esto no quiere decir que no se necesite también de los programadores, pero no confundamos un desarrollador o “developer” con un simple programador. Incluso un excelente programador podría ser un pésimo desarrollador y un Scrum Master que no ha adquirido estas herramientas a lo largo de su formación podría eventualmente ser percibido por el equipo de desarrollo como falto de las habilidades necesarias para cumplir su función.

Si apenas podemos entender estas diferencias fundamentales, habremos dado un paso más hacia un mundo de trabajo mejor.

Leyes

Las Leyes de Mariana para implementar Scrum

0

¿quién es Mariana? Fiel al mejor estilo periodístico que no da a conocer sus fuentes, muchas veces por razones de ética profesional y muchas otras para fastidiar de manera divertida a la audiencia, no revelaré su verdadera identidad . Llamémosla simplemente “Mariana”. Procedo a desarrollar la ancécdota.

“Mariana” es una alumna que asistió a uno de los cursos que dicté este año. Al finalizar el curso, junté todas mis pertenencias, entre ellas el material que usualmente utilizo como cartas, fichas, post-its, rollos de cinta, marcadores, etc. Más tarde cuando llegué a mi casa, al a acomodar las cosas para guardarlas encontré este papel:

Leyes infalibles para Implementar Scrum
1. Hacerlo de forma Iterativa, Incremental
2. No querer abarcar todo desde el principio
3. Controlar las expectativas de los primeros Sprints|
4. No abrumarse frente a los impedimentos que van a surgir (hasta ahora ocultos)
5. Tener coraje, experimentar y dejar experimentar – Errar no es malo, lo malo es no aprender del error.

Bueno, la verdad es que yo tampoco supe quién fue el autor o la autora de esta nota porque no estaba firmada. Solo adivino que fue una mujer porque dobló el papel sospechosamente muy prolijo y por eso adopté llamarla “Mariana”. Hoy lamento que no haya compartido estas ideas con sus compañeros durante el curso, hubiera sido algo muy productivo,  pero al menos lo bueno es que entendió de qué se trata llevar Scrum a la práctica.

photografía: http://www.flickr.com/photos/limaoscarjuliet/225249268/

31 de Agosto – Desarrollo Ágil con Scrum

0

Los beneficios de Scrum están ampliamente comprobados, pero ¿cómo implementar Scrum? ¿de qué se trata ser un verdadero equipo Ágil?¿cuáles son las prácticas y herramientas ágiles de gestión de proyectos e ingeniería de software que debo conocer?

Para responder a estas preguntas, este martes 31 de agosto a las 18.30hs estaremos presentamos la nueva certificación de desarrollo ágil de la Scrum Alliance: CSD cuya novedad principal es la comprensión práctica de los valores y principios de Scrum y su aplicación en situaciones reales, lo que permite conocer y experimentar Scrum por dentro para luego poder trasladarlo a la ejecución de proyectos concretos.

Esta charla informativa te servirá para entender aspectos fundamentales de Scrum referidos a su implementación, cuáles son las prácticas ágiles de desarrollo y cómo aplicar los principios ágiles en el día a día, los roles, los errores más comunes y cómo evitarlos, el proceso de adaptación en contextos de negocio cambiantes, y más.

CSD: LA CERTIFICACIÓN DE DESARROLLO ÁGIL DE LA SCRUM ALLIANCE

Sacate todas las dudas y descubrí tu potencial ágil y el de tu equipo de trabajo.

Martes 31 de Agosto

18.30 hs

Av. Córdoba 679, 4º piso, oficina 403
Capital Federal

Te esperamos!

Inscripciones: hello@kleerer.com

(Cupos limitados)

Instalación de RVM (Ruby Version Manager)

0

Ruby Version Manager (RVM) es una herramienta muy útil a la hora de trabajar con diferentes versiones de ruby en un mismo entorno.

Para ilustrar la instalación y operación de RVM, hemos grabado el siguiente video, que podés encontrar también en Vimeo.

Tutorial de RVM – Ruby Version Manager from kleer on Vimeo.

Scrum en Rosario!

0

En una nueva visita a la bella ciudad ribera, esta vez de la mano de Fundación Libertad, tuve la oportunidad de charlar algunas horas de lo que significa Scrum y de poder acercarnos un poco más a las Metodologías Ágiles.

Tuvimos la suerte de aprovechar una fresca mañana de invierno, en un piso alto de un edificio del centro de la ciudad que ofrece al espectador una impactante vista del río Paraná. Bellísimo.

Para empezar, nos valimos de una “dinámica de tribus” a través de la que identificamos los distintos grupos de profesionales y su grado de conocimiento y utilización de Metodologías Ágiles en sus proyectos (es increíble como este tipo de ejercicio siempre funciona, sea cual fuere el contexto o el grupo de personas).

Ya adentrados en la presentación de la temática, estuvimos conversando acerca de los Principios, el Manifesto Ágil, Historias, Sprints, Product Backlog, Release Plan, Task Board, Daily Standup Meetings, Retrospectivas… en fin, intentando entender en profundidad qué es lo que hace que la aplicación de las Medologías Ágiles mejore la calidad de lo que se entrega al cliente y las prácticas de nuestro trabajo cotidiano.

Aunque para algunos escuchar lo que proponemos desde las Metodologías Ágiles pueda sonar llamativo y fuertemente contrastante con lo que conocieron hasta ahora, existen muchos otros que se interesan positivamente y que buscan aprender más del tema para poder llevarlo a su trabajo. Ya el solo hecho de participar de esta experiencia es un gran paso para lograrlo!

Aquí dejo la presentación que utilizamos:

Hasta la próxima, Rosario!

CSD – Certified Scrum Developer en Bs As

2

Durante la semana pasada -de Lunes a Miércoles- tuve la oportunidad de facilitar un workshop intensivo de 24 horas de Desarrollo Ágil de Software perteneciente a la certificación CSD (Certified Scrum Developer).

Dejo aquí un video que ilustra la jornada:

Para más información sobre estos workshops de certificación CSD podés visitar la página de Kleer dedicada a este tema en: http://www.kleerer.com/es/CSD

Hola Doc!

¿Qué pasaría si los médicos fuesen tratados como desarrolladores web?

0

Mientras está ahi sacando el tumor, arregle mi nariz y ponga unos implantes mamarios. No puedo pagar por eso, pero prometo mostrárselo a todos mis amigos y va a quedar excelente en su currículum.

¿Te imaginas tratando a tu médico de esta manera?

Desafortunadamente, así es como muchos desarrolladores web y desarrolladores de software suelen ser tratados por los clientes.
Debido a que el desarrollo de sitios web es una ocupación bastante nueva, aún hay mucha gente que no entiende qué se requiere para la realización de ese sitio web impresionante.

Yo personalmente he estado como receptor de varias solicitudes bastante ridículas por parte de algunos clientes.
Es tan común, que sitios como Clients from hell existen y están llenos de historias que a primera vista parecen totalmente ficticias. Pero no lo son.
Pero ve y habla con alguien que trabaje en el desarrollo web y pregúntales acerca de los clientes de terror. Cada uno de ellos tendrá una historia que contar.

Mi teoría es que debido a que la persona promedio sólo ve “el frente” de los sitios web, no tienen idea de la labor de codificación y el tiempo que se tarda en crear un buen producto web. No llegan a “mirar debajo del capó” y ver todos los scripts, llamadas, estilos CSS, etc
Si lo hicieran, habría más entendimiento de que este es un trabajo real, no sólo un trabajo que un aficionado realiza en su tiempo libre.
(También, muchos operadores del “descuento”, como los equipos de desarrollo offshore y diseñadores no calificados contribuyen a perpetuar el mito de que esta obra es barata y fácil de hacer)

Piense en las industrias donde los clientes tienen una mejor comprensión del resultado final:
- Los clientes no le dirían a un mecánico que les realice tareas extras gratis sólo porque se encuentran en el motor de todos modos.
- Los clientes no le pedirían a un arquitecto la remodelación total de un plan de construcción una vez que se hace, a las 9 am del día siguiente, debido que a su hijo de 6 años no le gusta.
- A los pintores de casas no se les pide que vuelvan a pintar una casa de forma gratuita, porque el color se ve diferente ahora que cuando se ve en el sol de la mañana.
- A los abogados no se les pide que trabajen en un caso de forma gratuita, ya que puede quedar bien en su currículum más tarde.

Lamentablemente, estos casos existen dentro de la dinámica actual de cliente-desarrollador.
Yo, por ejemplo, espero que esto cambio pronto.

Traducción directa. Fuente: Agent-X.

Una nueva era sobre motivación y compromiso

0

El problema es que Andrés no tiene la camiseta puesta.

Increíblemente este es el razonamiento más habitual que he encontrado a lo largo de estos últimos años frente a la falta de compromiso y/o motivación de los recursos dentro de una organización. Comencemos por llamarlos “personas” en vez de “recursos” y vamos a empezar a entender un poco mejor la cuestión.

Otro argumento igualmente utilizado es :

Y bueno, la “Generación Y” es así.

Ejemplos reales tengo decenas que por respeto no voy a dar a conocer, pero en su mayoría se dan/dieron en esas empresas donde se recompensa la “Performance” de la gente.

Es un tema para charlar durante un largo tiempo, pero sería mejor hacerlo con un café de por medio, mucho mejor en un almuerzo. Lamentablemente no estamos en ninguna de esas situaciones.

En estos momentos se dió una discusión bastante interesante en la lista de ágiles argentina que me recordó este tema, donde Juan envió un video que ilustra muy claramente la cuestión.

Lo dejo aquí para quien quiera verlo. Espero les resulte interesante el enfoque de Daniel Pink acerca de la cuestión.

Por lo pronto, estaría bueno que las nuevas start-ups empiecen fomentando la autonomía, maestría y propósito de cada uno de sus empleados.

PD: Aquí dejo también una charla interesante que Daniel Pink dió en TED:

OSX Leopard

Instalando Rails 3 en OSX Leopard

0

Finalmente pude instalar Rails 3 en Leopard (OSX 10.5.5). Aparentemente era algo sencillo de hacer, pero el upgrade de Ruby y de RubyGems en Leopard no funciona del todo bien. Por lo tanto, luego de 12 horas, puedo decir que tengo Rails 3 funcionando, pero me hizo trabajar bastante.

Para que sirva de referencia, como bitácora o para que otro no transpire como lo hice yo hoy, lo dejo aquí registrado.

Antes de comenzar, la versión de OSX sobre la que lo hice es la 10.5.5 (Leopard):


El primer paso -antes de comenzar- es intalar MacPorts y esta versión específica de Xcode.

Inmediatamente después debemos eliminar del sistema (casi) todo Ruby y RubyGems:

sudo rm -r /System/Library/Frameworks/Ruby.framework/
sudo rm -r /Library/Ruby
sudo rm /usr/bin/ruby
sudo rm /usr/bin/gem

Luego instalamos RubyGems a través de MacPorts:

sudo port install rb-rubygems

Ya tienes RubyGems 1.3.5 en tu sistema, pero debemos actualizarlo a la versión 1.3.7. “sudo gem update –system” no hará el trabajao, por lo que debemos hacerlo de una manera alternativa:

sudo gem install rubygems-update
sudo update_rubygems

Terminados esos pasos, ya podemos proceder con la instalación de Rails3:

sudo gem install tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler i18n
sudo gem install rails --pre

… y de esta manera, ya debería estar Rails 3 instalado en tu leopar 10.5.5:

Ir arriba