Der Blätterkatalog benötigt Javascript.
Bitte aktivieren Sie Javascript in Ihren Browser-Einstellungen.
The Blätterkatalog requires Javascript.
Please activate Javascript in your browser settings.
25 2021 Elektronik 13 EmbEddEd TEchnology jeweils nur einen Teil der vorhandenen Fehler auf Größte Fehlerfreiheit kann erst im Zusammenspiel von statischer und dynamischer Analyse erreicht werden Einsatz statischer Analysetools früh im Entwicklungszyklus Muss bei der dynamischen Analyse der Code ausgeführt werden so ist dies bei der statischen Analyse nicht der Fall Daher können statische Analysetools schon früh im Entwicklungsprozess in der Implementierungsphase genutzt werden und tragen deshalb massiv zum Projekterfolg bei – denn je früher ge testet wird desto günstiger ist die Fehlerbehebung Statische Codeanalysetools überprüfen den Code auf Syntax Semantik Kontrollflussund Datenflussanomalien Nebenläufigkeitsprobleme und Einhaltung von Codier-Richtlinien Standards Ohne das Schreiben von Testfällen wird eine Vielzahl an Bugs und sicherheitsgefährdender Schwachstellen frühzeitig aufgedeckt Idealerweise wird der Code bereits vom Beginn der Entwicklung an regelmäßig – am besten bereits durch den einzelnen Entwickler vor dem Einchecken und dann mit zunehmender Integration von Modulen – statisch analysiert Hierbei ist es sinnvoll den Code erst dann einem weiteren Verifikationsschritt wie Code-Reviews Unit-Tests oder Integrationstests zuzuführen wenn die statische Codeanalyse keine Fehler mehr anzeigt Bei diesem Vorgehen kann die Anzahl der Fehlermeldungen bei der Abschlussprüfung vor Auslieferung entscheidend reduziert werden Der Einsatz von statischen Analysetools ist vor allem bei der Entwicklung von Steuerungsund Embedded-Systemen sehr sinnvoll Da hier oft sehr hardwarenah programmiert wird kommen Sprachen wie Cund C++ zum Einsatz die den Entwicklern viele Freiheiten geben – leider auch beim Schreiben von fehlerhaftem Quellcode So fügt ein C C++-Compiler keinen Code ein der testet ob angeforderter Speicher auch zugeteilt wurde oder eine zu kopierende Zeichenkette in das Zielarray passt Dies passiert beispielsweise im folgenden Programm in welchem mit der Funktion » malloc « durch das Betriebssystem Speicher angefordert wird int hallofehlerwelt { char *p p char * malloc 20 strcpy p “Hallo Fehlerwelt“ printf “%s n“ p } Der Fehler liegt hier darin dass davon ausgegangen wird dass die 20 angeforderten Bytes auch bereitgestellt wurden und der Zeiger » p « auf ein Feld mit zwanzig Zeichen zeigt Schlug die Speicheranforderung fehl schreibt die String-Copy-Funktion » strcpy « in die Speicherstelle 0 was in der Regel zum Programmabsturz führt weil jedes moderne Betriebssystem diese Speicherstelle schützt Die Funktion » strcpy « prüft nicht ob an der Stelle p genügend Platz für den String vorhanden ist den es dann kopiert Fügt man also noch ein »schöne« zwischen »hallo« und »fehlerwelt« ein schreibt strcpy mehr als zwanzig Zeichen in den Speicher und damit in Bereiche die andere Daten oder Programmcode enthalten können Das Resultat ist ein Speicherüberlauf Buffer-Overflow Die Verwendung globaler Variablen kann ebenfalls fehlerträchtig sein weil Bild 1 Messung der Testabdeckung MC DC mit dem Code Coverage Analyser Testwell CTC++ Compiler nicht prüfen ob auf eine globale Variable lesend zugegriffen wurde bevor sie initialisiert wurde Zudem lassen sich Variablen-Typen in Cund C++ relativ leicht verändern was zu impliziten Wertveränderungen führen kann Die korrekte Vorgehensweise zu prüfen wird umso schwieriger wenn viele Entwickler an unterschiedlichen Modulen gleichzeitig arbeiten die voneinander abhängig sind und niemand mehr alle Programmentwicklungen im Blick hat Solche Fehler können durch die statische Codeanalyse vermieden werden Sie erledigt die Arbeit die sich gängige Compiler sparen und erzeugt bei einem Analyselauf Abbilder der komplexen Abläufe und Datenzugriffe Das Werkzeug für die statische Analyse durchläuft den Source-Code wie ein Compiler erzeugt aber statt Code ein Analyseabbild das vom Tool umfangreich ausgewertet wird Besonders fortschrittlich ist hierfür das Werkzeug CodeSonar von Gramma-Tech CodeSonar erstellt aufgrund des Quellcodes Modelle der Datenströme und Zugriffe analysiert diese und listet alle potenziellen Schwachstellen auf Es wird angezeigt wo Funktionen und globale Variablen verwendet werden Über eine grafische Ausgabe sind die Zusammenhänge leicht erkennbar Jedes einzelne Problem wird mit Bild Ver ify so ft