Nun kommen wir zum Abschnitt, Architekturrekonstruktion,
3-3. Dieser Abschnitt beschäftigt sich damit genauso wie das Programm verstehen,
die den Bezug zwischen Tim tatsächlichem Quellcode,
den man vorfindet und größeren Konzepten herzustellen, um diese Wartbarkeit zu verbessern,
um Strukturen auch wiederherstellen zu können oder Ergänzungen, Reparaturen,
Erweiterungen in einer Form durchzuführen, die zu dem passt,
was man Wie sie,
wie die Strukturen vorhanden sind.
Wir setzen hier fort mit einer neuen Folie. Nein,
wo sind wir denn hier? Wir brauchen ein neues Blatt für
den Abschnitt. Architektur verstehen. Architektur rekonstruktion Rekonstruktion sagt schon,
das geht um etwas, was nicht mehr da ist.
Wir wollen es wieder finden. Wir wollen es wieder herstellen.
Wir wissen nicht mehr alles. Manche wirken vielleicht auch sagen Archäologie,
wo man irgendwie, ich sag mal,
ein Böse im Dreck wühlt, um am Ende Schätze zu finden.
So ungefähr böse gesprochen ist es bei der Architekturik Konstruktion und tatsächlich ist das ein Gebiet,
was in der Praxis noch nicht so entwickelt ist,
wie wir das gerne hätten Und deswegen ist dieser Abschnitt der Folie so auch ein bisschen anders als das,
was sie sonst kennen oder was sie sonst in dieser Vorlesung mache.
Sonst geht es im Wesentlichen in dieser Vorlesungssoftware-Engineering um Techniken,
die in der Industrie bereits angekommen sind.
Architekture, Konstruktion hat nur wenige solche Sachen. Und trotzdem
halt ist es für wichtig, dass wir darüber sprechen,
dass ich sie damit darüber informiere, wie hier der Stand ist.
Deswegen ist dieser Abschnitt basierend auf Literatur, aus Forschungsergebnissen,
die sie zum Download im Nudel ebenfalls finden
Ich möchte Ihnen hier drei Verfahren vorstellen,
aber bevor ich dazu komme, in etwas Konkretes noch.
Etwas Allgemeines, sorry, die grundsätzlichen Ermittlungsverfahren. Beziehen sich
immer darauf, dass wir versuchen, Einheiten zu finden,
Blöcke zu finden, etwas wiederzuerkennen in der großen,
ich sag mal,
Wust von Quellcode
Cluster drückt damit aus, etwas, was zusammengehört.
Und das ist ja das, was wir gerne mal hätten,
Module, die eine gute Struktur haben.
Also wir suchen sowas wie Abhängigkeit, ich mache strukturiert,
das ist ein kleines bisschen anders.
Wir machen das mal
ein bisschen nebeneinander
Ein bisschen hier untereinander die Abhängigkeiten sind das erste.
Als zweites kommt Quellcode-Elemente. Jeweils kommen mehrere Sachen dahinter.
Und Bezügen zu fachlichen Themen
Fachlich heißt immer, etwas aus der Aufgabenstellung.
Solche Abhängigkeiten sind zum Beispiel. Aufrufe, Referenzen.
Nein, benannte Elemente. Soll das hier werden?
Das ist noch ein Versuch. Neserlich schreiben ist auch eine
Kunst,
benannte Elemente
Also die Bezüge, zu Namen spielt hier eine Rolle.
Quellcode-Elemente, damit meinen wir solche Sachen wie Klassen.
Methoden, Attribute bzw. Variablen. Und diese Zuordnung,
dieses Finden von Clustern, das ist ja am Ende das,
was uns hilft, ein Code, etwas zu verstehen,
was uns hilft,
den richtigen Platz zu finden,
wo eine Änderung stattfindet
Wenn manche Leute sagen, Architekturen sind Kästchen und Linien,
dann sind das hier die Kästchen,
die wir hier versuchen zu erfinden, zu finden,
beziehungsweise die Bezüge, die Abhängigkeiten, das wären dann die Linien,
die wir da versuchen zu erfinden.
Das ist also der erste Punkt, was wir ermitteln,
diese Cluster. Dann wollen wir Hierarchien finden.
Behandlung von Hierarchien,
von Hierarchie
Hierarchie hilft uns immer, Strukturen zu bilden, zu verfeinern,
vor allen Dingen sind das Strukturen der Zerlegung,
also ein Gesamtsystem zur LinkedIn-Tale-Systeme,
zerlegt in Komponenten und die Komponente wieder in kleinere Einheiten.
Was wir auch noch brauchen oder was wir auch noch anwenden und finden,
als Architekturmittel der Architekturrekonstruktion sind Auswertungen von Wahrscheinlichkeitswerten für so
eine Zugehörigkeit zu clustern
Musik Das ist wiederum das, was wir finden wollen,
sind Cluster, aber wir können nicht ganz sicher sagen,
was gehört dazu.
Deswegen Wahrscheinlichkeitswerte, wenn wir diese maschinell ausrechnen können,
wenn wir die mit statistischen Mitteln erheben können.
Dann so etwas
wie Optimierungsverfahren
Die helfen uns ebenfalls bei der Architektur Queenkonstruktion.
Und was soll da optimiert werden? Korresion und Kopplung.
Bei der Clustung Was ist damit gemeint? Kommission und Kopplung,
diese Begriffe kennen Sie aus Modularität, von Module sollten
eine hohe innere Festigkeit haben und die geringe Kopplung zueinander.
Und wenn es uns gelingt, optimale Cluster zu schneiden mit Optimierungsverfahren,
also was gehört optimalerweise in ein Cluster, dann können wir solche Sachen,
sowas könnten wir beim Entwurf gut gebrauchen, was gehört zusammen.
Aber wir können es auch gut gebrauchen,
um etwas zu erkennen, was gehört denn zusammen zu sagen.
Aber sehr wahrscheinlich gehört das und das zusammen.
Dann helfen uns so etwas wie Ähnlichkeitsverfahren, Ähnlichkeitsfunktionen,
Und natürlich auch wiederum bei der Clusterung,
das ist ja hier das Thema und zusätzlich,
dass wir natürlich sprachliche Ausdrücke auswerten
Das sollte nicht kleingeschrieben sein. Auswerten. Und
zwar werden wir da aus Bezeichner und Kommentare.
Und das hilft uns, Bezüge herzustellen,
zu fachlichen Aufgaben
Zu fachlichen Themen. In Denn, indem es uns gelingt,
zu sagen, dieser Blog ist verantwortlich,
zum Beispiel für die Geschäftsregel zur Kreditvergabe,
dann hilft es uns zu verstehen, was dieses Programm insgesamt macht.
Und deswegen nähern wir uns hier von den kleinen Punkten.
Soweit erstmal zu dem Überblick,
dazu habe ich ein Paper hochgeladen,
das ist das Paper Garcia
2013, was sie in dem Download-Ordner im Model finden zu diesem Abschied.
Dann lassen Sie, ich möchte gerne hier in diesem Abschnitt
mit zu drei Verfahren mit Ihnen drei Verfahren Ihnen vorstellen.
Die finden Sie hier auch bei der Aufgabenstellung,
das Verfahren ARC, HC, DC und ZBR.
Diese drei Verfahren möchte ich jetzt kurz vorstellen.
Dazu haben wir
eine neue Seite
Wir beginnen mal mit dem Verfahren ARC. Das heißt, Architecture.
We covery. Using concerns. Und dazu haben sie,
und wenn sie da mehr zu lesen wollen,
wie gesagt, da gibt es keine Bücher als Literatur.
Deswegen habe ich hier Paper so hochgeladen.
Das wäre das Paper
Gasia 2011, was sie ebenfalls im Download-Ordner finden.
Worum geht es bei diesem Verfahren ARC?
Dabei geht es darum, dass man Implementationseinheiten clustert. Klaasmann,
das war das, was wir im vorhergehenden Immonanten hier,
wir wollen immer Cluster finden und hier Implementationseinheiten,
sind solche Sachen wie Quellcode-Elemente Ja, und das ist das,
was wir hier tun wollen.
Das Ziel ist es hier, Architekturelemente zu finden.
Das sind die Blöcke in solchen Diagrammen, Architektur,
die er kann. Das Nächste, was ARC anwendet,
ist statistische Sprachauswertung
Aus Bezeichnungen und Kommentaren. Damit ist gemeint,
dass wir wichtige Begriffe finden, die Programmierer benutzen,
um ihre Ideen auszudrücken, um Bezüge darzustellen.
Wichtige Begriffe Gesichtspunkte. Themen, Aufgaben, damit fachliche Bezüge.
Afghanen soll das heißen. Und das Ganze wird in dem Paper und
dem Begriff Concerns zusammengefasst, nur dass sie das entsprechend wiederfinden.
So, dann nutzt dieser Ansatz das Berechnen von Ähnlichkeitsmaßen
Wie immer versucht man maschinell lieber Rechenaufwand zu investieren,
um Informationen zu strukturieren, als den Menschen lange suchen zu lassen.
Das ist ja das, was wir brauchen, eben bei Architektur verstehen,
hat man gesagt, das kostet so viel Aufwand.
Diese Verfahren versuchen, diesen Aufwand zu sparen. Ähnlichkeitswerte brechen.
Und zwar zwischen Konserns Man hofft dabei Ähnlichkeiten über Ähnlichkeiten,
Bezüge herzustellen. So, und dann versucht man,
und das ist am Ende für das Ganze zusammenkommt,
man versucht zu identifizieren, welcher Konzern gehört zu welchem dieser Blöcke.
Identifikation Der Zuordnungen zwischen Löcken und Konzerns oder zwischen... Wir
können durchaus mal im Deutschen das jetzt frei übersetzen mit Aufgaben,
da müssen wir ein Bildchen, das Bildchen hier ein Stückchen verschoben werden,
dass sie hier was Gutes lesen können, zwischen Konzernsaufgaben Und Blöcken,
das ist das, was wir hier versuchen zu machen.
Das wäre also dieses ARC-Verfahren. Weiter würde ich als nächstes,
würde ich Ihnen gerne das Verfahren ACDC vorstellen, dass ACDC,
hier selbst einen neuen Zettel, ist ein,
heißt im vollen Text, bei Rhythm vor Comprehention Riven Clustering?
Oh Matzi, DC und dazu haben sie das Paper...
Ciapus 2000 in den Unterlagen, was ihnen sagt, was ihnen hilft,
hier zu verstehen, wenn sie weitere Hintergrundinformationen brauchen, zu wenig dazu wissen.
Dieses ACDC versucht ebenfalls so eine Gruppierung, eine Plastung hinzubekommen,
Von solchen Influ Implementationseinheiten hinzubekommen, und das wäre zum Beispiel,
dass man Dateien verwendet, dass man Ordner verwendet, Systemgrafen,
also die zusammengehört ja den Aufbau, die Beziehung des Aufbaus,
Zugriffsschema, Chematar, Subsystemzugriffe beziehungsweise Ressourcenzugriffe.
Wie versucht man zu strukturieren mit dem Ziel? Dominierende Elemente zu erkennen,
Und diese dominierenden Elemente, von denen hofft man dann zu sagen,
ach, das ist das, diesen Aha-Effekt beim Entwickler zu unterstützen,
zu sagen, ja, zum einen,
ich habe hier einen Cluster erkannt, eine Gruppierung gefunden.
Und zum anderen, das scheint in dieser Gruppierung das dominierende zu sein.
Und dass man dann den Bezug leichter herstellen kann,
wozu könne denn das dienen? Das ist ja diese Information,
die wir nicht sicher wissen, beziehungsweise die verloren gegangen ist.
Und das wird durch die Aufbereitung mit solchen clusteralarmischen Dingen
sehr viel besser
Und hier fehlt noch MM, Alkoholfen.
Und als dritte Technik möchte ich Ihnen noch ZBR vorstellen.
Dieses ZBR heißt im vollen, da muss ich mich das
hier auch umblättern, Sony-Based-Recovery.
Und dazu gehört die Literaturquelle Korazza
Sie finden jeweils die vollen Angaben dann auf dem Paper.
Ich spare mir das mal, das hier für sie aufzuschreiben.
Und dabei geht es, Korotza ist so ähnlich
wie das ARC, eine Kombination aus statistischer Textanalyse.
Statistischer. Texte. Analyse und hierarchischen Cluster
Clustern also bald bilden von Einheiten, die zusammengehören.
Hierarchisch, dass sich Finn-Intlastern wieder andere Cluster erfinden möchte.
Gleichzeitig verwendet man dabei, die bezeichnet die Textanalyse,
bezieht man dabei auf Identifikatoren,
also Bezeichner im Quelltext.
Und die werden mit Gewichten versehen
Und zwar die Gewichte für Bezeichner, unterschiedlicher Typen.
Die werden, das wird so gemacht, dass wir bei
der Textanalyse statistisches Text auswerten, bezieht sich immer auf Textblöcke.
Man bezeichnet es als Dokumente aus der Zeit heraus oder aus dem Ansatz heraus,
dass man Texte in Textdokumenten analysiert und sagt,
welches Textdokument hat denn womit zu tun?
Und hier nimmt man als Textdokument Die Dateien, die Quelltextdateien.
Nämlich jede Quelltextdatei für sich zum Beispiel eine Klasse oder ein Paket wird für sich behandelt,
um dabei dieses Gewicht zu verwenden, um die auszuwerten.
Und zwar diese Gewichte, Für die Klassennamen Für die Antributnamen Methoden beziehungsweise Funktionen Parameter Kommentare oder gar wenn wir es in Anweisungen im Block haben Sie müssen sich das so vorstellen,
dass man sagt, okay, ich vergleiche jetzt Klassennamen mit Klassennamen,
dass dieser Typ ist also hier klasse, Attribut,
Methode, man bezeichnet es im Original als Tonen,
diesen Begriff, wenn sie das Paper lesen,
werden sie das wiederfinden und das bezeichnen wir als Ton,
man vergleicht also Klassennamen mit Klassennamen, Attributnamen mit Attributnamen,
Methoden,
mit Methodennamen,
indem man die so klassifiziert und denen gibt man
auch Gewichte
Unterschiedliche Gewichte bedeutet auch unterschiedlich wertvoll. Das heißt,
wir können uns jetzt vorstellen, dass ein etwas,
was als Kommentar vorkommt, vielleicht einen anderen Wert hat,
als etwas, was als Klassenname vorkommt.
Klassenname hat vermutlich eine sehr viel größere Bedeutung,
als eben vielleicht einen Methodennamen oder gar nur Namen eines Parameters oder einer lokalen Variable.
Insofern kann man die unterschiedlichen Namen unterschiedlich kopieren,
unterschiedlich auswerten
Und mein Bild bildet dabei Textvektoren. Man bildet dabei solche Textvektoren aus,
wo bestimmte Begriffe mit ihrer Häufigkeit bzw. mit ihrer Bedeutung zusammengestellt werden.
Dann haben sie also einen Textblock,
wo ganz häufig Kunde drin vorkommt
Mal noch Adresse und manchmal Bonität und dann können sie dann sich ausdenken,
okay, das hat was mit dem Kundenobjekt zu tun,
mit dem fachlichen Objekt. Indem wir diese Bezeichnung hier zusammenbringen,
mit der syntaktischen Struktur aus dem Typen, gelingt es uns,
da ein Mapping hinzukriegen zwischen der Softwarestruktur und dem fachlichen Aufgaben.
Zuordnung zwischen fachlichen Aufgaben. Und das wäre Struktur. Das
ist ja das, was wir am Ende erreichen wollen.
Wir hatten hier zwei Bilder vorher,
hat mir das kurz hier dargestellt,
dass wir diese Bezüge gern darstellen möchten, die Abhängigkeiten,
die Bezüge und die Bezüge zu Playgood-Innen und die Bezüge zu fachlichen Themen.
Ja, also Bezüge herstellen, das ist genau das,
was hier unbesteht.
Das macht ZBR und das macht auch ACR
so ein bisschen
Das waren hier die Fragen, ARC, AC, DC und ZBR.
Nun noch die letzte Frage, die hier dabei steht,
wie kann man das, die Architekture konstruktieren, wie kann man dabei Unsicherheit ausdrücken?
Natürlich ist alles das, was wir hier,
was wir hier gesehen haben und was wir hier finden können, durch Unsicherheit geprägt.
Und diese Unsicherheit können wir dadurch ausdrücken, dass wir Unschärfefaktoren mitführen,
indem wir dann so einen Unschärfefaktor zum Beispiel bei der statistischen Analyse,
ich gehe mal zu dem letzten Verfahren zurück,
indem wir das hier nehmen, wie häufig,
wie stark ist denn die Häufigkeit und die Bedeutung unterschiedlich,
wenn es da kaum Unterschiede gibt, können wir sagen,
ach, so ganz sicher können wir es doch nicht sagen.
Oder in dem vorgehenden Verfahren, wie stark dominiert denn ein Element.
Oder in dem Verfahren, in dem wir sagen,
wir haben hier eine Zuordnung gefunden, aber diese Zuordnung ist,
könnte auch woanders hingehen.
Und daraus können wir solche Sicherheitskonfidenz-Factors, Sicherheitsfaktoren,
Faktoren für die Selbstsicherheit, wie klar sind wir uns mit einer Entscheidung,
können wir uns was finden.
Lassen Sie mich abschließend nur zu diesem,
zu diesem Thema sagen, Architekturrekonstruktion funktioniert immer nur so gut,
wie eine Architektur da ist
Ich möchte das mit was anderem vorstellen, wo sie sich
vielleicht den, wo der Bezug für sie klarer ist.
Ich kann natürlich den Steuerflößen ein Programm darstellen, indem ich einfach sage,
dort und dort geht das Programm lang und ich kann ein Steuerflößgrafen aufstellen.
Grafisch ist der wunderschön, vielleicht besser verständlich. Aber wenn
es sich um ein Spaghetti-Programm handelt im Sinne von ganz viele Go-Tos,
ich springe überall, überall hin im Kreuz, weiße und völlige Abhängigkeiten,
dann ist das, was sie bei dem Aufrufgrafen sehen,
auch nur ein Spaghetti, ein Teller Spaghetti.
Das heißt, ein Worsmus. Und so ist das hier mit der Architekturin zur Rekonstruktion auch,
wenn die Architektur nicht klar ist,
wenn sie entweder nie klar war Aber wenn sie,
wenn sie durch häufige Änderungen von Leuten,
die sie nicht verstanden haben, verwässert, verfälscht worden ist.
Es kam zu einem Vermischen von Zuständigkeiten zwischen Blöcken.
Blöcke wurden teilweise kreuzweise miteinander gekoppelt oder die Festigkeit,
die Kopplung wurde aufgelöst. Dann kann ich nichts mehr finden.
Davon müssen wir einfach ausgehen. Und wenn wir hier keine
klaren Aussagen treffen, können, dann hilft uns das auch nicht.
Trotzdem sind diese Verfahren, die ich hier vorgestellt habe,
wertvoll im Sinne von, sie helfen, den Aufwand für das Programmverstehen zu verringern.
Wir müssen das Programm verstehen, sonst können wir nur,
uns machen wir quasi nur Bullshit.
Und das Programmverstehen hatte ich mit dem vorhergehenden Punkt hier genannt,
dass es so einen hohen Aufwand erfordert. Und diesen hohen Aufwand,
den können wir verringern durch Verfahren, die uns helfen,
Cluster zu erkennen, die uns helfen, Begriffe auszuwerten.
Lassen Sie uns, lassen Sie mich noch als letzten Punkt noch nennen,
sagen, wenn Sie vielleicht sagen, ja,
wieso wären denn hier Begriffe ausgewertet,
indem wir natürlich sprachliche Ausdrücke auswerten,
ist denn das überhaupt aussagekräftig
Ich möchte Ihnen sagen, aus dem Forschungsergebnissen unserer eigenen Gruppe.
Wir haben auch mit solchen Themen gearbeitet,
wir wollten Abhängigkeiten analysieren und haben dabei auch beim Fehlschlagen von Experimenten gemerkt, nein,
die Entwickler nehmen ganz viele Informationen aus den Bezeichnern von Paketen,
von Klassen, von Methoden auch.
Und diese Information, wenn sie auch nicht ganz hundertprozentig toll
ist, hilft dem Entwickler damit zurechtzukommen.
Und deswegen können wir diese Informationen auch nutzen,
indem wir sie statistisch auswerten, natürlich sprachliche Auswertungsverfahren hier anwenden,
um solche Überzüge zu vermuten.
Ich war mit Unsicherheit aber, dass dem Entwickler vorzuschlagen,
der das Programm verstehen machen möchte