Zend Framework demystified, act I...
Voici une vue des dépendances entre package dans Zend Framework 1.8.3 réalisé avec un de mes outils d'analyse de code.
Je travaille actuellement sur l'analyse des dépendances entre classes, packages, applications / frameworks pour notamment cartographier les zones mortes des applis (i.e. code non utilisé), les zones de complexité ou de dette technique (i.e. point central ayant beaucoup de liaison...).
Après plusieurs heures de recherches d'une librairie de visualisation temps réel sur un graphe, je n'ai toujours pas trouvé mon bonheur pour parcourir en temps réel le graphe, je vous livre donc pour l'instant ma version graphviz (dot)
Avez-vous d'autres techniques pour représenter les dépendances classes/applications/frameworks ?
PS: le noeud ROOT correspond aux classes située à la racine du répertoire library/Zend, les autres noeuds correspondent aux répertoires situés dans library/Zend/

Commentaires
J'utilise ext/inclued.
Qu'as-tu utilisé comme outils ?
@jpauli: Je ne connaissais pas ext/inclued, je pense qu'il est très similaire à mon outil, qui par contre est un outil d'analyse statique (pas au runtime). J'ai moi même développé l'outil qui a servi à généré ce graphe. L'algorithmique est simple : analyser toutes les références à des classes / inclusions autres que la classe courante, c'est à dire recenser les extends, implements, includes, appels statiques, instanciations, ... Mon problème se situe plutôt au niveau de la réprésentation graphique, j'ai actuellement fait le même choix basique que ext/inclued, à savoir l'utilisation de graphviz/dot, qui fonctionne plutôt bien, mais mes conclusions sont que pour profiter de toutes la richesse de ce type de graphe/informations il est nécessaire d'utiliser une représentation graphique "vivante" permettant de parcourir en temps réel les dépendances, notamment lorsqu'il s'agit du graphe de dépendances de ZF (plusieurs centaines de noeuds)... Pour l'instant j'ai vu une librairie Flash qui serait parfaite pour ça, Constellation Roamer de Asterisq (www.asterisq.com), mais le prix de la licence ma un peu refroidi, pour l'instant...
Je compte mettre en open source le code de l'outil, mais le temps me manque ces jours-ci ;)
Le temps manque ? C'est bizarre je connais bien le principe xD
Très intéréssant ton outils. Bcp de projets PEAR possèdent un parseur PHP libre basé sur les tokens (PHPDepends, PHPCPD etc...), peut-être pourra tu créer un channel pear et un composant quand tu auras le temps ? ;-)
Quoiqu'il en soit, je ne peux t'aider en ce qui concerne l'animation, mais je reste persuadé que de tels paquets existent dans le monde du libre (le contraire m'étonnerait). A chercher... :)
Salut, merci pour cet article intéressant.
Pour la visualisation dynamique, ça me fait penser à un outils Java (désolé...) très intéressant pour parcourir le modèle d'une BDD : jailer. Il se base sur une librairie graphique (prefuse). C'est du Java certes, mais il y a surement des idées à puiser ;)
A+
Merci pour l'analyse, effectivement il serait bien de pouvoir greffer un outil similaire à celui ci à une trace d'exécution temps réel.
Pourquoi pas à base des traces générées par xdebug, que j'analyse avec kcachegrind pour le moment. Au niveau des bibliothèques qui permettent de faire ça, je pense à Infovis(http://thejit.org/demos/).
Sinon, une bonne manière de comprendre et d'analyser les dépendances de notre code, c'est d'utiliser l'inversion de contrôle, et de coupler le tout avec un injecteur de dépendances, pour générer directement un schéma !
C'est amusant, j'avais commencé aussi à coder un analyseur de dépendances mais pas du tout dans ce but. Le mien était de pouvoir extraire seulement le nécessaire d'une librairie ou d'un framework.
@alexis: déjà essayer InfoVis (JS) mais pas satisfait pour ce besoin. Mes conclusions sont que seul flash / flex offre une ergonomie suffisante dans mon cas (fluidité, usabilité...).
@evoilliot: jailer semble trop spécifique aux base de données effectivement. J'ai déjà regardé du côté du projet Prefuse, qui a une implémentation exceptionnelle en Flex/Flash (Flare Project). C'est d'ailleurs celle qui est en top de ma liste. Le coup d'intégration de la librairie est cependant assez élevé (pas mal de développement ActionScript), je n'ai malheureusement pas assez de temps pour améliorer ma Proof of Concept sous Flex Builder :(
@jean-marc: peut être des bonnes idées à prendre dans ton outils, il est disponible quelque part ?
@all: version open source imminente...
Très bien ton outil. Quels paramètres as tu utilisé pour générer le diagramme de ZF? Merci.