Forum: PC-Programmierung suche Programm zur Datenflussvisualisierung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Wegstaben V. (wegstabenverbuchsler)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
kennt jemand "einfache" Tools zur Datenfluss-Visualisierung?

ich habe im Datawarehouse Umfeld häufiger mit umfangreichen (sql) 
Programmen zu tun, welche pro Modul (z.B. in einem Package) aus mehreren 
tausend Codezeilen bestehen, und dabei auf z.B. 20 verschiedenen Quell- 
bzw. Zielobjekten zugreifen (select, insert, update, delete, join etc).

Ich möchte jetzt gerne "auf die Schnelle" die Datenfluss-Struktur 
erfassen, die sich bei der Code-Ausführung ergibt.

Momentan mach ich sowas manuell, wenn ich mir den Code ansehe. Die 
Nummern an den Kanten geben die Reihenfolge vor, in welcher der Code 
abgearbeitet wird.

Die Darstellung sollte nicht zu überladen sein, sondern halt nur die 
wesentlichen "globalen" Datenobjekte und ihre Zusammenhänge darstellen. 
"lokale" Objekte (z.B. Variablen, Cursor etc) brauche ich nicht zur 
direkten Darstellung bzw. Visualisierung

--> Da gibts doch bestimmt elegantere Möglichkeiten, außer da händisch 
Bildchen zu malen? Nach welchen Stichwort bzw Produkt sollte ich denn da 
mal schauen?

: Bearbeitet durch User
von T2Graph (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> --> Da gibts doch bestimmt elegantere Möglichkeiten, außer da händisch
> Bildchen zu malen? Nach welchen Stichwort bzw Produkt sollte ich denn da
> mal schauen?

Graphviz

von JJ (Gast)


Bewertung
0 lesenswert
nicht lesenswert
yED

von Wegstaben V. (wegstabenverbuchsler)


Bewertung
0 lesenswert
nicht lesenswert
T2Graph schrieb:
> Graphviz

naja, es geht mir nicht hauptsächlich ums "schön malen" versus "von Hand 
malen"

Ich suche eher nach etwas wie "oben (sql-) [*1] Code rein, unten Bild 
raus". Das Gesuchte sollte eine Code-Analyse machen, alle relevanten 
globalen Datenobjekte identifizieren, sowie deren Beziehungen 
untereinander, und dann zum Schluss visualisieren.

Für den letzten Schritt kann man dann vermutlich tatsächlich Graphviz 
oder ähnliches mittels Objektimport "fürs malen" nehmen.


das Beispiel Bildchen oben enthält Codefragmente wie :

insert into tmp_inner_a
   select from sl_this join mv_table1       (-->Kante1, Kante2)
   on (irgendwas)
   where (irgendwas)

(die 3 Knoten sl_this, mv_table_a und tmp_inner_a sind dadurch auch 
erkannt worden)

...

update/delete out_abc
set/where o.ä           (->Kante5)


 usw


Die Visualisierung erzeugt dann aus der vorliegenden Netztliste den 
Graphen von links nach rechts.

- - - - -

[*1] ein (großer) Teil von dem Zeug was ich da betrachte, besteht aus 
"reinem" sql code. Da scheint mir eine derartige Analyse/visualisierung 
"machbar". Die SQL Codedschnipsel sind eher groß (einige 1000 LOC)

Darüber hinaus gibts aber auch noch Code-Teile, welche als Rahmenwerk 
aus Shell-Scripten bestehen, welche dann wiederum irgendwelches sql Zeug 
(inline oder per aufgerufenen seperaten sql-sqript) aufrufen. shell 
einige hundert LOC, SQL einige 100 LOC. Sowas kombinierters bringt 
vermutlich noch mal eine weitere Komplexitätsstufe rein

(LOC = lines of code)

: Bearbeitet durch User
von Noch einer (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
>Das Gesuchte sollte...

Nix Da! So ein Programm würde doch 90% aller Software-Entwickler 
arbeitslos machen.

von Teo D. (teoderix)


Bewertung
0 lesenswert
nicht lesenswert
Noch einer schrieb:
> Nix Da! So ein Programm würde doch 90% aller Software-Entwickler
> arbeitslos machen.

Und für die restlichen 10% Arbeit, 100% Kassieren :D
(Das waren noch Zeiten. Doku? Klar, hab ich im Kopf:)

von Mark B. (markbrandis)


Bewertung
0 lesenswert
nicht lesenswert
Noch einer schrieb:
>>Das Gesuchte sollte...
>
> Nix Da! So ein Programm würde doch 90% aller Software-Entwickler
> arbeitslos machen.

Warum sollte es das? Die Visualisierung des Datenflusses ist sicher 
nicht die Hauptaufgabe der meisten Software-Entwickler.

von Theor (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Also mit der Suche " sql dataflow visualization" finde ich in 
StackExchange den Beitrag 
http://dba.stackexchange.com/questions/144870/stored-procedure-logic-data-flow-visualization-tool 
der wiederum auf http://www.fatesoft.com/s2f/ verweist. Hast Du 
vermutlich aber schon gefunden.

von Noch einer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Diese Tools sind nicht wirklich nützlich.

Ist eine historisch gewachsene Software so umfangreich, dass man so ein 
Tool braucht, dann bekommt man nur ein Wand füllendes Spagetti-Muster.

von Andreas R. (daybyter)


Bewertung
0 lesenswert
nicht lesenswert
Es gibt für UML ein Data modelling profile. Manche UML Tools 
unterstützen auch Reverse Engineering. ArgoUML hat auch ein SQL Modul.

von Wegstaben V. (wegstabenverbuchsler)


Bewertung
0 lesenswert
nicht lesenswert
Noch einer schrieb:
> Diese Tools sind nicht wirklich nützlich.

Stimmt. Das was ich da bei diesen Tools sehe, ist auch nicht wirklich 
das was ich benötige.

Die "Innereien" eines Algorithmus interessieren mich nicht. Ich brauche 
es eine Stufe granularer, nämlich auf "Tabellen-Ebene". [*1] Für eine 
schnelle Gesamt-Betrachatung der Funktionalität eines Moduls reicht die 
"Tabellen" Sicht aus.

Beispiel-Modul:

Daten, enthalten Automarken mit irgendwelchen verschiedenen Modellen je 
Automarke werden "sortiert".

Es gibt Eingangs-Tabellen, Ausgangstabellen, und Meta-Daten in 
Meta-Tabellen welche heran gezogen werden (VW > Opel, und Opel-astra  > 
opel-corsa)

Ich brauche halt nun "nur" die Beziehung der Tabellen zueinander. Ich 
muss wissen: Wo kommen DAten her, wo gehen sie hin. Wo gehen Daten rein, 
wo kommen sie raus. Vielleicht auch noch: welche Tabellen sind 
zwischendrin

----

[*1] Tabellen meint: tables, views, materialized views, synonyms, links 
etc.


===========

Andreas R. schrieb:
> Es gibt für UML ein Data modelling profile. Manche UML Tools
> unterstützen auch Reverse Engineering. ArgoUML hat auch ein SQL Modul.

MAchen die das auch in der Weise, wie ich es benötige? Kennst du 
ArgoUML, und kannst dazu einen Hinweis geben?

: Bearbeitet durch User
von Noch einer (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Hmm... Wenn es eine KI gibt, die aus diesem Wust die wesentlichen 
Strukturen und den Sinn der Innereien rekonstruiert, dann dürfte dein 
Job nicht mehr lange existieren.

von Andreas R. (daybyter)


Bewertung
0 lesenswert
nicht lesenswert
Thomas N. hat das Data Modelling Profile auf Argo portiert und da ging 
schon eine ganze Menge. Leider vieles noch nicht automatisch.

Allerdings wurde da so einiges nur auf der Mailing-Liste geposted, und 
indet sich nicht in den Repositories mit den Sources. Ist schrecklich 
lange her, dass ich da bisserl mitgecoded hab.

Ich glaub Rational hat das auch unterstützt, aber da reden wir halt von 
richtig Geld.

Da gibt es auch ein Modul:

https://sourceforge.net/projects/dbuml/

: Bearbeitet durch User
von Wegstaben V. (wegstabenverbuchsler)


Bewertung
0 lesenswert
nicht lesenswert
Noch einer schrieb:
> Wenn es eine KI gibt, die aus diesem Wust die wesentlichen
> Strukturen und den Sinn der Innereien rekonstruiert, dann dürfte dein
> Job nicht mehr lange existieren.

Ich will ja nicht den "Sinn" der Innereien (=den Algorithmus) 
rekonstruieren, sondern "nur" die betroffenen Objekte und deren 
Beziehungen zueinander ermitteln. Was da mittendrin passiert, ist mir 
erst mal "egal"

Beispiel: das folgende sql Statement sei Teil des Package 
"hauptschema.pkg_kundenanreicherung", als Prozedur-Einsprung wird 
pr_main() angenommen. irgendwo im pr_main() oder eine weitere durch 
pr_main aufgerufene Prozedur oder Funktion gibt es folgendes statement:


    insert into GESAMTERGEBNISLISTE
    select (irgendwelche_felder) from  KLEINEKUNDENLISTE
    where (irgendeine_bedingung)



--> folgende Objekte und ihre Beziehungen zuienander wurden 
identifiziert:

GESAMTERGEBNISLISTE ist ein Zielobjekt.
   (Zielobjekt ist jedes Objekt, in dem geschrieben wird)
GESAMTERGEBNISLISTE:
   typ=table , location=hauptschema.GESAMTERGEBNISLISTE

KLEINEKUNDENLISTE ist ein Quellobjekt, hat keine (weiteren) Vorgänger
   (Quellobjekt ist jedes Objekt, aus dem nur gelesen wird)
KLEINEKUNDENLISTE:
   typ=synonym,location=hauptschema.KLEINEKUNDENLISTE Das Objekt 
referenziert:
   typ=view, location=hauptschema.K_KUNDENLISTE, das Objekt referenziert
   typ=table, location=einanderesschema.ALLE_KUNDENLISTE


KLEINKUNDENLISTE hat eine gerichtete Kante zu GESAMTERGEBNISLISTE



nochmal,  das "irgendeine_bedingung" des query interessiert mich nicht.


Mir ist klr, dqaß dieses Beispiel-Query das einfachste ist, und daß es 
Besonderheiten gibt, welche erst "auf den zweiten Blick" sichtbar 
werden, z.B.

insert into target
   select
      s1.field1
     ,s2.field1
 --  ,s3.field1
   from source s1, source2 s2, source3 s3

Hier wird anscheinend source3 zwar im "from" aufgeführt, aber gar nicht 
genutzt, da auskommentiert: Also wird es "in Wirklichkeit" gar nicht 
genutzt, braucht auch nicht beachtet zu werden.

----

"händisch" greppe und lese ich mich bisher durch den Code, suche mir 
alle selcet, insert, update, delete etc raus, bis ich auf statische 
Datenobjekte treffe. Und dann male ich mir halt die Objekte und ihre 
Beziehungen auf ein Blatt. Beim ersten Erfassen wirds etwas chaotisch, 
meistens muß ich das Skizzierte noch mal neu aufmalen, um es etwas 
"besser lesbar"  zu haben.

Die detaillierte Knotenliste (Objekttyp etc) erstelle ich dann im 
Nachgang



----

Um zu begründen, wofür das gut sein soll:

Bei Regressionstests stehe ich vor Aufgabenstellungen, dass "vorne was 
rein geht" und "hinten was raus kommt", und sich "in der Mitte" (im 
Algorithmus) manchmal was ändert. Ich möchte nun erst mal wissen, WO 
was rein kommt und raus geht.

Ich spreche hier von mehreren hundert Modulen (packages), mit 
durchschnittlichen Größen von von bis zu mehreren Tausend Zeilen von 
Code. In jedem Modul werden 10 bis 100 Tabellen etc. als Quell- oder 
Zielobjekte verwendet

-- "krasses" (etwas anders gelagertes) Beispiel: In der Mitte eines 
Packages befindet sich ein Sortieralgorithmus, und der wird nun 
ausgetauscht (xy-Sort wird durch pq-Sort ersetzt)

Dann soll (Erwartung) bei gleichen Eingangsdaten die gleichen 
Ausgangsdaten rauskommen.

Der Algorithmus mittendrin, also DASS da was in der Mitte sortiert, 
angereichert oder gefiltert wird, interessiert für den 
Regressions-Vergleich nicht.


Im weiteren Regressions-Verlauf wurd dann ein Eingangs-Datenvektor 
injiziert (dazu muss ich halt wissen wo der Eingang ist), und der 
Ausgangsdatenvektor gesichert. Dann wird alles geleert, und der 
Mittelteil (package) ausgetauscht. Ein weiterer Lauf wird gestartet.

Dann werden Eingangs- und Ausgangsdaten von Lauf1 und Lauf2 gegenüber 
gestellt

: Bearbeitet durch User
von Wegstaben V. (wegstabenverbuchsler)


Bewertung
0 lesenswert
nicht lesenswert
ich glaube, ich bin einem möglichen Tool auf der Spur:

http://www.genesisonesolutions.com/

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.