Stai ovviamente alla ricerca di uno strumento di analisi statica che può
- parse C++ su scala
- individuare frammenti di codice di interesse
- estrarre un modello
- pass che il modello a un modello checker
- rapporto che risultano a voi
Un problema significativo è che tutti hanno un'idea diversa sul modello che desiderano controllare. Che da solo probabilmente uccide le possibilità di trovare esattamente quello che vuoi, perché ogni strumento di estrazione modello ha generalmente fatto una scelta su ciò che si vuole catturare come modello, e le possibilità che corrisponda ciò che si vuole con precisione sono IMHO vicino a zero.
Non sei chiaro su cosa specificamente vuoi modellare, ma presumo che tu voglia trovare le primitive di comunicazione e modellare le interazioni di processo per verificare qualcosa come deadlock?
I venditori strumento di analisi statica commerciali sembra un posto più logico dove cercare, ma non credo che ci sono, ancora. Coverity sembrerebbe la soluzione migliore, ma sembra che abbiano solo una sorta di analisi dinamica per problemi di threading Java.
Questo documento sostiene di fare questo, ma non ho guardato in ogni particolare: Compositional analysis of C/C++ programs with VeriSoft. Related è [PDF] Computer-Assisted Assume/Guarantee Reasoning with VeriSoft. Sembra che tu debba annotare manualmente il codice sorgente per indicare gli elementi di modellazione di interesse. Lo strumento Verifysoft stesso sembra essere proprietario di Bell Labs ed è probabilmente difficile da ottenere.
Allo stesso modo questo: Distributed Verification of Multi-threaded C++ Programs.
Questo documento fa anche affermazioni interessanti, ma non elabora C++ nonostante il titolo: Runtime Model Checking of Multithreaded C/C++ Programs.
Mentre tutte le parti di questo sono difficili, un problema che tutti condividiamo è l'analisi C++ (come esemplificato dal la carta precedentemente citato) e trovare i modelli di codice che forniscono le informazioni prima per il modello. È inoltre necessario analizzare il dialetto specifico del C++ che si sta utilizzando; non è bello che i compilatori C++ accettano tutti lingue diverse. E, come è stato osservato, è necessario elaborare codici C++ di grandi dimensioni. I correttori di modello (SPIN e amici) sono relativamente facili da trovare.
Il nostro DMS Software Reengineering Toolkit fornisce l'analisi generale, con la corrispondenza di motivi personalizzabile e l'estrazione dei fatti, e ha un robusto C++ Front End che gestisce molti dialetti di C++. Potrebbe essere configurato per trovare ed estrarre i fatti che corrispondono al modello che ti interessa. Ma non lo fa da zero.
DMS con il suo C front-end sono stati utilizzati per elaborare applicazioni C estremamente grandi (19.000 unità di compilazione!). Il front-end C++ è stato utilizzato in rabbia su una varietà di progetti C++ su larga scala, ma non in generale a quella scala. Data la capacità generale del DMS, penso che sia probabilmente in grado di gestire blocchi di codice abbastanza grandi. YMMV.
Esistono sistemi distribuiti * non * -real-world per lo più C++? :-) – Ken
Puoi chiarire cosa intendi per controllo del modello? –
Sono sicuro che intende controllare lo spazio degli stati per le proprietà (alcune istanze specifiche di http://en.wikipedia.org/wiki/Model_checking) e ci ha fornito un suggerimento dicendoci che ha un sistema distribuito che utilizza la messaggistica primitivi, quindi c'è un insieme implicito di stati formati dalle interazioni di processo. Ma i dettagli contano. –