2010-02-09 12 views
15

Tengo un proyecto maven generado por Spring Roo y uso varias herramientas (checkstyle, pmd, etc.) para recopilar información sobre mi proyecto. (Es decir, que estoy utilizando para este codehaus' sonar)Herramientas de análisis de código y declaraciones entre tipos

Roo makes heavy use of AspectJ Inter Type Declarations (ITD) para separar las preocupaciones como la persistencia, JavaBeans-getter/setters etc.

Estas diferencias ITD se tejen en el momento de la compilación de modo herramientas como Checkstyle y PMD (que trabajan en nivel de origen) tienen muchos falsos positivos.

La única solución que veo actualmente, es desactivar las comprobaciones para las clases que usan ITD.

¿Alguna idea mejor?

+0

He buscado un poco de tiempo en este y también hablé con un vendedor de herramientas SCA. Parece que esto sigue siendo un problema de nicho :-( – er4z0r

+0

Usamos Roo y Sonar también, por lo que estoy interesado en ver las respuestas a esta pregunta ... –

+0

Ah, se siente bien no ser el único. Así que ya sabes el ¿Estoy hablando de problemas? – er4z0r

Respuesta

0

¿Podría agregar anotaciones/comentarios específicos de la herramienta al código de Java para suprimir los falsos positivos? Por ejemplo, FindBugs tiene su propia anotación @SuppressWarnings.

+0

Hmm interesante. No sabía eso. Aunque esto solo funcionará en una herramienta por herramienta, pero podría ser un punto de partida. – er4z0r

+0

De acuerdo con la documentación, no debe tocar los archivos AspectJ. Estos archivos están destinados a ser administrados por el propio shell, y pueden actualizarse cuando instales versiones más recientes de Roo. – tsunade21

+0

Me refiero a modificar el código de Java, no el ITD; He actualizado mi respuesta para ser más claro. Pero como miembro del equipo de Roo, es gratificante ver que los usuarios saben que no deben editar los ITD.:-) –

1

Duda será un "problema de nicho" durante mucho más tiempo :-) Esperemos que los vendedores de herramientas vean las mejoras necesarias.

+0

Wow. Una respuesta de Rod Johnson. Me siento honrado :-) Pregunté a algunos vendedores de herramientas comerciales, pero la respuesta aún está pendiente. Pero si recuerdo bien, dos de los principales desarrolladores de Aspect-J también trabajan en Springsource, ¿quizás tienen una idea para una solución inteligente? – er4z0r

1

Si desea razonar sobre el código fuente después de que se hayan entretejido aspectos en el código, debe entrelazar los aspectos en el código fuente en lugar del código binario.

Muchos tejedores de aspecto hacen tejer códigos binarios porque no tienen acceso a la información (tabla de símbolos, nombres, tipos, tipos de expresiones, ...) producida por un front-end del compilador. Entonces, el truco es usar el código de máquina virtual producido por el compilador (este truco básicamente solo funciona para conjuntos de instrucciones VM como .net IL y java class codes) que a menudo es fácil de decodificar (buen conjunto de instrucciones regulares) decorado con información de la tabla de símbolos.

Pero si no puede razonar acerca de los resultados binarios de tal proceso de tejido, entonces no puede estar seguro de que el programa tejido no tiene errores, que es el punto de la pregunta original de OP: "¿Cómo ¿Ejecuto herramientas SCA en la fuente tejida (efectiva)? ".

Puedes solucionar este problema de dos maneras:

  • que la comunidad de escribir herramientas SCA que procesan los códigos de bytes en lugar de la fuente. Esto podría ser difícil porque el código fuente puede contener información perdida en el proceso de compilación.
  • Una mejor idea: Obtenga la comunidad de aspecto para diseñar tejedores de aspecto que operen con código fuente y produzcan código fuente. Esto puede ser difícil porque obtener terminología completa es difícil.

No puedo evitar que la comunidad haga una elección.

Puedo ofrecer un fuerte estímulo para ayudar a la comunidad a elegir la segunda manera: nuestra DMS Software Reengineering Toolkit. Este es un sistema de transformación de programa que lleva a cabo directivas de la forma "si ve este, sustitúyalo por que" pero respetando la sintaxis y la semántica del lenguaje aplicando realmente dichos cambios a las estructuras de datos compiladas producidas por frente completo del lenguaje. (Esta es la versión de ingeniería de software de sustitución ecuacional en matemáticas). Las estructuras de datos modificadas se pueden reexportar como texto fuente compilable, completo con comentarios.

Si comprende lo que las transformaciones pueden hacer en general, puede ver que aspect weavers are a special case of program transformation systems. Por lo tanto, es fácil implementar tejedores de aspecto utilizando DMS, y los resultados son código fuente, lo que significa puede aplicar las herramientas de análisis de código fuente.

Dudo que esto realmente resuelve el problema PO de análisis de código generado por Roo en el corto plazo: - {

2

Esta respuesta no le ayudaría en este momento, pero es de esperar que pueda ser de interés para usted, ya que promete una solución para su problema en un futuro cercano. No sé si conoce IntelliJ IDEA - Java IDE de JetBrains, pero ya se está trabajando en esta dirección, y aquí está el enlace al tema dedicado que puede querer seguir: http://youtrack.jetbrains.net/issue/IDEA-26959. Solo fíjese y reciba notificaciones cuando se implemente la función. IntelliJ IDEA proporciona SCA realmente potente. Entonces, el soporte de ITD también debería ser de alta calidad.

+0

Gracias por la pista. Aunque me gustaría ver una mayor conciencia en el lado del proveedor de herramientas, preferiría una solución que pueda ser utilizada por maven2. Quiero poder ejecutar mi SCA en un entorno sin cabeza como un servidor de CI. Entonces no puedo pagar dependiendo de un IDE específico. – er4z0r

+0

Será posible ejecutar inspecciones de código desde maven y en un servidor de CI, como TeamCity, como ya se hizo para otras funciones de análisis de IntelliJ IDEA. Se pueden usar independientemente del IDE, y se ejecutan de forma remota, en el lado del servidor. –

1

Tanto FindBugs como Cobertura NO funcionan en el nivel de fuente, sino en el nivel de bytecode. Por lo tanto, debe agitar sus aspectos estáticamente (que también mejorarían el tiempo de inicio de la aplicación) en el momento de la compilación (por ejemplo, utilizando el complemento AspectJ de maven) y no en el tiempo de carga y luego ejecutar herramientas de análisis estático en el código de bytes del resultado.

+0

Hola, lo he comprobado. Y tienes razón. La mayoría de los falsos positivos que obtuve provienen de pmd y checkstyle, que funcionan en el nivel de origen. Sin embargo, el problema persiste: no se puede analizar el código, que no se puede ver. – er4z0r

Cuestiones relacionadas