Übungsblatt 3: Daten- und Kontrollflüsse

Moderator: SE - Wartung und Qualitätssicherung

Gerrit
Windoof-User
Windoof-User
Beiträge: 26
Registriert: 13. Okt 2010 20:29

Übungsblatt 3: Daten- und Kontrollflüsse

Beitrag von Gerrit » 25. Mai 2011 22:21

Zu dem Fatenflussgraphen aus der AUfgabe 1d) : Wie sollen wir dort Attribute behandeln, die in der Methode NIE definiert, jedoch öfters gelesen werden? Sollen wir die unter den Tisch fallen lassen?

Zur Veranschaulichung meiner FRage zu KOntrollflüssen hier ein kurzer Code-Schnipsel:

Code: Alles auswählen

1   while(c<15) {
2      y = 1;
3      z = 3;
4      c--;
5    }
6    b = 6;
Es iat ja klar, dass Zeile 2, 3 und 4 von Zeile 1 abhängig sind. Ist denn nun Zeile 6 ebenfalls abhängig von Zeile 1? Sie wird ja eben erst ausgeführt, wenn die while-Schliefe zuende ist... Oder steht sie so wie ich mir das denke unter keinem Kontrollfluss?

Benutzeravatar
saller
Moderator
Moderator
Beiträge: 161
Registriert: 12. Okt 2007 15:14
Wohnort: Darmstadt
Kontaktdaten:

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Beitrag von saller » 26. Mai 2011 08:59

Hi,

Attribute, denen niemals ein Datenwert zugewiesen wird, lässt man tatsächluich 'unter den Tisch fallen'. Daten müssen irgendwo festgelegt werden, um zu einer Lesestelle fließen zu können.

Zu Deinem Beispiel:
In dem Kontrollflussgraphen hättest Du eine Kante von 1->2,3,4 und 1->6. In dem Datenflussgraphen hast Du allerdings nur Kanten von 1->2 1->3 und 1->4. Eine Kante von 1->6 ist unnötig, da 6 auf jeden Fall - unabhängig von 1 - ausgeführt wird. Du hast also Recht - der Knoten 6 steht im Datenflussgraphen unter keinem 'Kontrollfluss'.

Gruß
Karsten

Benutzeravatar
~usz
Mausschubser
Mausschubser
Beiträge: 69
Registriert: 18. Okt 2007 10:46

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Beitrag von ~usz » 26. Mai 2011 11:09

Warum sind den 1 -> 2, 1 -> 3 und 1 -> 4 Datenflusskanten? Nach der formalen Definition des Datenflussgraphen im Skript (ca. S. 200) muss eine Datenflusskante ein Pfad im Kontrollflussgraphen sein, die mit der Wertzuweisung einer Variable anfängt, und mit der Nutzung dieser Variable aufhört.

Da in Zeile 1 kein Wert zugewiesen wird, haben wir demzufolge keine Datenflusskante, oder?

Benutzeravatar
saller
Moderator
Moderator
Beiträge: 161
Registriert: 12. Okt 2007 15:14
Wohnort: Darmstadt
Kontaktdaten:

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Beitrag von saller » 26. Mai 2011 11:17

Ok - hätte ich wohl noch einmal explizit dazuschreiben sollen - da die Frage sich auf Kontrollfluss im Datenflussgraphen bezogen hat, bezieht sich meine Antwort also nur auf Kontrollflusskanten im Datenflussgraphen - sprich bezogen auf die Aufgabenstellug "Erweiterung zu einem Abhängigkeitsgraphen".

Du hast natürlich Recht: In dem Beispiel exisitert zwischen den Knoten 1 bis 6 kein Datenfluss!
Es wird nur y und z definiert - allerdings nicht gelesen und zu c und b existiert keine Definitionsstelle ==> kein Datenfluss

Benutzeravatar
~usz
Mausschubser
Mausschubser
Beiträge: 69
Registriert: 18. Okt 2007 10:46

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Beitrag von ~usz » 26. Mai 2011 12:22

saller hat geschrieben:Da die Frage sich auf Kontrollfluss im Datenflussgraphen bezogen hat, bezieht sich meine Antwort also nur auf Kontrollflusskanten im Datenflussgraphen - sprich bezogen auf die Aufgabenstellug "Erweiterung zu einem Abhängigkeitsgraphen".
Hmm, ja okay, habe etwas gebraucht bis ich eine Ahnung bekommen habe, zu welcher Frage deine Antwort passt :) Wenn du dir aber nochmal Gerrit's ursprüngliche Frage anschaust, dann bezieht sie sich ja explizit auf Aufgabe 1d) den Datenflussgraph. Erst in Aufgabe 1e) wird der Abhängigkeitsgraph erstellt. Wahrscheinlich ist dieser Thread eh schon maximal verwirrend, also wünsche ich allen Beteiligten noch einen schönen Tag :)

Benutzeravatar
saller
Moderator
Moderator
Beiträge: 161
Registriert: 12. Okt 2007 15:14
Wohnort: Darmstadt
Kontaktdaten:

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Beitrag von saller » 26. Mai 2011 12:28

Hehe - wohl wahr - ich hatte noch einmal den letzten Satz aufgenommen. Aber nun, nachdem jetzt alle Klarheiten beseitigt sind, kann ich auch ruhig in die Mittagspause gehen :D

Benutzeravatar
blackcomb
Mausschubser
Mausschubser
Beiträge: 70
Registriert: 1. Okt 2007 15:48
Wohnort: Darmstadt

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Beitrag von blackcomb » 30. Mai 2011 17:49

Ich habe noch eine Frage zum Kontrollflussattribut u, bezogen auf folgenden Code:

Code: Alles auswählen

1 while (z) {
2   int x = 0;
3   if (y) {
4     ...
5   }
6 }
7 return x;
Welcher Knoten des Kontrollflussgraphen würde (wenn man für jede Zeile einen Knoten erstellt) das Attribut u(x) erhalten?

Ich hätte intuitiv einen Knoten für Zeile 6 eingeführt, weil dort der Scope endet, in dem x definiert ist, und diesen Knoten mit "u(x)" beschriftet. Eine ähnliche Situation gibt es in der Übung - dort sind aber offensichtlich keine Knoten für Zeilen vorgesehen, die nur eine Klammer enthalten...


Und noch eine Frage: Sollen/können wir in der Übung vor Aufgabe c) die Segmente des Kontrollflussgraphen zusammenfassen?

Danke schön schon einmal.

Benutzeravatar
oren78
BSc Spammer
BSc Spammer
Beiträge: 1373
Registriert: 17. Nov 2006 17:47
Wohnort: Darmstadt

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Beitrag von oren78 » 30. Mai 2011 18:17

blackcomb hat geschrieben:Ich habe noch eine Frage zum Kontrollflussattribut u, bezogen auf folgenden Code:

Code: Alles auswählen

1 while (z) {
2   int x = 0;
3   if (y) {
4     ...
5   }
6 }
7 return x;
Welcher Knoten des Kontrollflussgraphen würde (wenn man für jede Zeile einen Knoten erstellt) das Attribut u(x) erhalten?
Wenn ich mir das Codefragment dazu betrachte, würde ich behaupten ab zeile 7, sprich wir hätten: c(x), u(x), u(y), u(z) unter der annahme das keine weiteren Variablen in dem if() Block vorkommen, ansonsten müssten diese ebenfalls auf "unused" gesetzt werden. Ich hoffe, ich sehe das soweit richtig? 8)
blackcomb hat geschrieben: Und noch eine Frage: Sollen/können wir in der Übung vor Aufgabe c) die Segmente des Kontrollflussgraphen zusammenfassen?
Es hieß ja nirgends "Geben sie ein segmentfreien Kontrollflussgraphen an..." daher ist die Entscheidung wohl uns überlassen.
"Unter allen menschlichen Entdeckungen sollte die Entdeckung der Fehler die wichtigste sein.", Stanisław Jerzy Lec

Benutzeravatar
saller
Moderator
Moderator
Beiträge: 161
Registriert: 12. Okt 2007 15:14
Wohnort: Darmstadt
Kontaktdaten:

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Beitrag von saller » 30. Mai 2011 19:08

Hallo

oren hat die Frage schon sehr gut beantwortet - wenn man annimmt, dass 'x' auch außerhalb des Kontrollblockes der while-Schleife existiert.
Sollte dies jedoch nicht der Fall sein, wird in Zeile 2 in der while-Schleife x initial definiert. Dann muss es am Ende der while-Schleife wieder 'undefined' werden. Dies trifft bei allen Kontrollstrukturen wir Subklassen, If-Anweisungen oder Schleifen zu.

Angenommen im Beispiel würden wir 'y' am Ende zurückgeben und 'x' wäre vorher nirgends definiert oder initialisiert worden, dann würd es sich folgendermaßen verhalten:
01 p(z)
02 d(x)
03 p(y)
06 u(x) --> Kann al eine Art Pseudoknoten gesehen werden oder einfach mit einem anderen Knoten zu einem Segment zusammengefasst werden
07 c(y) u(y) u(z)

Benutzeravatar
blackcomb
Mausschubser
Mausschubser
Beiträge: 70
Registriert: 1. Okt 2007 15:48
Wohnort: Darmstadt

Re: Übungsblatt 3: Daten- und Kontrollflüsse

Beitrag von blackcomb » 30. Mai 2011 19:37

Ok, dann ist alles klar :)

Antworten

Zurück zu „Software Engineering - Wartung und Qualitätssicherung“