obviamente estás buscando una herramienta de análisis estático que puede
- de análisis C++ en escala
- localizar fragmentos de código de interés
- extraer un modelo
- pase ese modelo a un comprobador de modelos
- informe que resultan a que
Un problema importante es que todos tienen una idea diferente sobre qué modelo desean verificar. Eso solo probablemente mate la posibilidad de encontrar exactamente lo que desea, ya que cada herramienta de extracción de modelo generalmente ha elegido lo que quiere capturar como modelo, y las posibilidades de que coincida con lo que usted quiere, precisamente, están en mi humilde opinión a cero.
No tiene claro qué modelo desea específicamente, pero supongo que quiere encontrar las primitivas de comunicación y modelar las interacciones del proceso para buscar algo así como un punto muerto?
Los vendedores de herramientas de análisis estáticos comerciales parecen ser un lugar lógico para mirar, pero aún no creo que estén ahí. Coverity parece ser la mejor opción, pero parece que solo tienen algún tipo de análisis dinámico para Java.
Este documento pretende hacer esto, pero no he examinado en detalle: Compositional analysis of C/C++ programs with VeriSoft. Relacionado es [PDF] Computer-Assisted Assume/Guarantee Reasoning with VeriSoft. Parece que debe anotar a mano el código fuente para indicar los elementos de modelado de interés. La herramienta Verifysoft en sí misma parece ser propiedad de Bell Labs y es probable que sea difícil de obtener.
De manera similar esta: Distributed Verification of Multi-threaded C++ Programs.
Este documento también hace afirmaciones interesantes, pero no procesa C++ a pesar del título: Runtime Model Checking of Multithreaded C/C++ Programs.
Si bien todas las partes de esto son difíciles, un problema que todos comparten es analizar C++ (como se ejemplifica en el documento citado anteriormente) y encontrar los patrones de código que proporcionan la información bruta para el modelo. También necesita analizar el dialecto específico de C++ que está utilizando; no es agradable que los compiladores de C++ acepten diferentes idiomas. Y, como ha observado, es necesario procesar grandes códigos C++. Los inspectores modelo (SPIN y amigos) son relativamente fáciles de encontrar.
Nuestro DMS Software Reengineering Toolkit proporciona un análisis de propósito general, con coincidencia de patrones personalizables y extracción de hechos, y tiene un robusto C++ Front End que maneja muchos dialectos de C++. Probablemente podría configurarse para buscar y extraer los hechos que corresponden al modelo que le interesa. Pero no hace esto de la estantería.
DMS con su C front end se han utilizado para procesar aplicaciones C extremadamente grandes (¡19,000 unidades de compilación!). El front-end de C++ ha sido utilizado con enojo en una variedad de proyectos de C++ a gran escala, pero generalmente no a esa escala. Dada la capacidad general de DMS, creo que probablemente sea capaz de manejar grandes cantidades de código. YMMV.
¿Hay sistemas distribuidos en gran parte * non * -real-world mostly C++? :-) – Ken
¿Puedes aclarar a qué te refieres con la verificación de modelos? –
Estoy seguro de que quiere decir comprobación de propiedades en el espacio de estados (alguna instancia específica de http://en.wikipedia.org/wiki/Model_checking), y nos ha dado una pista diciéndonos que tiene un sistema distribuido usando mensajes primitivas, entonces hay un conjunto implícito de estados formados por interacciones de procesos. Pero los detalles importan. –