example - nullpointerexception java
Alias Analysis en Java (5)
¿Puede alguien señalarme un marco o una implementación de análisis de alias para Java? Miré el marco asm pero solo proporciona análisis de flujo de datos y análisis de flujo de control.
Actualización : Es curioso, pero ¿alguien sabe si Findbugs realiza un análisis de alias?
Conozco tres marcos de análisis de programas de código abierto con un análisis de alias para Java:
Tenga en cuenta que lo que realmente se implementa en estos marcos es un análisis de puntos , con el cual se puede determinar un posible aliasing. Algunos detalles sobre el análisis de punteros de WALA están disponibles en http://wala.sourceforge.net/wiki/index.php/UserGuide:PointerAnalysis .
Creo que esta es una pregunta bastante importante ya que el análisis de análisis de puntos / alias es una pieza fundamental de la mayoría de las tareas de análisis de programas. Así que aquí está mi intento de una lista más completa de marcos para Java. Algunos son más completos que otros y esta es un área de investigación activa, por lo que puede haber fallado algunos. Es difícil decir qué implementación es la mejor, pero DOOP y SPARK parecen ser opciones populares entre los académicos.
- Hollín (CHISPA)
- Hollín (PADDLE)
- Publicado en 2005-2008. El hollín incluye la interfaz frontend de PADDLE, pero no el back-end . El proyecto ya no se mantiene (no pude hacerlo funcionar con las últimas versiones de Soot). Representación de conjuntos basada en BDD admitida y múltiples abstracciones de sensibilidad al contexto para el análisis en hollín.
- Papeles: [1] , [2] , [3] , [4]
- Recursos: [1]
- bddbddb
- ACORDE
- WALA
- DOOP
- Una implementación declarativa basada en el registro de datos publicada bajo la licencia MIT, pero requiere el marco patentado LogicBlox Datalog. Creo que este proyecto actualmente tiene el derecho de ser el marco más rápido y versátil disponible. También es un proyecto muy activo y se está adoptando bien en la comunidad de investigación.
- Papeles: [1] , [2] , [3] , [4] , [5]
- Recursos: [1] , [2] , [3] , [4]
- Atlas (puntos a la caja de herramientas)
- ESCAFANDRA AUTÓNOMA
- Un solucionador basado en restricciones para el análisis de puntos sensibles al contexto.
- Papeles: [1]
Herramientas adicionales de bonificación para tratar con bibliotecas de terceros.
Hay doop que vi en un OOPSLA, pero no sé en qué estado está.
No conozco otras implementaciones, solo una tonelada de papeles.
Nuestro DMS Software Reengineering Toolkit y su Java Front End podrían usarse para construir esto.
DMS proporciona análisis de propósito general, creación de tablas de árbol / símbolos y capacidades de análisis de flujo (flujo de control, flujo de datos, puntos, gráfico de llamadas, ...). Al conectar una interfaz a esta maquinaria, se pueden implementar análisis específicos del lenguaje sin tener que construir la mayoría de la maquinaria desde cero. Estos han sido utilizados para hacer análisis globales de puntos y llamar la construcción de gráficos en aplicaciones C muy grandes, y controlar el análisis de flujo en C ++.
Para Java, tenemos un flujo de control local de método implementado y algunos aspectos del flujo de datos locales. Para hacer un buen análisis de alias, necesitarás completar la construcción del gráfico de llamadas.
Una posibilidad es Sawja , implementado en OCaml. No parece contener un análisis de alias todavía, pero ofrece bloques de construcción para hacer uno.
Con respecto a su actualización, la charla de Google de Bill Pugh suena como Findbugs busca patrones específicos en el código sin resolver punteros. Por supuesto, eso fue en 2006, entonces quién sabe qué ha pasado desde ... El tiempo vuela rápido.