Def-Use-Kette
Eine Def-Use-Kette ist eine Datenstruktur, die aufeinanderfolgende Paare von Schreib- und Lesezugriffen einer Variablen beschreibt.
Im Rahmen des Software Engineerings werden beim White-Box-Testing mittels Def-Use-Ketten Datenflusstests durchgeführt, welche das Durchlaufen von Code mittels Testwerten für Variablen ermöglichen.<ref name="SEKuchenSkript">Prof. Herbert Kuchen: <templatestyles src="Webarchiv/styles.css" />{{#if:20170123163739
| {{#ifeq: 20170123163739 | *
| {{#if: Software Engineering, Skript WS09/10. | {{#invoke:WLink|getEscapedTitle|Software Engineering, Skript WS09/10.}} | {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/SEk7.pdf}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20170123163739}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: Software Engineering, Skript WS09/10. | {{#invoke:WLink|getEscapedTitle|Software Engineering, Skript WS09/10.}} | {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/SEk7.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-03-12 07:23:32 InternetArchiveBot | 2019-03-12 07:23:32 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20170123163739}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: Software Engineering, Skript WS09/10. | {{#invoke:WLink|getEscapedTitle|Software Engineering, Skript WS09/10.}} | {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/SEk7.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-03-12 07:23:32 InternetArchiveBot | 2019-03-12 07:23:32 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: Software Engineering, Skript WS09/10. | {{#invoke:WLink|getEscapedTitle|Software Engineering, Skript WS09/10.}} | {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/SEk7.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-03-12 07:23:32 InternetArchiveBot | 2019-03-12 07:23:32 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: Software Engineering, Skript WS09/10. | {{#invoke:WLink|getEscapedTitle|Software Engineering, Skript WS09/10.}} | {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/SEk7.pdf}} }} ({{#if: {{#if: 2019-03-12 07:23:32 InternetArchiveBot | 2019-03-12 07:23:32 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: Software Engineering, Skript WS09/10. | {{#invoke:WLink|getEscapedTitle|Software Engineering, Skript WS09/10.}} | {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/SEk7.pdf}} }}
}}}}}}}}{{#if:2019-03-12 07:23:32 InternetArchiveBot
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20170123163739|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/SEk7.pdf}}
|| {{#if: || }}
}}{{#if: Software Engineering, Skript WS09/10.
| {{#if: {{#invoke:WLink|isBracketedLink|Software Engineering, Skript WS09/10.}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/SEk7.pdf%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/SEk7.pdf%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/SEk7.pdf }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}} (PDF; 234 kB) Westfälische Wilhelms-Universität Münster. S. 403, 407ff. Abgerufen am 23. Januar 2017.</ref>
Anwendungsbeispiel
Im Folgenden soll eine Def-Use-Kette für die Variable "d" erzeugt werden. Der nachfolgende Code findet den größten gemeinsamen Teiler (GGT) zweier Zahlen "a" und "b" und ist in Java implementiert.
<syntaxhighlight lang="Java" line>
public int ggt(int a, int b){
int c = a;
int d = b;
if(c == 0)
return d;
while(d != 0){
if(c > d)
c = c - d;
else
d = d - c;
}
return c;
}
</syntaxhighlight>
Um alle Def-Use-Ketten für die Variable "d" zu erzeugen, ist folgendermaßen vorzugehen:
- Ermitteln des ersten Schreibzugriffes (Definition der Variablen)
- In diesem Fall entspricht dies der Zuordnung "d=b" (Zeile 3)
- Ermitteln des ersten Lesezugriffes
- In diesem Fall entspricht dies der Anweisung "return d"
- Aufschreiben dieser Information im folgenden Stil:
- [Name der untersuchten Variablen, konkreter Schreibzugriff, konkreter Lesezugriff]
- In diesem Fall entspricht dies [d, d=b, return d]
Nun werden diese Schritte wiederholt, wobei jeder Schreibzugriff mit jedem Lesezugriff der untersuchten Variablen verbunden wird.
Das Ergebnis ist dann:
- [d, d=b, return d]
- [d, d=b, while(d!=0)]
- [d, d=b, if(c>d)]
- [d, d=b, c=c-d]
- [d, d=b, d=d-c]
- [d, d=d-c, while(d!=0)]
- [d, d=d-c, if(c>d)]
- [d, d=d-c, c=c-d]
- [d, d=d-c, d=d-c]<ref name="SEKuchenUebung">Henning Heitkötter: <templatestyles src="Webarchiv/styles.css" />{{#if:20170123163744
| {{#ifeq: 20170123163744 | *
| {{#if: Software Engineering WS09/10, Lösung Übungsblatt 6. | {{#invoke:WLink|getEscapedTitle|Software Engineering WS09/10, Lösung Übungsblatt 6.}} | {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/uebungen/Uebung6-Vorstellung.pdf}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20170123163744}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: Software Engineering WS09/10, Lösung Übungsblatt 6. | {{#invoke:WLink|getEscapedTitle|Software Engineering WS09/10, Lösung Übungsblatt 6.}} | {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/uebungen/Uebung6-Vorstellung.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-03-12 07:23:32 InternetArchiveBot | 2019-03-12 07:23:32 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20170123163744}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: Software Engineering WS09/10, Lösung Übungsblatt 6. | {{#invoke:WLink|getEscapedTitle|Software Engineering WS09/10, Lösung Übungsblatt 6.}} | {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/uebungen/Uebung6-Vorstellung.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-03-12 07:23:32 InternetArchiveBot | 2019-03-12 07:23:32 InternetArchiveBot | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: Software Engineering WS09/10, Lösung Übungsblatt 6. | {{#invoke:WLink|getEscapedTitle|Software Engineering WS09/10, Lösung Übungsblatt 6.}} | {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/uebungen/Uebung6-Vorstellung.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: 2019-03-12 07:23:32 InternetArchiveBot | 2019-03-12 07:23:32 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: Software Engineering WS09/10, Lösung Übungsblatt 6. | {{#invoke:WLink|getEscapedTitle|Software Engineering WS09/10, Lösung Übungsblatt 6.}} | {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/uebungen/Uebung6-Vorstellung.pdf}} }} ({{#if: {{#if: 2019-03-12 07:23:32 InternetArchiveBot | 2019-03-12 07:23:32 InternetArchiveBot | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: Software Engineering WS09/10, Lösung Übungsblatt 6. | {{#invoke:WLink|getEscapedTitle|Software Engineering WS09/10, Lösung Übungsblatt 6.}} | {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/uebungen/Uebung6-Vorstellung.pdf}} }}
}}}}}}}}{{#if:2019-03-12 07:23:32 InternetArchiveBot
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20170123163744|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/uebungen/Uebung6-Vorstellung.pdf}}
|| {{#if: || }}
}}{{#if: Software Engineering WS09/10, Lösung Übungsblatt 6.
| {{#if: {{#invoke:WLink|isBracketedLink|Software Engineering WS09/10, Lösung Übungsblatt 6.}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/uebungen/Uebung6-Vorstellung.pdf%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/uebungen/Uebung6-Vorstellung.pdf%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://www.wi1.uni-muenster.de/pi/lehre/ws0910/se/uebungen/Uebung6-Vorstellung.pdf }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}} (PDF; 554 kB) Westfälische Wilhelms-Universität Münster. S. 25. Abgerufen am 23. Januar 2017.</ref>
Literatur
- {{#invoke:Vorlage:Literatur|f}}
Einzelnachweise
<references />