Kapitel 5: Statische Analyse



Ähnliche Dokumente
Software Engineering. Statische Analyse! Kapitel 11

Kapitel 5 Statische Programmanalyse

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

Software Engineering. Validierung und Verifikation. Martin Glinz Harald Gall. Kapitel 7. Universität Zürich Institut für Informatik

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter

2 Eine einfache Programmiersprache

Implementieren von Klassen

2 Eine einfache Programmiersprache

6. Grundlagen der Programmierung

Ein Werkzeug zur Überdeckungsmessung für kontrollflussbezogene Testverfahren

Girls Day 2017 Programmierung

2 Eine einfache Programmiersprache

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 3

Kapitel 8: Fehlervermeidung

Algorithmen und Datenstrukturen

1 Klassen und Objekte

Algorithmen und Datenstrukturen

Vorlesung Software Engineering

Vor- und Nachbedingungen in imperativen Programmen OOPM, Ralf Lämmel

C.3 Funktionen und Prozeduren

Elementare Konzepte von

Algorithmen und Datenstrukturen II

Theoretische Informatik. Ackermann-Funktion. Ali Eyerta

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Theoretische Informatik I

Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik

Zahlen in Haskell Kapitel 3

3.2 Datentypen und Methoden

Repetitorium Informatik (Java)

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Validierung und Verifikation

Audit. Qualität und Gras wachsen hören. Hartmut Vöhringer

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Universität Karlsruhe (TH)

Mathematische Beweise und Symbolische Tests

Schöner Programmieren

Einführung in die Programmierung für NF. Übung

5. Aufgabenblatt mit Lösungsvorschlag

Schöner Programmieren

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 5. Asymptotische Laufzeitkomplexität Definition Regeln Beispiele

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Programmieren 2 Java Überblick

Einstieg in die Informatik mit Java

Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1]

II.3.1 Rekursive Algorithmen - 1 -

Informatik ist viel mehr als Delphi-Programmierung!

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Java Anweisungen und Ablaufsteuerung

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

4. Vererbung Die Klasse Object. Die Klasse Object

Nachts ist s kälter als draußen Warum qualifizieren und nicht zertifizieren?

Algorithmen zur Datenanalyse in C++

Werkzeuge zur Programmentwicklung

Programmierung mit C Zeiger

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Grundzüge der Wirtschaftsinformatik WS 2002/03. Wiederholung Java. Programmierzyklus. Heiko Rossnagel Problem

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Programmieren in Java -Eingangstest-

5.3 Korrektheit und Verifikation

Software- Qualitätsmanagement

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

9. Vererbung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Software-Praktikum. Überblick und Zeitplan

Probeklausur: Programmierung WS04/05

Algorithmen und Datenstrukturen Laufzeitabschätzung

Transkript:

Kapitel 5: Statische Analyse Inhalt 5.1 Grundlagen 5.2 Analyse von Programmen 5.3 Analyse von Algorithmen 5.4 Analyse von Spezifikationen, Entwürfen und Prüfvorschriften Schlüsselbegriffe Statische Prüfung von Strukturen, Zusammenhängen und Abläufen Software-Qualitätsmanagement Kapitel 5: Statische Analyse Seite 5-1

5.1 Grundlagen Definition Statische Analyse ist die Untersuchung des statischen Aufbaus eines Prüflings auf die Erfüllung vorgegebener Kriterien. Die Prüfung ist statisch. Sie grenzt sich damit vom (dynamischen) Test ab. Sie ist formal durchführbar und damit automatisierbar. Sie grenzt sich damit vom Review ab. Ziele Bewertung von Qualitätsmerkmalen, z.b. Pflegbarkeit, Testbarkeit aufgrund struktureller Eigenschaften des Prüflings (zum Beispiel Komplexität, Anomalien) Erkennung von Fehlern und Anomalien in neu erstellter Software Erkennung und Analyse von Programmstrukturen bei der Pflege und beim Re-engineering von Altsystemen Prüfen, ob ein Programm formale Vorgaben (zum Beispiel Codierrichtlinien, Namenskonventionen, etc.) einhält Software-Qualitätsmanagement Kapitel 5: Statische Analyse Seite 5-2

5.2 Analyse von Programmen 5.2.1 Gegenstand der Analyse Syntaxfehler Feststellung durch Compiler Datentyp-Fehler typ-unverträgliche Operationen typ-unverträgliche Zuweisungen typ-unverträgliche Operationsaufrufe Qualität der Programm- und Datenstrukturen Formale Eigenschaften Richtlinien eingehalten Art und Menge der internen Dokumentation Strukturkomplexität des Progamms Einhaltung von Strukturierungsregeln Art und Tiefe von Verschachtelungen Strukturfehler bzw. -anomalien nicht erreichbarer Code vorhandene, aber nicht benutzte Operationen benutzte, aber nicht vorhandene Operationen Fehler / Anomalien in den Daten nicht deklarierte Variablen nicht benutzte Variablen Benutzung nicht initialisierter Variablen Software-Qualitätsmanagement Kapitel 5: Statische Analyse Seite 5-3

5.2.2 Vorgehen Bei Programmen immer mit Werkzeugen Compiler syntaxgestützte Editoren spezielle Analyse-Werkzeuge Programm wird wie bei der Übersetzung durch ein Werkzeug zerlegt (parsing) und in einer analysefreundlichen internen Struktur repräsentiert Dabei werden Syntaxfehler erkannt und erste Kenngrößen (z. B. Anzahl Codezeilen, Anzahl Kommentare) ermittelt Die resultierende interne Repräsentation des Programms wird verschiedenen Analysen unterworfen (z.b. statische Aufrufhierarchie, Strukturkomplexität, Datenflussanalyse) Die Befunde werden gesammelt, ggf. verdichtet und bewertet. Software-Qualitätsmanagement Kapitel 5: Statische Analyse Seite 5-4

5.3 Analyse von Algorithmen Laufzeiteffizienz Speichereffizienz Gültigkeitsbereich Erfolgt weitestgehend manuell 5.4 Analyse von Spezifikationen, Entwürfen und Prüfvorschriften Syntaxanalyse der formal beschriebenen Teile Teilweise Struktur- und Flussanalysen (je nach verwendeter Modellierungsmethode) Analyse der Anforderungsverfolgung, wenn dokumentiert ist, welche Anforderung wo umgesetzt bzw. geprüft wird (werkzeuggestützt möglich) Software-Qualitätsmanagement Kapitel 5: Statische Analyse Seite 5-5

Aufgaben Aufgabe 5.1 Führen Sie manuell einige statische Analysen für folgendes Java-Programm durch: int ComputeAResult (int x, int y, int n) { boolean a, b, c; int z = 0; for (int i = 1;!a &!b & i <= n; i++) { a = GetCondition (x, i); if (!a) b = GetCondition (y, i); else if (!b) z = 1; } if (a) z = Compute (x); else if (b) z = Compute (y); else z = Compute (x*y); return z; } a) Kenngrößen Anzahl Codezeilen (NCSS) c Anzahl Kommentarzeilen k Anzahl Programmzweige z Kommentardichte k/(c+k) Verzweigungsdichte z/c b) Datenanalysen nicht benutzte Variablen Benutzung nicht initialisierter Variablen Software-Qualitätsmanagement Kapitel 5: Statische Analyse Seite 5-6

Aufgabe 5.2 Führen Sie die gleichen Analysen wie in Aufgabe 5.1 für folgendes, mit dem Programm aus Aufgabe 5.1 äquivalentes Java-Programm durch: int ComputeAResult (int x, int y, int n) // Berechnet Funktionswert mittels der Methode Compute // aus x und y, abhängig von den Werten von GetCondition { for (int i = 1; i <= n; i++) { if (GetCondition (x, i)) return Compute (x); else if (GetCondition (y, i)) return Compute (y); } return Compute (x*y); } Software-Qualitätsmanagement Kapitel 5: Statische Analyse Seite 5-7

Zitierte und weiterführende Literatur Ghezzi, C. (1981). Levels of Static Program Testing. In B. Chandrasekaran, S. Radicchi (Hrsg.): Computer Program Testing. New York: Elsevier North-Holland. Howden, W.E. (1981). A Survey of Static Analysis Methods. In E. Miller, W.E. Howden (Hrsg.): Software Testing and Validation Techniques: Tutorial. New York: IEEE Computer Society Press. 101-115. Liggesmeyer, P. (1990). Modultest und Modulverifikation. BI-Wissenschaftsverlag, Reihe Angewandte Informatik Bd. 4, Mannheim etc. Software-Qualitätsmanagement Kapitel 5: Statische Analyse Seite 5-8