Posts Tagged ‘test’

AspectJ aplicado sobre una librería jar

Tuesday, May 12th, 2009

El problema inicial es el siguiente: tenemos una aplicación java bajo prueba, formada por un conjunto de ficheros “jar”, de cuyo código conocemos algunos (o todos los) interfaces públicos.

A efectos prácticos, supongamos un único fichero jar llamado “underTest.jar” (los resultados son extensibles) y la clase que contiene el método “main” es “MainClass”, dentro del paquete “mainpack”:

public class MainClass {
public MainClass() {
}

/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Ejecutando el main...");
}

}

Así, el comando para ejecutar la aplicación sería:

java -classpath underTest.jar mainpack.MainClass

El resultado de la ejecución sería:

Ejecutando el main...

En este caso, podemos utilizar AspectJ para insertar puntos de ruptura, logear información de ejecución, de performance, etc.

Vamos con la prueba de concepto.

En primer lugar, vamos a crear una librería (jar) con los “aspectos” a utilizar. En este caso, algo muy simple: una clase que traza la entrada y la salida del método “main” de nuestra aplicación.

El código sería:

public aspect ProfilingAspect {

pointcut mainMethod() : execution(static * *.main(..));

before() : mainMethod()
{
System.out.println("Entrando al main...");
}

after() : mainMethod()
{
System.out.println("Saliendo del main...");
}

}

Podemos usar eclipse para crear un proyecto de tipo AspectJ, compilarlo y generar un fichero jar con soporte para AspectJ (echar un vistazo a las Cheat Sheets de eclipse con el plugin AJDT).

Supongamos que el fichero jar creado con el “aspecto” anterior es mainAspect.jar.

El siguiente paso sería modificar el comando utilizado para ejecutar la aplicación:

java
-classpath $ASPECTJ_HOME/aspectjweaver.jar:$ASPECTJ_HOME/aspectjrt.jar:.
-Djava.system.class.loader=org.aspectj.weaver.loadtime.WeavingURLClassLoader
-Daj.class.path=mainAspect.jar:underTest.jar
-Daj.aspect.path=mainAspect.jar
mainpack.MainClass

Donde $ASPECTJ_HOME apunta al directorio de instalación de las librerías de AspectJ (aspectjweaver.jar y aspectjrt.jar) en la máquina. Con esto el resultado de la ejecución sería:

Entrando al main...
Ejecutando el main...
Saliendo del main...

Eclipse Test and Performance Tools Platform Review

Friday, February 1st, 2008

As part of the R&D department in my company, I spend some of my time in quest for tools to make our developer’s life easier.

As soon as you go back to a previously written line of code (to read, check or even rewrite it…), you are entering the “maintenance mode”. That’s the reason why code maintainability is so important in software engineering. And, since mainly working on pseudo real-time systems (such as wireless sensor networks), performance in our tools is another important point.

So, TPTP eclipse plugin is a very useful tool for us. We integrate it in our projects from the very beginning of the development process.

From my point of view these are the strong TPTP plugin points:

  1. Code Analyzer: it is fast, intuitive and highly configurable. A newbie will not spend more than five minutes to adapt it to his needs and correctly use it.
  2. The “Quick Fix” functionality: in most cases, the solution proposed is pretty good.
  3. The Profiling tool: though mainly interested in execution time and method coverage, I stated that this plugin covers many other useful functionalities.

On the other hand, there are some features that, of course from my point of view, should be improved.

Most of our application prototypes are being deployed as RCPs. And RCPs profiling executions are not completely working in all of our different development environments. In fact, Eclipse Europa environment and last TPTP plugin version (4.4) has been the first to give some information about that kind of applications (maybe due to unsatisfied dependencies in our previous environments).

In conclusion, some improvements in executions profiling will make this so helpful plugin be an indispensable tool for Java developers and SW engineers.


Get Adobe Flash playerPlugin by wpburn.com wordpress themes