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.[1]

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.

 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;
 }

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][2]

Literatur

  • Aditya P. Mathur: Foundations of Software Testing. Fundamental Algorithms and Techniques. An Undergrate and Graduate Text. A Reference for the Practicing Software Engineer. Pearson Education India, Delhi u. a. 2008, ISBN 978-81-317-0795-1, S. 462 (englisch, eingeschränkte Vorschau in der Google-Buchsuche).

Einzelnachweise

  1. Prof. Herbert Kuchen: Software Engineering, Skript WS09/10. (Memento des Originals vom 23. Januar 2017 im Internet Archive)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/www.wi1.uni-muenster.de (PDF; 234 kB) Westfälische Wilhelms-Universität Münster. S. 403, 407ff. Abgerufen am 23. Januar 2017.
  2. Henning Heitkötter: Software Engineering WS09/10, Lösung Übungsblatt 6. (Memento des Originals vom 23. Januar 2017 im Internet Archive)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/www.wi1.uni-muenster.de (PDF; 554 kB) Westfälische Wilhelms-Universität Münster. S. 25. Abgerufen am 23. Januar 2017.

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.