logo

Crowdly

Beispielablauf: Für das vorige Beispiel wurde ein erster Programmentwurf mit ...

✅ The verified answer to this question is available below. Our community-reviewed solutions help you understand the material better.

Beispielablauf:

Für das vorige Beispiel wurde ein erster Programmentwurf mit folgendem Quellcode geschrieben:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

import

javax.swing.JOptionPane;

/**

* In diesem Programm wird die Anzahl der positiven und die Anzahl

* der negativen Zahlen in einer Zahlenfolge ausgegeben. Die

* Gesamtanzahl der Zahlen in der Zahlenfolge muss zuvor eingegeben

* werden.

* @author Lisa Vittori

* @version 2017-03-28

*/

public class

PositiveNegative {

public static void

main(String[] args) {

String eingabe;

int

anzahl, zahl, anzPositiv, anzNegativ;

anzPositiv =

0

;

anzNegativ =

0

;

eingabe = JOptionPane.

showInputDialog(null, "Wie viele"

+

" Zahlen solle eingegeben werden?"

);

anzahl = Integer.

parseInt

(eingabe);

if(anzahl >= 0

) {

for(;anzahl >= 0

; anzahl--) {

eingabe = JOptionPane.

showInputDialog(null, "Bitte"

+

" geben Sie eine zu überprüfende Zahl ein."

);

zahl = Integer.

parseInt

(eingabe);

if(zahl > 0

) {

anzPositiv++;

}

else

{

anzNegativ++;

}

}

JOptionPane.

showMessageDialog(null, anzPositiv + " positive"

+

" Zahl(en), " + anzNegativ + " negative Zahl(en)"

);

}

else

{

JOptionPane.

showMessageDialog(null, "Als Anzahl sind"

+

" nur positive Zahlen (größer als 0) erlaubt!"

);

}

}

}

 

Wenn man mit dem obigen Programm die einzelnen Testfälle im

Testprotokoll durchgeht, dann ist folgendes Ergebnis zu sehen:

Nr.

NF/GF/FF

Eingabe:

anzahl

Eingabe:

zahl

Erwartetes Ergebnis:

Ok?

1

NF

5

beliebig

5 Zahlen können eingegeben werden

X

2

GF

1

beliebig

1 Zahl kann eingegeben werden.

X

3

GF

0

---

Fehlermeldung, das Programm wird danach beendet

X

4

FF

-1

----

Fehlermeldung, das Programm wird danach beendet

Ok

5

NF

1

5

Ausgabe: "1 positive Zahl(en), 0 negative Zahl(en)"

X

6

NF

1

-7

Ausgabe: "0 positive Zahl(en), 1 negative Zahl(en)"

X

7

GF

1

1

Ausgabe: "1 positive Zahl(en), 0 negative Zahl(en)"

X

8

GF

1

-1

Ausgabe: "0 positive Zahl(en), 1 negative Zahl(en)"

X

9

GF

1

0

Ausgabe: "0 positive Zahl(en), 0 negative Zahl(en)"

X

10

NF

5

1,-1,2,-3,0

Ausgabe: "2 positive Zahl(en), 2 negative Zahl(en)"

X

 

Die fehlgeschlagenen Testfälle liefern statt des erwarteten Ergebnisses

folgendes Ergebnis:

  • Testfall 1: 6 Zahlen können eingegeben werden
  • Testfall 2: 2 Zahlen können eingegeben werden
  • Testfall 3: 1 Zahl kann eingegeben werden
  • Testfall 5: 2 Zahlen können eingegeben werden
  • Testfall 6: 2 Zahlen können eingegeben werden
  • Testfall 7: 2 Zahlen können eingegeben werden
  • Testfall 8: 2 Zahlen können eingegeben werden
  • Testfall 9: 2 Zahlen können eingegeben werden
  • Testfall 10: 6 Zahlen können eingegeben werden

Aus der Fehlerart kann man unter Umständen schnell auf den Fehler

schließen. So funktioniert offenbar die Wiederholung der Eingabe nicht

richtig und es wird die Eingabe zu oft wiederholt. Die Zeile, die für

das Wiederholen der Eingabe zuständig ist, ist der Schleifenkopf in

Zeile 20. Hier kann mit der Korrektur angesetzt werden. Die neue Zeile

20 sieht folgendermaßen aus (

> statt >= ):

for(;anzahl > 0; anzahl--) {

Nach Ausbessern dieses Fehlers muss das Testen wiederholt werden. Im

Testprotokoll wird der Erfolg oder Misserfolg neuerlich festgehalten:

Nr.

NF/GF/FF

Eingabe:

anzahl

Eingabe:

zahl

Erwartetes Ergebnis:

Ok?

1

NF

5

beliebig

5 Zahlen können eingegeben werden

Ok

2

GF

1

beliebig

1 Zahl kann eingegeben werden.

Ok

3

GF

0

---

Fehlermeldung, das Programm wird danach beendet

X

4

FF

-1

----

Fehlermeldung, das Programm wird danach beendet

Ok

5

NF

1

5

Ausgabe: "1 positive Zahl(en), 0 negative Zahl(en)"

Ok

6

NF

1

-7

Ausgabe: "0 positive Zahl(en), 1 negative Zahl(en)"

Ok

7

GF

1

1

Ausgabe: "1 positive Zahl(en), 0 negative Zahl(en)"

Ok

8

GF

1

-1

Ausgabe: "0 positive Zahl(en), 1 negative Zahl(en)"

Ok

9

GF

1

0

Ausgabe: "0 positive Zahl(en), 0 negative Zahl(en)"

X

10

NF

5

1,-1,2,-3,0

Ausgabe: "2 positive Zahl(en), 2 negative Zahl(en)"

X

 

Tatsächliche Ergebnisse:

  • Testfall 3: keine Fehlermeldung, statt dessen Ausgabe: "0 positive

    Zahl(en), 0 negative Zahl(en)"

  • Testfall 9: Ausgabe: "0 positive Zahl(en), 1 negative Zahl(en)"
  • Testfall 10: Ausgabe: "2 positive Zahl(en), 3 negative Zahl(en)"

Das Ergebnis dieses Testablaufs ist schon besser, aber das Programm ist

offenbar noch immer fehlerhaft. Es sind also noch weitere Korrekturen

mit nachfolgenden Tests notwendig. Der Prozess wird so lange wiederholt,

bis keine Fehler mehr auftreten.

In professionellen Programmierumgebungen werden solche Tests möglichst

automatisiert abgearbeitet. Damit wird vermieden, dass das Ausbessern

eines Bugs, eine Reihe weiterer neuer Bugs nach sich zieht.

Beim Test Driven Development

werden solche Tests auch entworfen,

bevor noch der Quellcode begonnen wird. Das Ziel ist dann mit jedem

Entwicklungsschritt mehr Testfälle auf "OK" bzw. grün zu setzen. Auch

abseits davon entspricht es guter Programmierpraxis, die Testfälle zu

entwerfen bevor mit der eigentlichen Programmentwicklung begonnen wird.

Durch das Entwerfen der Testfälle werden bestimmte Bereiche der

Aufgabenstellung bereits gründlich analysiert und auf besonders zu

berücksichtigende Fälle eingegangen. Dies kann bei der

Programmentwicklung helfen.

Beantworte die folgenden Fragen:

  • Welche Programmzeile muss geändert werden, um den verbleibenden Fehler, der durch Testfall 3 erkannt wird, zu beheben?

  • Was muss statt der fehlerhaften Zeile geschrieben werden, um den Fehler, der durch Testfall 3 erkannt wird, zu beheben (ohne führende Leerzeichen/Tabs)?

  • Welche Programmzeile muss geändert werden, um den verbleibenden Fehler, der durch die Testfälle 9 und 10 erkannt wird, zu beheben (es gibt natürlich mehrere Lösungsvarianten, aber nur eine, wo nur eine Programmzeile geändert werden muss)?

  • Was muss statt der fehlerhaften Zeile geschrieben werden, um den Fehler, der durch die Testfälle 9 und 10 erkannt wird, zu beheben (ohne führende Leerzeichen/Tabs)?

  • Wie nennt man die Herangehensweise beim Programmieren, bei der zuerst die Testfälle entworfen werden, und dann bei jedem weiteren Schritt versucht wird, einen weiteren Testfall auf "OK" zu setzen?

More questions like this

Want instant access to all verified answers on elearning.tgm.ac.at?

Get Unlimited Answers To Exam Questions - Install Crowdly Extension Now!