4. Überdeckungstests
|
|
|
- Christoph Arnim Bayer
- vor 8 Jahren
- Abrufe
Transkript
1 4. Überdeckungstests Kontrollflussgraph Anweisungsüberdeckung Pfadüberdeckung einfache Bedingungsüberdeckung minimale Mehrfachüberdeckung Herausforderung Polymorphie Automatische Überdeckungsberechnung datenflussabhängige Fehler Datenflussgraph Stephan Kleuker 137
2 Spezifikation Zu entwickeln ist eine Methode mit der der Bonus eines Kunden berechnet wird. Hierbei wird der interne Score des Kunden und das Alter des Kunden berücksichtigt. Liegt der Score über 2600 wird der Ausgangswert des Bonusses mit 20, sonst mit 5 festgelegt. Liegt das Alter des Kunden über 42 und der Score über 900, wird der Bonus um 10 erhöht. Stephan Kleuker 138
3 Methode mit zugehörigem Kontrollflussgraph public int bonus( int score, int alt){ int ergebnis = 0; if (score > 2600) ergebnis = 20; else ergebnis = 5; if (alt > 42 & score > 900) ergebnis += 10; return ergebnis; int ergebnis = 0; if (score > 2600) ergebnis = 20 ergebnis = 5 ergebnis += 10 if (alt > 42 & score > 900) return ergebnis Stephan Kleuker 139
4 Kontrollflussgraph (KFG) eines Programms P ist ein gerichteter Graph KFG(P) = def G = (V,E, VStart, VZiel) V: Menge der Knoten (Anweisungen des Programms) E ist Teilmenge von V V: Menge der Kanten (Nachfolgerelation bezüglich der Ausführung des Programms) VStart, VZiel aus V : Ausgewählte Knoten für Start, Ende des Programms (VZiel kann auch eine Menge von Knoten sein) Stephan Kleuker 140
5 Normalisierung eines KFG durch Blockung Wunsch: Graph sollte unabhängig von der Formatierung sein! folgende Regeln, mit denen mehrere Knoten k1,k2,...,kn, die nacheinander durchlaufen werden können, also k1 k2... kn, zu einem Knoten verschmolzen werden. Die Knotenfolge wird bei jedem Durchlauf immer nur über k1 betreten, es gibt außer den genannten Kanten keine weiteren Kanten, die in k2,...,kn enden. Die Knotenfolge wird bei jedem Durchlauf immer nur über kn verlassen, es gibt außer den genannten Kanten keine weiteren Kanten, die in k1,...,kn-1 beginnen. Die Knotenfolge ist maximal bezüglich a) und b). Stephan Kleuker 141
6 Beispiele für Normalisierung (1/2) 0 int ergebnis = 0; 1 if (score > 2600) 01 score> ergebnis = 20 ergebnis = if (alt > 42 & score > 900) 4 alt>42 & score > 900 ergebnis += return ergebnis 6 Stephan Kleuker 142
7 Beispiele für Normalisierung (2/2) und 123 nicht verschmelzbar, da 0 anders als nach 123 verlassen werden kann 123 und 4 nicht verschmelzbar, da 123 anders als nach 4 verlassen werden kann 4 und 56 nicht verschmelzbar, das 56 anders als über 4 betreten werden kann Stephan Kleuker 143
8 Analyse vollständiger Pfade Ein vollständiger Pfad ist eine Folge von verbundenen Knoten (über Kanten) im KFG, die mit Vstart beginnt, und mit Vziel endet Die möglichen Ausführungsreihenfolgen des Programms sind eine Teilmenge der vollständigen Pfade Wunsch: Durchlauf repräsentativer vollständiger Pfade beim Test Überdeckung aller vollständigen Pfade ist im allgemeinen nicht ausführbar Ansatz: Verschiedene Approximationsstufen (Anweisungsüberdeckungstest,..., Mehrfach- Bedingungsüberdeckungstest) für die Menge der vollständigen Pfade bei Auswahl der Testdurchläufe wählen Stephan Kleuker 144
9 Anweisungsüberdeckung (C0) Ziel: alle Anweisungen des Programms durch Wahl geeigneter Testdaten mindestens einmal ausführen, alle Knoten des KFG mindestens einmal besuchen. Testmaß C0= Anzahl der ausgeführten Knoten V weiterer Name: Knotenüberdeckung Ziel C0=1 (= 100%) typischerweise wird eine Menge von Testfällen benötigt, um C0=1 zu erreichen praktisch C0=1 oft schwierig (z. B. wg. Exceptions) Schwierigkeiten können auf schlechte Programmierung hindeuten Stephan Kleuker 145
10 Beispiele für C0-Überdeckungen Test T1 T2 T3 T1+T3 score alt ergebnis C0 5/6 4/6 5/6 6/6 6 Stephan Kleuker 146
11 Pfadüberdeckung (C1) Ziel :alle Kanten des KFG überdecken, d.h. alle Pfade des Programms einmal durchlaufen Testmaß C1= Anzahl der durchlaufenen Kanten E weiterer Name: Zweigüberdeckung Ziel C1=1 (= 100%) typischerweise wird eine Menge von Testfällen benötigt, um C1=1 zu erreichen C1=1 impliziert C0=1 (nicht andersherum) Stephan Kleuker 147
12 Beispiele für C1-Überdeckungen Test T1 T2 T3 T1+T3 T1+T2 score alt ergebnis C0 4/7 3/7 4/7 6/7 7/7 6 Stephan Kleuker 148
13 Kommentare zu C0 und C1 Vorteile der Anweisungsüberdeckung: einfach geringe Anzahl von Eingabedaten nicht ausführbare Programmteile werden erkannt großer Nachteil der Anweisungsüberdeckung: Logische Aspekte werden nicht überprüft deshalb: Pfadüberdeckungstest gilt als Minimalkriterium im Bereich des dynamischen Softwaretests, schließt den Anweisungsüberdeckungstest ein, fordert die Ausführung aller Zweige eines KFG, jede Entscheidung mindestens einmal wahr und falsch Nachteile der Pfadüberdeckung: Fehlende Zweige werden nicht automatisch entdeckt Kombinationen von Zweigen sind unzureichend geprüft Komplexe Bedingungen werden nicht analysiert Stephan Kleuker 149
14 Beispiel: Nutzung von TikiOne JaCoCoverage (1/2) TikiOne führt immer alle Testklassen aus, die auf "Test" enden Testüberdeckungsmessung Rechtsklick auf Projekt Wenn Überdeckung nur bei Ausführung (also ohne Tests) gemessen werden soll Löscht Überdeckungsergebnisse Stephan Kleuker 150
15 Beispiel: Nutzung von TikiOne JaCoCoverage (2/2) wenn nicht ausgeschaltet, Ergebnis auch im Browser Details zur Berechnung: Stephan Kleuker 151
16 Bedingungsüberdeckungstest Ziel: Teste gezielt Bedingungen in Schleifen und Auswahlkonstrukten Bedingungen sind Prädikate A1,..., A4 atomar z.b. (x==1) [auch!(x==1)] zusammengesetzt Konjunktion K Disjunktion D ( ( (x==1) (x==2) )&&( (y==3) (y==4) ) ) hat 7 Teilprädikate: x==1, x==2, y==3, y==4, (x==1) (x==2), (y==3) (y==4), ( ( (x==1) (x==2) )&&( (y==3) (y==4) ) ) Hinweis: Unterschied zwischen und && sowie und & ( if(true 5/0==0) läuft, if(true 5/0==0) läuft nicht Stephan Kleuker 152
17 Einfache Bedingungsüberdeckung (C2) Ziel: alle atomaren Prädikate einmal TRUE, einmal FALSE Testmaß: C2= wahre Atome + falsche Atome 2 * alle Atome alle Atome =Anzahl aller Atome, wahre Atome = Anzahl aller Atome, die nach true ausgewertet werden (analog falsche Atome ) Stephan Kleuker 153
18 Beispiele für C2-Überdeckungen Test T1 T2 T3 T1+T2 T4 T2+T4 score alt ergebnis score > 2600 t f f t f t f t alt > 42 t t t t f t f score > 900 t f t t f t f t C2 3/6 3/6 3/6 5/6 3/6 6/6 T1+T2 ist 100% C1-Überdeckung, aber nicht C2- Überdeckung aus C1-Überdeckung folgt nicht C2-Überdeckung Stephan Kleuker 154
19 Analyse von T2+T4 bzgl. C1 Test T2 score 900 alt score>2600 Test T4 score 2601 alt score> alt>42 & score > alt>42 & score > aus C2-Überdeckung muss nicht C1-Überdeckung folgen (!) Stephan Kleuker 155
20 Kein Zusammenhang zwischen C1 und C2 Die Nummerierung ist historisch gewachsen betrachte if (a b) a=true, b=false a=false, b=true garantiert vollständige C2-Überdeckung else-zweig wird nicht durchlaufen, kein C1 oder C0 a=true, b=false a=false, b=false if- und else-zweig wird durchlaufen, damit C1 und C0 keine vollständige C2-Überdeckung, da b=true fehlt Stephan Kleuker 156
21 JaCoCo misst auch public void test11(){ Assert.assertEquals(1, b.mach11(1, 1, public void test13(){ Assert.assertEquals(-1, b.mach11(0, 0, 0)); Achtung Kurzschlussauswertung bei zweitem Testfall Stephan Kleuker 157
22 JaCoCo ohne public void test1(){ Assert.assertEquals(-1, b.mach1(0, 1, public void test3(){ Assert.assertEquals(-1, b.mach1(1, 0, 1)); man beachte, jeder Ausdruck einmal false und true, aber Gesamtausdruck nicht (deshalb zwei Möglichkeiten mehr) Stephan Kleuker 158
23 Minimale Mehrfachüberdeckung (C3) Ziel: alle Prädikate und Teil-Prädikate einmal TRUE, einmal FALSE Testmaß: C3= wahre Teilprädikate + falsche Teilprädikate 2 * alle Teilprädikate Da immer auch gesamter Boolescher Ausdruck betrachtet, folgt aus 100% C3- immer 100% C1-Überdeckung Stephan Kleuker 159
24 Beispiele für C3-Überdeckungen Test T1 T2 T3 T4 T2+T4 T1+T2+T4 score alt ergebnis score > 2600 t f f t f t t f alt > 42 t t t f t f t f score > 900 t f t t f t t f alt > 42 t f t f f t f && score >900 C3 4/8 4/8 4/8 4/8 7/8 8/8 Es geht auch mit zwei Testfällen! Stephan Kleuker 160
25 Zusammenhang zwischen den Testverfahren Anmerkung: Diese Thema kann noch wesentlich vertieft werden Minimaler Mehrfach-Bedingungsüberdeckungstest (C3) Zweigüberdeckungstest (C1) Einfacher Bedingungsüberdeckungstest (C2) Anweisungsüberdeckungstest (C0) vollständige Überdeckung des einen bedeutet vollständige Überdeckung des anderen Stephan Kleuker 161
26 (Auch) C3 findet nicht alle Probleme Annahme: Methode mach liefert nur positive public void testtruetrue(){ Assert.assertTrue(new Bsp().mach(0,0) > public void testfalsefalse(){ Assert.assertTrue(new Bsp().mach(1,1) > 0); Stephan Kleuker 162
27 Abschlussbeispiel Ci-Überdeckungen public int max(int x, int y, int z){ int max = 0; if (x>z) max = x; if (y>x) max = y; if (z>y) max = z; return max; max = x max = y int max = 0 if (x>z) if (y>x) if (z>y) Erinnerung: Suche Maximum von drei ganzen Zahlen max = z 6 7 return max Stephan Kleuker 163
28 Anweisungsüberdeckung - jeder Knoten einmal 7 = max (5, 7, 4) 7 = max (4, 5, 7) 0 max = 0 0 max = 0 5 max = x 2 7 max = y 4 max = z if (x>z) max = x if (y>x) 5 max = y if (z>y) 7 max = z 6 return max if (x>z) 5 4 if (y>x) 7 5 if (z>y) return max 7 Stephan Kleuker 164
29 Zweigüberdeckung - jede Kante einmal 7 = max (7, 5, 4) 7 = max (5, 7, 4) 7 = max (4, 5, 7) 0 max = 0 0 max = 0 0 max = 0 7 max = x 2 max = y 4 max = z if (x>z) 5 max = x if (y>x) 7 max = y 4 5 if (z>y) return max 7 4 max = z if (x>z) max = x 7 5 if (y>x) 5 max = y 4 7 if (z>y) 7 max = z 6 return max 7 Stephan Kleuker if (x>z) 5 4 if (y>x) 7 5 if (z>y) return max 7
30 Fehler kann gefunden werden Kenntnisse über Äquivalenzklassen! x>y=z y=z>x y>x=z x=z>y z>y=x y=x>z z>y>x z>x>y y>z>x y>x>z x>z>y x>y>z x=y=z Kenntnisse über Datenflussanalyse finden Fehler! benötigt große Programmiererfahrung benötigt sehr strukturiertes Denken benötigt Forderung nach intensiven Tests (auch DO-178B) benötigt Werkzeuge zur Automatisierung benötigt Zeit und Geld benötigt Management mit Software-Verstand Stephan Kleuker 166
31 Fazit: Äquivalenzklassen und Überdeckungen letztes Beispiel zeigt deutlich, dass man trotz systematischer Analyse Fehler übersehen kann!!! sinnvolles Vorgehen: 1. Testfälle aus typischen Verhalten ableiten 2. Testfälle aus Ausnahmesituationen ableiten 3. Äquivalenzklassen überlegen und kritische Fälle systematisch analysieren 4. Überdeckung messen, bei niedrigen Prozentzahlen zunächst das warum ergründen, dann ggfls. Testfälle für Überdeckungen konstruieren Nie, nie nur als zentrales Testziel 90 % - Überdeckung angeben, da dann Orientierung an Nutzerprozessen verloren geht Stephan Kleuker 167
32 Werkzeugunterstützung mit CodeCover (1/5) Stephan Kleuker 168
33 Werkzeugunterstützung mit CodeCover (2/5) Man muss Klassen auswählen, die gemessen werden sollen Stephan Kleuker 169
34 Werkzeugunterstützung mit CodeCover (3/5) Tests zum Messen starten Stephan Kleuker 170
35 Werkzeugunterstützung mit CodeCover (4/5) Perspektive wählen, Testsession wählen, detaillierte Ergebnis analysieren Stephan Kleuker 171
36 Werkzeugunterstützung mit CodeCover (5/5) Branch betrachtet nur Boolesche Ausdrücke Stephan Kleuker 172
37 Heimliche Verzweigungen (1/2) Vererbung ist eine mächtige Möglichkeit Doppelimplementierungen zu vermeiden Vererbung erlaubt dynamische Polymorphie (zur Laufzeit wird erst bestimmt, welche Methode aufgerufen wird) Prüfung zur Laufzeit entspricht heimlichen if mit Überprüfung durch instanceof Generell macht Polymorphie Entwicklung einfacher, wartbarer und flexibler; ist aber schwieriger zu testen als ohne Bei Testfallerstellung immer über durch Polymorphie entstehende Variationsmöglichkeiten nachdenken Stephan Kleuker 173
38 Heimliche Verzweigungen (2/2) public int anzahl(fachgebiet f){ int ergebnis = 0; for(mitarbeiter m:mitarbeiter) if(m.hatfachgebiet(f)) ergebnis++; return ergebnis; public int anzahl(fachgebiet f){ int ergebnis = 0; for(mitarbeiter m:mitarbeiter) if(m instanceof Projektleiter){ if (((Projektleiter)m).hatFachgebiet(f)) ergebnis++; else if(m.hatfachgebiet(f)) ergebnis++; return ergebnis; Mitarbeiter Projektleiter +hatfachgebiet():boolean Stephan Kleuker 174
39 Automatisierung der Ci-Tests Ohne eine Tool-Unterstützung ist es sehr aufwändig und fehlerträchtig solche Überprüfungen zu machen Für andere Sprachen als Java (und C#) sind Coverage- Werkzeuge vorhanden, die man bzgl. der zu untersuchenden Überdeckung einstellen kann Für Java gibt es Programme, die Anweisungsüberdeckungstest und teilweise Zweigüberdeckungstest (EclEmma, CodeCover, Covertura, JCoverage, Hansel für JUnit, Clover) unterstützen Wie muss so ein Werkzeug für Java arbeiten? Grundsätzlich muss der Code (Byte-Code) so modifiziert werden, dass Informationen über Abläufe gesammelt werden können Dieser Ansatz soll an einem einfachen Beispiel verdeutlicht werden (wobei hier direkt der Java-Code modifiziert wird) Stephan Kleuker 175
40 Ansatz zur Überdeckungsmessung (1/10) 7 Hinweis: Nicht normalisiert public class Teiler { public String pruefe(int i){ String ergebnis=""; // 1 if(i%2==0 && i%3==0){ // 2 if(i%5==0 && i%11==0){ // 3 ergebnis="durch 330"; // 4 else{ if(i%7==0 && i%9==0){ // 5 ergebnis="durch 126"; // 6 if("".equals(ergebnis)){ // 7 return "nix gefunden"; // 8 else{ return ergebnis; // 9 Stephan Kleuker 176
41 Ansatz zur Überdeckungsmessung (2/10) public String pruefe(kfg kfg, int i){ kfg.anweisung(1); String ergebnis=""; kfg.anweisung(2); if(i%2==0 && i%3==0){ kfg.anweisung(3); if(i%5==0 && i%11==0){ kfg.anweisung(4); ergebnis="durch 330"; else{ kfg.anweisung(5); if(i%7==0 && i%9==0){ kfg.anweisung(6); ergebnis="durch 126"; kfg.anweisung(7); if("".equals(ergebnis)){ kfg.anweisung(8); return "nix gefunden"; else{ kfg.anweisung(9); return ergebnis; kfg ist ein Objekt zur Beobachtung des Ablaufverhaltens, könnte mit assert eingebaut werden, müsste dann true zurück geben, alternativ als Klassenvariable Stephan Kleuker 177
42 Ansatz zur Überdeckungsmessung (3/10) public class Markierung{ private int marke=0; private int zaehler=0; public Markierung(int marke, int zaehler){ this.marke=marke; this.zaehler=zaehler; public void add(){ zaehler++; public int getmarke(){return marke; public int getzaehler(){return zaehler; Hilfsklasse, um zu zählen, wie oft eine Markierung überlaufen wurde public String tostring(){ return "Markierung: "+marke+" benutzt: "+zaehler; Stephan Kleuker 178
43 Ansatz zur Überdeckungsmessung (4/10) public class KFG { private List<Markierung> anweisungen = new ArrayList<Markierung>(); public void anweisung(int marke){ boolean eingefuegt=false; Iterator<Markierung> i=anweisungen.iterator(); while(i.hasnext() &&!eingefuegt){ Markierung tmp=i.next(); if(tmp.getmarke()==marke){ tmp.add(); eingefuegt=true; if (!eingefuegt) anweisungen.add(new Markierung(marke,1)); Stephan Kleuker 179
44 Ansatz zur Überdeckungsmessung (5/10) Bei der C0-Überprüfung wird ein Zahlwert übergeben, der der Anzahl der Anweisungen im Programm entspricht (es wird ausgehend von 1 nummeriert). Das Ergebnis ist eine Liste von Anweisungsnummern, die nie besucht wurde. private List<Integer> c0pruefung(int erwartet, List<Markierung> liste) { // Fehlerbehandlung bei falschem Parameter fehlt List<Integer> erg = new ArrayList<Integer>(); int[] prueffeld = new int[erwartet + 1]; for(markierung m :liste) prueffeld[m.getmarke()]++; for (int i = 1; i <= erwartet; i++) if (prueffeld[i] == 0) erg.add(i); return erg; Stephan Kleuker 180
45 Ansatz zur Überdeckungsmessung (6/10) public String pruefe(kfg kfg, int i){ kfg.anweisung(1); String ergebnis=""; kfg.zweig(1); kfg.anweisung(2); if(i%2==0 && i%3==0){ kfg.zweig(2); kfg.anweisung(3); if(i%5==0 && i%11==0){ kfg.zweig(3); kfg.anweisung(4); ergebnis="durch 330"; kfg.zweig(11); else{ kfg.zweig(4); kfg.anweisung(5); Für C1 ähnlicher Ansatz zu C0, man beachte die ergänzten else-zweige if(i%7==0 && i%9==0){ kfg.zweig(5); kfg.anweisung(6); ergebnis="durch 126"; kfg.zweig(10); else kfg.zweig(6); else kfg.zweig(7); kfg.anweisung(7); if("".equals(ergebnis)){ kfg.zweig(8); kfg.anweisung(8); return "nix gefunden"; else{ kfg.zweig(9); kfg.anweisung(9); return ergebnis; Stephan Kleuker 181
46 Ansatz zur Überdeckungsmessung (7/10) Für die C2-Überprüfung wird jeder atomare Boolescher Ausdruck markiert, diese Markierung wird zusammen mit dem Booleschen Wert an das Kontrollobjekt übergeben. Neben internen Berechnungen wird der übergebene Boolesche Wert als Ergebnis zurück gegeben. public String pruefe(kfg kfg, int i){ kfg.anweisung(1); String ergebnis=""; kfg.zweig(1); kfg.anweisung(2); if(kfg.bedingung(1,i%2==0) && kfg.bedingung(2,i%3==0)){ kfg.zweig(2); kfg.anweisung(3); if(kfg.bedingung(3,i%5==0) && kfg.bedingung(4,i%11==0)){ kfg.zweig(3); kfg.anweisung(4);... Stephan Kleuker 182
47 Ansatz zur Überdeckungsmessung (8/10) Der Ansatz zur C3-Überprüfung ist mit dem für C2 vergleichbar, damit man diese Fälle unterscheiden kann, wird eine zusätzliche Kontrollmethode genutzt. public String pruefe(kfg kfg, int i){ kfg.anweisung(1); String ergebnis=""; kfg.zweig(1); kfg.anweisung(2); if(kfg.bedingung2(1,kfg.bedingung(1,i%2==0) && kfg.bedingung(2,i%3==0))){ kfg.zweig(2); kfg.anweisung(3); if(kfg.bedingung2(2,kfg.bedingung(3,i%5==0) && kfg.bedingung(4,i%11==0))){ kfg.zweig(3);... Stephan Kleuker 183
48 Ansatz zur Überdeckungsmessung (9/10) public static void main(string[] args) { //von Teiler KFG kfg=new KFG(); Teiler t= new Teiler(); int[] testkandidaten ={330,378,30,42,38; //39 fehlt for(int i=0;i<testkandidaten.length;i++) t.pruefe(kfg,testkandidaten[i]); // System.out.println(kfg); für Gesamtergebnis System.out.println("C0-Probleme: "+kfg.c0pruefung(9)); System.out.println("C1-Probleme: "+kfg.c1pruefung(11)); System.out.println("C2-Probleme: "+kfg.c2pruefung(7)); System.out.println("C3-Probleme: "+kfg.c3pruefung(3)); Ausgabe C0-Probleme: [] C1-Probleme: [] C2-Probleme: [1] C3-Probleme: [] Hinweis: Bei der C3-Überprüfung, werden nur Fälle betrachtet, die bei C2 nicht gefunden wurden (korrektes Ergebnis durch die Vereinigung des C2- und des C3- Ergebnisses) Stephan Kleuker 184
49 Ansatz zur Überdeckungsmessung (10/10) import junit.framework.testcase; public class TeilerTest extends TestCase { private Teiler t; public TeilerTestnurEinTest(String arg0){super(arg0); public void setup(){ t= new Teiler(); public void test1(){ KFG kfg= new KFG(); asserttrue(t.pruefe(kfg,330).equals("durch 330")); asserttrue(t.pruefe(kfg,378).equals("durch 126")); asserttrue(t.pruefe(kfg,42).equals("nix gefunden")); asserttrue(t.pruefe(kfg,30).equals("nix gefunden")); asserttrue(t.pruefe(kfg,38).equals("nix gefunden")); asserttrue(t.pruefe(kfg,39).equals("nix gefunden")); asserttrue("c0",kfg.c0pruefung(9).isempty()); asserttrue("c1",kfg.c1pruefung(11).isempty()); asserttrue("c2",kfg.c2pruefung(7).isempty()); asserttrue("c3",kfg.c3pruefung(3).isempty()); public static void main(string[] args) { junit.textui.testrunner.run(teilertest.class); Stephan Kleuker 185
50 Datenflussabhängige Fehler public class Problem { public static int mach(boolean a, boolean b){ int x=0; if (a) x=2; else x=3; if (b) return(6/(x-3)); else return(6/(x-2)); public static void main(string[] args) { System.out.println(mach(true,true)); System.out.println(mach(false,false)); Beispielausführungen sorgen für C1- und C3- Überdeckung mach(true,false), mach(false,true) führen aber zum Abbruch -6 6 Stephan Kleuker 186
51 Definition Datenflussgraph [Lig] Ein Datenflussgraph ist ein erweiterter und markierter Kontrollflussgraph Kontrollflussgraph wird um einen neuen Startknoten in erweitert, der mit dem alten Startkonten verbunden ist Findet im Knoten die Definition einer Variablen x oder eine Zuweisung an x statt, wird dieser mit def(x) markiert Enthält der Aufruf einer Methode eine Variable d, so wird der Knoten in mit def(d) markiert Wird Variable y zur Berechnung in einer Zuweisung genutzt, wird Knoten mit c-use(y) [computational use] markiert Wird in einem Knoten eine Variable z zur Berechnung in einer Fallunterscheidung genutzt, so werden die ausgehenden Kanten mit p-use(z) [predicative use] markiert Hinweis: Kanten und Knoten erhalten Mengen von Markierungen Stephan Kleuker 187
52 Datenflussgraph Markierungsbeispiele int x=0 -> Knoten mit def(x) markiert int y=x+1 -> Knoten mit def(y) und c-use(x) markiert z=f(a,b,c) -> Knoten mit def(z) und c-use(a), c-use(b) und c-use(c) markiert i++ -> Knoten wird mit def(i) und c-use(i) markiert if (a>b) -> alle ausgehenden Kanten werden mit p-use(a) und p-use(b) markiert (in den meisten Definitionen wird auf eine Knotenmarkierung mit c-use(a) und c-use(b) verzichtet) Stephan Kleuker 188
53 Beispiel: Erweiterter Kontrollflussgraph def(a), def(b) def(x) p-use(a) in 1 2 mach(boolean a, boolean b){ int x=0; if (a) p-use(a) def(x) x=2; 3 4 x=3; def(x) p-use(b) 5 if (b) p-use(b) return(6/(x-3)); c-use(x) 6 7 return(6/(x-2)); c-use(x) Stephan Kleuker 189
54 Pfadbetrachtung Definitionsfreier Pfad bezüglich x Ein Pfad p = (n 1,..., n m ), der nach n 1 keine Definition einer Variablen x in n 2,..., n m-1 enthält, heißt definitionsfrei bezüglich x Anmerkung: Wenn in n 1 eine Definition von x stattfindet, hat diese Auswirkungen auf Nutzungen von x in Berechnungen auf diesem des Pfad Anmerkung 2: Grundsätzlich dient diese und die folgenden Definitionen zur Untersuchung der Frage, an welchen Stellen haben Veränderungen von Variablen ( Definitionen ) Auswirkungen. Stephan Kleuker 190
55 Mengen erreichbarer Knoten dcu(x,ni) Für einen Knoten ni und eine Variable x, wobei ni mit def(x) markiert ist, ist dcu(x,ni) die Menge aller Knoten nj, für die nj mit c-use(x) markiert ist und für die ein definitionsfreier Pfad bezüglich x vom Knoten ni zum Knoten nj existiert anschaulicher: in dcu(x,ni) sind alle Knoten, die x nutzen und für die x seit ni eventuell nicht geändert wurde (zeigt den Auswirkungsbereich von def(x)) dpu(x,ni) ist die Menge aller Kanten (nj, nk), wobei ni mit def(x) markiert ist, die mit p-use(x) markiert sind und für die ein definitionsfreier Pfad bezüglich x von ni nach nj existiert Hintergrund: Es sollen Testvollständigkeitskriterien auf der Basis von Variablenzugriffen definiert werden Stephan Kleuker 191
56 Beispiel: dcu und dpu-markierungen in: def(a), def(b) dcu(a,in)=dcu(b,in)= Ø dpu(a,in)={(2,3),(2,4) dpu(b,in)={(5,6),(5,7) in 1 mach(boolean a, boolean b){ int x=0; def(x) dcu(x,1)= Ø dpu(x,1)= Ø p-use(a) 2 if (a) p-use(a) def(x) dcu(x,3)={6,7 dpu(x,3)=ø x=2; 3 4 x=3; 5 if (b) p-use(b) p-use(b) def(x) dcu(x,4)={6,7 dpu(x,4)=ø return(6/(x-3)); c-use(x) 6 7 return(6/(x-2)); c-use(x) Anmerkung: Markierungen werden auch von Compilern zur Optimierung genutzt Stephan Kleuker 192
57 Datenfluss Testüberdeckungen (1/5) all defs-kriterium jede Wertzuweisung soll mindestens einmal benutzt werden, d.h. für jeden Knoten ni und jede Variable x, für die ni mit def(x) markiert ist, soll ein definitionsfreier Pfad zu einem Knoten aus dcu(x,ni) oder einer Kante aus dpu(x,ni) führen, insofern mindestens eine Menge nicht leer ist (heißt: jede Definition wird mindestens einmal genutzt) Beispiel: Eine Menge von Tests, die die Pfade (in,1,2,3,5,6) und (in,1,2,4,5,7) durchlaufen, erfüllt das all defs-kriterium [ohne das Problem zu finden] all defs-kriterium, subsumiert weder Zweig- noch Anweisungsüberdeckung all defs-kriterium findet nebenbei überflüssige Zuweisungen an Variablen x, wenn dcu(x,ni)=dpu(x,ni)= Ø gilt Stephan Kleuker 193
58 Datenfluss Testüberdeckungen (2/5) all p-uses-kriterium für jeden Knoten ni und jede Variable x, wobei ni mit def(x) markiert ist, muss ein definitionsfreier Pfad bezüglich x zu allen Elementen aus dpu(x,ni) in der Menge der getesteten Pfade enthalten sein Beispiel: Eine Menge von Tests, die die Pfade (in,1,2,3,5,6) und (in,1,2,4,5,7) durchlaufen, erfüllt das all p-uses- Kriterium [ohne das Problem zu finden] all p-uses-kriterium, subsumiert die Zweig- und damit auch die Anweisungsüberdeckung Stephan Kleuker 194
59 Datenfluss Testüberdeckungen (3/5) all c-uses-kriterium für jeden Knoten ni und jede Variable x, wobei ni mit def(x) markiert ist, muss ein definitionsfreier Pfad bezüglich x zu allen Elementen aus dcu(x,ni) in der Menge der getesteten Pfade enthalten sein Beispiel: Eine Menge von Tests, die die Pfade (in,1,2,3,5,6), (in,1,2,3,5,7), (int,1,2,4,5,6) und (in,1,2,4,5,7) durchlaufen, erfüllt das all p-uses-kriterium [und findet das Problem] all c-uses-kriterium, subsumiert weder Zweig- noch Anweisungsüberdeckung Stephan Kleuker 195
60 Datenfluss Testüberdeckungen (4/5) all uses-kriterium für jeden Konten ni und jede Variable x, wobei ni mit def(x) markiert ist, muss ein definitionsfreier Pfad bezüglich x zu allen Elementen aus dcu(x,ni) und dpu(x,ni) in der Menge der getesteten Pfade enthalten sein Beispiel: Eine Menge von Tests, die die Pfade (in,1,2,3,5,6), (in,1,2,3,5,7), (int,1,2,4,5,6) und (in,1,2,4,5,7) durchlaufen, erfüllt das all uses-kriterium [und findet das Problem] all uses-kriterium, subsumiert die Zweig- und damit auch die Anweisungsüberdeckung Stephan Kleuker 196
61 Datenfluss Testüberdeckungen (5/5) Testhierarchie all uses all c-uses all defs all p-uses Pfadüberdeckungstest (C 1 ) Anweisungsüberdeckungstest (C 0 ) Anmerkung: es gibt weitere Überdeckungsansätze, die auf diesen Überlegungen basieren Stephan Kleuker 197
62 Info: Standard DO-178B Zertifizierung Federal Aviation Administration (FAA), Software für Luftverkehrssysteme durch Standard DO-178B für requirement-based Tests and Code Coverage Analyse DO-178B-Levels orientieren sich an den Konsequenzen möglicher Softwarefehler: katastophal (Level A), gefährlich/schwerwiegend (Level B), erheblich (Level C), geringfügig (Level D) bzw. keine Auswirkungen (Level E) Je nach DO-178B-Level wird der 100%-ige Nachweis folgender Testabdeckungen (Code Coverages) verlangt: DO-178B Level A: Modified Condition Decision Coverage (MC/DC) Branch/Decision Coverage Statement Coverage DO-178B Level B: Branch/Decision Coverage Statement Coverage Stephan Kleuker 198
Klassen von Testfällen. 3. Äquivalenzklassentests. Äquivalenzklassenbildung. Beispiele für Äquivalenzklassen von Eingaben
3. Äquivalenzklassentests Motivation der Äquivalenzidee typische Findung von Äquivalenzklassen integrierte Grenzwertanalyse abgeleitete Testfälle Klassen von Testfällen In der Literatur gibt es recht unterschiedlich
Software-Test: Strukturtest
Software-est: Strukturtest Andreas Zeller Lehrstuhl für Softwaretechnik Universität des Saarlandes, Saarbrücken 2006-02-02 Welche estfälle auswählen? Ich kann nur eine beschränkte Zahl von Läufen testen
Klassen von Testfällen. 3. Äquivalenzklassentests. Äquivalenzklassenbildung. Beispiele für Äquivalenzklassen von Eingaben
3. tests Motivation der Äquivalenzidee typische Findung von integrierte Grenzwertanalyse abgeleitete Testfälle Klassen von Testfällen In der Literatur gibt es recht unterschiedlich detaillierte Klassifizierungen
Software Engineering in der Praxis
Software Engineering in der Praxis Praktische Übungen Pinte, Spisländer FAU Erlangen-Nürnberg Strukturelles Testen 1 / 11 Strukturelles Testen Florin Pinte Marc Spisländer Lehrstuhl für Software Engineering
Kontrollflußorientierte Testverfahren. Gliederung
Kontrollflußorientierte Testverfahren Alexander Steinhöfer, Christian Grafe WS0607 / VInf5 Gliederung 1. Definition und Theorie 2. Kontrollflussgraphen 3. Arten 1. Anweisungsüberdeckungstest (C 0 ) 2.
Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Nachklausur am
1 Aufgabe 1 Analysiert man das Verfahren anhand des angegebenen Beispiels, ist schnell zu erkennen, dass das erste Element von infeld2 nach outfeld an Index 2 kopiert wird, das zweite den Index 4 bekommt,
Qualitätssicherung von Software (SWQS)
Qualitätssicherung von Software (SWQS) Prof. Dr. Holger Schlingloff Humboldt-Universität zu Berlin und Fraunhofer FOKUS 25.4.2013: strukturelle Tests Fragen zur Wiederholung robuste vs. nicht-robuste Grenzwertanalyse?
White-Box-Test. Black-Box-Test. Testen. Testen. Vorlesung Methoden des Software Engineering. Martin Wirsing. Einheit D.2,
21.12.04 1 Ziele 21.12.04 2 Vorlesung Methoden des Software Engineering Techniken des Black-Box-Testens und des White-Box-Testens kennen lernen Block D Qualitätssicherung Black-Box-Test und White-Box-Test
Info: Standard DO-178B. 5. Mocking. Zusammenspiel von Klassen testen. Allgemein: Klassen testbar machen
Info: Standard DO-178B Zertifizierung Federal AviationAdministration (FAA), Software für Luftverkehrssysteme durch Standard DO-178B für requirement-based Tests and Code Coverage Analyse DO-178B-Levels
Whitebox-Tests: Allgemeines
-Tests: Allgemeines Andere Bezeichnungen Logic driven, Strukturelles Der Tester entwickelt Testfälle aus einer Betrachtung der Ablauflogik des Programms unter Berücksichtigung der Spezifikation Intuitiv
Einstieg in die Informatik mit Java
Vorlesung vom 6.11.07, Weitere Anweisungen Übersicht 1 Verbundanweisung 2 Bedingte Anweisung 3 Auswahlanweisung 4 for Schleife 5 while Schleife 6 do Schleife 7 break Anweisung 8 continue Anweisung 9 Leere
Software Engineering Testen von Software (1)
Software Engineering Testen von Software (1) Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik Hochschule Kaiserslautern, Standort Zweibrücken 1 Qualitätssicherung (engl.:
Aufgaben Objektentwurf
Aufgaben Objektentwurf (Einschub zum 5. Tutorium) Tutorium 6 13. März 2009 Svetlana Matiouk, Uni Bonn Ferientutorien zur Vorlesung Softwaretechnologie WS 2008 6. Treffen, Aufgabe 1 Vorwärtsmodellierung
Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8
Java 8 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Oktober 2014 JAV8 5 Java 8 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen
Elementare Konzepte von
Elementare Konzepte von Programmiersprachen Teil 2: Anweisungen (Statements) Kapitel 6.3 bis 6.7 in Küchlin/Weber: Einführung in die Informatik Anweisungen (statements) in Java Berechnung (expression statement)
Überdeckungs-, Last- und Stresstest
Überdeckungs-, Last- und Stresstest Stefanie Brose, Linh Phong Le Methoden und Werkzeuge zur Softwareproduktion Technische Universität Berlin WS 2004/2005 [email protected], [email protected] Abstract
Softwaretechnik II. Sommersemester Grundlagen des Softwaretestens II. Stefan Berlik
1 / 65 Softwaretechnik II Sommersemester 2014 Grundlagen des Softwaretestens II Stefan Berlik Fachgruppe Praktische Informatik Fakultät IV, Department Elektrotechnik und Informatik Universität Siegen 24.
FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung
C Sprachelemente für Übung 2 Typumwandlungen (type casts) Bei Ausdrücken, in denen Operanden mit unterschiedlichem Typ vorkommen, werden diese vom Compiler vor der Ausführung automatisch in einen gemeinsamen
JUnit 4 Tutorial. Wolfgang Stöttinger
JUnit 4 Tutorial Wolfgang Stöttinger JUnit 4 Tutorial... 1 1 Einführung in JUnit 4... 3 1.1 Wie funktioniert JUnit?... 3 1.2 Annotations... 3 1.2.1 Test Annotation... 3 1.2.2 Before Annotation... 3 1.2.3
ASIL-relevante SW-Module identifiziert! Was nun?
ASIL-relevante SW-Module identifiziert! Was nun? ASIL-relevante SW-Module testen Blick in die EN 26262 Häufige Irrtümer in der Praxis Funktionale Tests in die Tiefe Funktionale Tests weiter optimieren
Beispiel: DB-Mock (1/7)
Beispiel: DB-Mock (1/7) Aufgabe: DB, auf die vereinfachend nur lesend zugeriffen wird mocken warum: benötigte keine DB-Lizenz, garantiert gleiche Werte ohne aufwändiges reset, kein Zeitverlust durch Verbindungsaufbau
Strukturorientierter Softwaretest Erstellung eines Tools zur Überdeckungsmessung
Strukturorientierter Softwaretest Erstellung eines Tools zur Überdeckungsmessung Ronny Treyße & Hendrik Seffler HU Berlin Themenvorstellung p.1/33 Aufgabenstellung Überdeckungstesttool für C++ & Java Das
Programmieren 2 Java Überblick
Programmieren 2 Java Überblick 1 Klassen und Objekte 2 Vererbung 4 Innere Klassen 5 Exceptions 6 Funktionsbibliothek 7 Datenstrukturen und Algorithmen 8 Ein-/Ausgabe 9 Graphische Benutzeroberflächen 10
Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015
Java Crashkurs Kim-Manuel Klein ([email protected]) May 4, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)
C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22
C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven
Methoden des Software Engineering
1 Vorlesung Methoden des Software Engineering Block F Test und Validierung F 2 Black-Box-Test und White-Box-Test Christian Prehofer Unter Verwendung von Materialien von Martin Wirsing 2 Vorlesungsübersicht
Grundlagen der Programmierung Teil1 Einheit III Okt. 2010
Grundlagen der Programmierung Teil1 Einheit III - 22. Okt. 2010 GDP DDr. Karl D. Fritscher basierend auf der Vorlesung Grundlagen der Programmierung von DI Dr. Bernhard Pfeifer Einschub Bevor wir mit den
Einstieg in die Informatik mit Java
Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form
System.out.println("TEXT");
Inhaltsübersicht - Erstes Beispiel - Datentypen - Ausdrücke und Operatoren - Schleifen / Bedinungen - Struktogramme - Grundgerüst eines Programms in JAVA - Einlesen von Daten Erstes Beispiel public class
1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH
1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH Die Umgebungsvariable CLASSPATH kann im Hamster-Simulator sowohl für Compiler als auch für die Ausführung des Hamster-Programms gesetzt werden: Hierdurch
Allgemein: Klassen testbar machen. 5. Mocking. Mocks programmieren. Zusammenspiel von Klassen testen
5. Mocking Allgemein: Klassen testbar machen Wie werden Klassen testbar Entwicklung von Mocks mit der Hand Einführung in JMock Spezifikation von Mocks mit JMock Wann ist Mocking-Werkzeug sinnvoll Literatur:
Einstieg in die Informatik mit Java
1 / 47 Einstieg in die Informatik mit Java Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 47 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung,
Java Einführung Methoden. Kapitel 6
Java Einführung Methoden Kapitel 6 Inhalt Deklaration und Aufruf von Methoden Lokale und globale Namen (Bezeichner) Sichtbarkeit und Lebensdauer von Variablen in Methoden Überladen von Methoden 2 Methoden
Probeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
Aufgabe 1.90: Ein Geschäft gibt ihren Kunden unterschiedliche Rabatte. Schreiben ein Programm, das folgende Rabattklassen vorsieht:
Aufgabe 1.90: Ein Geschäft gibt ihren Kunden unterschiedliche Rabatte. Schreiben ein Programm, das folgende Rabattklassen vorsieht: o Klasse 0: kein Rabatt o Klasse 1: 4,5 % Rabatt o Klasse 2: 8,75% Rabatt
Programmieren in Java
Programmieren in Java Vorlesung 10: Ein Interpreter für While Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1
Programmieren I. Kontrollstrukturen Heusch 8 Ratz Institut für Angewandte Informatik
Programmieren I Kontrollstrukturen Heusch 8 Ratz 4.5 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Arten von Kontrollstrukturen Neben der Sequenz (Aneinanderreihung von Anweisungen)
EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 14/15
EINI LW/ Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 14/15 Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund [email protected]
3. Anweisungen und Kontrollstrukturen
3. Kontrollstrukturen Anweisungen und Blöcke 3. Anweisungen und Kontrollstrukturen Mit Kontrollstrukturen können wir den Ablauf eines Programmes beeinflussen, z.b. ob oder in welcher Reihenfolge Anweisungen
Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A
2.4.6. Kontrollstrukturen if-anweisung: Bedingte Ausführung (Verzweigung) 2 Varianten: if (Bedingung) Anweisung (Anweisung = einzelne Anweisung oder Block) Bedeutung: die Anweisung wird nur ausgeführt,
Softwaretechnik 1 Tutorium
Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Softwaretechnik 1 Tutorium 06. Juli 2009 Matthias Thoma ([email protected]) Heute Übungsblatt Nr. 4 + Übungsblatt Nr. 5 Softwarequalität
6. Tutorium zu Softwaretechnik I
6. Tutorium zu Softwaretechnik I Parallelität und Testen Michael Hoff 01.07.2014 INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum
Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung
Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"
Objektorientierung (OO)
Objektorientierung (OO) Objekte haben Zustände (oder Eigenschaften, Attribute) und Verhalten Zustände: Objektvariablen (in Java auch fields) Verhalten (oder Aktionen): Methoden (methods, Funktionen) members
SEP 114. Design by Contract
Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit
Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1
Fachhochschule Stralsund Fachbereich Maschinenbau Lehrgebiet Informatik Prof. Dr.-Ing. Ch.Wahmkow Arbeitsblätter für die Lehrveranstaltung OOP I. Aufbau eines Java-Programmes JAVA 1 Escape-Sequenzen zur
FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Blöcke. Beispiel: Variablen in Blöcken
4 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Blöcke Blöcke erweitern einzelne Anweisungen, etwa bei Kontrollstrukturen später Beispiel: Einzelne Anweisung: anweisung; Erweiterung
1 Polymorphie (Vielgestaltigkeit)
1 Polymorphie (Vielgestaltigkeit) Problem: Unsere Datenstrukturen List, Stack und Queue können einzig und allein int-werte aufnehmen. Wollen wir String-Objekte, andere Arten von Zahlen oder andere Objekttypen
CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)
CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik) Einfache Programme: Programm-Argument, Bedingte Anweisungen, Switch, Enum Boolesche Werte und Ausdrücke Seite 1 Beispiel: Umrechnen
Javakurs für Anfänger
Javakurs für Anfänger Einheit 04: Einführung in Kontrollstrukturen Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda 1. Teil: Einführung in Kontrollstrukturen 3 Grundstrukturen von
Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration
Algorithmen & Programmierung Steuerstrukturen im Detail Selektion und Iteration Selektion Selektion Vollständige einfache Selektion Wir kennen schon eine Möglichkeit, Selektionen in C zu formulieren: if
Eine kleine Befehlssammlung für Java Teil1
Eine kleine Befehlssammlung für Java Teil1 Definition einer Klasse public class Klasse{ Hier wird der Name der Klasse definiert. In diesem Fall ist das Klasse. Der Name muss mit dem Namen der.class Datei
Grundlagen der Programmierung Teil1 Einheit III Okt. 2009
Grundlagen der Programmierung Teil1 Einheit III - 23. Okt. 2009 GDP DDr. Karl D. Fritscher basierend auf der Vorlesung Grundlagen der Programmierung von DI Dr. Bernhard Pfeifer Ausdrücke & Anweisungen
C++ OpenCppCoverage. Detlef Wilkening
http://www.wilkening-online.de Seite 1 / 52 C++ OpenCppCoverage Detlef Wilkening 10.11.2016 http://www.wilkening-online.de Seite 2 / 52 Warum überhaupt dieser Vortrag? Wir waren mal wieder in einer Gruppe
6. Iteration (Schleifenanweisungen)
6. Iteration (Schleifenanweisungen) Java-Beispiel: TemperatureTable.java K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16 Version: 9. Nov. 2015 2 Schwerpunkte While-Anweisung: "abweisende"
Systematisches Testen
Systematisches Testen SEP 136 Unit Testing Objektorientierte Entwicklung Entwicklung von vielen unabhängigen Einheiten (Klassen, Methoden), aus denen das Gesamtprogramm zusammengesetzt wird. Ziel: Wenn
Überdeckungsmessung von Java-Programmen
Überdeckungsmessung von Java-Programmen TAV 20, 16.-17. Oktober 2003 method-park, Erlangen Mario Winter, Hans-Gerd Wefels FH Köln Überdeckungsmessung von Java-Programmen Dynamischer Test in der Praxis
Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung
Beispiele für Ausdrücke Der imperative Kern Deklarationen mit Initialisierung Variablendeklarationen int i = 10; int j = 15; Beispiele für Ausdrücke i+j i++ i & j i j [] [static]
AuD-Tafelübung T-B5b
6. Übung Sichtbarkeiten, Rekursion, Javadoc Di, 29.11.2011 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit 3 Stack und Heap Stack Heap 4 Blatt 6 1 Blatt 5 2 OOP Klassen Static vs. Instanzen Sichtbarkeit
Java: Eine kurze Einführung an Beispielen
Java: Eine kurze Einführung an Beispielen Quellcode, javac und die JVM Der Quellcode eines einfachen Java-Programms besteht aus einer Datei mit dem Suffix.java. In einer solchen Datei wird eine Klasse
Grundzüge der Wirtschaftsinformatik WS 2002/03. Wiederholung Java. Programmierzyklus. Heiko Rossnagel Problem
Grundzüge der Wirtschaftsinformatik WS 2002/03 Wiederholung Java Heiko Rossnagel www.m-lehrstuhl.de accelerate.com Grundzüge der Wirtschaftsinformatik WS 2002/03 1 Programmierzyklus Problem Formulierung
Welche Informatik-Kenntnisse bringen Sie mit?
Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt
Einführung in die Programmierung 1
Einführung in die Programmierung 1 Einführung (S.2) Einrichten von Eclipse (S.4) Mein Erstes Programm (S.5) Hallo Welt!? Programm Der Mensch (S.11) Klassen (S.12) Einführung Wie Funktioniert Code? Geschriebener
Einfache Rechenstrukturen und Kontrollfluss II
Einfache Rechenstrukturen und Kontrollfluss II Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer http://www.pst.informatik.uni-muenchen.de/lehre/ss06/infoii/ SS 06 Ziele Lernen imperative
Präzedenz von Operatoren
Präzedenz von Operatoren SWE-30 Die Präzedenz von Operatoren bestimmt die Struktur von Ausdrücken. Ein Operator höherer Präzedenz bindet die Operanden stärker als ein Operator geringerer Präzedenz. Mit
Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2
Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 2 SS 2016
Musterlösung Stand: 5. Februar 2009
Fakultät IV Elektrotechnik/Informatik Probeklausur Einführung in die Informatik I Hinweis: Diese Probeklausur ist eine kleine Aufgabensammlung, die etwa dem Schwierigkeitsgrad der Teilleistung TL 2 (Programmiertest)
Java: Vererbung. Teil 3: super() www.informatikzentrale.de
Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und
JAVA - Methoden
Übungen Informatik I JAVA - http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 Folie 1 sind eine Zusammenfassung von Deklarationen und Anweisungen haben einen Namen und können
1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster
1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster Aufgabe: Bearbeitungszeit: ca. 1/4 Std) Schreiben Sie ein "objektorientiertes" Programm ("CuB_05_1") für das Sammeln der Körner. Aufgabenbeschreibung:
Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden
Kapitel 8 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Methoden Überladen von Methoden Der this-zeiger Konstruktoren Vererbung WS 07/08
Software Engineering. Produktqualität - Dynamische Testverfahren
Software Engineering Produktqualität - Dynamische Testverfahren Die Inhalte der Vorlesung wurden primär auf Basis der jeweils angegebenen Literatur erstellt. Darüber hinaus finden sich ausgewählte Beispiele
Repetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
Technische Universität Berlin SS 2003. [email protected]
Seminar Softwaretechnik Automatisiertes spezifikationsbasiertes Testen von Software Technische Universität Berlin SS 2003 Veranstalter: Betreuer: Seminarthema: Stefan Jänichen Mario Friske Codeabdeckung
Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7
Java 7 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Dezember 2011 JAV7 5 Java 7 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen
Grundlagen der Fehlerbehandlung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 06: Ausnahme- und Fehlerbehandlung in Java.
Universität Osnabrück 1 Grundlagen der Fehlerbehandlung 3 - Objektorientierte Programmierung in Java Vorlesung 06: Ausnahme- und Fehlerbehandlung in Java SS 2006 Prof. Dr. F.M. Thiesing, FH Osnabrück Wenn
Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt
Klassen und Objekte Klassen sind Vorlagen für Objekte. Objekte haben Attribute Konstruktoren Methoden Aus einer Klasse kann man beliebig viele Objekte herstellen. Attribute bestimmen die Eigenschaften
Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...
PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:
Wie entwerfe ich ein Programm?
Wie entwerfe ich ein Programm? Welche Objekte brauche ich? Flussdiagramme für Programmablauf Vorcode Testcode Hauptcode Wir spielen Lotto! Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 5 +
Einfaches Programmtesten
http://www.constructionphotography.com Einfaches Programmtesten OOPM, Ralf Lämmel Naives Testen versus systematisches Testen (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 76 (C) Ralf Lämmel, OOPM,
Kapitel 5. Programmierkurs. Kontrollstrukturen. Arten von Kontrollstrukturen. Kontrollstrukturen Die if-anweisung Die switch-anweisung
Kapitel 5 Programmierkurs Birgit Engels, Anna Schulze ZAIK Universität zu Köln Kontrollstrukturen Die if-anweisung Die switch-anweisung Die for-schleife Die while-schleife Die do-schleife WS 7/8 /55 Kontrollstrukturen
Swp08-6 Verantwortliche: Yundensuren, Baigalmaa. Testkonzept
Testkonzept 1.Einführung Um die Zuverläsigkeit und die Qualität der Software und des gesamten Systems zu verbessern, sind Tests durchzuführen. Die Testreihe läst sich in drei Stufen einteilen, nülich Komponententest,
JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.
JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung
JAVA - Methoden - Rekursion
Übungen Informatik I JAVA - Methoden - Rekursion http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 1 Methoden Methoden sind eine Zusammenfassung von Deklarationen und Anweisungen
Arbeitsblatt zu Methoden
Arbeitsblatt zu Methoden In den vorhergehenden Programmen haben wir bereits jede Menge Methoden benutzt: 1. kara.move(), kara.turnright(), kara.putleaf() Dies sind alles Methoden, die etwas ausführen,
3.4 Struktur von Programmen
3.4 Struktur von Programmen Programme sind hierarchisch aus Komponenten aufgebaut. Für jede Komponente geben wir Regeln an, wie sie aus anderen Komponenten zusammengesetzt sein können. program ::= decl*
Testen - Konzepte und Techniken
Testen - Konzepte und Techniken Magdalena Luniak 21.11.2007 Magdalena Luniak () Testen - Konzepte und Techniken 21.11.2007 1 / 42 Übersicht 1 Motivation 2 Grundbegrie 3 Testen im Softwareentwicklungsprozess
Kapitel 4: Netzplantechnik Gliederung der Vorlesung
Gliederung der Vorlesung 1. Grundbegriffe 2. Elementare Graphalgorithmen und Anwendungen 3. Kürzeste Wege 4. Netzplantechnik 5. Minimal spannende Bäume 6. Traveling Salesman Problem 7. Flüsse in Netzwerken
Programmieren I. Kontrollstrukturen Heusch 8 Ratz Institut für Angewandte Informatik
Programmieren I Kontrollstrukturen Heusch 8 Ratz 4.5 KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Arten von Kontrollstrukturen Neben der Aneinanderreihung von Anweisungen (Sequenz)
Programmieren I. Kontrollstrukturen. Heusch 8 Ratz 4.5. www.kit.edu. Institut für Angewandte Informatik
Programmieren I Kontrollstrukturen Heusch 8 Ratz 4.5 KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Arten von Kontrollstrukturen
Objektorientierte Programmierung
Objektorientierte Programmierung Eine Einführung mit anschaulichen Beispielen aus der Java-Welt apl. Prof. Dr. Achim Ebert Inhalt Kapitel 3: Kontrollstrukturen Einfache Anweisungen Anweisungsblöcke Steuerung
Einführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In
Programmieren I. Kapitel 5. Kontrollfluss
Programmieren I Kapitel 5. Kontrollfluss Kapitel 5: Kontrollfluss Ziel: Komplexere Berechnungen im Methodenrumpf Ausdrücke und Anweisungen Fallunterscheidungen (if, switch) Wiederholte Ausführung (for,
Objektorientierte Programmierung OOP Programmieren mit Java
Objektorientierte Programmierung OOP Programmieren mit Java 5.1 Elementare Anweisungen 5.1.1 Ausdrucksanweisung 5.1.2 Leere Anweisung 5.1.3 Blockanweisung 5.1.4 Variablendeklaration 5.2 Bedingungen 5.2.1
2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung:
2.4 Schleifen Schleifen beschreiben die Wiederholung einer Anweisung bzw. eines Blocks von Anweisungen (dem Schleifenrumpf) bis eine bestimmte Bedingung (die Abbruchbedingung) eintritt. Schleifen unterscheiden
Flussdiagramm / Programmablaufplan (PAP)
Flussdiagramm / Programmablaufplan (PAP) Basissysmbole Grenzstelle (Anfang, Zwischenhalt oder Ende des Programms/Algorithmus) Verbindung Zur Verdeutlichung der Ablaufrichtung werden Linien mit einer Pfeilspitze
