Kontrolflussdiagram

archer1000

Mitglied
Hallo Leute, Ich bitte Hilfe beim Lösen dieses Problems.

Java:
public double methode (boolean a, boolean b, boolean c, boolean d)  {
   int x;
   if (a) {
      x = 4;
   } else {
     if (b) {
        x = 1;
     }
     else {
        x = -1;
     }
     if (c || d) {
	x = -9*x;
     }
   }
   return Math.sqrt(x);
}

a) Zeichnen Sie einen Kontrollflussgraphen der Methode
b) Geben Sie einen minimalen Testsatz an, damit C0 erfüllt ist.
c) Geben Sie einen minimalen Testsatz an, damit C1 erfüllt ist.
d) Schreiben Sie eine JUnit Testmethode, in der ihre C1 Testfälle überprüft werden. Schlägt ihr Test fehl? Begründung!


a) ist für mich kein Problem.
IMAG0338.jpg


b) Ich weiss da, dass alle Knoten einmal durchlaufen werden müssen, aber was bedeutet hier dann minimale Testsätze? was muss man da angeben?

c) Das selber, da müssen alle Kanten durchlaufen werden. Aber wieder was muss ich angeben?

d) d kirege ich einfach nicht hin.
 
Zuletzt bearbeitet:
G

Gast2

Gast
Zu b) und c):
Ein Testsatz ist eine Menge an Eingaben für deine Methode. Eine Eingabe für deine Methode ist ein Tupel aus 4 booleans. Ein Testsatz wäre also eine Liste an 4-Tupeln.

zu d)
Wo genau hakts denn da? Kompiliert dein Code nicht? Bekommst du Fehlermeldungen?
 

archer1000

Mitglied
Zu b) und c):
Ein Testsatz ist eine Menge an Eingaben für deine Methode. Eine Eingabe für deine Methode ist ein Tupel aus 4 booleans. Ein Testsatz wäre also eine Liste an 4-Tupeln.

zu d)
Wo genau hakts denn da? Kompiliert dein Code nicht? Bekommst du Fehlermeldungen?


Ist hier dann so richtig?

Um Co zu prüfen:

(a,b,c,d)
(true,...,...,...) So linke Seite
(false, true, true,...) Rechte Seite linke seite
(false, false, ...,...) rechte seite rechte seite

mit drei Punkten habe ich variablen angedeutet desses wahl egal für den Ergebnis sein dürfte. Wie kann ich da hinschreiben? Kann ich annehmen bei b) es 3 Testsätze sind um Co zu decken?
 

archer1000

Mitglied
Und bei d) habe ich überhaupt keine Ahnung wie das gehen soll. Habe gehofft, dass jemand nette hier es Teil d löst und ich gucke und lerne dabei wie sowas geht.
 
G

Gast2

Gast
Naja, du schreibst halt einen UnitTest. Wie das funktioniert findest du in zahlreichen Tutorials.
 

archer1000

Mitglied
Also Konkrete Werte.
Ein Beispiel.
(true,true,true,true) So linke Seite
(false, true, true,true) Rechte Seite linke seite
(false, false,true,true) rechte seite rechte seite

Also drei Testsätze brauch man minimal. Ich hoffe ich habe es richtig.
 
H

hüteüberhüte

Gast
Sind ja 4 boolean, also könntest du 2^4 Kombinationen testen lassen (muss man aber glaub ich nicht) :

Java:
    public static double methode(boolean a, boolean b, boolean c, boolean d) {
        int x;
        if (a) {
            x = 4;
        } else {
            if (b) {
                x = 1;
            } else {
                x = -1;
            }
            if (c || d) {
                x = -9 * x;
            }
        }
        return Math.sqrt(x);
    }

    public static void main(String[] args) {
        for (int i = 0; i < 16; i++) {
            Object[] oa = new Object[5];
            for (int j = 0; j < 4; j++) {
                oa[j] = (i >>> 3 - j & 1) == 1;
            }
            oa[4] = methode((Boolean) oa[0], (Boolean) oa[1], (Boolean) oa[2], (Boolean) oa[3]);
            System.out.println(Arrays.toString(oa));
        }
    }
Code:
[false, false, false, false, NaN]
[false, false, false,  true, 3.0]
[false, false,  true, false, 3.0]
[false, false,  true,  true, 3.0]
[false,  true, false, false, 1.0]
[false,  true, false,  true, NaN]
[false,  true,  true, false, NaN]
[false,  true,  true,  true, NaN]
[ true, false, false, false, 2.0]
[ true, false, false,  true, 2.0]
[ true, false,  true, false, 2.0]
[ true, false,  true,  true, 2.0]
[ true,  true, false, false, 2.0]
[ true,  true, false,  true, 2.0]
[ true,  true,  true, false, 2.0]
[ true,  true,  true,  true, 2.0]
 
Zuletzt bearbeitet von einem Moderator:

Oben