Nennen Sie andere Methoden für Software-Qualität?
(KlausuerFrage)
Nennen Sie andere Methoden für Software-Qualität?
(KlausuerFrage)
Was ist das Fuzzing?
mit vor&nach Teile
Fuzzing
Erzeugen zufälliger Eingaben, um Abstürze und Fehler auszulösen
• + Findet Fehler, die traditionelle Tests nicht finden
• - Kann die Abwesenheit von Fehlern auch nicht beweisen
Was ist das Formale Verifikation?
mit vor&nach Teile
Formale Verifikation
Experten schreiben mathematisch fundierte Beweise
• + Kann die Abwesenheit (bestimmter) Fehler mit Sicherheit beweisen
• - Enorm zeitaufwendig
• - Spezifisch für ein bestimmtes Programm
• - Oft schwer, die richtige zu beweisende Eigenschaft zu finden
Was ist das Dynamische Analyse?
mit vor&nach Teile
Dynamische Analyse
Daten während Ausführung sammeln und analysieren,
um Informationen zu gewinnen
• Typischerweise mit ausgewählten Programmeingaben (ähnlich zu Tests)
• + "Reale" Ausführungen
• - Begrenzte Anzahl an Ausführungen
• - Wie Programmeingaben auswählen?
Was ist das Monitoring?
mit vor&nach Teile
Monitoring
Daten während tatsächlichem Software-Einsatz sammeln,
kontinuierlich auf Abweichungen beobachten
• + Reale Ausführung
• + Findet relevante Probleme
• - Probleme werden erst gefunden, wenn sie die Nutzung schon beeinflussen
Was ist statische Analyse?
statische Analyse
Infos über Programm (Quelltext/Binary) gewinnen, ohne es auszuführen
• + Vollständig automatisiert
• + Starke Garantien
• + Alle möglichen Ausführungspfade
• - Unentscheidbar
• - Kann keine nutzerdefinierten Eigenschaften beweisen
Erzählen Sie Beispiels In IDEs zur Unterstützung von Entwicklern?
In IDEs zur Unterstützung von Entwicklern
• Klassenhierarchie, Methodenaufruf-Informationen, Code-Navigation.
• Fehler, Warnungen, Code Smells, Vorschläge für Optimierungen.
• Refactoring, z.B. Umbenennen, Ändern von Methodensignaturen, Code verschieben.
• Vorschläge während des Programmierens, Auto-Complete.
statische Analyse Verwendung In Sicherheitsanalysen
In Sicherheitsanalysen
• Finden von Fehlern, Schwachstellen, schwacher Kryptographie, falscher Verwendung von APIs
• Identifikation von Schadsoftware
• Erkennen von Leaks privater Daten
Was sind die Herausforderungen Statische Analyse:
Was sind die Eigenschaft des Unentscheidbarkeit?
Unentscheidbarkeit
“Jede nicht-triviale Eigenschaft von Programmen ist unentscheidbar”
Unentscheidbare Eigenschaften:
• Terminiert das Programm? (Halteproblem)
• Können zwei Pointer auf dieselbe Speicherstelle zeigen (Alias)
• ... (prinzipiell jede interessante Eigenschaft von Programmen)
Was sind die Möglichkeiten des Unentscheidbarkeit?
Möglichkeiten:
• Keine Ausgabe einer definitiven Antwort
• Überapproximation
• Unterapproximation
Erklären Sie Vollständigkeit (Completeness)?
Vollständigkeit (Completeness)
Keine zur Laufzeit unmöglichen Ergebnisse produzieren
⇒ Keine Überapproximation
• Maß: Genauigkeit (precision) = #Richtig−positive / #Ergebnisse =
• Weniger falsch-positive Ergebnisse
⇒ weniger ungerechtfertigte Warnungen
Erklären Sie Korrektheit (Soundness)?
Korrektheit (Soundness)
Aller zur Laufzeit möglichen Ergebnisse produzieren
⇒ Keine Unterapproximation
• Maß: Trefferquote (recall) = #Richtig−positive / #erwartete Ergebnisse
• Weniger falsch-negative Ergebnisse
⇒ weniger übersehene Probleme
• Vollständige Korrektheit in der Praxis
oft nicht erreichbar:
◦ z.B. dynamisch geladener Code, Reflection
• Soundiness: Bewusste, dokumentierte inkorrekte Design Entscheidungen für Praxistauglichkeit
Erklären Sie Skalierbarkeit ?
Skalierbarkeit
Ergebnisse für große Software in beschränkter Zeit/Speicher produzieren
• Schnelle Ergebnisse in IDEs (unter einer Sekunde)
• Akzeptable Laufzeit/Speicherverbrauch in Continuous Integration
• Analyse von riesigen Software-Verzeichnissen (z.B. Maven Central)
Genauigkeit, Trefferquote und Skalierbarkeit sind Anforderungen,
die oft im Konflikt miteinander stehen
Was sind Analysetypen
Kontrollfluss beschreibt Reihenfolge in der Anweisungen ausgeführt werden:
• Welche Anweisung kann nach welcher ausgeführt werden
Datenflussanalysen verfolgen den Fluss von Werten durch ein Programm:
• Wo wird ein hier definierter Wert genutzt
• Wo wurde ein hier genutzter Wert definiert
Nennen und erklären die Eigenschaften statischer Analysen
◦ Intraprozedurale Analysen betrachten jede Methode für sich
◦ Interprozedurale Analysen berücksichtigen das gesamte Programm
◦ Flussinsensitive Analysen berechnen ein global gültiges Ergebnis
◦ Flusssensitive Analysen berechnen ein Ergebnis für jede Anweisung
◦ Kontextinsensitive Analysen betrachten jedes Stück Code nur ein Mal
◦ Kontextsensitive Analysen nutzen mehrere Kontexte (z.B. aufrufende Methode)
Erklären die Eigenschaften statischer Analysen
Umfang:
◦ Intraprozedurale Analysen betrachten jede Methode für sich
◦ Interprozedurale Analysen berücksichtigen das gesamte Programm
Erklären die Eigenschaften statischer Analysen
Flusssensitivität:
◦ Flussinsensitive Analysen berechnen ein global gültiges Ergebnis
◦ Flusssensitive Analysen berechnen ein Ergebnis für jede Anweisung
Erklären die Eigenschaften statischer Analysen
Kontextsensitivität:
◦ Kontextinsensitive Analysen betrachten jedes Stück Code nur ein Mal
◦ Kontextsensitive Analysen nutzen mehrere Kontexte (z.B. aufrufende Methode)
Nennen Sie die Analysetechniken
Erklären Sie Typ- und Effektsysteme
Typsysteme:
◦ Weisen dem Ergebnis jedes Ausdrucks einen Typ zu
◦ Kompositional: Typ folgt direkt aus Typen von Teilausdrücken
◦ Häufig genutzt, um Fehler schon beim Kompilieren zu verhindern
Effektsysteme:
◦ Weisen jedem Ausdruck einen Effekt zu
◦ Kompositional
◦ Seltener genutzt (aber Sie kennen vermutlich ein sehr einfaches)
Erklären Sie Monotone Datenflussanalyse
(Intraprozedurale) Analyse, wie Werte zwischen Variablen fließen. Z.B.:
• Liveness: Kann Wert nach einem bestimmten Punkt noch gelesen werden?
• Reaching definitions: Woher stammen Werte, die eine Anweisung erreichen?
• Available expressions: Welche Werte wurden bereits berechnet?
Genutzt für Optimierungen, z.B.
• Entfernen von unerreichbarem Code (Dead-code removal)
• Loop-invariant code motion
• Common subexpression elimination
Erklären Sie Interpropedurale Datenflussanalyse: IFDS & IDE
• Interprozeduraler Datenfluss als Graph-Erreichbarkeits-Problem
• Sehr effizient, wenn das Problem geeignet ist (wichtig: Distributivität)
• Nutzung: z.B. Taintanalyse (verfolgen von sensiblen o. gefährlichen Daten)
Erklären Sie Symbolische Ausführung
• Interpretiert Programme mit symbolischen statt konkreten Werten
• Spaltet Ausführung bei Verzweigungen auf
• - Pfadexplosion!
Erklären Sie Big-Step abstrakte Interpreter
• Berechnen Abstraktionen konkreter Werte
• Abstraktionen stammen aus Lattice-basierten Domänen
Z.B. Vorzeichen, Intervalle
• Vereinigt Werte nach Verzweigungen, um Pfadexplosion zu vermeiden
Erklären Sie Constraint-basierte Analyse
• Erzeugt Bedingungen für das Analyseergebnis aus dem analysierten
Programm
• Löst dann die Menge der Bedingungen für die präziseste Lösung
• - Menge der Bedingungen kann schwer zu lösen sein
Erklären Sie Slicing
Extrahiert Anweisungen mit Bezug auf ein Slicingkriterium (z.B. Ort+Variable)
• Rückwärtsslicing: Anweisungen, die das Slicingkriterium beeinflussen
• Vorwärtsslicing: Anweisungen, die vom Slicingkriterium beeinflusst werden
• Anwendungen: Debugging, Klonerkennung, Parallelisierung, etc.
was sind die Wichtige Analysen
Erklären Sie Kontrollflussgraph und Dominator-Bäume
CFG: Welche Anweisung wird direkt nach welcher ausgeführt?
Dominatorbaum: Welche Anweisung muss zuvor ausgeführt worden sein?
Post-Dominator-Baum: Welche Anweisung muss danach ausgeführt werden?
Erklären Sie Callgraphen
• Verbinden eine Methode (caller) mit den Methoden, die sie aufruft (callees)
• Notwendige Voraussetzung für alle interprozeduralen Analysen
• Viele Algorithmen mit verschiedenen Abwägungen zwischen Präzision
und Skalierbarkeit
Erklären Sie Points-To-Analyse
• Auf welche Objekte kann eine Variable (Feld, etc.) verweisen?
• Meistens der Ort, an dem das Objekt erzeugt wurde
• Nützlich für viele andere Analysen wie Callgraphen
Erklären Sie Escape- & Alias-Analyse
Escapeanalyse betrachtet die dynamische Lebenszeit von Objekten:
• Kann ein Objekt außerhalb eines beschränkten Kontexts (z.B. Methode, Package) gesehen werden
• Nützlich, um Grenzen von Effekten zu kennen und für Optimierungen
Aliasanalyse betrachtet Beziehungen zwischen Variablen:
• Können (may)/müssen (must) zwei Variablen (Felder, etc.) auf das selbe Objekt verweisen?
• May-Analyse oft flussinsensitiv, Must-Analyse immer flusssensitiv
Erklären Sie Immutability & Purity
Immutability: Kann Feld/Klasse/Objekt/etc. nach der Initialisierung verändert werden?
Purity: Ist eine Methode deterministisch und seiteneffektfrei?
• Für sicheren, wartbaren Code
• Besondere Unterstützung in modernen Programmiersprachen
• Kann über ein Typsystem garantiert werden