Django, metodologías agiles y calidad del software

Muchos programadores, entre los que estaba yo mismo, piensan que codificar es todo su trabajo, como mucho documentar someramente el código por el que dirán. La gestión de proyectos, para estos programadores, también suele reducirse a: nos sentamos cinco minutos a pensar que queremos que haga nuestro software y después a teclear, cientos, miles, decenas de miles de lineas de código ¡Que bonito es mi código y que bien funciona! Es la única conclusión posible, puesto que hace exactamente lo que el programador ha pensado que tiene que hacer. Continúa leyendo Django, metodologías agiles y calidad del software

Innovando en la gestión, colaborando con la competencía

Mañana tenemos reunión del proyecto QUASAR II*, en estos últimos meses hemos trabajado muchísimo en todos los temas de gestión de calidad en Okkum. La propuesta del proyecto QUASAR es mejorar la calidad a través de una mejor gestión de los proyectos.

Innovar, es tener ideas nuevas que mejoren el resultado final o que nos lleven a crear nuevos productos (vale, es una definición facilona, pero que queréis después de 13 horas trabajando). En estos momentos las empresas que hemos empezado el camino de evaluar nuestra capacidad contra el modelo propuesto por la ISO 15504, estamos interiorizando y adaptando los principios de esta amplísima norma. Al final del proceso debemos haber innovado en nuestra metodología de trabajo, que se traducirá, esperemos, en resultados.

El miércoles pasado, hablando con Julio y Pep Lluis surgieron algunas cuestiones interesantes que espero podamos continuar perfilando mañana. A grandes rasgos,  tal como dijo Pep Lluis: “El conocimiento no esta allí [en la gestión del proyecto]”, es evidente que se requiere de mucho conocimiento y experiencia para gestionar bien los proyectos, a lo que se refería (o eso entendí yo) es que para que un negocio de software funcione la gestión de proyectos no es más que una comodity, es imprescindible hacerlo bien, pero no te asegura más que el fracaso si no lo haces bien, pero el éxito depende de muchas otras variables.

Así que, tenemos la sana intención de aprovecharnos los unos de los otros y buscar formas de aplicar la norma de forma común donde nos sea posible. Incluso nos hemos planteado trabajar con aplicaciones comunes. Por el momento buenas intenciones, con un amplio camino que recorrer.

PD: Mi aportación en este campo, será la búsqueda del mínimo común divisor, la gestión del proyecto no debe llevar más trabajo (ni siquiera trabajo en el mismo orden de magnitud) que la realización del mismo. Pero tampoco hay que dejar al azar el desarrollo del proyecto.

*Gracias al empeño del grupo de mejora de calidad del software de la UIB MiproSoft

Avanzando con SPICE en Okkum

La ISO 15504(SPICE) es una norma para la calidad del software (como veréis por la cantidad de veces que repetiré el nombre en este apunte) que revisa una serie de procesos de la empresa y propone un conjunto de mejores prácticas que debe cumplir para garantizar la calidad en el desarrollo de aplicaciones.

Los procesos en los que nos hemos evaluado son los siguientes: Continúa leyendo Avanzando con SPICE en Okkum

Testing con Django (más alla de unittest)

Django tiene una serie de utilidades muy interesantes para el testeo de webs desarrolladas con el framework, podemos aprender sobre como usarlas aquí. En la documentación de Django, menciona además dos utilidades para testeo desde el navegador Twill y Selenium. Así, que ni corto ni perezoso, he dedicado varias horas del fin de semana a probar estas dos aplicaciones. Mi primera impresión con ambas fue: “esto es imprescindible”. Twill y Selenium son un lenguaje de comandos para realizar las acciones más habituales de navegación web, que nos permiten ejecutar una secuencia de forma automática sobre una página.

En el caso de Twill, su uso es sencillo y potentente, pero requiere conocimientos de Python y se ejecuta desde linea de comandos. Selenium, es el sueño de un programador web. Es un add-on de Firefox, que graba los clicks, textos y demás acciones sobre la página y después podemos reproducirlas tantas veces como sea necesario, sin necesidad de volver a realizar el proceso, Selenium lo hace por nosotros. Además, permite realizar algunas comprobaciones, como por ejemplo que el titulo de la página es el esperado, que existe determinado texto en la página, un id, etc. Además, podemos convertir nuestros guiones a varios lenguajes, para que se usen como test unitarios, uno de ellos es Python.

Hemos empezado a usar esta herramienta para generar nuestros tests funcionales, la solución completa ofrecida por SeleniumHQ, es SeleniumIDE y Selenium Remote Control. Selenium RC, es un servidor que ejecuta los scripts de test creados desde el IDE.  Como podeis ver una solución más que completa.

Instalar la aplicación es trivial, una vez instalada, vamos a Herramientas/Selenium IDE y ponernos a grabar (botón rojo de la parte superior derecha). Todo lo que hagamos en nuestro Firefox a partir de este momento hasta que paremos la grabación (con el mismo botón rojo) queda registrado y puede volver a ejecutarse. La grabación genera un código que podemos manipular fácilmente y que nos permitirá controlar el flujo de ejecución del test.

Aqui tenemos un ejemplo (ya en python) del guión que se genera para ir desde la página de inicio de djangoproject.com hasta la primera página del tutorial (http://docs.djangoproject.com/en/dev/intro/tutorial01/#intro-tutorial01), donde comprobamos que el texto “Writing your first Django app, part 1”  esta presente.

    sel = self.selenium
    sel.open("/")
    self.assertEqual("Django | The Web framework for perfectionists with deadlines", sel.get_title())
    sel.click("link=Documentation")
    sel.wait_for_page_to_load("30000")
    self.assertEqual("Django | Django documentation | Django Documentation", sel.get_title())
    sel.click("//div[@id='s-first-steps']/ul/li[2]/a[1]/em")
    sel.wait_for_page_to_load("30000")
    self.assertEqual("Django | Writing your first Django app, part 1 | Django Documentation", sel.get_title())
    try: self.failUnless(sel.is_text_present("Writing your first Django app, part 1"))
    except AssertionError, e: self.verificationErrors.append(str(e))

Como comentaba, usaremos Selenium para crear nuestros tests funcionales, para agilizar las pruebas que hacemos al programar, para documentar las pruebas y el funcionamiento de la aplicación, pero también para test de carga, para comprobar que el tiempo de respuesta de la aplicación es aceptable y cualquier cosa más que se nos ocurra. En los últimos meses, especialmente desde que estamos inmersos en la evaluación de SPICE, estamos prestando mucha atención a la capacidad de predecir y documentar (en la medida de lo posible) nuestro trabajo, los test unitarios y funcionales son una prioridad en mi agenda, creo que Selenium se convertirá en una herramienta al nivel de Subversion o Netbeans en Okkum, simplemente parte integral de nuestra forma de trabajar.


Calidad del software

En estos momentos tan convulsos en nuestra comunidad (parece que el ocaso de la ingeniería informática ha llegado), en Okkum estamos inmersos en un proyecto para mejorar la calidad de nuestros desarrollos. Estamos implantando la norma ISO 15504 para la mejora en los procesos relacionados con la programación de aplicaciones.

Os contaré las lecciones aprendidas en esta primera semana de contacto con la norma. Intensa primera semana, puesto que la evaluación ha consistido en alrededor de 18 horas de entrevistas en dos días y medio ¡en alguna de las entrevistas eramos cuatro, más las evaluadoras!. Un pequeño sacrificio si conseguimos implantar las mejores prácticas que nos pueden permitir mejorar nuestra organización.

Primera conclusión, la calidad del software solo la garantiza un buen programador. Segunda conclusión, ni el mejor programador, puede crear un buen producto y ofrecer un servicio satisfactorio sin una buena metodología. Tercera hay tantas metodologías como colores (como todos sabemos 16.7 millones). Cuarta, las metodologías ágiles necesitan complementarse con procesos para mejorar el control a nivel organizativo, no de proyecto; es decir, tenemos que garantizar que la empresa aprende, que el conocimiento derivado de la experiencia individual pasa a la empresa, a cada uno de los trabajadores de la misma para mejorar las capacidades individuales y colectivas. Seguro que podría haber una quinta, pero lo dejaremos así.

A grandes rasgos la experiencia a sido satisfactoria, cansada pero provechosa, Hemos podido ver algunas de nuestras carencias, en las que ya estamos trabajando para mejorar, y que mañana nos confirmarán en un informe preliminar que acabarán de redactar, las evaluadoras, para la semana que viene y que espero poder compartir, al menos parcialmente, con vosotros. Nos gusta mucho programar y se nota, por eso somos buenos en nuestro trabajo, ahora es el momento de vestir nuestro producto con una organización empresarial acorde.

PD: Mi satisfacción con Trac crece a medida que avanzamos en su uso y esta evaluación me ha ayudaddo a corroborar su utilidad y facilidad de uso.