2010-10-04 5 views
3

Est-ce que quelqu'un a essayé des outils pour la reconnaissance des modèles de conception dans le code source? J'en cherche un qui est plus ou moins efficace et attend une entrée raisonnable (par exemple, un fichier xmi produit par un outil de rétro-ingénierie ou d'autres données qui peuvent être facilement générées à partir du code source).Avez-vous essayé des outils pour reconnaître les motifs de conception dans le code?

J'ai trouvé des outils académiques comme CrocoPat, Columbus + Maisa, mais je ne les ai pas encore essayés.

Apprécierait que quelqu'un partage son expérience dans de telles expériences.

+2

wiki communautaire? – Younes

Répondre

1

Je ne connais rien qui fonctionne. Il y a beaucoup d'informations qui se perdent lorsque vous réalisez vos motifs dans le code, donc leur ingénierie inverse est vouée à l'échec.

  • Presque tous les appels de méthode sur un champ peut être considéré comme aa pont/adaptateur/staregy
  • Presque toutes les méthodes non-vide peut être considéré comme une usine (y compris, par exemple, toString())
  • Presque tous les objets avec des champs et une méthode de retour non vide peut être considéré comme un constructeur
  • Etc.
+0

Ce que l'outil va chercher dépend de son entrée, je suppose. Par exemple, DP Miner accepte une description XML du motif à rechercher. Si vous définissez Modèle d'usine comme méthode non vide, vous obtiendrez probablement toutes les méthodes non vides. – Kniganapolke

1

modèles de conception ne semblent généralement pas directement dans le code; Habituellement, le code contient une implémentation d'un motif de conception.

Pour faire une telle reconnaissance de modèle dont vous avez besoin:

  1. La capacité à analyser de manière fiable la langue source
  2. La capacité de reconnaître des modèles de code de bas niveau qui font allusion à un modèle de niveau supérieur
  3. La capacité pour lier ensemble des ensembles de correspondances de bas niveau ensemble via la proximité ou plus généralement le contrôle et le flux de données

Il n'y a pas beaucoup d'outils qui peuvent le faire. Bien que nous ne recherchions pas explicitement les modèles de conception généraux, nous avons construit un outil qui répond aux critères ci-dessus: notre DMS Software Reengineering Toolkit. DMS peut analyser C, Java et COBOL avec le même niveau de précision que leurs compilateurs, les modèles peuvent correspondre à l'aide de modèles explicites et calculer l'analyse des flux de contrôle et de données pour ces langages. Une application intéressante de DMS était de reconnaître le "modèle de conception" pour produire des écrans interactifs dans une application de 35 millions de lignes. Vous connaissez ce modèle de conception: "utilisez printf pour produire des fragments de la sortie d'écran". Alors qu'il est facile de reconnaître des fragments du modèle (la plupart des appels sont des exemples), le vrai problème est de reconnaître l'image de l'écran elle-même à partir d'une pile de code emmêlée qui l'implémente. La tâche que nous avons accomplie consistait à extraire une image d'une sortie d'écran imprimée (rapportée sous la forme d'un fichier XML contenant du texte littéral d'écran et des balises XML représentant une sortie à contenu variable) en reliant les différents appels printf. Les détails pour accomplir ceci sont assez compliqués; vous devez trouver des séquences de printfs qui traversent généralement les appels de fonction et sont contrôlées par beaucoup de conditions (le XML a aussi enregistré la partie conditionnelle des écrans). L'outil produit des images d'écran pour tous les écrans imprimables par le code à partir de principal.

Si vous espérez trouver une solution facile pour la reconnaissance de modèle de conception, je pense que vous n'aurez pas beaucoup de chance, mais c'est possible.

Questions connexes