2009-02-02 9 views
14

Je travaille actuellement sur un style LAMP perl web app et je suis récemment tombé sur ce labyrinthe de code de mort laissé par un développeur précédent. Il a laissé tant de nombres magiques et de logique bizarre que ça me donnait mal à la tête chaque fois que je devais le traverser. Je suis en train d'apprendre les tests unitaires en ce moment, je veux donc trouver un outil utile pour refactoriser le code et écrire un test unitaire en cours de route pour m'assurer que je ne casse pas accidentellement quoi que ce soit.Y at-il un bon outil pour refactoriser le code Web Perl?

Une recommandation pour tout bon outil de refactoring pour perl LAMP? De préférence gratuit :)

Merci.

Répondre

13

Je pense que Eclipse/EPIC a « quelques » outils Perl refactoring ... mais ne me citez pas que ;-)

pourrait également être la peine de vérifier Komodo. Cependant la version complète n'est pas libre comme Eclipse/EPIC. Vous pouvez essayer leur version opensource Komodo Edit mais je suppose qu'il n'aura pas toutes les fonctionnalités?

Je n'ai pas utilisé ni ci-dessus ni d'autres outils de refactoring ... Je me débrouille avec les éditeurs TextMate vi/vim & et ce qu'ils fournissent (ou ce que j'ai trouvé dans chacun de ces éditeurs!).

Faire des tests unitaires est un bon début. Jetez également un oeil perltidy/Perl::Tidy & Perl::Critic qui peut aider à traverser le désordre et trouver certaines de ces "odeurs de code".

+0

EPIC vous permet de transformer des morceaux de code en sous-routines, mais autant que je sache, il ne vous laissera pas renommer routines ou variables. Je ne peux pas attendre jusqu'à ce qu'ils ajoutent cette fonctionnalité ... Je suis fatigué de rechercher et remplacer! –

+1

Je pense que Padre: http://padre.perlide.org/howto.html a refactoring lexical (recherche cette page pour "refactor"). Je n'ai pas encore essayé cet outil, mais je prévois de le faire! Il semble que ce soit encore au début (mais au moins actuellement actif) développement. – FrustratedWithFormsDesigner

+0

Juste essayé Padre, le refactoring ne fonctionne pas correctement. Vous obtenez soit une "erreur inconnue", soit vous ne parvenez pas à renommer toutes les occurrences de la variable. –

7

Probablement, les volontaires sur Refactor :my => 'code' peuvent vous aider. De toute façon, il est libre de demander :)

+0

Cela ressemble à un site intéressant. +1 pour l'avoir porté à notre attention! – draegtun

0

vim! (Ou tout autre éditeur de texte)

Il n'y a vraiment pas d'outil magique pour réfracter votre code, il y a des outils pour (par exemple) renommer les variables/fonctions, mais il n'y a aucun moyen de réparer magiquement la structure du code ou une logique étrange.

+0

Eh bien je regardais les outils qui peuvent m'aider à identifier les mauvaises odeurs de code pour refactor, etc :) – melaos

5

Bien que ce ne soit pas vraiment refactoring dans une grande profondeur, ce PerlMonks node décrit un couple de mappages Vim pour désobfuser le code perl en utilisant B::Deparse.

Leurs exemples:

Vous pouvez taper _d lorsque votre curseur se trouve sur cette ligne en mode normal:

--$|&&s|\n|-|; 

... et il sera remplacé par:

s/\n/-/ if --$|; 

Et cette ligne:

$foo and $bar or $baz = 1; 

... serait remplacé par:

$baz = 1 unless $foo and $bar; 
6

nature dynamique de Perl signifie qu'il est très difficile de créer des outils de refactoring pour elle. Toutefois, en ce qui concerne les tests, vous devriez être en mesure de mettre en place des tests de régression pour vous aider dans votre cheminement.Cela fonctionne en commençant par le code tel qu'il est maintenant et en capturant sa sortie actuelle. Cela peut être l'exécution du script CGI à partir de la ligne de commande et l'enregistrement du fichier HTML résultant dans le fichier. Une fois que vous avez capturé cela, vous pouvez changer le code et, au fur et à mesure, vérifier que le code HTML n'a pas changé, ce qui signifie que le code n'est pas cassé. Lorsque des changements surviennent, vous pouvez soit trouver le bogue, soit changer le test pour accepter le nouveau HTML comme correct.

Cela peut être une corvée à mettre en place mais vous facilitera la vie à long terme. Vous devriez essayer d'automatiser ces tests pour en faciliter l'exécution. Checkout Test :: WWW :: Mechanize et Test :: LongString ainsi que tous les autres.

1

Eclipse avec le plug-in EPIC dispose d'un support de refactoring. Pas aussi sophistiqué que le refactoring d'IntelliJ pour l'outil Java. Je ne suis pas sûr à 100% que cela aiderait votre problème. La façon dont je l'ai utilisé est de mettre en évidence des blocs de code et de les déplacer dans des fonctions/méthodes. Dans votre cas, vous allez probablement vouloir faire beaucoup de recherche/remplacement sur ces nombres magiques ...

Je suppose que vous allez utiliser Test :: More pour écrire vos tests unitaires. Certains des autres outils EPIC pourraient aider avec cela (par exemple les balises "todo"). Vous pouvez également utiliser Test :: WWW :: Mechanize et Test :: WWW :: Selenium - il serait utile dans votre cas d'avoir des tests de sélénium définis pour s'assurer que vous ne cassez aucune fonctionnalité de l'utilisateur final. EPIC n'a rien en particulier pour aider avec cela mais devrait être possible de l'utiliser pour parcourir le code lors du débogage.

Bonne chance. :-)

0

Padre a quelques outils de refactoring. Renommer des variables fonctionne assez bien pour un moment (deux ans ou plus) maintenant.

http://padre.perlide.org/

Disclaimer: Je suis un contributeur Padre.

Questions connexes