Schnittstellen suchen in c/c++ Code für spätere (UML)



  • Hey Freunde der Computerwelt.

    Vielleicht kann mir hier jemand helfen.

    Thema Schnittstellen und spätere Darstellung in UML.

    1. Frage: Wie erkenne ich im Code c/c++ Schnittstellen?

    AW: Zwei Möglichkeiten hätte ich
    1. Über die Headerfiles und Makeup Dateien. (nur wie und was?)
    2. Abgeleitete Klassen (sind das immer dann die Schnittstellen?)

    Code: Es handelt sich um ein paar tausend Seiten, deshalb habe ich mir sogar überlegt ein VBA Skript dafür zu schreiben, das mir die Suche vereinfacht.
    Benötige dringlich Anhaltspunkte und Ideen um dies Schnittstellen zu ermitteln.

    2. Frage: Wie kann ich aus dem Code -> Komponenten ermitteln, die ich in UML "Komponents" Abbilden möchte?

    Eine gute Hilfe für einen bessern Überblick war im Moment der Code Visualiser.
    Ich bin für alles offen? Vielleicht kann es auch anders gelöst werden?

    Vielen Dank im Vorfeld - Watercase



  • Also normalerweise ist alles, was du als User einer lib benutzen kannst Teil einer Schnittstelle. (Du greifst ja auf die Funktionalität zu).

    Die Darstellung usw. ist eigentlich nicht deine Aufgabe, dafür gibt es normalerweise eine ausführliche Dokumentation und Diagramme. (z.B CEGUI)



  • Ja da gebe ich dir recht das ist richtig.
    Vielleicht hab ich es falsch ausgedrückt.

    Da es sich um mehrere Systeme handelt, sollen die Schnittstellen zwischen den Systemen herausgefunden und beschrieben werden.

    Entweder erhält man dies durch ein vernünftiges Handbuch oder eben durch manuelle ggf. vielleicht automatischer Analyse des Quellcodes.

    Um sich hier etwas Arbeit zu ersparen, wäre ein VBA skript ggf. hilfreich?

    PS: Prinzipiell handelt es sich um einige Server, mit DBs die aus heutiger Sicht einer BI (Business Intelligents Server) ähneln und das auch tun.

    !!! 🙄 Somit wäre die Aufgabenstellung: Finde alle Schnittstellen heraus mit dem das einzelne System kommuniziert! Server-Server, Server-Client, Server-DB, DB-Server und Client usw.. 😕 😮



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Schön verschoden und zack schreibt keiner mehr. Toll gemacht



  • watercase schrieb:

    1. Frage: Wie erkenne ich im Code c/c++ Schnittstellen?

    AW: Zwei Möglichkeiten hätte ich
    1. Über die Headerfiles und Makeup Dateien. (nur wie und was?)
    2. Abgeleitete Klassen (sind das immer dann die Schnittstellen?)

    Code: Es handelt sich um ein paar tausend Seiten, deshalb habe ich mir sogar überlegt ein VBA Skript dafür zu schreiben, das mir die Suche vereinfacht.
    Benötige dringlich Anhaltspunkte und Ideen um dies Schnittstellen zu ermitteln.

    zu 1)
    Headerfiles sind ein guter Anfang, wahrscheinlich sind es aber zu viele
    um sich dadurch einen guten Überblick über die Schnittstelle zu verschaffen.

    zu 2)
    Eine Abgeleitete Klasse ist IMHO kein guter Anhaltspunkt für eine
    Schnittstelle da oftmals eher eine Abstrakte Basisklasse die
    Schnittstelle definiert und die abgeleitete Klasse für eine spezifische
    Implementierung verwendet wird.

    Ein zusätzliches Skript würde ich vermutlich eher nicht schreiben,
    es gibt schon diverse halbwegs brauchbare Tools die Reverse Engineering unterstützen.
    Ein brauchbares aus der open source Welt das ich auch schon erfolgreich
    eingesetzt habe ist Bouml.
    (die Frage ist, ob es genau das kann was du brauchst)

    watercase schrieb:

    2. Frage: Wie kann ich aus dem Code -> Komponenten ermitteln, die ich in UML "Komponents" Abbilden möchte?

    Sowas ist IMHO immer eine Geduldsarbeit ... ich glaub ein Patentrezept gibts
    dafür nicht ... wenn doch wär ich da auch sehr interessiert drann 😉



  • C/C++? Wie würdest Du denn in Perl/Python oder Java/Ruby Schnittstellen finden? Oder wie wäre es mit Cobol/VBA? 😃



  • Das Problem ist, dass der Begriff Schnittstelle an sich schon abstrakt ist. Eine Schnittstelle kann insbesondere in C++ alles mögliche sein, auch normale Funktionen. D.h. du kannst das nicht einfach sagen, Sprachkonstrukt A ist eine Schnittstelle.
    Wie schon gesagt, Header-Files sind die Anlaufstelle. Ich persönlich würde hier auf keinen Fall noch ein eigenes Skript schreiben. Ich glaube nicht, dass du damit das gewünschte Ergebnis erreichen wirst, und dazu hast du ja noch Aufwand für das Skript-Schreiben selbst. Wenn dann würde ich auch versuchen mit bereits existierenden Tools einiges rauszuziehen, aber ansonsten würde ich es tatsächlich mnauell (also von Hand) machen...



  • Vielen vielen Dank dark-eye, ich werde es mit Bouml mal versuchen. Im Moment habe ich mir den Code Visualiser zu nutze gemacht.
    Kann man empfehlen wenn man etwas den Code und Headerfiles visualisiert bekommen möchte und ggf. sequentsdiagramme benötigt.

    zu 1. Werde wohl mich vertiefen in die Headerfiles. hoffe auf 💡

    zu 2. Bzgl. der Komponenten geben ich dir recht ist es ein schweres Unterfangen wenn man das Fachliche auch nicht kennt. Somit unlösbar - oder einfach einen neue Clusterung durchführen.

    zu 3. Ich gebe dir recht, ein Skript dafür zu schreiben, vielleicht nicht die beste Idee. Aber bei mehr als 2000 Files könnte es schon ggf. brauchbar sein.

    Danke



  • Hey dark-eye, leider kann ich mit dem Bouml nichts anfangen, da ich nicht raf wie es funktionieren soll?
    Hast du ggf. einen Link ???
    Du kannst kein neues Projektanlegen, da für den Datentyp ein * steht.???! 😮 😕



  • Das hier ist die offizielle Homepage

    http://bouml.free.fr/

    Die Handhabung ist manchmal ein bischen verzwickt ...
    ... aber Projekte anlegen konnte ich bisher immer problemlos 😕

    Die Dokumentation ist aber recht gut, ich würd aber auf jeden fall die
    html version verwenden da man ohne links wahrscheinlich verzweifelt 😉



  • Zumlich doof.

    1. Habe das Tool installiert und wohl die identifzierung vergesen oder übersprungen.

    2. Jetzt habe ich das Problem:

    "Own identifier not defined"
    oder wenn ich ein neues Projekt erstellen möchte

    "Own identifier missing or invalid" Recall Bouml and immediatly choose 'Set environment' in the menu 'Miscellaneous'

    😕



  • Naja ... entweder du setzt die Umgebungsvarialbe die er anmeckert ...
    BOUML_ID oder so heisst sie.

    ... oder du ignorierst die meldung einfach, die Variable ist nämlich nur
    dann von Belang wenn es zugriffe von mehr als einer Person gibt.



  • Das wäre schön, nur ich kann nichts machen. wenn ich das projekt erzeugen möchte zeigt er die meldung. nach dem ok geht bouml aus. das einzige ich kann mir das prog anschauen aber nichts damit machen?

    Ideen?

    Gibt es ggf. andere Tools mit den ich Importieren kann?



  • Ach mal eine Frage.

    Wenn ich mir jetzt die Headerfiles anschauen, sehe ich bspw. paar *.h mit Socket. Dh. doch nur das auf bestimmt Bibilioteken einbezogen werden für das Socket. Ab daran erkenne ich noch nicht von wo und wann eine Kommunikation über dieses Socket geschieht?



  • watercase schrieb:

    Das wäre schön, nur ich kann nichts machen. wenn ich das projekt erzeugen möchte zeigt er die meldung. nach dem ok geht bouml aus. das einzige ich kann mir das prog anschauen aber nichts damit machen?

    Ideen?

    Gibt es ggf. andere Tools mit den ich Importieren kann?

    Ich würd jetzt probieren die Variable zu setzen.

    Andere Tools gibts da bestimmt auch noch. Aber genaueres weiss ich da auch nicht.



  • Die frage wäre wie setze ich diese ? ich kann in dem prog nicht machen?



  • Unter Windows lässt sich eine Umgebungsvariable recht einfach
    in der Systemsteuerung setzen, dort auf System, Reiter Erweitert und dort auf
    Umgebungsvariablen. Dort legst du die Variable BOUML_ID an und gibst
    ihr einen Wert zwischen 2 und 127 (welcher ist egal).

    Unter Linux bevorzuge ich ein Temporäres setzen der Variable beim
    Programmaufruf. Dazu rufst du das Programm mit dem Kommando

    env BOUML_ID=X bouml

    X muss dann wieder zwischen 2 und 127 liegen.

    Ab da sollte die Fehlermeldung verschwunden sein.

    Aber mal was anderes ... soweit ich das in Erinnerung habe braucht die
    neuste Bouml Version garkeine Variable mehr sondern fragt in einem
    Initialen Dialog ... welche Version hast du denn?



  • Version 4.3.5 😕

    Bin der Beschreibung nachgegangen. Variable angelegt und denn Wert auf 5 gesetzt. Geht nicht.

    Wenn ich ein neues Projekt erzeugen möchte ist der Dateityp "*" problem nach dem speicher von bspw. test gibts wieder die Meldung.



  • Also bei mir hat er ab da irgendwo angefangen zu fragen ohne das man selbst
    irgendwo ne Variable setzen musste ... komisch ... war aber auch unter Linux.

    Geht es denn jetzt mit gesetzter BOUML_ID ?


Anmelden zum Antworten