Pregunta

¿Existe una herramienta que puede manejar modelo de comprobación grande, en el mundo real, sobre todo-C ++, sistemas distribuidos, tales como KDE?

(KDE es un sistema distribuido en el sentido de que utiliza IPC, aunque por regla general todos los procesos están en la misma máquina Sí, por cierto, este es un uso válido de "sistema distribuido." -. Comprobar Wikipedia)

La herramienta tendría que ser capaz de hacer frente a casos intraprocess y mensajes entre procesos.

(vamos a suponer que si la herramienta es compatible con C ++, pero no admite otras cosas que KDE utiliza como moc, podemos hackear algo juntos para que la solución.)

I a aceptar felizmente (analizadores por ejemplo estáticas especializados para encontrar las clases específicas de insectos) menos generales o alternativas de análisis estático más generales, en lugar de damas de modelo reales. Pero sólo estoy interesado en herramientas que puede realmente proyectos mango del tamaño y la complejidad de KDE.

¿Fue útil?

Solución

Usted está, obviamente, en busca de una herramienta de análisis estático que puede

  • análisis sintáctico C ++ en la escala
  • localizar fragmentos de código de interés
  • extraer un modelo
  • pasar que el modelo a un comprobador de modelos
  • informe de ese resultado a usted

Un problema importante es que todo el mundo tiene una idea diferente acerca de cuál es el modelo que les gustaría comprobar. Eso por sí solo probablemente mata a su probabilidad de encontrar exactamente lo que quiere, ya que cada herramienta de extracción de modelos en general, se ha tomado una decisión en cuanto a lo que quiere capturar como modelo, y las posibilidades de que coincide lo que quiere, precisamente, en mi humilde opinión son cercanas a cero.

No está claro en lo que específicamente desea modelo, pero supongo que usted quiere encontrar la Comunicación primitivas y modelar las interacciones de los procesos para verificar si hay algo así como estancamiento?

Los proveedores de herramientas de análisis estático comerciales parecen como un lugar lógico para buscar, pero no creo que ellos están allí, sin embargo. Coverity parecería ser la mejor apuesta, pero parece que sólo tienen algún tipo de análisis dinámico para problemas de threads Java.

Esta reclamaciones de papel para hacer esto, pero no he mirado en detalle: análisis de la composición de programas de C / C ++ con VeriSoft . Relacionado es asistida por ordenador [PDF] Supongamos / Garantía Razonamiento con VeriSoft . Parece que hay que anotar a mano el código fuente para indicar los elementos de modelado de interés. La herramienta Verifysoft sí parece ser propiedad de los Laboratorios Bell y es probable difícil de obtener.

Del mismo modo ésta: Distributed Verificación de multi-hilo C Programas ++ .

Este documento también hace afirmaciones interesantes, pero no procesa C ++ a pesar del título: Runtime Modelo Comprobación de multiproceso C / C ++ Programas .

Si bien todas las partes de este son difíciles, un problema que todos ellos comparten es analizar C ++ (como se ejemplifica por el documento anteriormente citado) y la búsqueda de los patrones de código que proporcionan la información en bruto para el modelo. También es necesario analizar el dialecto específico de C ++ que está utilizando; no es bueno que el compiladores de C ++ todos aceptan diferentes idiomas. Y, como se ha observado, el procesamiento de grandes códigos C ++ es necesario. comprobadores de modelos SPIN (y amigos) son relativamente fáciles de encontrar.

Nuestra software DMS Reingeniería Toolkit proporciona para el análisis de propósito general, con personalizable la coincidencia de patrones y la extracción de hecho, y tiene una robusta C ++ frontales que se encarga de muchas dialectos de C ++ (EDIT Feb de 2019: incluyendo C ++ 17 en ANSI, GCC y sabores ms). Es probable que podría estar configurado para encontrar y extraer los hechos que se corresponden con el modelo que le interesan. Pero no hace esto esta fuera de la plataforma.

DMS con su C extremo frontal se han utilizado para procesar extremadamente grandes aplicaciones C (19.000 unidades de compilación!). El extremo C ++ frontal se ha usado en la ira en una variedad de proyectos a gran escala de C ++ (EDIT Feb de 2019: incluyendo gran escala refactorización de API a través de 3000 unidades de compilación). Gen de DMS dadoscapacidad eral, creo que es probable capaz de manejar bastante grandes trozos de código. Tu caso es distinto.

Otros consejos

estáticas analizadores de código cuando se utiliza contra gran base de código primera vez suele producir tantas advertencias y alertas que usted no será capaz de analizar todos ellos en cantidad razonable de tiempo. Es difícil elegir sólo los problemas reales de código que sólo mira sospechoso a una herramienta.

Se puede tratar de utilizar las herramientas de descubrimiento automático invariante como "daikon" que percibe la captura invariantes en tiempo de ejecución. Puede validar más tarde si invariantes descubiertos (equivalencia de las variables "a == b + 1", por ejemplo) tienen sentido y luego insertar permanente afirma en su código. De esta forma, cuando se viola invariante como resultado de su cambio obtendrá una advertencia de que tal vez se rompió algo por su cambio. Este método ayuda a evitar la reestructuración o de cambiar su código para agregar pruebas y simulacros.

La forma más habitual de la aplicación de técnicas formales para los grandes sistemas es modularizar ellos y escribir las especificaciones para las interfaces de cada módulo. A continuación, puede verificar de forma independiente cada módulo (al verificar un módulo, se importan las especificaciones - pero no el código - de los otros módulos que llama). Este enfoque hace escalable verificación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top