2012-07-24 12 views
5

Estoy comenzando un proyecto que tendrá que instrumentar aplicaciones Java para fines de cobertura (definición de uso de variables, etc.). Tiene que agregar declaraciones de seguimiento y algo de lógica a la aplicación y quizás eliminar declaraciones.Alternativas a la instrumentación de bytecode de Java

He buscado formas de código Java de instrumento y lo que siempre encuentro es acerca de la instrumentación de bytecode.

Mi pregunta es: ¿es la única forma de instrumentar las aplicaciones Java? Hay alguna otra forma de hacer eso? ¿Cuáles son las ventajas de la instrumentación bytecode sobre las demás?

Probablemente usaré la solución de bytecode, pero quiero saber cuáles son los problemas con los otros enfoques (si corresponde) para decidir con precisión.

Gracias!

Respuesta

2

El otro método, cerca de cambiar bytecode, es usar AOP (Programación Orientada a Aspectos). La biblioteca principal es AspectJ que también define principalmente el área.

La tercera opción que podría ser interesante (ya que recién está comenzando con el programa) es usar Spring. Significa que tendrás que aprender un poco sobre IOC (inversión de control) pero básicamente significa que en vez de crear tus objetos tú mismo, deja que la primavera lo haga por ti, y tiene sus ventajas porque cuando la primavera es la causa de la creación puede agregar todo tipo de cosas en el proceso de creación sin tener que declararlo realmente usted mismo en aspectj.

En términos de complejidad que probablemente daría:

  • muelle (más fácil)
  • aspectj
  • código de bytes de instrumentación (el más duro)

pero es exactamente al revés cuando hablando de capacidades (potencia). por ejemplo, hacer algo así como restar código solo es posible utilizando el último (creo)

+0

¡Gracias! Creo que probaré AspectJ. –

2

Usted debería salir AspectJ

De lo que usted describe usted será capaz de hacer lo que quiera con él.

Hacer la instrumentación de bytecode usted mismo es absolutamente posible pero mucho más complicado.

Creo que deberías revisar AsepctJ primero y volví a hacer la instrumentación de bytecode como último recurso.

+0

Gracias! Voy a intentar aspectoJ. –

0

Ver mi paper on building coverage tools using program transformation engines. Este enfoque tiene la ventaja de que se puede usar en lenguajes de programación arbitrarios. Además, ve el código fuente como lo ve el programador, no como códigos compilados de bytes (a medida que los genéricos se vuelven más complejos y se transforman en códigos de bytes más finos, se hace más difícil comprender ese código inspeccionando el código de bytes).

Quizás valga la pena señalar que la transformación de programas generaliza la programación orientada a aspectos.

+0

Buen papel y herramientas.El proyecto es una herramienta académica basada en un nuevo modelo de prueba. En nuestro contexto, es mejor desarrollar uno nuevo. ¡Pero gracias! –