Formale Methoden in C++ für sicherheitskritische Software

Lesezeit: 3 Minuten

Betrachtet man C, bietet C eine gute Unterstützung für formale Methoden, die im Code verwendet werden können (frama-c, VCC, verifast). C++ scheint, soweit ich das beurteilen kann, keine vergleichbare zu haben.

Welche formalen Methoden stehen zur Verfügung, um über in C++ geschriebene sicherheitskritische Software zu argumentieren?

  • Wenn Sie sicherheitskritische Software schreiben, müssen Sie wahrscheinlich einen Zertifizierungsstandard respektieren und sich an eine Sicherheitsbehörde halten. Diese geben ausdrücklich an, was sie von Ihnen erwarten. Ist das C++-Code? Normalerweise nein, obwohl es immer möglich ist zu erklären, warum Sie denken, dass es ein besseres Werkzeug für den Job ist. Formale Methoden? Normalerweise wieder nein, obwohl es im neuen DO-178C-Standard für die Luftfahrt einen Anhang gibt. Welcher Maßstab und welche Autorität gelten in Ihrem Fall?

    – Pascal Cuoq

    23. Juli 2014 um 0:01 Uhr

  • In unserem Fall betrachten wir Medizin der Klasse 2, die sich nicht an einen bestimmten Kodierungsstandard orientiert, aber Softwareprozessstandards hat. In der Welt der Geräte der Klasse 2 und 3 ist Misra eine ziemlich sichere Wahl für Codierungsstandards, erfordert aber auch keine formalen Methoden. Diese Frage hat mehr mit unserer zukünftigen Entwicklung und dem Lernen im Allgemeinen zu tun als mit einem bestimmten Projekt. Ich habe gehört, dass der DO178C-Standard einen Teil zu formalen Methoden enthält, und ich habe ein Buch darüber bestellt, um zu sehen, was los ist. Dies ist eine Art Nachfolge, um zu sehen, was andere mit C++ verwendet haben

    – willfredthebuel

    23. Juli 2014 um 0:09 Uhr

  • Vielleicht möchten Sie die MISRA C++-Codierungsrichtlinien lesen. Es gibt statische Analysewerkzeuge, die diesen Standard unterstützen. Die Tools haben auch andere Prüfer, um die MISRA-Standardprüfungen zu ergänzen.

    – Thomas Matthäus

    23. Juli 2014 um 0:13 Uhr

  • Ich stehe dem Frama-C-Entwicklungsteam nahe und kann sagen, dass ein C++-Frontend in Entwicklung ist. Dies ist Teil eines EU-Projekts, bei dem VeriFast auch ein C++-Frontend erhält, wobei einige Ressourcen geteilt werden. Einige Informationen sind unter verfügbar llvm.org/devmtg/2014-04/PDFs/Posters/FramaC.pdf

    – Pascal Cuoq

    23. Juli 2014 um 0:17 Uhr

  • Ja. Danke Paskal! Das ist genau das, was ich erhofft hatte. Die Website ist ein bisschen knapp an Informationen. Ich kann aus den Papieren und Präsentationen ersehen, dass sie wahrscheinlich WP1 abgeschlossen haben und sich irgendwo in der Mitte von WP2 befinden. Ich bin mir nicht sicher, ob du das sagen darfst, aber hast du ein Bauchgefühl, wann Alpha-Zeug verfügbar sein könnte?

    – willfredthebuel

    23. Juli 2014 um 2:33 Uhr

Benutzer-Avatar
Alex Wilke

Ein medizinisches Unternehmen, mit dem ich zusammenarbeite, verwendet Deckung und Klowerk um den Code auf mögliche Probleme wie Ressourcenlecks und die Verwendung nicht initialisierter Zeiger zu überprüfen.

Dies sind jedoch Werkzeuge und kein Standard für sicherheitskritischen Code.

Was ich gesehen habe ist, dass MISRA an einem Standard für C++ gearbeitet hat. Sie begannen vor langer Zeit mit C und begannen vor etwa 5 Jahren mit der Arbeit an C++. Ein großes Problem ist, dass beispielsweise der MISRA-Standard für C++ vorschreibt, dass man keine Templates verwenden sollte. Das schränkt die Möglichkeiten in C++ wirklich ein. Sie können dieses Dokument jedoch als Ausgangspunkt verwenden. Möglicherweise möchten Sie die in Ihrer Software verwendeten Vorlagen auf das beschränken, was in der Standardbibliothek enthalten ist, und beispielsweise Boosten.

Beachten Sie, dass Klocwork eine Erweiterung für hat MISRA C++.

Eine der besten Möglichkeiten, guten Code zu schreiben, besteht jedoch darin, ihn mit Unit-Tests und Integrationstests zu testen. Ich habe im Laufe der Jahre festgestellt, dass dies viel zuverlässiger ist als die meisten anderen Methoden.

  • Formale Methoden hat nichts mit MISRA zu tun. MISRA ist nur ein Codierungsstandard, der verwendet wird, um die Programmiersprache auf eine sichere Teilmenge zu reduzieren. Wenn Sie sich die strengeren, anwendungsspezifischen Sicherheitsstandards ansehen, erfordern diese, dass Sie sowohl formale Methoden als auch eine sichere Teilmenge der Programmiersprache verwenden.

    – Ludin

    14. September 2015 um 6:45 Uhr


1370150cookie-checkFormale Methoden in C++ für sicherheitskritische Software

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy