Praktische Informatik 1

Slides:



Advertisements
Ähnliche Präsentationen
Software Engeniering II
Advertisements

der Universität Oldenburg
Integrations- und Funktionstests im Rahmen des V-Modelles
Phasen und ihre Workflows
Rekursion vs. Iteration
Grundlagen der Programmierung (GP)
Prof. Dr. Holger Schlingloff
Prof. Dr. Holger Schlingloff
Qualitätssicherung von Software
Qualitätssicherung von Software
Universität Stuttgart Institut für Kernenergetik und Energiesysteme Aufgaben des Testens Vergleich des Verhaltens einer Software mit den an sie gestellten.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
SWITCH - Anweisung.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Das Test-Framework JUnit
Das Test-Framework JUnit
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
DVG Klassen und Objekte
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
Guten Nachmittag!.
Wir haben gesehen Das Gerüst ist bei JavaKara fix vorgegeben
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Testtechniken-Praktikum WS 2005/06 1 Testen mit Mock- Objekten Andreas Höfer Dr. Matthias Müller.
Testtechniken-Praktikum WS 2005/06 1 Arbeiten mit JUnit Andreas Höfer Dr. Matthias Müller Mit Beiträgen von Johannes Link.
JUnit Grundkonzept Gruppe Markt. JUnit: Ziele Einfachheit: –Leicht erlernbare, bekannte Tools –Möglichst wenig Aufwand für die Implementierung von Testfällen.
TDD mit MSTest Stefan Lieser Web:
TDD mit MSTest Stefan Lieser
Programmiervorkurs WS 2014/15 Methoden
Korrektheit von Programmen – Testen
TDD mit MSTest Stefan Lieser Web:
Java-Kurs Übung Besprechung der Hausaufgabe
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
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.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Wie überwacht man Objekte im "Alltag" ?
Das Entwurfsmuster Model-View-Controller
Praktische Informatik 1
Java-Kurs - 4. Übung weitere Kontrollstrukturen
Nichts sticht besser Objekte isoliert testen
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Java-Kurs - 2. Übung primitive Datentypen, Konstanten
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Grundkurs Informatik mit Java
Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden
5.3 Korrektheit und Verifikation
Objects first mit BlueJ und Greenfoot
Definition Felder Konstruktor Methoden Beispiel
1. Die rekursive Datenstruktur Liste 1
9. Vererbung und Polymorphie
Implementieren von Klassen
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

Praktische Informatik 1 Prof. Dr. H. Schlingloff 11. 2. 2008

zu 10.1 Komponententest Beispiel: Dreiecks-Problem Die Methode bekommt als Eingabe 3 int-Zahlen zwischen 1 und 200, die die Dreiecksungleichung erfüllen und berechnet den Typ des Dreiecks (equilateral (gleichschenklig), isosceles (gleichseitig), scalene (schiefseitig), degenerate (entartet)) Falls eine Vorbedingung nicht erfüllt ist, wird eine Fehlermeldung ausgegeben und die Methode abgebrochen Ansonsten ist das Ergebnis degenerate, falls die Summe zweier Seiten gleich der dritten ist equilateral, falls alle drei Seiten gleich sind isosceles, falls genau ein Paar gleicher Eingaben existiert, und scalene, sonst, wenn alle Eingaben unterschiedlich sind. package Triangle; public class Triangle { enum Type {equilateral, isosceles, scalene, degenerate}; public static Type triangleType (int a, int b, int c){ if (a<1|a>200|b<1|b>200|c<1|c>200| a+b<c|b+c<a|a+c<b) System.out.println("falsche Eingabe");; return a==b&b==c? Type.equilateral : a==b|a==c|b==c? Type.isosceles : a+b==c|b+c==a|a+b==c? Type.degenerate : Type.scalene; }

JUnit einfache, effektive Testumgebung integriert in Eclipse automatische Generierung von Stümpfen benutzt Java als Testsprache für Java CUnit, CPPUnit, NUnit, … Test-Code als integraler Bestandteil der SW-Artefakte Kontrollierter Aufruf aller Methoden einer Klasse Nachbedingungen (Assertions) zur Verdiktbildung

in Eclipse SUT mit zu testenden Klassen erstellen neuen „JUnit Test Case“ erstellen Stümpfe werden bereit gestellt zur Methode myMethod() gehört testMyMethod() Testfälle eintragen public final void testTriangleTypeEquilateral() { assertEquals(Type.equilateral, Triangle.triangleType(2,2,2)); } public final void testTriangleTypeIsosceles() { assertEquals(Type.isosceles, Triangle.triangleType(1,2,2)); package Triangle; import Triangle.Triangle.Type; import junit.framework.TestCase; public class TriangleTest extends TestCase { protected void setUp(){} protected void tearDown(){} public final void testTriangleTypeEquilateral() { assertEquals(Type.equilateral, Triangle.triangleType(2,2,2)); } public final void testTriangleTypeIsosceles() { assertEquals(Type.isosceles, Triangle.triangleType(1,2,2)); public final void testTriangleTypeScalene() { assertEquals(Type.scalene, Triangle.triangleType(2,3,4)); public final void testTriangleTypeDegenerate() { assertEquals(Type.degenerate, Triangle.triangleType(0,0,0)); public final void testTriangleTypeDegenerate2() { assertEquals(Type.degenerate, Triangle.triangleType(1,2,3)); public final void testTriangleTypeDegenerate3() { assertEquals(Type.degenerate, Triangle.triangleType(3,4,1));

Konventionen Erstellung von Unit-Tests gehört zur sauberen Programmierung! Testfälle können in Testsuiten strukturiert werden (Baumartige Hierarchie) Methoden setUp() und tearDown() zum Aufbau bzw. Abbau dynamischer Datenstrukturen, die für jeden Test gebraucht werden; wird vor und nach jedem Einzeltest aufgerufen

Probleme Einkapselung: private Methoden können von anderen Klassen nicht aufgerufen werden C++: Konzept der „Friend“-Klasse Java: „Wrapper“-Methoden nur für Testzwecke? Vererbung: Wann werden ererbte Methoden getestet? machen oft nur im vererbten Kontext Sinn müssen immer wieder neu getestet werden? Polymorphie: gleiche Tests für unterschiedliche Funktionalitäten?

Vorgehensweise Bottom up: Schichtenartige Systemsicht Start mit den Klassen, die von keinen anderen abhängen Test aller Methoden aller dieser Klassen Abdeckungskriterien: Alle Datenfelder werden geschrieben, alle Anweisungen ausgeführt, alle Zweige durchlaufen Danach werden die Klassen getestet, die auf den schon getesteten aufbauen Schichtenartige Systemsicht Testsuiten werden baumartig gemäß dieser Hierarchie strukturiert

10.2 Programmverifikation Versuch, die Korrektheit von Programmen mathematisch zu beweisen Assertions sind Zusicherungen, die an einer bestimmten Programmstelle gelten beim Betreten einer Methode: Vorbedingung vor Verlassen einer Methode: Nachbedingung Hoare-Kalkül: Systematisierung dieser Idee z.B. assert (y<5); x=y*y; assert(x<25);

Hoare-Tripel: {precond} Prog {postcond} Behauptung: „Falls precond vor Ausführung von Prog gilt, so gilt bei Terminierung hinterher postcond“ Verifikationsaufgabe: Gegeben Hoare-Tripel (für komplexes Prog), zeige die Gültigkeit Programmentwicklung: Gegeben precond und postcond, konstruiere Prog Testentwicklung oftmals: Gegeben Prog, finde geeignete Vor- und Nachbedingungen

Hoare-Regeln Zuweisungsregel: {P[v/expr]} v=expr; {P} Beispiel: {y*y>0} x=y*y; {x>0} Konsequenzregel: P‘P, {P}S{Q}, QQ‘  {P‘}S{Q‘} Beispiel: y>0 y*y>0  {y>0} x=y*y; {x>0} Sequenzregel: {P}S{Q}, {Q}T{R}{P}S;T{R} Beispiel: {y>0} x=y*y; {x>0}, {x>0} z=x; {z>0}  {y>0} x=y*y; z=x; {z>0} Auswahlregel: {P&B}S{Q}, {P&!B}T{Q}  {P}if (B) S; else T;{Q} Beispiel: {true} if(y>0) z=y; else z=-y; {z>0}

Schleifen und Invarianten Iterationsregel: {I & B} S {I}  {I} while(B)S; {I & !B} I ist die Schleifeninvariante, die durch S nicht verändert wird; Problem, I geeignet zu finden! Beispiel: Sei INV= (j==Summe(i+1 .. n)) {INV & i>0} j+=i--; {INV} {INV} while (i>0) j+=i--; {INV & i==0} j==0 & i==n  INV; INV & i==0  j==Summe(1..n) also gilt: {j==0, i==n} while (i>0) j+=i--;{j==Summe(1..n)}

praktische Anwendung? Hoare-Kalkül galt lange Jahre als nicht anwendbar, zu kompliziert, mathematisch Unterstützt keine Zeiger, Parallelität Fortschritt bei Beweisunterstützungswerkzeugen in sicherheitskritischen Anwendungen keine Fehler tolerierbar, Standards fordern Verifikation bei FIRST Projekte, in denen Programme mit etlichen tausend LOCs verifiziert wurden Übung macht den Meister! Verifikation von Komponenten ersetzt den Test nicht

11.2 Integrations- und Systemtest Integrationstest setzt auf getesteten, (korrekten) Komponenten auf versucht die korrekte Interaktion der Komponenten zu garantieren Systematik: nach den internen Schnittstellen des Systems Systemtest geht davon aus, dass die Komponenten (korrekt) zusammengesetzt wurden versucht, das korrekte Gesamtverhalten des Systems zu gewährleisen Systematik: nach den Benutzungsschnittstellen

Integrationstest Vorgehensweisen: Bottom-up-, Top-down-, Big-Bang- und Sandwich-Methode Methode: Stümpfe und Treiber Stumpf (stub): leere oder minimale „Pseudo-Methode“, liefert z.B. statt Berechnungswert eine Konstante Treiber (driver): Methode, die nur zu Testzwecken andere Methoden aufruft (vgl. JUnit) Beispiel: Web-Shop

Systemtest Konzentration auf Benutzersicht Test über die GUI Test über Sensorik/Aktuatorik („HiL“) Testwerkzeug stimuliert das System „von außen“ und überwacht die Reaktionen des Systems „nach außen“ automatischer Zugriff auf diese Schnittstellen ist nicht immer einfach

Beispiel: GUI-Test Capture-Replay-Technik bekannteste Vertreter: IBM Rational Robot, HP QuickTest Professional Idee Aufzeichnung von Benutzerinteraktionen Abspielen mit Vergleich auf Änderungen Erweiterungen GUI-Map, Scripting Wizard Alternativen, Wiederholungen Checkpoints, Komparatoren

Vorgehensweise pragmatisch systematisch Aufzeichnung von Experimenten, Replay bei neuen Produktversionen systematisch Festlegung von Testzielen (Qualitätskriterien, Requirements) Definition von Testfällen und Testsuiten Umsetzung (Implementierung) der Testfälle automatische Durchführung, Ergebnisabgleich und Korrektur

Typischer Testfall („Hallo Welt!“ im MS Notepad schreiben und speichern)

kleines Experiment (© Microsoft Research) MS Notepad, leeres Fenster Text „Hallo Welt!“ einfügen, markieren, Bearbeiten-Rückgängig klicken Was passiert: Markierung wird aufgehoben, Text wird wieder gelöscht, oder Ganz was anderes? :-)