24 septiembre 2007
Test Unitarios en J2ME
Cuando programamos en Java podemos comprobar nuestras clases utilizando JUnit; es un conjunto de clases que permite realizar la ejecución de clases Java de manera controlada, para poder evaluar si el funcionamiento de cada uno de los métodos de la clase se comporta como se espera. También se utiliza en pruebas de regresión, para comprobar que el nuevo código no afecta al funcionamiento del código anterior. Este framework permite que el programador se centre en la realización de los test y en los resultados que debe obtener, gestionando los test de forma sencilla y permitiendo su ejecución automática.
Normalmente, la ejecución de test unitarios es necesaria para poder asumir la mantenibilidad de un proyecto, pues con ellos, cualquier desarrollador puede conocer cuando los cambios que está realizando afectan al resto de código del proyecto. En otras ocasiones, los test unitarios sirven como guía a otros programadores, y a uno mismo, de cómo funciona un código específico, pues un test, además de salvarnos de bugs, permite conocer qué estructura y usos tiene el propio código que se prueba.
El framework de JUnit utiliza las capacidades de reflexión en tiempo de ejecución para encontrar y ejecutar todos los test sin necesitar un test case. Sin embargo, los entornos basados en CLDC pierden la reflexión, con lo que no es posible descubrir los métodos en tiempo de ejecución, por ello, necesitamos distintas soluciones que permitan realizan test unitarios de forma sencilla para el programador.
El problema que tiene testear estas aplicaciones es que Java ME es básicamente un JDK 1.0. Hasta JUnit 3.8.X el mecanismo que usaba este framework para identificar los métodos que debía ejecutar como parte del test era la reflexión, característica que se añadió en Java 1.2 y que no está presente en Java ME. Menos esperanzas hay todavía de usar anotaciones, el mecanismo que emplean las versiones 4.0 y posteriores de JUnit, en Java ME.
La siguiente tabla resume las capacidades y características de las distintas soluciones para utilizar toda la potencia posible de JUnit sobre J2ME, a continuación se comenta brevemente cada alternativa:
| Ejemplos / Complejidad | ¿Ant? / ¿Maven? | ¿Open source? | ¿Ejecución en dispositivo? | Requerimientos | Peso (Kb) |
MoMEUnit | Pocos / sencillo | Si | Si | Si | CLDC1.1 | 26 |
SonyEricsson JUnit | Muchos / complejo | Si | NO | NO. Solo con Debug-on-device | CLDC 1.0 | 20 |
J2MEUnit | Muchos / medio | Si | Si | Si | CLDC 1.1 | 17 |
JMUnit | Varios / medio | NO | Si | Si | CLDC1.0 | 12,5 |
CLDCUnit | Pocos / sencillo? | Si / Si | Si | Si? | CLDC 1.1 | ? |
J2MEUnit
Solo dispone de una versión del framework, compatible con CLDC11.
Parecido a JMUnit, para crear una suite de test necesitamos sobrecargar el metodo suite() utilizando la librería TestMethod. Esto hace que la creación de testsuites sea un poco más compleja
Alternativamente, como en MoMEUnit, J2MEUnit permite añadir los test o testSuites como propiedades del MIDlet para así ejecutarlos directamente sin tener que crearnos una MIDlet programaticamente. El TestRunnner MIDlet no proporciona resultados tan sencillos gráficamente, fáciles de ver, como JMUnit o MoMEUnit, pero sin embargo, en la consola proporciona más información que éstos.
MoME Unit
MoMEUnit es una herramienta muy similar a JUnit pero orientada a aplicaciones Java ME. Emplea tres métodos estandarizados en cada test, uno para preparar el test, otro para ejecutarlo y otro para realizar "limpieza". De este modo los test se hacen por clase más que por método. Aunque no es la solución óptima, los desarrolladores del framework afirman que es el mejor balance que se puede obtener.
MoME permite crear TestSuites con todos los test que queramos para ejecutaros a la vez; pero para que un Test comparta la fixture con otros es necesasrio que creemos una clase por test a ejecutar. El problema es tener tantas clases para todos los test.
La creación de los test es muy sencilla, es decir, es más fácil añadir test desde MoME que desde J2MEUnit.
SE Junit
SE JUnit requiere, para ejecutar los test, el emulador de SonyEricsson o cualquier otro compatible con WTK. lo más cercano a la ejecución en un dispositivo real es utilizar DebugOnDevice de SE que solo es compatible con algunos móviles SonyEricsson
El uso de SE Mobile Unit no es muy apropiado en casos específicos en los que se necesita añadir funcionalidades al código fuente que se está utilizando. Al no ser open-source puede que en ocasiones no se ajuste a las necesidades existentes.
JMUnit
Este framework es parecido a J2MEUnit en cuanto al uso que se hace de los test y cómo éstos se ejecutan. Principal problema de este framework es que no soporta Ant.
Para contruir una suite, cada clase que contenga los test deberá sobrecargar el método test() que contendrá un case para cada método (test) a ejecutar.Las clases abstractas TestCase y TestSuite heredan directamente de MIDlet, con lo que fácilmente se pueden ejecutar en el emulador o en un dispositivo real.
CLDCUnit
Parte de MicroEmulator, un emulador de J2ME basado en WTK. Permite ejecutar aplicaciones J2ME como aplicaciones stand-alone de J2SE o como applets java en el navegador Web. Es decir, permite hacer que nuestro navegador se comporte como un móvil y ejecute aplicaciones J2ME.
CLDCUnit es muy parecido a J2MEUnit y parte de su código fuente; conservando una interfaz muy semejante.
CONCLUSIÓN
Comparando las distintas APIs, las posibilidades que ofrecen y las necesidades que se requieren, pienso que destacan dos de las comentadas.:
MoMEUnit Ofrece mucha información muy usable de los test realizados. Se porta fácilmente al móvil y es compatible con Ant. Desventaja (o no), necesita que cada clase de test contenga un solo método de test utilizando mucha herencia entre clases.
JMEUnit. (futura unión entre J2MEUnit y JMUnit) JMUnit no soporta Ant pero la interfaz es parecida a la de MoMEUnit. J2MEUnit no ofrece información muy usable. Ambas framework requieren creación de test un poco compleja. J2MEUnit sí soporta Ant; es por esto que la fusión de ambas frameworks sería muy interesante (en ello estan trabajando desde hace un año más o menos).
REFERENCIAS
J2MEUnit http://j2meunit.sourceforge.net/doc.html
Unit de SonyEricsson http://developer.sonyericsson.com/getDocument.do?docId=85608
JMUnit http://sourceforge.net/projects/jmunit/
MoMEUnit http://momeunit.sourceforge.net/
CLDCUnit http://pyx4me.com/snapshot/pyx4me/pyx4me-cldcunit/index.html
Etiquetas: j2me, J2MEUnit, Java, JUnit, MoMEUnit, programación, Test unitarios
19 septiembre 2007
La vaca

Como muchos sabéis, soy dado a leer libros algunos más formales otros un poco menos. La biblioteca que se puede hacer de libros de gestión, liderazgo, etc, no tiene fin. Pero en la última misión, mi amigo Iván me comentó si había leído el libro de La Vaca, pensaba que había, visto o al menos, escuchado de todos ellos. Los sombreros, los peces, el queso que no sabemos donde esta, funky, las estrategias de los defines… pues me había dejado la vaca.
El libro en concreto habla sobre una historia –o leyenda urbana, ¿Quién sabe?- que comentaré brevemente, el libro en concreto esta escrito por Camilo Cruz, Ph.D. Seguro que lo podéis encontrar y echar un vistazo, antes de seguir.
Como en todas las historias hay un Maestro y un Discípulo –habitualmente orientales-, en esta el discípulo debe ilustrarse sobre romper las ataduras que hay en este mundo, las cuales impiden que tenga éxito.
Para ello acuden a un poblado donde hay una familia, que viven en una casa lúgubre y no cuentan con más riqueza que la necesaria para sobrevivir.
Su fortuna superaba a la del resto de vecinos debido a que contaban con una Vaca, algo que les daba suficiente alimento para subsistir. La vieja vaca puede proveer poco, no obstante, es el único bien de esta familia.
El maestro decide durante la noche decide, con un poco de mala uva, cortar el cuello al pobre animal –imagino que a las protectoras de animales no les haría gracia-. Pero bueno, al ser un viejo maestro nos diría: “no se ha muerto, esta en otra vida mejor”.
El discípulo, tras escandalizarse, le pregunta porque lo ha hecho sin recibir respuesta, al más estilo Bruce Lee.
Al cabo de un año vuelven, la familia reside en una bonita casa y con un gran huerto. Se acerca el maestro y el discípulo a preguntar al cabeza de familia sobre su nueva situación. El mismo, comenta que tras la desgracia de la vaca, se pusieron a cultivar el campo y ha plantearse unos cambios en su vida, que no hubieran asumido de seguir viviendo la vaca. Ese cambio hizo que mejoraran.
El libro, en concreto, trata de mostrar apoyado en esta historia como encontramos ataduras –vacas- que nos impiden seguir adelante y nos dejan en una zona de comodidad. Una cosa es totalmente cierta, si siempre hacemos las cosas de una forma, siempre lograremos el mismo resultado. En la vida hay que afrontar cambios día a día, evitar la rutina. Esos cambios, no tienen porque ser radicales, como en la historia, podemos disfrutarlos poco a poco. Hacer un poco de ejercicio, comenzar un nuevo hobby, leer un libro como hacíamos antes, plantear mejorar la forma en la que trabajamos día a día.
Si no, recordad que vendrá el maestro, verá que tienes una vaca y ya sabéis lo que pasó a la última.
Etiquetas: estrategia
17 septiembre 2007
Nueva selección de personal
Programador Senior de videojuegos.
Ubicación:
Salamanca
Puesto vacante:
Programador Senior de videojuegos
Descripción de la oferta:
Buscamos incorporar a nuestra plantilla un programador senior para el desarrollo de videojuegos móviles.
Asumirás la responsabilidad del desarrollo en todas sus fases, desde análisis del juego, programación, hasta optimización en los dispositivos finales, usando las últimas herramientas y metodologías de desarrollo.
Por nuestra parte te ofrecemos un entorno de trabajo cordial y joven, horario flexible, formacion en idiomas, tiempo de investigación personal y un plan profesional a largo plazo en una joven start-up.
Imprescindible:
* Experiencia en programación de videojuegos 2D en cualquier lenguaje y plataforma (se valorará Java, J2ME y sobre todo C/C++)
* Conocimientos de usuario de CVS o Subversion
* Gran aficionado a jugar videojuegos
* Aficionado a programar videojuegos (se valorará si has participado en proyectos personales u open source de videojuegos)
* Residir en Salamanca o alrededores.
* Inglés hablado y escrito.
También valoraremos:
* Experiencia en programación de aplicationes para teléfonos móviles
* Conocimientos de Symbian, Brew y/o Mophun
* Ejemplos de programación de videojuegos
* Conocimientos básicos de matemáticas: álgebra, geometría, trigonometría, etc.
* Conocimientos básicos de física: mecánica clásica
* Conocimientos básicos de Inteligencia artificial: máquinas de estados, lógica difusa, etc.
* Conocimientos de metodologías ágiles de desarrollo: eXtreme Programming y SCRUM
* Análisis y diseño con UML
* Procesos de calidad: CMMi
* Experiencia en pruebas unitarias con JUnit y/o J2MEUnit.
Director de Arte.
Descripción de la oferta:
Buscamos incorporar a nuestra plantilla a un profesional para dirigir el equipo de desarrollo gráfico de Unkasoft.
Asumirás la responsabilidad del producto terminado desde el punto de vista gráfico y de usabilidad.
Estarías al cargo de parte de la estética de la empresa, portal web, el portal de juegos y sobre todo del estilo gráfico de los juegos que se desarrollen.
Por nuestra parte te ofrecemos un entorno de trabajo cordial y joven, horario flexible, formacion en idiomas, tiempo de investigación personal y un plan profesional a largo plazo en una empresa emergente.
Imprescindible:
Formación en diseño gráfico, dibujo artístico o similar.
Experiencia mínima de 2 años trabajando como diseñador gráfico senior o director de arte, preferiblemente en el sector de los videojuegos. Experiencia en la utilización de Macromedia Freehand y Adobe Photoshop.
Capacidad para el trabajo en equipo. Capacidad de comunicación.
Experiencia en la gestión/coordinación de equipos de trabajo.
Residir en Salamanca o alrededores.
Inglés hablado y escrito.
También valoraremos:
Experiencia en el entorno móvil, conocimientos en formatos de imágen 2d, parametros de calidad en formatos de pantalla pequeños.
Conocimiento de Maya/XSI/3D Studio Max y Macromedia Flash.
Conocimiento de gráficos tipo pixel y pixel-art.
Dominio de dibujo, ilustración y color.
Experiencia en diseño de personajes y creación de storyboards.
Experiencia como creativo publicitario.
Conocimiento del sector de los videojuegos.
Los interesados, enviad el CV a info@unkasoft.com
Para ambos puestos es imprescindible el trabajo en nuestras oficinas de Salamanca.
04 septiembre 2007
Quedada de desarrolladores en Salamanca
En primer momento esta quedada surge como un "beers & blogs" aunque por mi experiencia suele ser más interesante una reunión con un sitio donde reunirse, poder enseñar trabajos, presentarse, etc, para luego pasar a algo más informal. Sea como sea seguro que lo pasamos bien.
Queda entonces por decidir el día y el lugar, cualquier día por la tarde estaría bien, aunque se podría hacer un sábado por la mañana y comer de pinchos (en Salamanca esto va de maravilla :) por ejemplo.
Se aceptan (y se esperan) sugerencias. Cuando tengamos un día decidido lo publicaremos aquí con suficiente antelación.
Etiquetas: quedadas