Zum Inhalt springen

Def-Use-Kette

aus Wikipedia, der freien Enzyklopädie

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 | *
    | Vorlage:Webarchiv/Wartung/Stern{{#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:  || }}Vorlage:Webarchiv/Wartung/DatumDer 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:  | [] | [ | ( }}Memento{{#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:  | [] | [ | ( }}Memento{{#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:  | [] | [ | ( }}Memento{{#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!Vorlage:Webarchiv/Wartung/webcitation{{#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}} }} (Memento{{#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:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#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:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
          |  }} 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
    | {{#if: 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#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:  || }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
    |addlarchives|addlpages= {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#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 |Vorlage:Webarchiv/Wartung/URL}}{{#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:

  1. Ermitteln des ersten Schreibzugriffes (Definition der Variablen)
    In diesem Fall entspricht dies der Zuordnung "d=b" (Zeile 3)
  2. Ermitteln des ersten Lesezugriffes
    In diesem Fall entspricht dies der Anweisung "return d"
  3. 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:

  1. [d, d=b, return d]
  2. [d, d=b, while(d!=0)]
  3. [d, d=b, if(c>d)]
  4. [d, d=b, c=c-d]
  5. [d, d=b, d=d-c]
  6. [d, d=d-c, while(d!=0)]
  7. [d, d=d-c, if(c>d)]
  8. [d, d=d-c, c=c-d]
  9. [d, d=d-c, d=d-c]<ref name="SEKuchenUebung">Henning Heitkötter: <templatestyles src="Webarchiv/styles.css" />{{#if:20170123163744
      | {{#ifeq: 20170123163744 | *
    | Vorlage:Webarchiv/Wartung/Stern{{#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:  || }}Vorlage:Webarchiv/Wartung/DatumDer 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:  | [] | [ | ( }}Memento{{#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:  | [] | [ | ( }}Memento{{#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:  | [] | [ | ( }}Memento{{#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!Vorlage:Webarchiv/Wartung/webcitation{{#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}} }} (Memento{{#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:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#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:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
          |  }} 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
    | {{#if: 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#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:  || }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
    |addlarchives|addlpages= {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#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 |Vorlage:Webarchiv/Wartung/URL}}{{#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 />