Statische Analysetools - ein Überblick

Slides:



Advertisements
Ähnliche Präsentationen
GWT - google Web Toolkit
Advertisements

Allgemeines Name: Ursprünglich: „Personal Home Page Tools“
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Qualitätssicherung von Software (SWQS)
C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
Imperative Programmierung -Entwicklungswerkzeuge
Objektorientierte Programmierung
Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler.
Software-Engineering II Eingebettete Systeme, Softwarequalität, Projektmanagement Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt.
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
FH-Hof Tools Richard Göbel. FH-Hof Tools für die Veranstaltung JUnit: Testen ANT: Build-Tool Eclipse: Entwicklungsumgebung.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Hassan Bidani Jallal Alami Rahmouni FH Wiesbaden
Imperative Programmierung Funktionen und Parameter
Das Build-Tool ANT ETIS SS05. ETIS SS05 - Nadine FröhlichANT 2 Gliederung Motivation Build - Datei –Allgemeiner Aufbau –Project –Target –Task –Properties.
Automatisches Testen und Bewerten von Java-Klassen
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Programmieren mit JAVA
Programmieren mit JAVA
Semantische Fehler Seminar im Grundstudium WS2002/2003:
Brandenburgische Technische Universität Cottbus Program Profiling Andrzej Filipiak Übung Testen von Software SoSe 2006.
Einführung in Java Alexander Dreßler modifiziert Peter Brichzin und Matthias Spohrer Literatur Installation der Programme.
Software Design Patterns Extreme Programming (XP).
Einführung in Visual C++
Portierung von Java nach C
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Was umfaßt die CORBA Core Spezifikation? Welche zusätzlichen Komponenten muß ein ORB Produkt beinhalten? Core: CORBA Objekt Modell CORBA Architektur OMG.
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Einführung in die Programmiersprache Java
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Java und Eclipse.
Präsentation von Sonja Pathe
Präsentation C Tutorium von Daniel J. Nowak Folie 1 C Tutorium.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Vergleich verschiedener Konzepte für das Software Engineering Praktikum.
Java Server Pages Sergej Keterling
FIN-IVS Dr.Fritz Zbrog Verteilte Systementwicklung EJB Tutorial Was wird für EJB-Entwicklung benötigt ? J2EESDK 1.4 (software developement kit)
Die Grundidee Funktionsaufruf Funktionsname (Kopf) Code der Funktion
JavaServer Faces Urs Frei. Inhalt JSF Funktionsweise Rückblick JSP Bestandteile von JSF So einfach ist die Anwendung (Beispiel) Eclipse im Einsatz (Entwicklungsumgebung)
Unterprogramme in JAVA
ac.at1 EPROG Tutorium #1 Philipp Effenberger Einführung in Java Schlüsselworte Datentypen.
EPROG Tutorium #6 Philipp Effenberger
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Eine Entwicklungsumgebung für Free-Pascal Peter G. Poloczek, M5543
PI Burgenland Java und JavaScript 1. Teil
Robuste Programme durch Ausnahmebehandlung
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
Web und Mobile Apps Programmieren Marco Jakob Kurzvortrag OSS an Schulen
Modellbasierte Software- Entwicklung eingebetteter Systeme Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt Universität und Fraunhofer.
Java Server Pages Technologie zur Erzeugung dynamischer Webseiten basierend auf Java-Servlets Blockseminar Wintersemester 2001/2002Jochen Pfeiffer Seite.
Einführung in Java PING e.V. Weiterbildung Andreas Rossbacher 24. März 2005.
Tutorium Software-Engineering SS14 Florian Manghofer.
JAVA - Einführung. © Übersicht Hintergrund und Geschichte Wie sieht ein JAVA Programm aus ? Was ist ein JAVA Programm ? Wie schreibt/übersetzt.
Einführung in AspectJ ● Inhalt: 1)Überblick 2)Elemente des crosscuttings in AspectJ 3)„Hello World“ in AspectJ 4)Wie Aspekte in Java verwoben werden 5)Join.
Hello World! Javakurs 2013 Arne Kappen
Nksainf.ch/oinf.
Implementieren von Klassen
 Präsentation transkript:

Statische Analysetools - ein Überblick Wolfram Heinz Übung Testen von Software SoSe 2006

Programm Tester - ein Überblick Inhaltsübersicht Einführung Lint/Splint Jlint Checkstyle Demo Fazit Programm Tester - ein Überblick

Programm Tester - ein Überblick Einführung (1) Analysetools: Lint/Splint 3.1.1 Jlint 2.3 Checkstyle 4.1 Statischer Test: Semantische Überprüfung von Quellcode eines Programms auf Fehler Programm selbst wird nicht ausgeführt Programm Tester - ein Überblick

Einführung (2) Lint/Splint Jlint Checkstyle Zielsprache(n) Zielsysteme Java (C, C++, Objective C) Java Zielsysteme Windows, Linux, Solaris, Free BSD alle gängigen Lizenzstatus frei verfügbar nach GPL/LGPL Herkunft, Entwickler Universität Virginia, David Evans Konstantin Knizhnik, Cyrille Artho Oliver Burn Typ Konsolenanwendung Konsole + ANT-Task Programm Tester - ein Überblick

Programm Tester - ein Überblick Lint/Splint (1) Ende der 70er: Lint Entwicklung als Vorläufer von Splint durch S.C. Johnson erstes Tool zur statischen Überprüfung von C-Programmen seit 2003: Splint zusätzliche und stärkere Prüfoptionen Schwerpunkt der Überprüfung liegt auf Sicherheitsanfälligkeiten und Fehler bei der Codierung (Secure Programming Lint) Nutzung von speziellen Kommentaren (annotations) /*@ … @*/ Programm Tester - ein Überblick

Programm Tester - ein Überblick Lint/Splint (2) 4 Prüfstufen standard checks weak strict Programm Tester - ein Überblick

Lint/Splint (3) - Fehlertypen nicht benutzte Bezeichner Typinkonsistenzen Zugriff auf Variablen oder Funktionen ohne vorherige Definition unerreichbarer Code ignorierte return-Werte Ausführungspfade ohne return Endlosschleifen … wie Lint, jedoch zusätzlich: Dereferenzierung eines möglichen Nullzeigers Fehler im Speichermanagement Makroimplementierungen bzw. -aufrufe Puffer-Überlauf Programm Tester - ein Überblick

Programm Tester - ein Überblick Lint/Splint (4) Programm Tester - ein Überblick

Programm Tester - ein Überblick Lint/Splint (5) Vorteile: Programm/Projekt insgesamt analysiert Keine Compilierung des Quellcodes nötig Aussagekräftigere Fehlermeldungen + Lösungsvorschläge Nachteile: C++ nicht unterstützt Bestimmte Fehlertypen nicht erkannt Bsp.: int a = 14l; int b = 020; int c; c=a/b; Bsp.: int a = 14; int b = 16; int c; c=a/b; Programm Tester - ein Überblick

Programm Tester - ein Überblick Jlint (1) 2 Komponenten: Jlint und AntiC AntiC Basis-Syntaxchecker für alle Sprachen der C-Familie und Java Scanner + Top-Down-Parser zur Erkennung von einfachen Fehlertypen und einigen Syntax-Fehlern Jlint überprüft Semantik des Quellcodes (nur für Java-Programme) Ausführung lokaler und globaler Datenflussanalysen Erkennung von Blockaden und Laufzeitproblemen Steuerung über Flags Fehlerbericht + History-Funktion Programm Tester - ein Überblick

Programm Tester - ein Überblick Jlint (2) - Fehlertypen AntiC Jlint Fehlerhafte Zeichenketten long l = 0x111111l; printf("\x"); Operatorprioritäten if (x = y) x || y && z Fehler in Anweisungsblöcken if (rc != 0) if (perr) *perr = rc; else return Ok; Synchronisation nicht deterministisch/reproduzierbar z.B. bei Client/Server-Anwendungen Vererbung falsch zugeordnete Methoden- profile, verdeckte Komponenten z.B. gleiche Methodennamen in innerer und äußerer Klasse Datenfluss Programm Tester - ein Überblick

Programm Tester - ein Überblick Jlint (3) - Fehlertypen Beispiele: Synchronisation: Kategorie Blockierung Vererbung: Kategorie Variablenverdeckung Datenfluss: Kategorie Puffer-Überlauf public void foo() synchronized (a) synchronized (b) public void bar() class A public int a; public void f(int a) this.a = a; // verursacht keine Fehlermeldung public int g(int a) return a; // Meldung: shadow_local public long multiply(int a, int b) return a*b; // Multiplikation 2er Integer-Operanden, // Konvertierung des Ergebnisses in Datentyp long Programm Tester - ein Überblick

Programm Tester - ein Überblick Jlint (4) Vorteile: schnelle Überprüfung des Quellcodes auf ca. 50 verschiedene Fehler einfaches Hinzu- oder Abschalten von Optionen zur Fehlerberichterstattung (z.B: -all +synchronisation) geringer Ressourcenverbrauch Nachteile: Compilierung des zu prüfenden Quellcodes notwendig JDK oder vergleichbare Entwicklungsumgebung muss installiert sein Programm Tester - ein Überblick

Programm Tester - ein Überblick Checkstyle (1) Unterstützt den Programmierer bei der Einhaltung von Coding Conventions umfangreiche Konfigurationsmöglichkeiten über XML-Datei Festlegung der durchzuführenden Checks (Module) über modulspezifische Eigenschaften (Properties) erfolgt Ausgabesteuerung Plugin für Entwicklungsumgebungen (z.B. Eclipse, JEdit, Emacs JDE, Borland JBuilder, …) Programm Tester - ein Überblick

Programm Tester - ein Überblick Checkstyle (2) Aufruf über Konsole: java -D<property>=<value> \ com.puppycrawl.tools.checkstyle.Main \ -c <configurationFile> Prüfmodule [-n <packageNameFile>] \ Paketname [-f <format>] Ausgabeformat: XML/Plain [-p <propertiesFile>] spezielle Eigenschaften [-o <file>] \ Pfad der Ausgabedatei [-r <dir>] Dateisuche in Verzeichnis file java com.puppycrawl.tools.checkstyle.Main -c docs/sun_checks.xml \ -f xml -o build/checkstyle_errors.xml Check.java oder java -jar checkstyle-all-4.1.jar \ -c docs/sun_checks.xml Check.java Programm Tester - ein Überblick

Programm Tester - ein Überblick Checkstyle (3) Aufruf als ANT-Task: ANT  Another Neat Tool plattformunabhängig Tool zur automatisierten Generierung von Programmen aus vorhandenem Quellcode Steuerung durch XML-Datei (Build-Datei) Programm Tester - ein Überblick

Checkstyle (4) - Fehlertypen Standard Checks: keine zusätzlichen Bibliotheken nötig Javadoc Comments Naming Conventions Headers Coding, Class Design … Optionale Checks (J2EE): Entity Bean Session Bean <module name="FinalClass"/> <module name="JavadocType"> <property name="authorFormat" value="\S"/> </module> <module name="j2ee.EntityBean"> <property name= "persistence" value="container"/> </module> Programm Tester - ein Überblick

Programm Tester - ein Überblick Checkstyle (5) Vorteile: einfache und schnelle Prüfung auf Einhaltung von Stilrichtlinien Möglichkeit, eigene „Checks“ zu definieren Ausgabe des Fehlerreports als Text oder XML-Datei Fehlerreport unter ANT: Übermittlung via E-Mail möglich Ausgabe als HTML unter Nutzung von Stylesheet-Info‘s (XSLT) Nachteile: grundlegende XML-Kenntnisse erforderlich Browser muss über XML-Parser verfügen Programm Tester - ein Überblick

Programm Tester - ein Überblick Fazit Tools insgesamt mächtiger als Standard-Compiler frühzeitige Erkennung von Fehlern möglich Qualitätskontrolle geringere Entwicklungskosten Grenzen statischer Analysetools: Programmtest mit bestimmter Variablenbelegung nicht möglich Test auf Fehler, die erst zur Laufzeit auftreten nicht durchführbar Programm Tester - ein Überblick

Vielen Dank für Ihre Aufmerksamkeit !