Als nächstes kommen wir zum letzten Abschnitt, zur letzten Technik
von Analysen auf Code-Ebene und das ist das Progrem Slicing.
Beim Progrem Slicing haben wir die Fragestellung, wie können wir
und die Informationen reduzieren? Zwei Fragen dazu als Wiederholungsfragen,
was sind die Ziele und was ist Vorwort und Backwords Slicing?
Lassen Sie uns zunächst damit anfangen, was ist denn so
ein Slice? Slic ist eine Scheibe,
also zum Beispiel eine Apfelspalte,
würde man
als Slice bezeichnen
Slices, oder vielleicht nennen wir es besser, Slicing,
das korrigieren wir hier nochmal.
Wir eliminieren beim Slicing,
nicht interessierende Teile dosieren
Geile. Eines Programms. Und zwar ist das eine Technik,
die Basis für viele andere Techniken darstellt. Sie hilft uns erstmal,
da bei uns zu konzentrieren, auf wichtige Teile.
Die Menge der zu betrachten, Anweisungen kann reduziert werden.
Also quasi die Reduzierung der Informationsmenge und am Ende
zu folgen von Steuer und Datenfluss wird vereinfacht.
Und das Ganze dient als Basis für viele andere Techniken
Zum Beispiel in Werkzeugen zum Refactoring oder für den Test.
Wir haben zwei Formen von Slicers und zwar Forward und Backward Slicing.
Achso, wir können das dann vielleicht nochmal zu den Fragen schauen.
Wir beantworten hier damit die Frage,
zehn, was sind Ziele des Slicing
Wir haben eine Folie, die uns vor zwei Folien,
die Forward und Backward Slicing zeigen an einem Beispiel.
Hier ist es wieder so eine Pascal-artige Sprache mit,
hier haben sie, also als grafische Elemente, ich denke,
sie können das auch ohne genaue Kenntnis der Sprache irgendwie so verstehen,
weil es, also es ist eine Waldschleife, die von Lupe bis Endloop führt.
Ja, hier so eine Ride-Anweisung ist, kann man sich denken, eine Ausgabeanweisung.
Ride ist eine Eingabeeinweisung. Hier haben wir in Pascal ist das so,
Doppelpunkt ist gleich, ist die Zuweisung, also I ergibt sich zu eins,
Summe ergibt sich zu null, während der Vergleich,
wo haben wir einen Vergleich, ach ja, hier,
aber kleiner gleich, das wäre mit dem Einfachen ist gleich.
Also das ist anders als im Java und Zirkus,
wo es sich schabt, wo, aber es gibt,
da brauchen wir auch die Unterscheidung, finde ich böse,
das ist gleich Zwischeneinweisung, zur Zuweisung und im Vergleich. So,
beim Vorwärtsleisting kommt es drauf an oder ist das Ziel,
besteht das Zahltiel darin zu ermitteln,
was eine Anweisung irgendwo für einen Einfluss hat, ja,
also zwar, wenn wir diese Anweisung,
wir wollen sehen, Worauf wirkt sich wohin,
wirkt sich eine Anweisung aus, deswegen Vorwort,
wohin geht die Auswirkung und wir suchen diese Anweisung raus und streicheln alle die Zeilen ohne Auswirkung auf diese Anweisung.
Also die Summe, hier ist die variable Summe betroffen und wir sehen,
das ist also diese Anweisung, hier ist das dabei.
Und in dieser Einleistung ist das dabei und das wird,
hier ist das, das sie hier in der Schleife durchkommt,
hat erstmal keine direkte Auswirkung von Summe,
egal ob die Summe groß oder klein ist,
Durch die Anzahl der Schleifendurchläufe nicht betroffen sein,
weil wir hier das I oder das N hier nicht direkt bearbeiten.
Also es gibt keine Auswirkungen auf das I, nur die Ausgabeanweisung ist noch dabei.
Das heißt, wenn ich das gestrichen habe,
bleibt nur diese Einweisung übrig als Quelle und diese beiden Anweisungen
als das, was dann den Slice ausmacht.
Das hilft uns also zu verstehen,
wenn wir an dieser Anweisung was ändern,
zum Beispiel den Typ ändern, die Bezeichnung ändern,
was auch immer, worauf wirkt es sich aus.
Das ist vorwärtslicing, wir haben auf der nächsten Folie
das Backword Slicing
Das Backwork-Slicing ist der, wie der Name schon sagt,
rückwärts und zwar rückwärts von einem Wert,
von hier in dem Fall einwärts und der Wertprodukt,
der ausgegeben produktet, der ausgegeben wird.
Wie kommt es zu diesem Wert? Das ist die Fragestellung,
die wir beim Backworkslicing sehen. Und da muss man eben,
hier wird auch wiederum gestrichen,
was dazu diesen Wert nicht beiträgt, was man hier macht,
ist am Ende auch die syntaktische Struktur des Programms durchgehen.
Das sind also auch Compiler-Techniken, die hier genutzt werden,
um diesen Slice zu berechnen
Wir können das auch selbst machen, indem wir das von
der Hand machen und sagen, was fließt denn hier alles?
Was hat denn irgendwie einen Einfluss auf Produkt? Ist erstmal
ganz klar, die Anweisungen, wo Produkt direkt drin vorkommt,
auf der Zuweisungsseite. Also diese Zeile und diese Zeile,
die haben erstmal direkt damit,
die haben auf jeden Fall einen Einfluss auf das,
was hier unten in der Anweisung unter Product steht und ausgegeben wird,
zusätzlich noch alle Anweisungen, die in irgendeiner Form hier beitragen.
Also wir haben in dieser Zeile fließt das I ein,
also müssen wir auch alles,
was in irgendeiner Form Einfluss auf das I hat, hier mit reinziehen
Und dieses I ist hier in der Interration mit drin und hier oben bei der Zuweisung.
Bei der I, außerdem ist es hier bei der Anzahl
der Schleifen drin und da wird es wiederum von N beeinflusst.
Also es ist auch das N in irgendeiner Formel Einfluss dabei.
Das heißt, wir brauchen hier oben diese Anweisung,
ried N auch noch mit dabei. Das heißt,
gestrichen wird eigentlich nur das, was diese Summe betrifft,
diese drei Anweisungen sind das Einzige,
was ich streichen kann, dieses Slices,
also relativ umfangreich im Verhältnis zu dem anderen Slice.
Damit haben wir die beiden Slices mal gegenübergestellt.
Beide wird uns helfen, weil sie stellen uns mal vor,
wir haben nicht ein Programm,
was hier nur aus zehn Zeilen besteht
Sollen wir ja was über tausende Zeilen geschieht? Und dann
ist so ein Slice wirklich hilfreich, das besser zu verstehen.
Nämlich, weil indem wir die Menge der zu betrachtenden Anweisungen
deutlich reduzieren. Und dann brauchen wir so das anzuschauen,
was direkt Auswirkungen aufeinander hat, verringert den zu betrachten, der Informationsmenge.
Ich habe es kompakt und kann dort es verstehen und Änderungen durchführen.
Soweit zu dem Programm, Analysetechniken auf Code-Ib