Softwareverifikation in der Industrie I Hat jemand irgendwelche Erfahrungen?

Simon.F

Neues Mitglied
Hallo zusammen,

ich arbeite derzeit mit einer universitären Forschungsgruppe zusammen. Wir untersuchen den praktischen Einsatz von Software-Verifikationswerkzeugen in der Industrie.

Uns interessiert insbesondere, ob es einen Markt für mathematische Werkzeuge (z. B. formal verification, model checking, static analysis) gibt und wie diese in der Praxis eingesetzt werden – beispielsweise in der Qualitätssicherung, der Softwareentwicklung oder in Compliance-intensiven Branchen wie der Automobil- oder Luft- und Raumfahrt.

Daher wollte ich fragen:

– Wie stellen Unternehmen derzeit sicher, dass Sicherheits- und Qualitätsstandards für Software eingehalten werden?

– Was sind die Beweggründe für ihren Einsatz (Sicherheit, Zertifizierungen, Kostensenkung usw.)?

Auch kurze Antworten oder anekdotische Einblicke sind sehr hilfreich. Für Referenzen oder Fallbeispiele wären wir dankbar!

Vielen Dank im Voraus,

Simon
 

meientau

Mitglied
Statische Codeanalyse (lint) und dynamische Codeanalyse (leak detection) sind für die von dir genannten Felder Automotive, Aviation, Space, und auch Medizintechnik von den Normen gefordert. Bei uns (Medizintechnik) ist z.B. IEC 62304 wichtig, auch wenn ich gerade nicht auswendig weiß, welche Maßnahmen da konkret gefordert sind, oder ob das über Ecken reinkommt.
Formale Verifikation habe ich vor 30 Jahren im Studium mal gesehen und damals war das angeblich der heiße Scheiß für z.B. Signalanlagen - keine Ahnung, wie sich das entwickelt hat. Ich glaube eigentlich das Weizenbaum recht hatte - es gibt Systeme, die sind so komplex, dass man sie einfach gar nicht bauen darf, weil das nicht sicher geht ... Und inzwischen sind die Systeme, die wir bauen, um das tausendfache komplizierter, als alles, was Weizenbaum zu Lebzeiten noch gesehen hat. Trotzdem machen wir das, und das geht wohl nicht mehr formal, aber die anderen Maßnahmen "reichen" uns. Wer auch immer das gerade entscheidet. Siehe Boeing ...
Model Checking machen wir zumindest in dem Medizintechnik-Unternehmen, in dem ich arbeite, so nicht, alles - Risikoanalyse und Anforderungen - leiten sich natürlich vom Intended Use ab, und daraus dann die Maßnahmen zur Verifikation und Validierung.
Die Masse unserer Verifikation sind handgeschriebene Tests - automatisiert als Unit-Tests, automatisierte Integrationstests, automatisierte GUI-Tests, und immer noch ein haufen manueller GUI-Tests, weil man nicht alles so einfach automatisieren kann, wenn man Geräte und Modelle dazu braucht, z.B. Plastikknochen oder so. Dabei müssen wir bei einem Audit nicht nur die Ergebnisse zeigen, sondern auch die Begründung, warum diese Tests in angemessenem Verhältnis zum Produktrisiko stehen, sowohl in Umfang als auch in Test-Tiefe (d.h. wie tief denken wir uns in einem White-Box-Test vom bestimmungsgemäßen Gebrauch (Intended Use) in den Code rein).
Bin gespannt auf antworten aus anderen Feldern :)
 

White_Fox

Top Contributor
Es gibt einen Markt, und der wird schon längst bedient.

Automotive ist da das bekannteste Beispiel. In der Luftfahrt kommt C mittlerweile auch zum Einsatz. Boeing ist im Zuge der 737MAX-Untersuchungen negativ dadurch aufgefallen, daß sie die Programmierung des MCAS (das die zwei Maschinen abgestürzt hat) an Billiginder ausgelagert hat.

Eigentlich wurden für wichtige Dinge, wo Menschenleben dran hängen, Sprachen wie Ada entwickelt.

C ist zwar eine altehrwürdige Krüppelsprache, mit der man eigentlich gar nichts wichtiges mehr machen sollte. Aber jeder Depp kann halt in C programmieren, Programmierer für Ada sind weitaus seltener. Und so arbeiten die Firmen mit dem, was sie bekommen können...
 

Oneixee5

Top Contributor
C ist zwar eine altehrwürdige Krüppelsprache, mit der man eigentlich gar nichts wichtiges mehr machen sollte. Aber jeder Depp kann halt in C programmieren,
Mann o Mann ...

Hier sind einige Beispiele für Software in purem C:
  • Betriebssystemkerne:
    Viele Betriebssysteme, insbesondere Unix-basierte wie Linux und macOS, haben ihren Kern in C geschrieben.
  • Eingebettete Systeme:
    C wird oft für die Programmierung von Mikrocontrollern und anderen eingebetteten Systemen verwendet, da es eine effiziente Kontrolle über Hardware erlaubt.


  • Compiler und Interpreter:
    Viele Compiler und Interpreter, auch für andere Programmiersprachen, werden in C geschrieben, um die Grundlage für die Übersetzung und Ausführung von Code zu schaffen.


  • Systemdienstprogramme:
    C ist die bevorzugte Sprache für die Erstellung von Systemwerkzeugen, die zur Verwaltung und Wartung von Betriebssystemen benötigt werden, wie z.B. Dateisystemtools oder Netzwerkdienste.

  • Datenbanksysteme:
    Einige Datenbankmanagementsysteme, wie z.B. MySQL, haben wichtige Komponenten in C implementiert, um eine hohe Leistung zu gewährleisten.


  • Grafikbibliotheken:
    Manche Grafikbibliotheken, die in anderen Programmiersprachen verwendet werden, haben Kernfunktionen in C geschrieben.


  • Spieleentwicklung:
    Auch wenn viele Spiele heute mit höheren Abstraktionen entwickelt werden, gibt es immer noch Bereiche in der Spieleentwicklung, in denen C verwendet wird, z.B. für Hardwarenahe Programmierung oder Spiele-Engines.


  • Netzwerkprogrammierung:
    C wird oft für die Entwicklung von Netzwerkprotokollen und Anwendungen eingesetzt, die eine hohe Leistung und Kontrolle über die Netzwerkkommunikation erfordern.
 

Oneixee5

Top Contributor
Für den Thread ist es sehr schade, ich erkenne aber Überheblichkeit und Geringschätzung. Ich hatte dich auch wegen ähnlicher Dinge fast ein Jahr geblockt. Vor einiger Zeit habe ich die Blocks dann mal alle gelöscht. Ich dachte, dass ich evtl. deswegen keine Mails mehr bekomme. Naja, es war so oder so kein Erfolg.
 

White_Fox

Top Contributor
@Simon.F
Zu deiner PN, ich hatte ja geschrieben daß ich dir lieber hier antworte, weil das einer erschöpfenden Diskussion dienlicher ist:

Vorweg, ich arbeite auch nicht mit Verifizierungstools. Was ich dir dennoch sagen kann:
-Software für Anwendungen wie Automotive oder gar Luft- und Raumfahrt oder Medizintechnik zu zertifizieren, ist ein irrer Aufwand. Software, die andere Software für solche Anwendungen zertifiziert, ist noch weitaus aufwendiger. Sofern ich mal mit zertifizierter Software gearbeitet habe, wirkten diese Programme immer so als war das die erste Betaversion: völlig vermurkste Oberfläche, unverständliche Bezeichnungen, unlogisch in der Bedienung, teils offen fehlerhaft (Klick auf Button macht was völlig unerwartetes), Hilfsautomatismen die mehr Arbeit machen alsdaß sie helfen. Teamcenter Cockpit (Versionierung für Luftfahrt) ist da so ein Beispiel.

Der Grund dafür ist der verflucht aufwendige Zertifizierungsprozess: Ist da ein Release einmal durch, fasst man das nach Möglichkeit nicht an wenn es nicht unbedingt sein muß. Da rollt man nicht einfach mal so ein Update aus um irgendwelche Kleinigkeiten zu verbessern, oder die GUI umzustricken.

Mit Programmen, deren Ausgabe die Grundlage für Zertifizierungen sind, ist das garantiert nicht besser.

Selbst wenn du ein Programm hast, schätze ich mal daß der Markteintritt sehr schwierig wird. Wenn du so ein Programm z.B. für Luftfahrtprozesse verkaufen willst, müßtest du wahrscheinlich Boeing und/oder Airbus davon überzeugen, Lieferanten zu akzeptieren die dein Programm verwenden. Für die OEMs und deren Lieferanten wäre es erstmal ein Vorteil, wenn es in der Lieferkette etwas mehr Wettbewerb gibt.

Allerdings kann es dann aber leicht passieren, daß du einer Firma wie Siemens, die bis dahin sehr viel Geld für wenig Arbeit (sieht man mal von der initialen Veröffentlichung ab) verdient haben, mit deiner Software vors Schienbein trittst. Dann findet irgendein Mittagessen zwischen hinreichend hohen Managern statt, dort wird deine Software besprochen, und danach wird niemand deine Software kaufen können weil es vom Kunden dafür keine Freigabe gibt obwohl alle vorher hellauf begeistert waren.


Noch ein paar Gedanken zum Thema an sich:
Sehr viel, wenn nicht die meiste, Software für wichtige Dinge wird ja heute in C geschrieben. Wichtig heißt, es hängt sehr viel Geld oder Menschenleben von der Funtion der Software ab.
Für C gibt es aber meines Wissens nach bereits jede Menge (oder zumindest ausreichend) Analysetools für solche Zwecke. Und auf solchen Märkten mitzuspielen wird nicht einfach.

Jetzt kommt noch dazu: C ist für solche Anwendungen nie gemacht worden. Ich nannte C ja eine altehrwürdige Krüppelsprache bezeichnet - tatsächlich ist C ja uralt. Sechzig Jahre? Siebzig Jahre? Seitdem hat sich viel getan in der Softwareentwicklung, viele Lektionen wurden gelernt und denen wird C einfach nicht mehr gerecht, und die statischen Codeanalysetools können eigentlich auch nicht mehr als den Funktionsumfang von C zu beschränken und Dinge wie Pointerarythmetik oder bool aus Zahlen abzuleiten zu verhindern.
Altehrwürdig, weil C uns schon weit gebracht hat – aber ich finde, man sollte es heute wirklich in Rente schicken. Für wichtige Dinge (viel Geld, Menschenleben) wurde ja z.B. mal Ada gemacht, aber es ist schwierig, dafür Programmierer zu finden, C kennt dagegen jeder.

Was ich mir wünschen würde wäre eine neue Programmiersprache, die darauf optimiert ist inhärent sicher zu sein was gängige Sicherheitsrisiken wie Überläufe oder dergleichen ausschließt.
Rust z.B. schickt sich ja gerade an, das Steckenpferd von C – hardwarenahe Programmierung – zu übernehmen. Ich habe mich mit Rust noch nicht befasst (kommt aber noch), aber es wäre interessant zu wissen ob und wie solche Fehlervermeidung/Verifikationsmöglichkeiten in Rust bereits eingebaut sind. Oder noch eingebaut werden könnten.

Das würde einen möglichen Markteintritt auch vereinfachen: Sei dem schnarchenden Konzern einfach weit genug vorraus, biete Werkzeuge an die in geringem Umfang kostenlos genutzt werden können (nichtzertifizierte Communityversion oder dergleichen), und lasse dich von Siemens, irgendeinem Autokonzern, Pharmatechnikkonzern, Thales, ... für teuer Geld aufkaufen.


Edit:
Vielleicht noch ganz lehrreich:

Damit du siehst wie eine Programmiersprache für kritische Anwendungen funktioniert.
 

Neue Themen


Oben