Frage

Gibt es ein Tool, das Model Checking große, reale Welt umgehen kann, meist-C ++, verteilen Systeme, wie zum Beispiel KDE?

(KDE ist ein verteiltes System in dem Sinne, dass es IPC verwendet, obwohl in der Regel alle Prozesse auf der gleichen Maschine sind ja, nebenbei bemerkt, ist dies eine gültige Verwendung von „verteiltes System“ -.. Überprüfen Wikipedia)

Das Werkzeug würde muß in der Lage sein, mit intraprocess Ereignissen zu befassen und Interprozess-Nachrichten.

(Nehmen wir an, dass, wenn das Werkzeug C unterstützt ++, unterstützt aber keine anderen Sachen, die KDE wie moc verwendet, wir etwas zusammen zu umgehen, dass hacken.)

Ich werde glücklich akzeptieren weniger allgemein (beispielsweise statische Analysatoren spezialisiert für die Suche nach bestimmten Klassen von Bugs) oder allgemeinere statische Analyse Alternativen, statt der tatsächlichen Modell Kontrolleure. Aber ich bin nur in Werkzeuge daran interessiert, dass können wirklich Griff Projekte von der Größe und Komplexität von KDE.

War es hilfreich?

Lösung

Sie sind offensichtlich für ein statisches Analyse-Tool suchen, kann

  • Parse-C ++ auf der Skala
  • lokalisieren Codefragmente von Interesse
  • extrahiert ein Modell
  • passieren, dieses Modell zu einem Modell-Checker
  • Bericht, dass Ergebnis zu Ihnen

Ein wesentliches Problem ist, dass jeder hat eine andere Vorstellung davon, welches Modell sie möchten überprüfen. Das allein tötet wahrscheinlich Ihre Chance, genau das zu finden, was Sie wollen, weil jedes Modell Extraktionswerkzeug hat in der Regel die Wahl, was sie will als Modell erfassen, und die Chancen, daß sie paßt was Sie wollen, schließen IMHO genau Null sind.

Sie sind nicht klar, was speziell möchten Sie Modell, aber ich nehme an, Sie die Kommunikation finden möchten Primitive und die Prozess Interaktionen für so etwas wie Stillstand überprüfen modellieren?

Die kommerziellen statische Analyse-Tool-Anbieter scheinen wie ein logischer Ort zu sehen, aber ich glaube nicht, dass es noch nicht. Coverity würde wie die beste Wette scheinen, aber es scheint nur sie eine Art dynamischer Analyse für Java threading Probleme hat.

Dieses Papier Ansprüche, dies zu tun, aber ich habe nicht sieht im Detail: Zusammensetzungsanalyse von C / C ++ Programme mit VeriSoft . Verwandte [PDF] Computergestützte Angenommen / Garantie Reasoning mit VeriSoft . Es scheint, Sie zu hand annotate haben der Quellcode der Modellierungselemente von Interesse anzuzeigen. Das Verifysoft-Tool scheint sich zu Bell Labs proprietäre zu sein und ist wahrscheinlich schwer zu erhalten.

Ähnlich diese: Verteiltes Verification of Multi-threaded-C ++ Programme .

Dieses Papier macht auch interessante Ansprüche, aber nicht verarbeiten C ++ trotz des Titels: Runtime Model Checking von Multithreaded C / C ++ Programme .

Während alle Teile davon sind schwierig, ein Problem teilen sie alle C ++ Parsen (wie durch die zuvor zitierte Papier) und die Codemuster zu finden, die die Rohinformationen für das Modell zur Verfügung stellen. Sie müssen auch die spezifischen Dialekt von C ++ analysieren Sie verwenden; es ist nicht schön, dass die C ++ Compiler alle verschiedene Sprachen akzeptieren. Und wie Sie bemerkt haben, die Verarbeitung großen C ++ Codes notwendig ist. Model Checker (SPIN und Freunde) sind relativ leicht zu finden.

DMS Software Reengineering Toolkit für allgemeine Zwecke Parsing bietet, mit anpassbaren Musteranpassung und dadurch Extraktion und hat eine robuste C ++ Front End , die viele Handgriffe Dialekte C ++ (EDIT Februar 2019: einschließlich C ++ 17 in ANSI-, GCC und MS Aromen). Es könnte wahrscheinlich die Fakten zu finden und extrahieren konfiguriert werden, dass entspricht das Modell um dich kümmern. Aber es ist nicht das tut dies aus dem Regal.

DMS mit C Frontend verwendet wurde, extrem große C-Anwendungen zu verarbeiten (19.000 Kompilierungseinheiten!). Das C ++ vorderes Ende in Wut auf einer Vielzahl von Großprojekten C ++ (: einschließlich großem Maßstab Umgestaltung von APIs über 3000+ Kompilierungseinheiten EDIT Februar 2019) verwendet worden. Gegeben DMS der general Fähigkeit, ich denke, es den Umgang mit ziemlich großen Brocken von Code wahrscheinlich fähig. YMMV.

Andere Tipps

Statische Code-Analysatoren, wenn verwendet, um gegen große Code-Basis erstmals in der Regel produzieren so viele Warnungen und Alarme, dass Sie nicht in der Lage sein werden, alle von ihnen in angemessener Zeit zu analysieren. Es ist schwer, einzelne aus wirklichen Probleme von Code, der nur zu einem Werkzeug verdächtig aussehen.

Sie können versuchen, automatische invariant Discovery-Tools zu verwenden, wie „Daikon“, dass der Fang Invarianten zur Laufzeit wahrgenommen. Sie können später überprüfen, ob entdeckt Invarianten (Gleichwertigkeit der Variablen „a == b + 1“ zum Beispiel) sinnvoll und dann einfügen permanent in Ihren Code behauptet. Auf diese Weise, wenn invariant verletzt wird als Ergebnis Ihrer Änderung eine Warnung erhalten, dass vielleicht Sie brach etwas durch Ihre Änderung. Diese Methode hilft Umstrukturierung oder Änderung Ihres Codes zu vermeiden, Tests und Mocks hinzuzufügen.

Die übliche Art und Weise formale Techniken auf große Systeme anzuwenden ist, sie modularisieren und für die Schnittstellen der einzelnen Module Spezifikationen zu schreiben. Dann können Sie jedes Modul überprüfen unabhängig (während ein Modul Verifizieren importieren Sie die Spezifikationen - aber nicht den Code - der anderen Module es nennt). Dieser Ansatz macht Überprüfung skalierbar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top