| Programmausführung |
|---|
| Allgemeine Konzepte |
| Codearten |
| Kompilierungsstrategien |
| Bemerkenswerte Laufzeiten |
|
| Bemerkenswerte Compiler und Toolchains |
|
Die dynamische Programmanalyse ist die Analyse von Software , die die Ausführung eines Programms beinhaltet – im Gegensatz zur statischen Programmanalyse , bei der das Programm nicht ausgeführt wird.
Die Analyse kann sich auf verschiedene Aspekte der Software konzentrieren, darunter unter anderem: Verhalten , Testabdeckung , Leistung und Sicherheit .
Um effektiv zu sein, muss das Zielprogramm mit ausreichend vielen Testeingaben [ 1 ] ausgeführt werden , um alle möglichen Eingabe- und Ausgabebereiche abzudecken. Softwaretestverfahren wie die Codeabdeckung und Werkzeuge wie Mutationstests werden eingesetzt, um Schwachstellen im Test zu identifizieren.
Typen
Funktionstests
Funktionale Tests umfassen relativ gängige Programmiertechniken wie Unit-Tests , Integrationstests und Systemtests . [ 2 ]
Codeabdeckung
Die Berechnung der Testcodeabdeckung identifiziert Code, der nicht getestet wird.
Diese Analyse identifiziert zwar ungetesteten Code, sagt aber nichts darüber aus, ob der getestete Code ausreichend getestet wurde. Code kann auch dann ausgeführt werden, wenn die Tests das korrekte Verhalten nicht bestätigen.
- Gcov ist das GNU- Quellcodeabdeckungsprogramm.
- VB Watch fügt dynamischen Analysecode in Visual Basic-Programme ein, um die Codeabdeckung , den Aufrufstapel, die Ausführungsverfolgung, instanziierte Objekte und Variablen zu überwachen.
Dynamisches Testen
Dynamisches Testen beinhaltet die Ausführung eines Programms anhand einer Reihe von Testfällen.
Speicherfehlererkennung
- AddressSanitizer : Speicherfehlererkennung für Linux, macOS , Windows und mehr. Teil von LLVM .
- BoundsChecker : Speicherfehlererkennung für Windows-basierte Anwendungen. Teil von Micro Focus DevPartner .
- Dmalloc : Bibliothek zur Überprüfung der Speicherbelegung und auf Speicherlecks. Die Software muss neu kompiliert werden, und alle Dateien müssen die spezielle C-Headerdatei dmalloc.h einbinden.
- Intel Inspector : Dynamischer Speicherfehler-Debugger für C-, C++- und Fortran-Anwendungen, die unter Windows und Linux laufen .
- Purify : Hauptsächlich Erkennung von Speicherbeschädigungen und Speicherlecks.
- Valgrind : Führt Programme auf einem virtuellen Prozessor aus und kann Speicherfehler (z. B. falsche Verwendung von malloc und free ) sowie Race Conditions in Multithread -Programmen erkennen.
Fuzzing
Fuzzing ist eine Testmethode, bei der ein Programm mit einer Vielzahl von Eingaben ausgeführt wird; diese Eingaben werden häufig (zumindest teilweise) zufällig generiert. Gray-Box-Fuzzer nutzen die Codeabdeckung, um die Eingabegenerierung zu steuern.
Dynamische symbolische Ausführung
Die dynamische symbolische Ausführung (auch bekannt als DSE oder Concolic Execution) beinhaltet die Ausführung eines Testprogramms mit einer konkreten Eingabe, das Sammeln der mit der Ausführung verbundenen Pfadbeschränkungen und die Verwendung eines Constraint-Solvers (im Allgemeinen eines SMT-Solvers ), um neue Eingaben zu generieren, die das Programm dazu veranlassen würden, einen anderen Kontrollflusspfad einzuschlagen, wodurch die Codeabdeckung der Testsuite erhöht wird. [ 3 ] DSE kann als eine Art von Fuzzing („White-Box-Fuzzing“) betrachtet werden.
Dynamische Datenflussanalyse
Die dynamische Datenflussanalyse verfolgt den Informationsfluss von Quellen zu Senken . Formen der dynamischen Datenflussanalyse sind unter anderem die dynamische Taint-Analyse und sogar die dynamische symbolische Ausführung . [ 4 ] [ 5 ]
Invariante Inferenz
Daikon ist eine Implementierung der dynamischen Invariantenerkennung. Daikon führt ein Programm aus, beobachtet die vom Programm berechneten Werte und meldet anschließend Eigenschaften, die während der beobachteten Ausführungen zutrafen und daher wahrscheinlich auch für alle Ausführungen gelten.
Sicherheitsanalyse
Die dynamische Analyse kann zur Erkennung von Sicherheitsproblemen eingesetzt werden.
- IBM Rational AppScan ist eine Suite von Anwendungssicherheitslösungen für verschiedene Phasen des Entwicklungszyklus. Die Suite umfasst zwei Hauptprodukte für die dynamische Analyse: IBM Rational AppScan Standard Edition und IBM Rational AppScan Enterprise Edition. Zusätzlich beinhaltet sie IBM Rational AppScan Source Edition – ein Tool für die statische Analyse.
Parallelitätsfehler
- Parasoft Jtest nutzt Laufzeitfehlererkennung, um Fehler wie Race Conditions , Ausnahmen, Ressourcen- und Speicherlecks sowie Sicherheitslücken aufzudecken.
- Intel Inspector führt Laufzeit-Threading- und Speicherfehleranalysen unter Windows durch.
- Parasoft Insure++ ist ein Tool zur Laufzeit-Speicheranalyse und Fehlererkennung. Die Komponente Inuse bietet eine grafische Darstellung der Speicherbelegung im Zeitverlauf mit detaillierter Übersicht über die gesamte Heap-Nutzung, Blockbelegungen, mögliche Speicherlecks usw.
- Googles Thread Sanitizer ist ein Tool zur Erkennung von Datenkonflikten. Es instrumentiert LLVM IR, um potenziell gefährliche Speicherzugriffe zu erfassen.
Programmslicing
Beim Programmslicing wird ein Programm für eine bestimmte Teilmenge des Programmverhaltens auf die minimale Form reduziert, die das gewünschte Verhalten noch erzeugt. Das reduzierte Programm wird als „Slice“ bezeichnet und repräsentiert das ursprüngliche Programm innerhalb des Bereichs der spezifizierten Verhaltensteilmenge getreu. Im Allgemeinen ist die Bestimmung eines Slices ein unlösbares Problem. Durch die Spezifizierung der Zielverhaltensteilmenge anhand der Werte einer Variablenmenge lassen sich jedoch mithilfe eines Datenflussalgorithmus approximative Slices ermitteln. Diese Slices werden üblicherweise von Entwicklern beim Debuggen verwendet, um die Fehlerquelle zu finden.
Leistungsanalyse
Die meisten Tools zur Leistungsanalyse nutzen dynamische Programmanalysetechniken.
Techniken
Die meisten dynamischen Analysen beinhalten Instrumentierung oder Transformation.
Da die Instrumentierung die Laufzeitleistung beeinflussen kann, muss dies bei der Interpretation der Testergebnisse berücksichtigt werden, um eine Fehlidentifizierung eines Leistungsproblems zu vermeiden.
Beispiele
DynInst ist eine Laufzeit-Code-Patching-Bibliothek, die sich für die Entwicklung dynamischer Programmanalyse-Sonden und deren Anwendung auf kompilierte ausführbare Dateien eignet. DynInst benötigt im Allgemeinen weder Quellcode noch eine Neukompilation; allerdings lassen sich nicht-gestrippte ausführbare Dateien und solche mit Debugging-Symbolen leichter instrumentieren.
Iroh.js ist eine Laufzeit-Codeanalysebibliothek für JavaScript . Sie verfolgt den Ausführungspfad des Codes, stellt Laufzeit-Listener zur Erkennung bestimmter ausgeführter Codemuster bereit und ermöglicht das Abfangen und Manipulieren des Ausführungsverhaltens des Programms.
Siehe auch
- Abstrakte Interpretation
- Daikon
- Dynamische Lasttests
- Profiling (Computerprogrammierung)
- Laufzeitüberprüfung
- Programmanalyse (Informatik)
- Statische Codeanalyse
- Zeitaufteilungstest
Referenzen
- ^ Khatiwada, Saket; Tushev, Miroslav; Mahmoud, Anas (2018-01-01). „Just enough semantics: An information theoretic approach for IR-based software bug localization“ . Information and Software Technology . 93 : 45–57 . doi : 10.1016/j.infsof.2017.08.012 .
- ^ Myers, GJ (1979). Die Kunst des Softwaretestens . John Wiley and Sons.
- ^ Chen, Ting; Zhang, Xiao-song; Guo, Shi-ze; Li, Hong-yuan; Wu, Yue (1. September 2013). „Stand der Technik: Dynamische symbolische Ausführung für die automatisierte Testgenerierung“ . Future Generation Computer Systems . Mit den Sonderteilen: Cyber-enabled Distributed Computing for Ubiquitous Cloud and Network Services & Cloud Computing and Scientific Applications — Big Data, Scalable Analytics, and Beyond. 29 (7): 1758–1773 . doi : 10.1016/j.future.2012.02.006 . ISSN 0167-739X .
- ^ Chen, Ju; Han, Wookhyun; Yin, Mingjun; Zeng, Haochen; Song, Chengyu; Lee, Byoungyoung; Yin, Heng; Shin, Insik (2022). {SYMSAN}: Zeit- und speichereffiziente Concolic Execution durch dynamische Datenflussanalyse . S. 2531–2548 . ISBN 978-1-939133-31-1Die
- ^ Chang, Walter; Streiff, Brandon; Lin, Calvin (27.10.2008). „Effiziente und erweiterbare Sicherheitsdurchsetzung mittels dynamischer Datenflussanalyse“ . Proceedings der 15. ACM-Konferenz über Computer- und Kommunikationssicherheit . CCS '08. New York, NY, USA: Association for Computing Machinery. S. 39–50 . doi : 10.1145/1455770.1455778 . ISBN 978-1-59593-810-7. S2CID 6888893 .