Automatisierte SowareEntwicklung
Statische / Dynamische CodeAnalysen
Linter
Debugging
GrundIdee
Untersuchung des QUellCodes in Hinblick auf Eigenschaften wie Korrektheit, Robustheit, Sicherheit und Leistung
Korrektheit
Dynamische CodeAnalyse
Analyse des Programms während der Laufzeit Beispiele : Debugger, Profiler
Prinzipien : Laufzeitüberwachung Instrumentierung : Hinzufügen von Code zur Überwachung zur Laufzeit
Statische Analyse
Analyse des Codes ohne dessen Ausführung Beispiele : Linter, Sicherheits-Scanner,
Prinzipien :
Überprüfung des QuellCodes ohne dessen Ausführung
Vor und Nachteile der Dynamischen CodeAnalyse
Was ist Dynamische CodeAnalyse ?
→ Analyse des Codes, mit dessen Ausführung Auch genannt DAST - Dynamic Application SECURITY Testing
Hauptziele der Dynamischen CodeAnalyse
→ Untersuchung einer Ausgeführten Anwendung auf potentielle Schwachstellen → Schädliches Verhalten kann gekennzeichnet werden
Findet Memmory LEaks, Performance Bottle NEcks
Vorteile
Kann MEmmory LEaks und NullPointer Exceptions finden
Nachteile
Qualität der Analyse hängt von den Tests ab → schlechte Tests, schlechte Ananlyse
Schwer bei nicht-deterministischen Verhalten : Zufall ist schwer zu reproduzieren
public class DynamicAnalysisExample {
public static void main(String[] args) {
String[] names = {"Anna", null, "Ben"};
for (String name : names) {
// Laufzeitfehler: name.toUpperCase() wirft NullPointerException bei null
System.out.println("Name in Großbuchstaben: " + name.toUpperCase());
}
}JKOKO - OpenSource Code Coverage Tool Java ByteCode vor MEssung verändert JVM - Java Agent instrumentiert Maven Support Tool stellt Report Zusammen Goals : checks setzen, sonst failed der build
Vor und Nachteile einer Statischen Codeanalyse
Was ist statische Codeanalyse ?
→ Wird bei Übersetzung durchgeführt → QuellText wird einer Reihe von definierten Tests unterzogen
Hauptziele statische Codeanalyse
-
Früherkennung von Fehlern
-
Einhaltung von Standards
-
Verbesserung der CodeQualität
-
Sicherheitslücken zu vermeiden
- SQL Injections
Vorteile der statischen CodeAnalyse
Keine Ausführung Benötigt Integrierbar into Workflows Frühe ERkennung von Fehlern Spart Kosten und Zeit Vermeiden Redundanzen, unused variables, etc.
Auch gut beim unvollständigen Code
Nachteile
False Positives - falsche Meldungen nur syntaktische und strukturelle Probleme Probleme können übersehen werden → dynamisch erzeugter COde ?
Ein ” Problem ” kann eventuell bewusst so programmiert sein
def berechne(x):
if x == 0:
return 0
return x * 2→ kein else fall Nötig, Toll Könnte melden dass das else nciht präsent ist →
” unvollständige Logik ”
Code Conventions ändern sich → nicht immer aktuell
KonfigurationsIntensiv
Speicherfehler, Semantische Fehler, Coding COnventions, StilRegeln, Schwer Erkennbar : Zugriffs Probleme, DEADLOCKS, Laufzeit-Probleme API Zuzgriffe können schwer sein
API : Kontext-Wissen Fehlt oftmals Prettier : Code Formatierung Sona, Embold (MVC Model) JetBrains IDE Static analysis SQL Schnittstellen Linter : NAch vordefinierten Regeln geschrieben