-
Reverse code c++
Bonjour a tous
Voila, je viens de d�barquer dans une entreprise ou on me demande de bosser sur une grosse application c++. Mais cette appli a �t� cod�e et est utilis�e sous linux, et a �t� affuble d'extension telles que .hh et .cc.
De plus les fichiers ont �t� quelque peu classe �trangement... avec d'autre fichiers, tel des "makefile" ou encore des bouts de script en python. Et bien sur il n'y a ni doc ni commentaire a propos de ce code...Je suis en plus compl�tement n�ophyte en mati�re de c++.
Ma question est donc celle ci : existe-t-il un moyen de faire du reverse code afin de g�n�rer au moins un UML ? Genre lui donner un r�pertoire et hop il rame et me donne un joli diagramme pour que je puisse comprendre ce meli-melo ?
J'ai essaye visual pradigm, mais il semble planter des que je lui donne les fichiers sources, peut etre a cause des extensions bizarres.
Merci de votre aide en tous cas.
-
Bonjour,
StarUML permet �a en lui fournissant des header � analyser.
-
Salut,
Le logiciel Umbrello permet de faire du reverse engineering il me semble (il est disponible sous Linux).
-
salut,
d'aabord, il faut savoir que les extensions *.hh et *.cc ne sont rien d'autres que des extensions tout � fait classiques du C++, m�me si elles se sont en partie d�pr�ci�es au fil du temps au profit de *.hpp et *.cpp (tu as encore de la chance que, travaillant sous linux, il n'ont pas profit� que le syst�me est sensible � la casse pour utiliser les extensions *.H et *.C en majuscule :D)
Les fichiers Makefile sont quant � eux, des fichiers d'automatisation de la compilation.
Ce sont eux qui vont indiquer les options de compilation � passer, et d'une certaine mani�res les diff�rentes d�pendances entre les fichiers
Il y a un tuto sur les Makefile "quelque part" sur ce forum, il serait peut etre pas mal d'aller y faire un tour, de cette mani�re, tu pourrais d�j� commencer � comprendre ce qui est fait dans ces fichiers ;)
Pour le reste, tu peux aussi t'orienter vers Doxygen, qui permet d'avoir une vue d'ensemble du projet.
Il permet, par exemple, d'avoir les relations qui existent entre les diff�rentes classes, les d�pendances entre les fichiers et m�me des diagrammes d'appel, de mani�re � pouvoir te faire une id�e des appels faits par les diff�rentes fonctions (ainsi que de ce par quoi elles sont appel�es).
Mais le meilleur moyen de "rentrer dans le code" est peut etre, tout simplement, de partir de la fonction main et des variables qu'elle utilise pour aller voir � quoi ressemblent les diff�rentes classes et essayer (si elles ont �t� nomm�es un peu corectement) de d�terminer leur responsabilit�s.
Bon courage, je crois que tu en auras besoin ;)
-
J'aime beaucoup BoUML pour faire du reverse engineering de code. Mais il faut savoir que :
- A mon avis, UML ne repr�sente pas correctement du code en C++ (en particulier les diff�rentes relations entre classes, qui sont plus complexes en C++ que par exemple en Java ou C#)
- Les outils UML que j'ai pu voir ne sont de toute mani�re pas tr�s fins pour faire du retro engineering de C++ (par exemple, si A contient un std::vector<std::shared_ptr<B>>, dans l'id�al, on doit en d�duire simplement une relation entre A et B, avec certaines d�corations sur cette relation, mais rien qui concerne les classes vector ou shared_ptr. Ce n'est pas ce que j'ai vu jusqu'� pr�sent.
-
Et bien merci de ces r�ponses. Je vais m'empresser de regarder une peu tout �a et voir ce qui ressort bien.
J'avais commence effectivement a lire le tuto sur les makefile, afin de mieux comprendre.
En tous cas j'ai au moins r�ussi a g�n�rer des classe avec VisualParadigm, je vais peut �tre les imprimer et reconstruire mon uml sur papier au fur et a mesure, je ne sais pas je vais voir. Je vais aussi (re)tester Doxygene, l'ayant d�j� survole quand je faisais du Java.
Merci a vous en tous cas !
:ccool:
-
A chaque fois que j'ai eu � me poser sur un gros projet d�j� bien avanc�, j'ai fait comme le pr�conise koala: plonger dans le code. Un gros bloc-note, et c'est parti pour lire les .h et .c! N'h�site pas � ajouter des commentaires pour comprendre petit bout par petit bout ce qu'il se passe, pourquoi s'est �crit, etc. Le bloc-note me servait surtout pour garder le fil conducteur dans la lecture du code, comme par exemple les liens fonctionnels entre les diff�rentes classes genre celle-ci stocke des donn�es, celle-ci affiche un truc � l'�cran et est appel�e par telle autre... Histoire d'avoir une vision globale du projet.
Un autre point qui pourra grandement t'aider: te munir d'un IDE avec des fonctionnalit�s de navigation dans le code tr�s simple. Travaillant sous Visual C++, l'add-on Visual Assist est d'une aide inestimable, et je sais que cette tache de d�couverte et d�chiffrage du code serait beaucoup plus longue sans �a.
My 2 cents.
-
Une autre technique qui marche avec moi pour entrer dans du code que je ne connais pas est d'y aller avec un d�bogueur.
Tout d�abord, j'utilise normalement le produit, afin d'apprendre ce qu'il fait avant de tenter de comprendre comment il le fait. Puis j'y vais en pas � pas, � plus ou moins gros grains selon l'endroit o� je me trouve. J'arrive ainsi souvent � commencer � ma former une image mentale de l'architecture du code.
-
En g�n�ral, je pars du main, parcours le code, et sur papier, fais en g�n�ral deux choses :
- construction d'un diagramme de classe simplifi�, sans me soucier de l'exhaustivit� quant � leurs membres
- construction du diagramme de s�quence simplifi�
-
Re-bonjour
Alors j'ai passe une partie de ma journ�e sur ce fichu diagramme et sur VisualParadigm.
Et en fait il marche plut�t pas mal. Il gal�re un peu parfois a g�n�rer certain *.h, mais on peut les re-g�n�rer. M�me si ce n'est pas au top top niveau formalisme UML, �a permet d'avoir toutes les boites, m�thodes et attributs. Reste plus qu'a se munir d'un crayon et d'une feuille et a recoller les morceaux :)
-
Sinon, il existe un programme nomm� autodia qui traduit du code en fichier .dia, utilisable dans le programme dia, �diteur de diagramme de classe.
Tous deux sont des logiciels libres, disponibles (au moins) pour linux.