Anbieter zum Thema
Durch Diversität verringert sich die Wahrscheinlichkeit von Fehlern auf Grund gemeinsamer Ursache. Wenn Routinen redundant ausgeführt werden, und der Code nur kopiert wurde, werden Entwurfsfehler nicht erkannt. Ist dagegen keine Diversität möglich, muss die Funktion wesentlich aufwändiger getestet werden, um Restfehler weiter zu minimieren.
Sehr wirksam sind auch Ablaufprüfungen der kritischen Funktionsaufrufe und intelligente Watchdogs zur Überwachung des logischen und zeitlichen Programmablaufs.
Warum sind Programmierkonventionen so wichtig, speziell in C?
Warum sind Programmierkonventionen so wichtig, speziell in C?
Programmierkonventionen dienen der Standardisierung von Struktur und Programmierstil und fördern Lesbarkeit und Verständlichkeit. Dadurch ergibt sich bessere Wartbarkeit, Erweiterbarkeit und Wiederverwendbarkeit der Software. Insbesondere in C kann mit dem hardwarenahen Sprachumfang viel gemacht werden, was automatische statische Programmprüfungen während der Entwicklung be- oder verhindert.
So können Zeiger ohne weiteres auf Daten- oder Funktionstypen weisen, die von der ursprünglichen Deklaration abweichen. Damit kann während des Compiler- oder Linkerlaufs ein solcher Fehler (oder die Ursache eines möglichen Fehlers) nicht erkannt werden.
Weiterhin hat C Spezifikationsmängel in den oft verwendeten Standard-Bibliotheken und in der Sprache selber. Nicht wenige Programmierer haben sich mit Bitfeldern, Gleitkommazahlen oder einfach nur dem Integrer- Datentyp auseinandergesetzt, insbesondere bei Übernahme von Code von anderen Plattformen. So ist der Integer in der C166 und 8051 Welt 16-Bit breit, in der aktuellen ARM- Umgebung 32-Bit.
Erfahrene Profis kennen die Klippen von C und stehen Konventionen, insbesondere der recht restriktiven MISRA, eher skeptisch gegenüber. Verständlicherweise, weil die Einschränkungen durch MISRA weitreichend sind. Aus unserer Erfahrung sind die meisten Embedded-Programmierer jedoch eher Ingenieure, die in „Teilzeit“ programmieren und sich die Sprache C oft selbst erarbeitet haben.
Aus dieser Sicht machen diese Konventionen dann doch viel Sinn, einfach zur vorbeugenden Fehlervermeidung. Auch wenn der Profi sich eingeschränkt fühlt, können die häufigsten Programmierfehler in C dadurch vermieden werden.
Wie kann die Struktur von Software verbessert werden?
Wie kann die Struktur von Software verbessert werden?
Zunächst einmal muss eine Struktur vorhanden und beschrieben sein. Dabei sind mindestens die Schlagworte „Schichtenmodell“, geringe Schachtelungstiefe, wenige Interrupts, wenige Prioritätsebenen und hierarchische Gliederung zu beachten. Diese Zusammenhänge lassen sich in einer „Softwarearchitektur“ einbringen, die auch das Verhalten im Zusammenspiel der Komponenten mindestens für die geforderten Sicherheitsfunktionen beschreibt.
Die Aufteilung in Module und/oder Klassen nach Funktionalität und Lage im Schichtenmodell erleichtern die Verstehbarkeit der Gesamtstruktur. Die Schnittstellen zwischen Modulen sollten möglichst einfach sein und ebenfalls beschrieben werden.
Um die Struktur einer Software zu verbessern, können diverse Methoden angewandt werden. Die Entkopplung von Funktionen, Daten und zeitlichen Zusammenhängen z. B. durch Kapselung von Funktionen und Daten, Nachrichten und FIFO-Prinzipien bringt oft eine wesentliche Verbesserung. Hauptproblem dabei ist, diese Strukturen gegen die „Alterung“ des Programms zu verteidigen. (Zu) schnelle Fehlerkorrekturen, Änderungen und Erweiterungen von verschiedenen Entwicklern können die ehemals gute Struktur beschädigen oder verwässern. Auch hierauf geht die IEC 61508 im Rahmen von Modifikationen ein.
Wir danken für das Gespräch.
(ID:320645)