-
Die Erfindung betrifft ein Verfahren zum Erstellen eines Steuerprogramms. Die Erfindung betrifft ferner einen Computer zur Ausführung des Verfahrens.
-
Die Entwicklung von sicherheitskritischen Anwendungen, insbesondere Steuerprogramme, für industrielle Steuer- oder Fertigungsanlagen oder Automatisierungsanlagen erfolgt in der Regel mittels eines graphischen Editors. Hierbei wird die Anwendung aus vordefinierten Funktionsbausteinen und vom Nutzer gewählten Verbindungen aufgebaut. Im Hintergrund wird ein zur erstellten Anwendung passender Programmcode, beispielsweise C-Code, generiert, welcher kompiliert und auf der Steuer- oder Fertigungsanlage ausgeführt wird.
-
Bei der Entwicklung eines solchen graphischen Editors für sicherheitskritische Anwendungen muss insbesondere eine Absicherung der Schnittstellen gewährleistet sein. Das heißt, es muss sichergestellt werden, dass der Programmcode wirklich die vom Nutzer gewünschte Funktionalität abbildet. Integriert der Nutzer beispielsweise einen AND-Baustein in einer graphischen Oberfläche des Editors, so muss überprüft werden, ob dieser AND-Baustein korrekt im Programmcode und auf der Festplatte abgebildet wurde.
-
Dies ist insbesondere wichtig, da bei einer nicht korrekten Abbildung die Steuer- oder Fertigungsanlage oder Automatisierungsanlage möglicherweise nicht bestimmungsgemäß funktionieren würde, was eine Gefahr sowohl für die Anlage, aber insbesondere auch für die die Anlage bedienenden Personen darstellen könnte. Insbesondere muss sichergestellt werden, dass die Anlage oder Maschine beim Auftreten einer Störung in einen sicheren Zustand fährt. Ein sicherer Zustand kann bei einem Aufzug beispielsweise sein, dass der Aufzug zum nächsten Stockwerk fährt und nicht zwischen zwei Stockwerken anhält.
-
Ein sicherer Zustand kann bei einer CNC-Fräse beispielsweise sein, dass die CNC-Fräse abschaltet, wenn eine Gehäusetür geöffnet wird. Beispielsweise muss auch sichergestellt werden, dass ein Notschalter, insbesondere Notausschalter, bestimmungsgemäß funktioniert. Insofern ist eine korrekte Abbildung für einen bestimmungsgemäßen Betrieb solcher Anlagen wichtig.
-
Die Aufgabe der vorliegenden Erfindung kann also darin gesehen werden, ein Verfahren zum Erstellen eines Steuerprogramms anzugeben, welches eine korrekte Abbildung eines in eine Quellprogramm eingefügten Code-Segments beim Übergang von einer Editorschaltung zu einem Speicher in einem Computer sicherstellt.
-
Die Aufgabe der vorliegenden Erfindung kann weiterhin darin gesehen werden, einen Computer anzugeben, welcher das Verfahren ausführen kann.
-
Diese Aufgaben werden mittels des Gegenstands der unabhängigen Ansprüche gelöst. Vorteilhafte Ausgestaltungen sind Gegenstand von jeweils abhängigen Unteransprüchen.
-
Nach einem Aspekt der Erfindung wird ein Prüfverfahren für eine Integrität eines Quelltextes bereitgestellt. Es wird ein Code-Segment in einen Quelltext eingefügt. Ferner wird eine prädizierte Prüfsumme berechnet. Es wird also vorhergesagt, welche Prüfsumme der Quelltext mit dem eingefügten Code-Segment aufweisen müsste. Des Weiteren wird eine berechnete Prüfsumme entsprechend dem Quelltext mit dem eingefügten Code-Segment berechnet. Bei diesem Schritt wird also der Quelltext mit dem bereits eingefügten Code-Segment als Basis für die Prüfsummenberechnung verwendet. Es wird dann ein Vergleich zwischen der berechneten Prüfsumme und der prädizierten Prüfsumme durchgeführt. Eine Prüfsumme kann auch als eine Checksumme bezeichnet werden.
-
Wenn beide Prüfsummen übereinstimmen, kann im Rahmen einer Fehlererkennung davon ausgegangen werden, dass das eingefügte Code-Segment korrekt in den Quelltext eingefügt wurde. Ein Kompilieren des Quelltextes mit dem eingefügten Code-Segment führt dann beispielsweise zu einer ausführbaren Anwendung, beispielsweise einem Steuerprogramm für eine industrielle Steuer- oder Fertigungsanlage, in welchem zumindest bezüglich des eingefügten Code-Segments eine korrekte Abbildung gewährleistet werden kann.
-
Wenn beide Prüfsummen nicht übereinstimmen, kann davon ausgegangen werden, dass das eingefügte Code-Segment nicht korrekt in den Quelltext eingefügt wurde. Ein Kompilieren führt dann beispielsweise zu einer ausführbaren Anwendung, welche eine industrielle Steuer- oder Fertigungsanlage möglicherweise nicht korrekt steuert.
-
Allgemein können die Code-Segmente Steuerungsbefehle zur Steuerung von industriellen Steuer- oder Fertigungsanlagen, beispielsweise einer CNC-Fräse oder eines Fertigungsroboters, umfassen. Vorzugsweise sollen mittels der Code-Segmente auch Automatisierungsanlagen oder industrielle Automatisierungsnetzwerke gesteuert werden können. Das heißt insbesondere, dass der kompilierte Quelltext eine ausführbare Anwendung bildet, welche die vorgenannten Einrichtungen steuern kann.
-
Nach einem weiteren Aspekt der Erfindung wird ein Computer bereitgestellt, welcher zur Ausführung des Prüfverfahrens geeignet ist. Der Computer weist eine Vergleichsschaltung auf, welche eingerichtet ist, eine prädizierte Prüfsumme entsprechend einem Quelltext mit einem eingefügten Code-Segment mit einer berechneten Prüfsumme entsprechend dem Quelltext mit dem eingefügten Code-Segment zu vergleichen. Der Computer umfasst insbesondere einen oder mehrere Prozessoren und Speichereinrichtungen wie beispielsweise eine Festplatte. Es kann vorgesehen sein, dass die Vergleichsschaltung als eine integrierte Schaltung gebildet ist. Insbesondere ist die Vergleichsschaltung in den Prozessor integriert. Vorzugsweise ist der Computer ein Steuerungsrechner für eine Automatisierungsanlage. Das heißt, dass der Steuerungsrechner eingerichtet ist, die Automatisierungsanlage zu steuern. Eine Automatisierungsanlage kann beispielsweise eine Gebäudeautomatisierungsanlage sein und vorzugsweise eine Heizungsanlage und/oder eine Klimaanlage und/oder eine Gebäudelichtanlage umfassen. Eine Automatisierungsanlage kann beispielsweise eine Produktionsanlage umfassen.
-
Integrität im Sinne der vorliegenden Erfindung bedeutet insbesondere, dass das vom Nutzer gewünschte bzw. ausgewählte Code-Segment auch tatsächlich in den Quelltext eingefügt wird.
-
Unter einem Quelltext im Sinne der vorliegenden Erfindung wird insbesondere ein für einen Menschen, also dem Nutzer, lesbare in einer Programmiersprache, beispielsweise C-Code oder C++-Code, geschriebener Text eines Computerprogramms verstanden. Ein Quelltext kann auch als ein Quellcode, auf Englisch „source code“, bezeichnet werden. Der Quelltext wird üblicherweise in eine Maschinensprache übersetzt, das heißt kompiliert, wobei dieses kompilierte Programm beispielsweise auf einer Maschine, einer industriellen Fertigungs- oder Steueranlage oder einem Industrieroboter ausgeführt werden kann. Die Programmiersprache soll sich nicht nur auf C-Code oder C++-Code beschränken. Insbesondere sollen sämtliche Objekt orientierte Programmiersprachen umfasst sein.
-
Ein Einfügen eines Code-Segments in einen Quelltext bedeutet nicht zwangsläufig, dass der Quelltext bereits einen Inhalt aufweist wie beispielsweise bereits vorhandene Code-Segmente. Der Quelltext kann insofern auch eine leere bzw. neu angelegte Datei sein, so dass das einzufügende Code-Segment das erste Code-Segment des Quelltextes bildet.
-
Unter Code-Segment im Sinne der vorliegenden Erfindung wird insbesondere Quellcode einer Programmiersprache, beispielsweise der Programmiersprachen C oder C++ verstanden, wobei auch insbesondere sämtliche Objekt orientierte Programmiersprachen umfasst sein sollen.
-
Ein Code-Segment kann vorzugsweise einen oder mehrere statische Anteile und/oder einen oder mehrere dynamische Anteile umfassen. Ein statischer Anteil kann auch als ein statischer Code-Segmentanteil bezeichnet werden. Ein dynamischer Anteil kann auch als ein dynamischer Code-Segmentanteil bezeichnet werden.
-
Ein dynamischer Code-Segmentanteil kann beispielsweise ein Variablenname oder ein Initialisierungswert sein. Der Nutzer gibt also insbesondere die entsprechenden Werte vor und muss sie insofern in der Regel eingeben, beispielsweise mittels einer Tastatur an einem Computer.
-
Ein statischer Code-Segmentanteil kann beispielsweise ein Befehl, ein Datentyp oder ein Operand sein. Beispielsweise kann ein statisches Code-Segmentanteil ein Datentyp einer Variablendeklaration oder ein Gleichheitszeichen sein.
-
Beispielsweise kann ein Code-Segment wie folgt gebildet sein:
int varName = 5;
-
Hierbei sind „int“, „=“ und „;“ statische Code-Segmentanteile. „varName“ und „5“ sind dynamische Code-Segmentanteile, welche von dem Nutzer vorgegeben werden müssen.
-
Ein weiteres Beispiel für ein Code-Segment kann wie folgt gebildet sein:
int multiplicationValue = 8
-
Hierbei sind „int“ und „=“ statische Code-Segmentanteile. „multiplicationValue“ und „8“ sind dynamische Code-Segmentanteile.
-
Prädizieren im Sinne der vorliegenden Erfindung bedeutet insbesondere, dass vorhergesagt wird, welche Prüfsumme der Quelltext mit dem eingefügten Code-Segment aufweisen müsste. Als Basis für diesen Prädizierungsschritt werden insbesondere jeweils Prüfsummen basierend auf dem einzufügenden Code-Segment und dem Quelltext für sich, also ohne das noch einzufügende Code-Segment, berechnet. Die prädizierte Prüfsumme wird dann insbesondere aus diesen jeweiligen Prüfsummen gebildet.
-
Die berechnete Prüfsumme basiert auf dem Quelltext mit dem bereits eingefügten Code-Segment.
-
Nach einer Ausführungsform der Erfindung werden die Prüfsummen mittels des ParityBit-Prüfsummenverfahrens oder mittels des Cyclic Redundancy Check (CRC)-Verfahrens gebildet bzw. berechnet. Das CRC-Verfahren wird auf Deutsch auch zyklische Redundanzprüfung genannt. Allerdings soll sich die Erfindung nicht nur auf die vorgenannten Prüfsummenverfahren beschränken. Es sollen sämtliche dem Fachmann bekannte Prüfsummenverfahren umfasst sein.
-
Es wird der Quelltext mit dem eingefügten Code-Segment abgespeichert, bevor die berechnete Prüfsumme berechnet wird. Es wird also eine Prüfsumme basierend auf dem abgespeicherten Quelltext mit dem eingefügten Code-Segment berechnet. Somit können mögliche Veränderungen aufgrund eines fehlerhaften Speichervorgangs erkannt und korrigiert werden. Insbesondere wird so sichergestellt, dass der Quelltext mit dem gewünschten Code-Segment abgespeichert wurde. Der Quelltext mit dem eingefügten Code-Segment kann beispielsweise auf einer Festplatte oder einem Datenträger abgespeichert werden. Vorzugsweise wird der Quelltext mit dem eingefügten Code-Segment vor oder nach dem Abspeichern verschlüsselt. So kann beispielsweise ein unbefugtes Auslesen der Datei aufweisend den Quelltext mit dem eingefügten Code-Segment verhindert werden. Insbesondere wird der Quelltext mit dem eingefügten Code-Segment vor oder nach dem Abspeichern digital signiert. So kann insbesondere nachvollzogen werden, wer den Quelltext bearbeitet hat.
-
Das Bilden der prädizierten Prüfsumme umfasst ein Berechnung einer Code-Segmentprüfsumme des einzufügenden Code-Segments. Es wird also eine Prüfsumme basierend auf dem einzufügenden Code-Segment berechnet. Vorzugsweise umfasst das Bilden der prädizierten Prüfsumme eine Berechnung einer Quelltextprüfsumme. Es wird also eine Prüfsumme basierend auf dem Quelltext, in welchen das Code-Segment eingefügt werden soll, berechnet. Vorzugsweise wird also aus der Quelltextprüfsumme und der Code-Segmentprüfsumme eine Prüfsumme des Quelltextes mit dem eingefügten Code-Segment vorhersagend berechnet, also prädiziert. Insbesondere entspricht die Quelltextprüfsumme beispielsweise der Prüfsumme, welche basierend auf einer zeitlich älteren Version des Quelltextes mit einem damals eingefügten Code-Segment berechnet wurde. Die Quelltextprüfsumme kann insofern bereits bekannt sein.
-
In einer Ausführungsform der Erfindung wird für die Berechnung der Code-Segmentprüfsumme das Code-Segment in dynamische Code-Segmentanteile und statische Code-Segmentanteile aufgeteilt. Vorzugsweise wird für die einzelnen dynamischen Code-Segmentanteile eine jeweilige dynamische Unterprüfsumme berechnet. Vorzugsweise wird für die einzelnen statischen Code-Segmentanteile eine jeweilige statische Unterprüfsumme berechnet.
-
Da die statischen Code-Segmentanteile nicht von einem Nutzer vorgegeben werden, sind sie insofern bekannt. Es reicht also aus, die statischen Unterprüfsummen für die statischen Code-Segmentanteile einmal zu berechnen. Hier wird insbesondere sichergestellt, dass bei dieser Berechnung keine Fehler aufgetreten sind. Es kann weiter beispielsweise vorgesehen sein, dass diese statischen Unterprüfsummen abgespeichert werden, beispielsweise auf einem zentralen Server. Insbesondere werden die statischen Unterprüfsummen schreibgeschützt abgespeichert. Eine Sicherheitsorganisation oder -behörde kann beispielsweise die statischen Unterprüfsummen zertifizieren. Das heißt insbesondere, dass die Sicherheitsorganisation oder - behörde überprüft, ob die Berechnung korrekt war. In Deutschland kann eine solche Sicherheitsorganisation beispielsweise der Technische Überwachungs-Verein (TÜV) sein.
-
Das Berechnen der prädizierten Prüfsummen mittels bekannter, im Voraus berechneter und insbesondere zertifizierter statischer Unterprüfsummen bietet insbesondere den Vorteil, dass ein Berechnungsaufwand für die Prüfsummen verringert werden kann. Das spart beispielsweise Rechenleistung ein. Auch der benötigte Speicherbedarf kann so in vorteilhafter Weise verringert werden.
-
In einer Ausführungsform der Erfindung wird, falls zum Einfügen des Code-Segments der Quelltext in zwei Teile aufgespaltet wird, zum Bilden der prädizierten Prüfsumme eine Teilprüfsumme jeweils entsprechend den beiden Teilen des Quelltextes berechnet. In dieser Ausführungsform wird das Code-Segment nicht an ein Ende oder an einen Anfang des Quelltextes angefügt, sondern in den Quelltext eingefügt bzw. integriert. Der Teil des Quelltextes, der vor dem eingefügten Code-Segment steht, kann auch als ein oberer Quelltextteil bezeichnet werden. Der Teil des Quelltextes, der unter dem eingefügten Code-Segment steht, kann auch als ein unterer Quelltextteil bezeichnet werden. Es werden also eine Teilprüfsumme basierend auf dem oberen Quelltextteil und eine Teilprüfsumme basierend auf dem unteren Quelltextteil berechnet. Die beiden Teilprüfsummen können insofern entsprechend als eine obere Teilprüfsumme und als eine untere Teilprüfsumme bezeichnet werden. Eine prädizierte Prüfsumme wird somit insbesondere mittels der oberen Teilprüfsumme, der unteren Teilprüfsumme und der Code-Segmentprüfsumme gebildet. Somit kann eine Prädiktion in mehrere Teilschritte unterteilt werden, was den Rechenaufwand erheblich reduziert.
-
In einer Ausführungsform der Erfindung wird eine Zwischenprüfsumme aus der Code-Segmentprüfsumme und einer der beiden Teilprüfsummen berechnet. Es wird also eine Zwischenprüfsumme aus der Code-Segmentprüfsumme und der oberen Teilprüfsumme oder der unteren Teilprüfsumme gebildet. Vorzugsweise wird dann die prädizierte Prüfsumme basierend auf der Zwischensumme und der unteren respektive oberen Teilprüfsumme gebildet. Auch dieses Unterteilen der Prädiktion in mehrere Berechnungsschritte kann in vorteilhafter Weise den Rechenaufwand reduzieren, so dass entsprechende Berechnungen auch auf Computern mit einer geringen Rechenleistung ausgeführt werden können.
-
Gemäß einer Ausführungsform der Erfindung wird dem Code-Segment ein graphisch darstellbares Objekt zugeordnet. Vorzugsweise wird der Quelltext als ein oder mehrere graphisch darstellbare Objekte dargestellt. Der Nutzer benötigt so in vorteilhafter Weise keine Kenntnis der Syntax der Programmiersprache, sondern verschiebt Objekte auf einer graphischen Oberfläche eines graphischen Editors und verknüpft sie entsprechend. Solche Objekte können auch als Funktionsbausteine bezeichnet werden.
-
Wenn bei der Berechnung der prädizierten Prüfsumme zertifizierte statische Unterprüfsummen berücksichtigt werden, so bietet das insbesondere den Vorteil, dass mögliche Adressierungsfehler nicht unbemerkt kompensiert werden können. Angenommen der Nutzer möchte einen OR-Funktionsbaustein in den Quelltext einfügen. Dieser wird allerdings aufgrund eines Adressierungsfehlers als ein AND-Funktionsbaustein interpretiert und das entsprechend zugeordnete Code-Segment eines AND-Funktionsbausteins in den Quelltext integriert bzw. angefügt. Wenn jetzt für die Prädiktion ausschließlich die Prüfsumme des Code-Segments entsprechend dem eingefügten AND-Funktionsbausteins berechnet wird, ohne dass hierbei auf bereits bekannte statische Unterprüfsummen entsprechend der statischen Code-Segmentanteile zurückgegriffen wird, so wird dieser Fehler insofern kompensiert, als dass die Prädiktion zum falschen Quelltext, das heißt der Quelltext mit dem falschen vom Nutzer nicht gewünschten Code-Segment, passt.
-
Da aber vorzugsweise bereits bei der Auswahl des OR-Funktionsbausteins vorgesehen wird, dass bei der Prädiktion bereits im Voraus berechnete und insbesondere geprüfte statische Unterprüfsummen, welche den statischen Code-Segmentanteilen des dem OR-Funktionsbaustein zugeordneten Code-Segments entsprechen, verwendet werden, so wird ein solcher Adressierungsfehler in vorteilhafter Weise bemerkt werden, da die berechnete Prüfsumme, welche auf dem falschen Quelltext basiert, nicht mit der prädizierten Prüfsumme, welche korrekterweise auf dem OR-Funktionsbaustein basiert, übereinstimmt.
-
In einer anderen Ausführungsform der Erfindung umfasst der Computer eine Editorschaltung zum Ausführen eines Editors, welcher eingerichtet ist, den Quelltext zu editieren. Der Editor ist vorzugsweise ein graphischer Editor. Die Editorschaltung ist vorzugsweise als eine integrierte Schaltung gebildet. Insbesondere ist die Editorschaltung in den Prozessor des Computers integriert. Die Grundfunktionalität eines graphischen Editors besteht insbesondere darin, dass für jeden graphisch darstellbaren Funktionsbaustein bzw. für jede Verbindung zwischen den Funktionsbausteinen der entsprechend Programmcode, das heißt das entsprechende Code-Segment, in den Quelltext eingefügt wird. Beispielsweise wird bei Verwendung der Programmiersprache C der entsprechende C-Code des Funktionsbausteins in die jeweilige C-Datei bzw. Header-Datei eingefügt. Hierbei kann das Prüfverfahren auch auf die Verbindungen zwischen den graphisch darstellbaren Funktionsbausteinen angewandt werden. Ein Editor im Sinne der vorliegenden Erfindung kann auch als ein Editor für sicherheitskritische Anwendungen bezeichnet werden.
-
Gemäß einer weiteren Ausführungsform der Erfindung sind die statischen Unterprüfsummen in dem Editor abgelegt. Der Editor kann bei der Prädiktion insofern auf diese abgelegten Unterprüfsummen zurückgreifen. Nach dem Vergleich der prädizierten Prüfsumme mit der berechneten Prüfsumme kann vorzugsweise vorgesehen sein, dass das Ergebnis dieses Vergleichs der Editorschaltung übermittelt wird, so dass im Editor angezeigt werden kann, ob der Quelltext mit dem eingefügten Code-Segment noch synchron zu dem im Editor angezeigten Quelltext ist. Ein Update der Prüfsummen, insbesondere eine Berechnung der prädizierten Prüfsumme und/oder der berechneten Prüfsumme wird vorzugsweise nach jeder Aktion des Nutzers durchgeführt.
-
Die Erfindung wird im Folgenden anhand von bevorzugten Ausführungsbeispielen unter Bezugnahme auf Figuren näher erläutert. Hierbei zeigen
- 1 ein Ablaufdiagramm einer Ausführungsform des Prüfverfahrens,
- 2 ein Ablaufdiagramm einer weiteren Ausführungsform des Prüfverfahrens,
- 3 einen Computer zur Ausführung des Prüfverfahrens,
- 4 einen weiteren Computer zur Ausführung des Prüfverfahrens,
- 5 ein Ablaufdiagramm einer Prädiktionsberechnung,
- 6 ein Ablaufdiagramm einer weiteren Prädiktionsberechnung,
- 7 eine Berechnung einer Code-Segmentprüfsumme,
- 8 eine Berechnung einer prädizierten Code-Segmentprüfsumme und eine Berechnung einer berechneten Code-Segmentprüfsumme und
- 9 eine andere Berechnung einer prädizierten Code-Segmentprüfsumme und eine Berechnung einer berechneten Code-Segmentprüfsumme.
-
1 zeigt ein Ablaufdiagramm eines Prüfverfahrens. In einem Schritt 101 wird ein Code-Segment in einen Quelltext eingefügt. In einem Schritt 103 wird dann eine prädizierte Prüfsumme basierend auf dem Quelltext ohne das eingefügte Code-Segment und auf dem eingefügten Code-Segment berechnet. In einem weiteren Schritt 105 wird dann eine berechnete Prüfsumme basierend auf dem Quelltext mit dem eingefügten Code-Segment berechnet. Die Schritte 103 und 105 können vorzugsweise auch zeitgleich oder zeitlich vertauscht ausgeführt werden. In einem folgenden Schritt 107 werden dann die berechnete Prüfsumme und die prädizierte Prüfsumme miteinander verglichen.
-
Wenn die beiden Prüfsummen übereinstimmen, so kann im Rahmen der Fehlererkennung davon ausgegangen werden, dass das Code-Segment korrekt eingefügt wurde. Wenn die beiden Prüfsummen hingegen nicht übereinstimmen, so kann im Rahmen einer Fehlertoleranz davon ausgegangen werden, dass das Code-Segment nicht korrekt eingefügt wurde.
-
2 zeigt ein Ablaufdiagramm einer weiteren Ausführungsform des Prüfverfahrens. In einem Schritt 201 wird ein Quelltext bereitgestellt. Der Quelltext kann bereits Code-Segmente umfassen. Der Quelltext kann aber auch leer sein, also keine Code-Segmente umfassen. In einem Schritt 203 wird dann ein Code-Segment in den Quelltext eingefügt. Es kann vorgesehen sein, dass das Code-Segment an das Ende des Quelltextes angefügt wird. Es kann vorgesehen sein, dass das Code-Segment in den Quelltext integriert bzw. eingefügt wird. Es kann auch vorgesehen sein, dass das Code-Segment vor dem Anfang des Quelltextes angefügt wird. Es erfolgt dann in einem Schritt 205 eine Berechnung einer prädizierten Prüfsumme 207, welche auf dem Quelltext für sich und dem eingefügten Code-Segment basiert. Zeitgleich oder vorher oder anschließend erfolgt in einem Schritt 209 eine Berechnung einer berechneten Prüfsumme 211, welche auf dem Quelltext mit dem eingefügten Code-Segment basiert.
-
Die beiden Prüfsummen 207 und 211 werden in einem Schritt 213 miteinander verglichen. Wenn hier festgestellt wird, dass die beiden Prüfsummen 207 und 211 miteinander übereinstimmen, wird in einem Schritt 215 der Quelltext mit dem eingefügten Code-Segment als Basis für weitere einzufügende Code-Segmente verwendet. Das Prüfverfahren geht insofern wieder zu Schritt 201 zurück.
-
Wenn im Schritt 213 aber festgestellt wird, dass die beiden Prüfsummen 207 und 211 nicht miteinander übereinstimmen, so wird im Schritt 215 der Quelltext ohne das eingefügte Code-Segment, das eingefügte Code-Segment wird insbesondere wieder aus dem Quelltext entfernt, als Basis für einzufügende Code-Segmente verwendet. Das Prüfverfahren geht insofern wieder zu Schritt 201 zurück. Es kann vorgesehen sein, dass im Schritt 213 eine Warnmeldung und/oder ein Warnsignal an einen Nutzer ausgegeben wird, so dass dieser darüber informiert wird, dass das von ihm gewünschte Code-Segment nicht korrekt in den Quelltext eingefügt wurde.
-
3 zeigt einen Computer 301 zur Ausführung des Prüfverfahrens. Das heißt insbesondere, dass der Computer 301 eingerichtet ist, das Prüfverfahren auszuführen. Der Computer 301 weist eine Vergleichsschaltung 303 auf. Die Vergleichsschaltung 303 vergleicht eine prädizierte Prüfsumme entsprechend einem Quelltext mit einem eingefügten Code-Segment mit einer berechneten Prüfsumme entsprechend dem Quelltext mit dem eingefügten Code-Segment. Vorzugsweise kann die Vergleichsschaltung 303 auch die Prüfsummen berechnen.
-
4 zeigt einen weiteren Computer 401 zur Ausführung des Prüfverfahrens. Auch der Computer 401 weist analog zum Computer 301 eine Vergleichsschaltung 403 zum Vergleichen einer prädizierten Prüfsumme entsprechend einem Quelltext mit einem eingefügten Code-Segment mit einer berechneten Prüfsumme entsprechend dem Quelltext mit dem eingefügten Code-Segment auf.
-
Ferner weist der Computer 401 eine Editorschaltung 405 zum Ausführen eines Editors auf, welcher eingerichtet ist, den Quelltext zu editieren. Der Editor ist vorzugsweise ein graphischer Editor. Das heißt, dass der Nutzer zum Editieren eines Quelltextes graphisch darstellbare Funktionsbausteine mittels Verbindungselementen miteinander verbindet. Den Funktionsbausteinen und den Verbindungselementen, welche auch als Verbindungen bezeichnet werden können, sind insofern Code-Segmente zugeordnet. Es kann vorgesehen sein, dass die Prüfsummen in der Editorschaltung 405 berechnet werden. Die Prüfsummen werden dann der Vergleichsschaltung 403 übergeben, welche das Ergebnis des Vergleichs an die Editorschaltung 405 zurückgibt. Es kann allgemein auch vorgesehen sein, dass die Vergleichsschaltung 403 auch die Prüfsummen selber berechnet. In einem nicht gezeigten Ausführungsbeispiel sind die Vergleichsschaltung 403 und die Editorschaltung 405 ineinander integriert. Das heißt, es ist eine Editorvergleichsschaltung gebildet, welche beide Funktionalitäten ausführen kann.
-
Obwohl nicht explizit erläutert, weisen die Computer 301 aus 3 und 401 aus 4 übliche Computerelemente wie beispielsweise einen oder mehrere Prozessoren, Festplatten, Verbindungsbusse, Speicherbausteine, Netzwerkkarten und weitere dem Fachmann bekannte Elemente auf. In einer nicht gezeigten Ausführungsform sind die Editorschaltung 405 und die Vergleichsschaltung 403 in dem oder die Prozessoren integriert. Der Prozessor oder die Prozessoren sind insbesondere eingerichtet, die Prüfsummen zu berechnen.
-
In einem nicht gezeigten Ausführungsbeispiel ist der Computer 301 aus 3 und/oder der Computer 401 aus 4 als ein Steuerungsrechner für eine Automatisierungsanlage gebildet.
-
5 zeigt ein Ablaufdiagramm einer Prädiktionsberechnung, wenn das Code-Segment an das Ende des Quelltextes eingefügt wird. In einem Schritt 501 wird die Prüfsumme des Quelltextes, in welchen das Code-Segment eingefügt werden soll, bereitgestellt. Diese Prüfsumme kann beispielsweise bereits aus einem vorherigen Durchlauf des Prüfverfahrens bekannt sein oder kann auch neu berechnet werden.
-
In einem Schritt 503 wird dann die prädizierte Prüfsumme des Quelltextes mit dem eingefügten Code-Segment berechnet, wobei hier diese Prüfsumme insbesondere basierend auf der in Schritt 501 bereitgestellten Prüfsumme des Quelltextes ohne das einzufügende Code-Segment und auf einer Code-Segmentprüfsumme 505 basierend auf dem einzufügenden Code-Segment gebildet wird. In die Berechnung der prädizierten Prüfsumme flie-ßen also insbesondere die Prüfsumme des Ausgangsquelltextes und die Prüfsumme des einzufügenden Code-Segments ein.
-
6 zeigt ein Ablaufdiagramm einer weiteren Prädiktionsberechnung, wenn das einzufügende Code-Segment direkt in den Quelltext integriert wird. Eine Position des einzufügenden Code-Segments ist also ungleich dem Ende des Quelltextes.
-
In einem Schritt 601 wird ein Quelltext 603 in einen oberen Quelltextteil 605 und einen unteren Quelltextteil 607 aufgespalten. Das einzufügende Code-Segment (nicht gezeigt) wird zwischen dem oberen Quelltextteil 605 und dem unteren Quelltextteil 607 eingefügt.
-
Es folgt dann in einem Schritt 609 eine Prüfsummenberechnung 611 für den oberen Quelltextteil 605 und eine weitere Prüfsummenberechnung 613 für den unteren Quelltextteil 607. Die berechnete Prüfsumme aus der Prüfsummenberechnung 611 kann als eine obere Teilprüfsumme 615 bezeichnet werden. Die berechnete Prüfsumme aus der Prüfsummenberechnung 613 kann als eine untere Teilprüfsumme 617 bezeichnet werden.
-
In einem Schritt 619 wird dann basierend auf der unteren Teilprüfsumme 617, der oberen Teilprüfsumme 619 und auf einer Code-Segmentprüfsumme 621 bezüglich des einzufügenden Code-Segments eine prädizierte Prüfsumme 623 entsprechend dem Quelltext 603 mit dem eingefügten Code-Segment berechnet. Die Code-Segmentprüfsumme 621 kann beispielsweise zeitgleich zum Schritt 609 berechnet werden. Sie kann aber insbesondere auch vor oder nach dem Schritt 609 berechnet werden.
-
Für die Berechnung der prädizierten Prüfsumme 623 kann insbesondere vorgesehen sein, dass zunächst eine Zwischenprüfsumme basierend auf der oberen Teilprüfsumme 615 und der Code-Segmentprüfsumme 621 gebildet wird. Das heißt insbesondere, dass die obere Teilprüfsumme 615 um die Code-Segmentprüfsumme 621 erweitert wird. Diese erweiterte obere Teilprüfsumme 615 wird dann insbesondere nochmals um die untere Teilprüfsumme 613 erweitert.
-
In einem nicht gezeigten Ausführungsbeispiel kann der Schritt 601, also das Aufspalten des Quelltextes 603, wiederholt werden, falls an mehreren Stellen des Quelltextes etwas geändert und/oder neu eingefügt werden muss.
-
Sollte bei der Aufteilung des Quelltextes 603 und/oder bei der anschließenden Berechnung der einzelnen Prüfsummen ein Fehler auftreten, so stimmt die aus der Prädiktion resultierende Prüfsumme nicht mit einer berechneten Prüfsumme basierend auf dem real vorliegenden Quelltext, also dem Quelltext mit dem eingefügten Code-Segment, wobei der real vorliegende Quelltext vorzugsweise auf der Festplatte abgespeichert wurde.
-
7 zeigt eine Berechnung einer Code-Segmentprüfsumme 701 basierend auf einem Code-Segment 703. Das Code-Segment 703 umfasst hier beispielsweise die Anweisung
-
Die soll aber nicht als einschränkend, sondern lediglich als exemplarisch betrachtet werden. Auch andere dem Fachmann bekannte Anweisungen bzw. Befehlsabfolgen aus den unterschiedlichsten Programmiersprachen können verwendet werden.
-
In einem Schritt 705 wird das Code-Segment 703 in statische Code-Segmentanteile 707a,b,c und in dynamische Code-Segmentanteile 709a,b aufgeteilt. Hierbei bilden „int“, „=“ und „;“ respektive statische Code-Segmentanteile 707a, 707b und 707c des Code-Segments 703. „varName“ und „5“ bilden respektive dynamische Code-Segmentanteile 709a und 709b des Code-Segments 703. Der Variablenname („varName“) und der Initalisierungswert („5“) können insofern von einem Nutzer bestimmt werden.
-
In einem weiteren Schritt 711 wird den statischen Code-Segmentanteilen 707a,b,c eine entsprechende statische Unterprüfsumme 713a,b,c zugeordnet, so dass die statischen Unterprüfsummen 713a,b,c nicht mehr neu berechnet werden müssen. Die statischen Unterprüfsummen 713a, 713b und 713c entsprechen respektive den statischen Code-Segmentanteilen 707a, 707b und 707c. Insbesondere kann allgemein vorgesehen sein, dass die statischen Unterprüfsummen und/oder die entsprechende Zuordnung zu den statischen Code-Segmentanteilen in einem Editor, vorzugsweise einem graphischen Editor, abgelegt sind. Die statischen Unterprüfsummen werden vorzugsweise in einem gesonderten Prüfsummenverfahren berechnet und auf Korrektheit überprüft, vorzugsweise werden die statischen Unterprüfsummen zertifiziert.
-
Im Schritt 711 werden weiterhin in Unterschritten 715a und 715b dynamische Unterprüfsummen 717a und 717b entsprechend respektive den dynamischen Code-Segmentanteilen 709a und 709b berechnet.
-
Es wird dann die Code-Segmentprüfsumme 701 basierend auf den statischen Unterprüfsummen 713a,b,c und den dynamischen Unterprüfsummen 717a,b berechnet.
-
8 zeigt eine Berechnung einer prädizierten Prüfsumme im Vergleich mit einer Berechnung einer berechneten Prüfsumme eines Code-Segments 801. Die Prüfsummenberechnung erfolgt mittels des Even-ParityBit-Verfahrens. Das Beispiel zeigt der Einfachheit halber das Einfügen des Code-Segments 801 in eine leere Quelltextdatei ohne Inhalt.
-
Das Code-Segment 801 umfasst statische Code-Segmentanteile 803a und 803b, welche respektive eine „int“- und eine „=“-Anweisung aufweisen. Ferner umfasst das Code-Segment 801 dynamische Code-Segmentanteile 805a und 805b, welche respektive eine „multiplicationValue“- und eine „8“-Anweisung aufweisen.
-
Die Code-Segmentanteile 803a, 803b, 805a und 805b werden respektive als Bitfolgen 807a, 807b, 809a und 809b beim Speichern auf einer Festplatte (nicht gezeigt) abgebildet. Die Bitfolgen können auch als Codeabschnitte bezeichnet werden.
-
Die Bitfolgen 807a und 807b zu den statischen Code-Segmentanteilen 803a und 803b sind bereits bekannt, da diese vom Nutzer nicht verändert werden können. Insofern liegend entsprechende statische Unterprüfsummen 811a und 811b bereits vor.
-
Die statische Unterprüfsumme 811a, bzw. im vorliegenden Fall das Even ParityBit, beträgt 0, da die Anzahl der Einsen in dem Codeabschnitt 807a 10 beträgt.
-
Die statische Unterprüfsumme 811b, bzw. im vorliegenden Fall das Even ParityBit, beträgt 1, da die Anzahl der Einsen in dem Codeabschnitt 807b 3 beträgt.
-
Die Bitfolgen 809a und 809b sind nicht im Voraus bekannt, weil diese vom Nutzer eingegeben werden. Hier muss also ein jeweiliges Even ParityBit 813a und 813b bzw. eine jeweilige dynamische Unterprüfsumme neu berechnet werden. Diese Berechnung erfolgt unabhängig von dem real auf der Festplatte abgespeicherten Code-Segment 801.
-
Die dynamische Unterprüfsumme 813a bzw. das Even ParityBit beträgt 1, da die Anzahl der Einsen in dem Codeabschnitt 809a 7 beträgt.
-
Die dynamische Unterprüfsumme 813b bzw. das Even ParityBit beträgt 1, da die Anzahl der Einsen in dem Codeabschnitt 809b 1 beträgt.
-
In einem Schritt 815 werden die vier Even ParityBits 811a, 811b, 813a und 813b für die Berechnung einer prädizierten Code-Segmentprüfsumme 817 verwendet. Das Ergebnis für die prädizierte Code-Segmentprüfsumme 817 beträgt 1:
-
In einem Schritt 819 wird basierend auf dem abgespeicherten Quelltext mit dem eingefügten Codesegment 801, also im vorliegenden Fall lediglich basierend auf dem abgespeicherten Codesegment 801, eine berechnete Prüfsumme 821, bzw. im vorliegenden Fall das Even ParityBit der abgespeicherten Codeabschnitte 807a, 807b, 809a und 809b berechnet. Da die Anzahl der Einsen in den Codeabschnitten 807a, 807b, 809a und 809b 21 beträgt, beträgt das Even ParityBit 1.
-
Die Code-Segmentprüfsumme 817 stimmt also mit der berechneten Prüfsumme 821 überein. Insofern wurde das vom Nutzer eingefügte Code-Segment 801 korrekt auf der Festplatte abgespeichert.
-
9 zeigt analog zu 8 eine Berechnung einer prädizierten Prüfsumme 917 im Vergleich mit einer Berechnung einer berechneten Prüfsumme des Code-Segments 801. Es werden daher teilweise für gleiche Merkmale die gleichen Bezugszeichen verwendet. Die Prüfsummenberechnung erfolgt mittels des CRC-Prüfsummenverfahrens. Das Beispiel zeigt der Einfachheit halber das Einfügen des Code-Segments 801 in eine leere Quelltextdatei ohne Inhalt.
-
Ein Generatorpolynom 901 für das CRC-Prüfsummenverfahren beträgt:
-
An dieser Stelle wird angemerkt, dass im Folgenden nicht jeder einzelne Schritt des CRC-Prüfsummenverfahrens skizziert wird. Das CRC-Prüfsummenverfahren ist dem Fachmann als solches bekannt. Auch können in anderen nicht gezeigten Ausführungsbeispielen andere Generatorpolynome verwendet werden.
-
Die Code-Segmentanteile 803a, 803b, 805a und 805b werden respektive als Bitfolgen 907a, 907b, 909a und 909b beim Speichern auf einer Festplatte (nicht gezeigt) abgebildet. Die Bitfolgen können auch als Codeabschnitte bezeichnet werden.
-
Die Bitfolgen 907a und 907b zu den statischen Code-Segmentanteilen 803a und 803b sind bereits bekannt, da diese vom Nutzer nicht verändert werden können. Insofern liegen entsprechende statische Unterprüfsummen 911a und 911b bereits vor.
-
Die statische Unterprüfsumme 911a, bzw. im vorliegenden Fall die Frame Check Sequence (FCS), auf Deutsch auch Kontrollsumme genannt, beträgt 110.
-
Die statische Unterprüfsumme 911b, bzw. im vorliegenden Fall die FCS beträgt 111.
-
Die Bitfolgen 909a und 909b sind nicht im Voraus bekannt, weil diese vom Nutzer eingegeben werden. Hier muss also eine jeweilige FCS 913a und 913b bzw. eine jeweilige dynamische Unterprüfsumme neu berechnet werden. Diese Berechnung erfolgt unabhängig von dem real auf der Festplatte abgespeicherten Code-Segment 801.
-
Die dynamische Unterprüfsumme bzw. FCS 913a beträgt 110.
-
Die dynamische Unterprüfsumme bzw. FCS 913b beträgt 110.
-
In einem Schritt 915 werden die vier FCS 911a, 911b, 913a und 913b für die Berechnung einer prädizierten Code-Segmentprüfsumme 917 verwendet. Hierbei wird zunächst eine erste prädizierte Zwischenprüfsumme 919 basierend auf den FCS 911a und 913a berechnet. Die erste prädizierte Zwischenprüfsumme 919 und die FCS 911b werden dann verwendet, um eine zweite prädizierte Zwischenprüfsumme 921 zu berechnen. Analog wird die zweite prädizierte Zwischenprüfsumme 921 und die FCS 913b verwendet, um die prädizierte Prüfsumme 917 des Code-Segments 801 entsprechend dem CRC-Prüfsummenverfahren zu berechnen.
-
Die Berechnungen der ersten prädizierten Zwischenprüfsumme 919, der zweiten prädizierten Zwischenprüfsumme 921 und der prädizierten Prüfsumme 917 erfolgen unabhängig von dem real auf der Festplatte abgespeicherten Code-Segment 801. Die prädizierten Zwischenprüfsummen 919 und 921 können auch als CRC-Zwischenprüfsummen bezeichnet werden.
-
In einem Schritt 923 wird basierend auf dem abgespeicherten Quelltext mit dem eingefügten Codesegment 801, also im vorliegenden Fall lediglich basierend auf dem abgespeicherten Codesegment 801, eine erste berechnete Zwischenprüfsumme 925 basierend auf den abgespeicherten Bitfolgen 907a und 909a berechnet. Die erste berechnete Zwischenprüfsumme 925 wird mit der ersten prädizierten CRC-Zwischenprüfsumme 919 in einem Schritt 927 verglichen.
-
Im vorliegenden Fall stimmt die erste prädizierte CRC-Zwischenprüfsumme 919 mit der ersten berechneten Zwischenprüfsumme 925 überein. Insofern wurden die Code-Segmentanteile 803a und 805a korrekt auf der Festplatte abgespeichert.
-
Analog und hier der Übersicht halber nicht gezeigt, wird im Schritt 923 oder anschließend eine zweite berechnete Zwischensumme basierend auf der ersten berechneten Zwischensumme 925 und dem abgespeicherten Code-Segmentanteil 907b berechnet und mit der zweiten prädizierten CRC-Zwischensumme 921 verglichen. Entsprechend wird dann eine dritte berechnete Zwischensumme basierend auf der zweiten berechneten Zwischensumme gebildet und mit der prädizierten Prüfungssumme 917 verglichen.
-
Die entsprechenden Ergebnisse stimmen überein, so dass das Code-Segment 801 korrekt auf der Festplatte abgespeichert wurde.
-
In einem nicht gezeigten Ausführungsbeispiel werden die jeweiligen Prüfsummen an eine Editorschaltung übermittelt, so dass ein entsprechender Editor, insbesondere ein graphischer Editor, diese Prüfsummen einem Nutzer anzeigen kann. Der Nutzer erhält somit in vorteilhafter Weise eine Information darüber, ob die von ihm ausgewählten Code-Segmente und/oder Verbindungen korrekt in einen Quelltext eingefügt wurden und insbesondere korrekt auf der Festplatte abgespeichert wurden.
-
Vorzugsweise wird ein Update der Prüfsummen nach jeder Aktion des Nutzers durchgeführt.
-
Zusammenfassend stellt die Erfindung ein Prüfverfahren, einen Computer und ein Computerprogrammprodukt bereit, welche insbesondere eine Kopplung von Code-Segmenten zu einer graphischen Oberfläche derart ermöglichen, dass sichergestellt werden kann, dass ein ausgewählter Funktionsbaustein und/oder eine ausgewählte Verbindung auch korrekt im entsprechenden Quelltext abgebildet wird. Hierbei liegen insbesondere die statischen Unterprüfsummen der statischen Code-Segmentanteile bereits im Editor vor. Das heißt insbesondere, dass der Editor auf diese statischen Unterprüfsummen zurückgreifen kann. Beispielsweise können die statischen Unterprüfsummen in dem Editor selber integriert sein. Die statischen Unterprüfsummen können beispielsweise auch auf einem zentralen Server gespeichert sein, auf welchen der Editor über ein Netzwerk zugreifen kann.
-
Die erfindungsgemäßen Gegenstände können insbesondere bei der Programmierung und Herstellung von sicherheitskritischen Anwendungen im Industriebereich verwendet werden. Entsprechende industrielle Maschinen können so sicher und zuverlässig betrieben werden.