Hallo,
wir sind gerade am verifizieren, ob Python für ein sicherheitskritisches System nutzbar wäre. Genauer gesagt, handelt es sich um eine Anwendung im medizinischen Bereich mit wahrscheinlich mittlerer oder höchsten Sicherheitsklasse.
Deshalb meine Frage, gibt es bei euch bereits Erfahrungen diesbezüglich?
Danke
desaster
Python für sicherheitskritische Systeme?
Hallo,
- Man muss nach DIN Normen entwickeln.
- Durchführung Machbarkeitsstudie
- Durchführung Anforderungsanalyse und Spezifikation
- Implementierung Risikomanagement
- Komponententest
- Integrationstest
- Systemtest
- Dokumentation, Dokumentation und noch einmal Dokumentation (traceability)
- jedes Modul muss ausführlich getestet werden und jeder Test dokumentiert werden
- jeder Softwareteil von anderen Anbieter muss getestet werden, deren eventuelle Fehler detektiert und eine Risikobewertung durchgeführt werden. (z.B. wenn man ein grafisches Framework benutzt) Dokumentierung mit genauer Versionsangabe
- Einfrieren von Softwareständen
- ....
Ist natürlich sehr oberflächlich beschrieben aber ich hoffe, dass der ungefähre Aufwand erkennbar ist. Wenn ich jetzt also einen erhöhten Arbeitsaufwand (im Vergleich mit C++) hätte, um meine Klassen, Funktionen, usw. sicher zu implementieren (z.B. Typsicherheit bei Parametern) dann ist eine Entscheidung für Python sicherlich zu überdenken.
Da ich/wir in Python bisher diesbezüglich noch nicht aktiv waren, sollte diese Frage sondieren, ob hier im Forum schon jemand Erfahrungen gesammelt hat.
Danke
desaster
- Man muss nach DIN Normen entwickeln.
- Durchführung Machbarkeitsstudie
- Durchführung Anforderungsanalyse und Spezifikation
- Implementierung Risikomanagement
- Komponententest
- Integrationstest
- Systemtest
- Dokumentation, Dokumentation und noch einmal Dokumentation (traceability)
- jedes Modul muss ausführlich getestet werden und jeder Test dokumentiert werden
- jeder Softwareteil von anderen Anbieter muss getestet werden, deren eventuelle Fehler detektiert und eine Risikobewertung durchgeführt werden. (z.B. wenn man ein grafisches Framework benutzt) Dokumentierung mit genauer Versionsangabe
- Einfrieren von Softwareständen
- ....
Ist natürlich sehr oberflächlich beschrieben aber ich hoffe, dass der ungefähre Aufwand erkennbar ist. Wenn ich jetzt also einen erhöhten Arbeitsaufwand (im Vergleich mit C++) hätte, um meine Klassen, Funktionen, usw. sicher zu implementieren (z.B. Typsicherheit bei Parametern) dann ist eine Entscheidung für Python sicherlich zu überdenken.
Da ich/wir in Python bisher diesbezüglich noch nicht aktiv waren, sollte diese Frage sondieren, ob hier im Forum schon jemand Erfahrungen gesammelt hat.
Danke
desaster
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Du hast jetzt eher Vorgehensmodelle beschrieben, als Anforderungen an eine konkrete Sprache! Insofern sehe ich da keine Probleme, diese Muster auf jede x beliebige Sprache anzuwenden (ok, die esotherischen mal außen vor gelassen )
Dass Typsicherheit zu sicherem Implementieren führt, halte ich für ein Gerücht. Wenn das natürlich wieso auch immer eine harte Anforderung ist, fallen demnach alle dynamisch typisierten Sprachen raus. Und das kann ich mir beim besten Willen nicht vorstellen
Dass Typsicherheit zu sicherem Implementieren führt, halte ich für ein Gerücht. Wenn das natürlich wieso auch immer eine harte Anforderung ist, fallen demnach alle dynamisch typisierten Sprachen raus. Und das kann ich mir beim besten Willen nicht vorstellen
Python ist dynamisch typisiert. Du kannst zwar am Anfang deiner Funktionen und Methoden Typchecks durchführen, aber das ist dann eigentlich kein Python mehr. Wenn du der Meinung bist, dass statische Typisierung dein Programm sicherer macht, dann solltest du die Entscheidung für Python wohl tatsächlich nochmal überdenken. Beim Rest der genannten Punkte sehe ich nicht, wieso das in Python nicht gehen sollte...
€: War zu spät...
€: War zu spät...
Zuletzt geändert von snafu am Freitag 26. März 2010, 09:10, insgesamt 1-mal geändert.
Hallo Hyperion,
Danke für die Antwort.
[quote]
Du hast jetzt eher Vorgehensmodelle beschrieben, als Anforderungen an eine konkrete Sprache! Insofern sehe ich da keine Probleme, diese Muster auf jede x beliebige Sprache anzuwenden (ok, die esotherischen mal außen vor gelassen )
[/quote]
Korrekt. Letztendlich ist es sich ja auch primär ein Model oder Vorgehensweise, das abgearbeitet wird, in der die Programmiersprache eigentlich eher uninteressant ist. Wahrscheinlich hätte ich meine Frage anders stellen müssen. Zum Beispiel Vor- und Nachteile C++ <--> Python. Ich gehe aber davon aus, dass diese Thematik schon des Öfteren diskutiert wurde und man deshalb auf ausreichend Infomaterial stößt.
[quote]
Dass Typsicherheit zu sicherem Implementieren führt, halte ich für ein Gerücht. Wenn das natürlich wieso auch immer eine harte Anforderung ist, fallen demnach alle dynamisch typisierten Sprachen raus. Und das kann ich mir beim besten Willen nicht vorstellen
[/quote]
Das bedeutet aber auch, dass man diese dann entsprechend in den Modulen auf den Typ überprüfen muss.
Danke
desaster
Danke für die Antwort.
[quote]
Du hast jetzt eher Vorgehensmodelle beschrieben, als Anforderungen an eine konkrete Sprache! Insofern sehe ich da keine Probleme, diese Muster auf jede x beliebige Sprache anzuwenden (ok, die esotherischen mal außen vor gelassen )
[/quote]
Korrekt. Letztendlich ist es sich ja auch primär ein Model oder Vorgehensweise, das abgearbeitet wird, in der die Programmiersprache eigentlich eher uninteressant ist. Wahrscheinlich hätte ich meine Frage anders stellen müssen. Zum Beispiel Vor- und Nachteile C++ <--> Python. Ich gehe aber davon aus, dass diese Thematik schon des Öfteren diskutiert wurde und man deshalb auf ausreichend Infomaterial stößt.
[quote]
Dass Typsicherheit zu sicherem Implementieren führt, halte ich für ein Gerücht. Wenn das natürlich wieso auch immer eine harte Anforderung ist, fallen demnach alle dynamisch typisierten Sprachen raus. Und das kann ich mir beim besten Willen nicht vorstellen
[/quote]
Das bedeutet aber auch, dass man diese dann entsprechend in den Modulen auf den Typ überprüfen muss.
Danke
desaster
Nein, es ist einfach ein anderer Ansatz. Wenn du alles überprüfst, machst du dir z.B. Duck Typing kaputt. Wie gesagt: Überleg dir, ob du Python wirklich benutzen willst oder ob du einfach nur C++ auf eine andere Sprache übertragen willst.desaster hat geschrieben:Das bedeutet aber auch, dass man diese dann entsprechend in den Modulen auf den Typ überprüfen muss.Dass Typsicherheit zu sicherem Implementieren führt, halte ich für ein Gerücht. Wenn das natürlich wieso auch immer eine harte Anforderung ist, fallen demnach alle dynamisch typisierten Sprachen raus. Und das kann ich mir beim besten Willen nicht vorstellen
Das Problem ist, dass du da zu viele Informationen zu findest.desaster hat geschrieben: Wahrscheinlich hätte ich meine Frage anders stellen müssen. Zum Beispiel Vor- und Nachteile C++ <--> Python. Ich gehe aber davon aus, dass diese Thematik schon des Öfteren diskutiert wurde und man deshalb auf ausreichend Infomaterial stößt.
Ich persönlich würde nie im Leben eine sicherheitskritische Anwendung in C++ entwickeln. In Python aber auch nicht. Vermutlich eher in Java oder C#.
Nein, du musst prüfen ob dein Programm mit dem vorgegebenen Parameterraum zurechtkommt und sinnvolle Ergebnisse liefert. Da hilft dann auch keine statische Typisierung, da hilft nur testen.Das bedeutet aber auch, dass man diese dann entsprechend in den Modulen auf den Typ überprüfen muss.
Allerdings sollte man nicht verschweigen, dass statische Typisierung eine zusätzliche Prüfung und Dokumentation gegenüber dynamischer Typisierung bietet.
Python ist übrigens typsicher(im Gegensatz zu C++ dank einiger C-Features die man benutzen darf).
Zum Thema "Anwendung von Python im medizinischen Bereich" vielleicht ganz interessant: http://www.python.org/about/success/astra/
@desaster: Wenn diese Art von Typprüfung wichtig ist, dann ist Python die falsche Sprache für die Aufgabe. Wie Darii schon schrieb setzt man in Python auf das Testen von richtigem Verhalten statt richtigem Typ. Aus der Idee heraus, das ein Typtest alleine nicht garantiert, dass das Programmverhalten auch das gewünschte ist, man das Verhalten also sowieso testen muss, ob nun mit oder ohne Typtest. Und wenn es keinen Typtest gibt, ist man als Programmierer flexibler, kann also "duck typing" verwenden.
@Darii: Java oder C# würden mir als Patienten auch ein wenig Angst machen. Ada und Leute die wissen was sie tun wäre nett.
@Darii: Java oder C# würden mir als Patienten auch ein wenig Angst machen. Ada und Leute die wissen was sie tun wäre nett.
Hallo,
das mit der Typisierung war nur ein Beispiel meinerseits. Wie bereits gesagt, sind die derzeitigen Erfahrungen bzgl. Python noch sehr eingeschränkt. Deshalb zu der Typisierung mal folgende Situation:
Ich habe eine Funktion die als Parameter einen Integer erwartet. Nun wird meine Funktion durch ein anderes Modul aufgerufen, dass der Meinung ist, mir als Übergabeparameter einen völlig anderen Typ zu schicken. Wie ist denn nun der gewollte Weg diesen Mismatch abzufangen? Ist eine eventuelle Exception (weil wir nicht vorhandene Funktionalität ausführen) das probate Mittel?
[quote]
Zum Thema "Anwendung von Python im medizinischen Bereich" vielleicht ganz interessant: http://www.python.org/about/success/astra/
[/quote]
Ein interessanter Link.
[quote]
@Darii: Java oder C# würden mir als Patienten auch ein wenig Angst machen. Ada und Leute die wissen was sie tun wäre nett.
[/quote]
Grins.
Danke
desaster
das mit der Typisierung war nur ein Beispiel meinerseits. Wie bereits gesagt, sind die derzeitigen Erfahrungen bzgl. Python noch sehr eingeschränkt. Deshalb zu der Typisierung mal folgende Situation:
Ich habe eine Funktion die als Parameter einen Integer erwartet. Nun wird meine Funktion durch ein anderes Modul aufgerufen, dass der Meinung ist, mir als Übergabeparameter einen völlig anderen Typ zu schicken. Wie ist denn nun der gewollte Weg diesen Mismatch abzufangen? Ist eine eventuelle Exception (weil wir nicht vorhandene Funktionalität ausführen) das probate Mittel?
[quote]
Zum Thema "Anwendung von Python im medizinischen Bereich" vielleicht ganz interessant: http://www.python.org/about/success/astra/
[/quote]
Ein interessanter Link.
[quote]
@Darii: Java oder C# würden mir als Patienten auch ein wenig Angst machen. Ada und Leute die wissen was sie tun wäre nett.
[/quote]
Grins.
Danke
desaster
@desaster:
Ist kein anderer Typ gewollt, wirft Python eine Ausnahme. Mal eine Ausgabe des Interpreters:
Andernfalls kannst du es mit einem Cast probieren:
Die Beispiele sind natürlich stark vereinfacht, but you should get the idea.
Ist kein anderer Typ gewollt, wirft Python eine Ausnahme. Mal eine Ausgabe des Interpreters:
Code: Alles auswählen
>>> def plus_one(num):
... return num + 1
...
>>> plus_one(42)
43
>>> plus_one("42")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in plus_one
TypeError: cannot concatenate 'str' and 'int' objects
Code: Alles auswählen
>>> def plus_one(num):
... return int(num) + 1
...
>>> plus_one("42")
43
>>> plus_one("spam")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in plus_one
ValueError: invalid literal for int() with base 10: 'spam'
Python ist dynamisch aber nicht schwach typisiert. Übergibt man ein Objekt falschen Typs/Verhaltens gibt dass eine Ausnahme.desaster hat geschrieben:Wie ist denn nun der gewollte Weg diesen Mismatch abzufangen? Ist eine eventuelle Exception (weil wir nicht vorhandene Funktionalität ausführen) das probate Mittel?
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Wir hätten da:desaster hat geschrieben: Wahrscheinlich hätte ich meine Frage anders stellen müssen. Zum Beispiel Vor- und Nachteile C++ <--> Python.
http://wiki.python-forum.de/Unterschiede%20zu%20C
wohl ehr uninteressant:
http://wiki.python-forum.de/Unterschiede%20zu%20PHP
Hallo disaster
a) Drogenverwaltungsprogramm?
b) Medizinische Messgeräte?
c) Geräte für den Einsatz im OP-Saal?
Übrigens: Keine Programmiersprache kann als sicher bezeichnet werden. Hingegen wenn die gleiche Software in zwei verschiedenen Sprachen (egal in welcher) geschrieben wird, welche sich gegenseitig überwacht und auf zwei getrennten Hardare-Plattformen läüft kann schon ein als sicherere bezeichnet werden.
Gruß wuf
Meine Frage: Um was für ein sicherheitskritische System handelt es sich genau?disaster hat geschrieben: Python für ein sicherheitskritisches System
a) Drogenverwaltungsprogramm?
b) Medizinische Messgeräte?
c) Geräte für den Einsatz im OP-Saal?
Übrigens: Keine Programmiersprache kann als sicher bezeichnet werden. Hingegen wenn die gleiche Software in zwei verschiedenen Sprachen (egal in welcher) geschrieben wird, welche sich gegenseitig überwacht und auf zwei getrennten Hardare-Plattformen läüft kann schon ein als sicherere bezeichnet werden.
Gruß wuf
Take it easy Mates!
- mkesper
- User
- Beiträge: 919
- Registriert: Montag 20. November 2006, 15:48
- Wohnort: formerly known as mkallas
- Kontaktdaten:
Bleiben bloß noch die Probleme, die man durch so eine doppelte Ausführung verursacht.wuf hat geschrieben:Übrigens: Keine Programmiersprache kann als sicher bezeichnet werden. Hingegen wenn die gleiche Software in zwei verschiedenen Sprachen (egal in welcher) geschrieben wird, welche sich gegenseitig überwacht und auf zwei getrennten Hardare-Plattformen läüft kann schon ein als sicherere bezeichnet werden.
Hallo mkesper
Eine einfache Ausführung kann eben auch schon Probleme machen. Aber bei einem Amoklauf des einen muss es vom anderen sicher stillgesetzt werden. Ein System welches gar nicht läuft ist das sicherste!
Gruß wuf
Eine einfache Ausführung kann eben auch schon Probleme machen. Aber bei einem Amoklauf des einen muss es vom anderen sicher stillgesetzt werden. Ein System welches gar nicht läuft ist das sicherste!
Gruß wuf
Take it easy Mates!
Naja, wenn das Sicherheitssystem eines AKW nicht funktioniert (wohl aber der Reaktor selbst) würde mir schon schummrig werden. Und bei modernen Flugzeugen, wo auch die Steuerflächen elektrisch und nicht mehr hydraulisch angesteuert werden ...wuf hat geschrieben:Hallo mkesper
Eine einfache Ausführung kann eben auch schon Probleme machen. Aber bei einem Amoklauf des einen muss es vom anderen sicher stillgesetzt werden. Ein System welches gar nicht läuft ist das sicherste!
Gruß wuf
Hallo Pekh
Gruß wuf
Das würde genau bei einem einfachen System der Fall sein. Da würde es mir sogar ein wenig unheimlich werden. Aber bei einem doppelten System nimmt man ja an, dass das eine noch läuf und durch Überwachung des anderen feststellen kann, dass dieses nicht mehr laüft und somit veranlässt, dass die Moderatorstäbe schnellstmöglich in den Reaktor eingeführt werden. So viel ich weiss sind es bei AKW's bis vier unabhängige Systeme die diese Sicherheitsanforderung versuchen sicher zu stellen. Bei Flugzeugen werden vermutlich ähnlich Anforderungen bestehen.Pekh hat geschrieben:Naja, wenn das Sicherheitssystem eines AKW nicht funktioniert (wohl aber der Reaktor selbst)
Gruß wuf
Take it easy Mates!