Jython: Desarrollo ágil en la plataforma Java (Parte 1)

Jython es la implementación del lenguaje Python para la plataforma Java, que con el correr del tiempo y gracias a los esfuerzos de distintos proyectos open source, se ha convertido en la plataforma multilenguaje abierta más importante. La Máquina Virtual de Java hace tiempo que ya no sólo ejecuta código escrito en Java: Python, Ruby, JavaScript, Scala, Clojure, Groovy y JavaFX Script son algunos de los lenguajes con una implementación madura integrada en la plataforma Java.

El lenguaje Python, por otra parte, es uno de los lenguajes dinámicos más populares y cuenta con el respaldo de gigantes de la industria como Google.

OK, ¿pero de qué le sirve esto a quienes están intentando usar técnicas o metodologías ágiles en el desarrollo de software? En esta serie de artículos daré algunos tips de como incorporar Jython para apoyar la agilidad en el desarrollo.

Doctest

La primera utilidad de Jython está en hacer que el testing de aplicaciones Java sea menos doloroso. Ya saben, incluso cuando uno está convencido de que es mejor escribir pruebas automáticas es una buena idea, no deja de ser una tarea que a veces se torna aburrida, especialmente si el lenguaje de programación no ayuda mucho. A veces estamos forzados a usar Java como lenguaje de desarrollo, pero el testing es algo en que contamos con libertad, por lo que se puede usar un lenguaje más flexible para esta tarea.

En Python, además de unittest (el clásico framework inspirado en JUnit), se cuenta con doctest, un interesante framework de testing que permite mezclar documentación con tests y que facilita la creación de tests a partir de sesiones con el intérprete de Python. Al usar Jython podemos utilizar este framework para verificar código escrito en Java. Por ejemplo, el siguiente fragmento, además de servir como ejemplo de uso de una hipotética librería para manejar RUTs escrita en Java, es un test ejecutable para doctest:

"""
>>> from milibreriajava.utils import Rut

La clase Rut recibe dos argumentos en su constructor: el número y el verificador:

>>> r = Rut(11111111, '1')
>>> r.toString()
"11111111-1"
>>> r.getVerificador()
'1'
>>> r.getNumero()
11111111
>>> r.isRutEmpresa()
False

En caso que no se indique el verificador, es calculado automáticamente:

>>> Rut(11111111).getVerificador()
'1'

Pero en caso que se indique y sea inválido, se lanza una excepción:

>>> Rut(11111111, '2')
Traceback (most recent call last):
...
milibreriajava.utils.RutInvalidoException: Verificador incorrecto

Tampoco se aceptan un RUT igual o mayor a 100 millones:

>>> Rut(100000000)
Traceback (most recent call last):
...
milibreriajava.utils.RutInvalidoException: Fuera de Rango
"""
if __name__ == "__main__":
    import doctest
    doctest.testmod()

Si el fragmento anterior se ha guardado en un archivo llamado “test_rut.py”, ara ejecutar este test si se tiene instalado Jython basta con:

$ CLASSPATH=/classpath/de/milibreriajava/ jython test_rut.py

O si se usa Windows:

> set CLASSPATH=classpathdemilibreriajava
> jython test_rut.py

Es común decir que los tests unitarios son especificaciones ejecutables. Sin embargo, y a menos que el código sea muy explicativo, no suele ser fácil inferir la razón de los tests. Mi punto es: suele ser fácil entender qué se está testeando, pero no por qué. Doctest por otra parte permite una mezcla mas fluida entre código y descripciones textuales, lo que lo hace ideal para crear especificaciones ejecutables mas mantenibles.

¿Y qué más?

Por supuesto que hay más maneras de usar Jython junto con técnicas ágiles de desarrollo que serán vistas en futuras entregas de esta serie. Para los impacientes, pueden ver la presentación que expuse en las Jornadas Regionales del Software Libre 2009 (o descargarla en PDF si lo prefieren), bajarse el código fuente de las demos y darle una mirada al libro de Jython que se está desarrollando bajo una licencia Creative Commons y que será publicado por Apress, y del cual soy parte del equipo de autores :)

PD: Si algún lector de ChileÁgil estuvo en la audiencia de esta presentación y piensa también asistir al Encuentro Linux me gustaría escuchar en qué área le gustaría ver más demos (o tal vez que demos le gustaría ver con mucho mayor detalles). ¡Gracias!

Tagged under:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>