Statische Codeanalyse von PROLOG-Programmen

Student:Christian Bosch
Title:Statische Codeanalyse von PROLOG-Programmen
Type:diploma thesis
Advisors:Kókai, G.; Schneider, H.
State:submitted on October 1, 1999
Prerequisits:
Topic:

Hintergrund: Es wurde für die Programmiersprache PROLOG das System IDTS (Inductive Testing and Debugging System) entwickelt. Das System ist eine integrierte Methode zum funktionalen Testen und zur Fehlersuche ("Debugging") in logischen Programmen und basiert auf dem von Shapiro vorgeschlagenen Debugging-Verfahren, das den Programmierer durch gezielt gestellte Fragen zu Programmfehlern hinführt. IDTS ergänzt Shapiros Verfahren um zwei weitere Methoden ("Category Partition Testing" und "Slicing") und verbessert die Effizienz der Fehlersuche durch die Verwendung von Testspezifikationen und Testdatenbanken. IDTS reduziert die Zahl der beim Debuggen gestellten Fragen dadurch, daß die Benutzereingaben kategorisiert und mit den Testfällen der Testdatenbank verglichen werden. Außerdem wird der Programmabhängigkeitsgraph genutzt, um fehlerfreie Programmteile von vornherein von der Fehlersuche auszuschließen. IDTS ist vollständig in PROLOG implementiert und kann mittels einer graphischen Benutzeroberfläche bedient werden.

Aufgabenstellung: In dieser Diplomarbeit soll untersucht werden, inwieweit das System IDTS durch eine statische Codeanalyse ergänzt werden kann. Mit Hilfe der Codeanalyse können bestimmte Fehlerklassen in Programmen ausfindig gemacht und korrigiert werden, ohne dass das Programm durchgeführt werden muss. Die mit Hilfe der statischen Analyse feststellbaren Fehlerhinweise sind unter anderem die folgenden:

  • Typüberprüfungen:
  • Verwendung bekannter Prädikate mit der falschen Stelligkeit
  • Das Auftreten ungebundener Variablen ohne syntaktische Kennzeichnung (durch einen vorangestellten Unterstrich)
  • Benutzte aber unbekannte Prädikate
  • Unbenutzte Prädikate
  • Dynamische Modifizierung von Prädikaten, die nicht als "dynamic" gekennzeichnet wurden.
  • Endlosschleifen (in einigen Fällen)
  • Nichtterminierung von repeat
  • Verwendung von Termen, die nicht vollständig gebunden werden können, in Bedingungen von Verzweigungen
  • Rekursionen

Hierbei sind im einzelnen folgende Anforderungen zu erfüllen:

  • Die Codeanalysekomponente ist in Prolog als ein von IDTS unabhängiges Modul zu implementieren. Auf eine effiziente Integrierbarkeit in IDTS ist jedoch zu achten.
  • Implementierung der oben aufgeführten Codeanalysevarianten, mindestens jedoch die Typüberprüfungen.
  • Die Codeanalyse soll sowohl für Prologprogramme, als auch Ziele und einzelne Prädikate anwendbar sein.
  • Berücksichtigung vorgegebener Informationen über die Richtung des Datenflusses bei der Überprüfung von Endlosschleifen.
watermark seal