Archivo de septiembre, 2010

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.

¿Es ésta la perspectiva Ágil del PMI?

3

Actualización: El artículo al que hacía mención este post ya no existe en el sitio del PMI. Gracias a la comunidad Ágil dentro del Project Management Institute y a su esfuerzo por promover la esencia de las metodologías ágiles, hoy podemos decir que la perspectiva del PMI sobre la agilidad es mucho más objetiva.

A continuación mi publicación original:

En la edición de Agosto de “PM Network” se publicó una pequeña presentación sobre lo que es Agile y si conviene adoptarlo. Para esto recorre varios de los principios y sugiere (en una forma un tanto tendenciosa a mi entender) las situaciones donde aplicaría y las situaciones donde no aplicaría. Quien esté interesado en verla, lo puede hacer aquí:

http://www.pmi.org/resources/pages/agile.aspx

También se publicó una respuesta de la comunidad ágil hacia este artículo:

Video: http://www.xtranormal.com/watch/6973505

Espero que en algún momento logremos superar este tipo de cosas. Por cierto, repito, el artículo del PM Network me parece tendencioso y demasiado escueto como para que de por sentadas sus sugerencias.

Ir arriba