2012-10-11 10 views
2

Je me demande s'il existe un outil permettant d'identifier des blocs de code cohérents dans le code source JAVA. Par exemple, si j'avais une méthode longue que je voudrais extraire d'une autre méthode - y a-t-il un outil qui peut automatiquement me dire de gros morceaux de code qui mériteraient d'être extraits?Outil d'identification des blocs cohésifs de code (JAVA)

Répondre

1

Il y a des plug-ins comme PMD (pour l'éclipse) & FindBugs etc., pour faire la revue de code statique qui marque le code basé sur des règles que vous avez configurées.

+0

Existe-t-il des exemples sur la façon de détecter des blocs de code choisis? Par exemple, je serais intéressé de trouver des instructions groupées séparées par d'autres instructions par des lignes vides. – KoenigGunther

0

Extraire Sonar Il a un très bon support pour trouver des blocs de code en double.

Sonar utilise PMD et FindBugs sous-jacents. Il génère également des métriques personnalisées telles que la complexité des classes, la complexité des méthodes qui pointent vers des classes/méthodes trop grandes et susceptibles d'être décomposées.

+0

Merci, mais je ne suis pas directement intéressé par le code dupliqué. Je détecte une méthode longue et aimerais connaître des morceaux de code qui valent la peine de les extraire dans une nouvelle méthode pour raccourcir la fonction originale. – KoenigGunther

+0

@KoenigGunther J'espère que vous avez lu ma réponse mise à jour. –

1

Google CodePro Analytics a un plug-in Eclipse qui peut fournir un tas de statistiques comme des lignes de code et une complexité cyclomatique qui peuvent être de bons indicateurs qu'une méthode doit être refactorisée.

Je ne pense pas que vous trouverez un outil capable de refactoriser automatiquement des blocs de code cohérents en méthodes. Il y a trop de subjectivité dans cela.

0

Les blocs de commande (c'est-à-dire les conditionnels et les boucles) sont "cohésifs" en ce sens que vous ne pouvez pas extraire facilement des blocs de code qui traversent les limites des blocs de commande. Trouver des blocs qui peuvent être remplacés par un appel de méthode, qui facilite la compréhension de la méthode d'origine. Vous aurez le meilleur impact sur la complexité en extrayant les zones d'imbrication des flux de contrôle les plus profondes, c'est donc un bon point de départ. Vous n'avez pas besoin d'un outil en tant que tel - le code lui-même a l'information dont vous avez besoin.

1

J'ai cherché un outil similaire avec une autre question: https://stackoverflow.com/questions/12016289/tool-for-visualizing-dependencies-inside-a-java-class juste à un niveau légèrement supérieur: une seule classe.

Je pense que la même réponse s'applique: Il n'y a rien de tel. Il existe cependant des outils qui fournissent des informations à partir desquelles vous pouvez extraire les informations que vous recherchez. Je verrais DependencyFinder. Il donne accès à tous les éléments du code, ce qui vous permet de trouver des groupes d'éléments de code accédant à un ensemble commun de variables. Malheureusement, j'ai trouvé l'API un peu confuse et pas bien documentée, donc vous aurez besoin d'essayer et d'erreur ou entrer en contact avec l'auteur. Il ne vous donnera probablement pas accès aux espaces, je pense. Mais je ne pense pas que ce soit une approche valable de toute façon.

Un autre outil que vous pourriez vouloir examiner est JaMoPP Il devrait même avoir des informations sur les espaces. Bien que ce soit un plugin Java, vous pouvez utiliser la librairie sous-jacente indépendante d'eclipse (je pense).