Kontrollflussgraph & Datenfluss-Attribute

Moderator: SE - Wartung und Qualitätssicherung

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

Kontrollflussgraph & Datenfluss-Attribute

Beitrag von oren78 » 16. Jul 2011 19:00

Hallo zusammen,

ich hätte da eine kleine Frage bzgl. der Annotierung des Kontrollflussgraphen mittels der Datenfluss-Attribute.
Angenommen die folgenden Codezeilen wären gegeben:

Code: Alles auswählen

21  while(x != s){
22  // do something...
23  }
würde man für den Knoten 21 dies hier angeben: \(c(s), c(x), p(s), p(x)\) oder etwa nur \(p(s), p(x)\) oder vielleicht was ganz anderes?
Man "benutzt" ja immerhin beide Variablen, sodass die Angabe von \(c(s), c(x)\) eigentlich erforderlich ist, oder? Ich frage daher weil ich
eine Musterlösung vor mir habe, die nur mit den predikativen Attribute \(p(s), p(x)\) auskommt ;-)
"Unter allen menschlichen Entdeckungen sollte die Entdeckung der Fehler die wichtigste sein.", Stanisław Jerzy Lec

nogood
Windoof-User
Windoof-User
Beiträge: 28
Registriert: 5. Jul 2007 12:47

Re: Kontrollflussgraph & Datenfluss-Attribute

Beitrag von nogood » 16. Jul 2011 23:51

Ich verstehe das so, dass nur p(x) und p(s) notwendig sind.
Ein c(x),c(s) Zugriff wäre Beispielsweise notwendig bei

Code: Alles auswählen

20 t = x != s;
21 while (t) ..
wobei noch zusätzlich für Zeile 20 d(t) und für Zeile 21 schließlich p(t) gelten würde.

Da aber in deinem Fall das Ergebnis direkt darüber entscheidet was der nächste Knoten des Kontrollflussgraphen ist, oder "zur Ermittlung eines Wahrheitswertes in einer Entscheidung"(s.u.) verwendet wird,
sollte das ein rein prädikativer Zugriff sein.

Ich glaube in diesem Fall hält sich Professor Schürr an den Liggesmeyer in dem es heißt:
Lesende Zugriffe bezeichnet man als Referenz. In der Programmierung gibt es zwei mögliche Ursachen für lesende Zugriffe auf Variablen. Entweder dient der gelesen Variablenwert als Eingabedatum einer Berechnung oder zur Ermittlung eines Wahrheitswertes in einer Entscheidung. Die erstgenannte Form des Zugriffs bezeichnet man als berechnende Benutzung [...]. Die letztgenannte Form des lesenden Zugriffs bezeichnet man als prädikative Benutzung[...].
Gruß,
Leo

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

Re: Kontrollflussgraph & Datenfluss-Attribute

Beitrag von oren78 » 17. Jul 2011 01:16

nogood hat geschrieben:Ich verstehe das so, dass nur p(x) und p(s) notwendig sind. Ein c(x),c(s) Zugriff wäre Beispielsweise notwendig bei

Code: Alles auswählen

20 t = x != s;
21 while (t) ..
wobei noch zusätzlich für Zeile 20 d(t) und für Zeile 21 schließlich p(t) gelten würde.

Da aber in deinem Fall das Ergebnis direkt darüber entscheidet was der nächste Knoten des Kontrollflussgraphen ist, oder "zur Ermittlung eines Wahrheitswertes in einer Entscheidung"(s.u.) verwendet wird, sollte das ein rein prädikativer Zugriff sein.
Hmmm...also ich bin da nicht soooo ganz überzeugt, wenn beispielsweise in einer print-Anweisung eine Variable wie folgt auftaucht:

Code: Alles auswählen

System.out.println("The result of a is: " + a);
dann haben wir auch ein compute(a) Attribut, obwohl da eigentlich nichts berechnet wird, sondern eben nur gelesen...also genau wie bei einem Schleifenrumpf, bzw. if-Statement. Daher wollte ich hier sichergehen was nun korrekt wäre. Für die Ermittlung der Annomalien ist es eigentlich egal, würde mich aber dennoch intressieren ;-)
"Unter allen menschlichen Entdeckungen sollte die Entdeckung der Fehler die wichtigste sein.", Stanisław Jerzy Lec

nogood
Windoof-User
Windoof-User
Beiträge: 28
Registriert: 5. Jul 2007 12:47

Re: Kontrollflussgraph & Datenfluss-Attribute

Beitrag von nogood » 17. Jul 2011 12:59

obwohl da eigentlich nichts berechnet wird
Je nachdem wie du gerade den Begriff "berechnet" verwendest wird durchaus was berechnet und zwar der zusammengesetzte String und auch die Ausgabe ist eine Berechnung.

Du darfst natürlich die selben Begriffe für verschiedenen Kontexte nicht durcheinander werfen.
Ersteinmal ist ein lesender Zugriff im Kontext von [cp]-uses eine Zusammenfassung beider Zugriffsarten.
Li09, S. 142 hat geschrieben: Lesende Zugriffe bezeichnet man als Referenz. In der Programmierung gibt es zwei mögliche Ursachen für lesende Zugriffe auf Variablen. Entweder dient der gelesene Variablenwert als Eingabedatum einer Berechnung oder zur Ermittlung eines Wahrheitswertes in einer Entscheidung.
Bezogen auf diese Definition hast du einen Widerspruch in deiner Aussage
oren78 hat geschrieben: obwohl da eigentlich nichts berechnet wird, sondern eben nur gelesen
da, *captainobviousmode* "gelesen" = {"berechnen","entscheiden"} und du quasi sagst "berechnen" \(\not\in\) "gelesen".

Laut Liggesmeyer liegt dann wenn wir einen lesenden Zugriff haben immer auch ein c- oder p-use vor. In beiden Fällen kann man natürlich sagen, dass etwas vom Computer berechnet wird, aber die Entscheidung um welches Datenflussattribut es sich handelt hängt schließlich von der Verwendung dieser Berechnung ab.
Und wenn es sich nicht um einen p-use handelt muss es ein c-use sein.

[Li09] : Peter Liggesmeyer, Software Qualität, 2009

edit: hab die falsche Verwendung des Teilmengensymbols korrigiert ^ ^, lang her mit FGI/Mathe und so

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

Re: Kontrollflussgraph & Datenfluss-Attribute

Beitrag von oren78 » 17. Jul 2011 13:07

nogood hat geschrieben: Laut Liggesmeyer liegt dann wenn wir einen lesenden Zugriff haben immer auch ein c- oder p-use vor. In beiden Fällen kann man natürlich sagen, dass etwas vom Computer berechnet wird, aber die Entscheidung um welches Datenflussattribut es sich handelt hängt schließlich von der Verwendung dieser Berechnung ab.
Und wenn es sich nicht um einen p-use handelt muss es ein c-use sein.
Also kurz und bündig, in Schleifen / If-Bedingungen auf c() Attribute verzichten und stattdessen nur p() Attribute verwenden? ;-)
"Unter allen menschlichen Entdeckungen sollte die Entdeckung der Fehler die wichtigste sein.", Stanisław Jerzy Lec

nogood
Windoof-User
Windoof-User
Beiträge: 28
Registriert: 5. Jul 2007 12:47

Re: Kontrollflussgraph & Datenfluss-Attribute

Beitrag von nogood » 18. Jul 2011 00:46

oren78 hat geschrieben:Also kurz und bündig, in Schleifen / If-Bedingungen auf c() Attribute verzichten und stattdessen nur p() Attribute verwenden?
Das sollte in den meisten Fällen genügen schätze ich, aber es sind ja auch Anweisungen der Form möglich:

Code: Alles auswählen

if( x = a || b){
...
Wo ich mir jetzt auch nicht ganz sicher wäre aber vermuten würde, dass wir ein p(x) und ein c(a) und c(b) hätten.

Antworten

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