76 votes

trouver le code JavaScript mort?

Nous sommes en train de refactoriser une application web héritée et, par conséquent, nous "détruisons" pas mal de code JavaScript, mais nous craignons de supprimer ce que nous pensons être du code mort car nous n'en sommes pas sûr. Existe-t-il un outil / une technique permettant d'identifier de manière positive le code mort en JavaScript?

12voto

haylem Points 11504

Sans chercher quelque chose de trop complexe:

9voto

Ira Baxter Points 48153

Si votre code utilise "eval", il est assez difficile d'obtenir une garantir que quelque part le code n'a pas d'assembler une chaîne de caractères par quelque obscure moyens et eval-il, en appelant votre code mort. (Et vraiment méchant des choses pourrait appeler eval sur une chaîne de caractères contenant eval...).

Vous avez également à vous soucier des appels provenant de l'extérieur de votre code; de nombreuses pages web HTML "sur" attributs d'invoquer le code JavaScript.

Donc, ce que vous devez faire est de trouver des méthodes/déclarations qui semblent être morts, et de la trouver et de la formation professionnelle de tous les eval appels, et de trouver et d'examiner tous les de la "sur les" attributs.

À l'aide de la couverture de test, comme d'autres l'ont suggéré, est un moyen d'obtenir une première liste de peut-être-du code mort. Manifestement, vous voulez faire preuve de beaucoup de fonctionnalités que vous pouvez pour éliminer éventuellement morts candidats, puis de rechercher les autres pour voir si il y a des appels dans votre code. Trouver est évaluée comme et sur les événements est une question de recherche le code pour de telles choses.

Grep sera probablement le travail, mais il peut être douloureux à passer par votre liste de noms un par un, tapez dans la recherche, le deviner à partir de sa sortie de celles qui ne sont pas de faux positifs, et d'aller inspecter dans un éditeur, un par un.

Vous pourriez regarder notre SD Code Source du Moteur de Recherche (SCSE), qui peut faire de la langue des recherches spécifiques pour de nombreuses langues, y compris les pages HTML de divers types et JavaScript. Vous pouvez facilement restreindre la SCSE pour inspecter seulement les appels de fonction dans le code JavaScript (e.g, à ignorer les commentaires et les chaînes de caractères) pour le reste de la candidattes et/ou eval, et d'inspecter juste le "*" les attributs dans les pages HTML (par exemple, d'ignorer tous les autres textes dans les pages HTML). Il utilise une interface graphique, de vous accepter la requête de recherche, de montrer des hits, et tirer vers le haut le texte source contenant le tube pour faciliter l'inspection. Il va même jusqu'à vous prendre à votre rédacteur en chef d'un coup, si nécessaire.

Pour une analyse statique de la solution, vous avez besoin d'outils qui peuvent analyser le code et déterminer les noms se réfèrent à des entités; la portée des questions. Ensuite, vous devez être en mesure de déterminer plausiable chemins d'exécution dans le code, le modulo de la dynamique de la structure de l'objet et ceux méchant est évaluée comme. Pour cela, vous avez besoin d'un assez sophistiqués moteur et probablement certains d'ingénierie à moins que quelqu'un arrive juste avoir cette traînent, ce dont je doute.

Notre Logiciel DMS Réingénierie Toolkit est juste comme un moteur, et il a un full JavaScript (et HTML) des analyseurs. Alors que nous n'avons pas utilisé DMS pour le JavaScript, nous avons construit une morte code remover pour Java à l'aide de DMS. Vous lui donnez le code Java, et elle produit une "semble être mort" liste des classes, des méthodes et des champs (y compris la fermeture transitive de la mort: si la classe A est mort, et les références B, l'Une des références de la ne comptent pas comme de véritables références à B), et une version modifiée du code à tous les "morts" trucs supprimés. À vous de décider si vous croyez que le rapport; si vous le faites, vous gardez le code. Si vous ne le faites pas, vous modifiez le code pour s'assurer que apparemment morts, n'est pas morte, et de l'exécuter à nouveau.

7voto

Júlio Santos Points 2638

Il y a grep . Utilisez-le pour trouver des appels de fonction. Supposons que vous utilisiez une méthode appelée dostuff() . Utilisez grep -r "dostuff()" * --color sur le répertoire racine de votre projet. À moins que vous ne trouviez autre chose que la définition, vous pouvez l'effacer en toute sécurité.

ack est également une alternative notable à grep .

7voto

Felix Kling Points 247451

Vous voudrez peut-être jeter un coup d'œil aux outils de couverture de code .

6voto

Harmen Points 11632

Vous pouvez utiliser du code optimiseurs comme Google Closure compiler, cependant, il est souvent utilisé pour minimiser les code.

function hello(name) {
alert('Hello, ' + name);
}

function test(){
alert('hi');
}

hello('New user');

Entraînera

alert("Hello, New user");

Par exemple.

Une autre chose que vous pourriez faire est d'utiliser google Chrome Developer Tools (ou Firebug) pour voir tous les appels de fonction. En vertu de Profils , vous pouvez voir les fonctions qui sont appelés au fil du temps et qui ne le sont pas.

DT Profiles

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X